Exemplo n.º 1
0
        public void TestOclChangeDefaultDevice()
        {
            if (CvInvoke.HaveOpenCL && CvInvoke.UseOpenCL)
            {
                using (VectorOfOclPlatformInfo oclPlatformInfos = Ocl.OclInvoke.GetPlatformsInfo())
                {
                    if (oclPlatformInfos.Size > 0)
                    {
                        for (int i = 0; i < oclPlatformInfos.Size; i++)
                        {
                            Ocl.PlatformInfo platformInfo = oclPlatformInfos[i];

                            for (int j = 0; j < platformInfo.DeviceNumber; j++)
                            {
                                Ocl.Device device = platformInfo.GetDevice(j);

                                Trace.WriteLine(String.Format("{0}Setting device to {1}", Environment.NewLine, device.Name));
                                //OclDevice d = new OclDevice();
                                //d.Set(device.NativeDevicePointer);


                                Ocl.Device defaultDevice = Ocl.Device.Default;
                                defaultDevice.Set(device.NativeDevicePointer);

                                Trace.WriteLine(String.Format("Current OpenCL default device: {0}", defaultDevice.Name));

                                UMat m = new UMat(2048, 2048, DepthType.Cv8U, 3);
                                m.SetTo(new MCvScalar(100, 100, 100));
                                CvInvoke.GaussianBlur(m, m, new Size(3, 3), 3);

                                Stopwatch watch = Stopwatch.StartNew();
                                m.SetTo(new MCvScalar(100, 100, 100));
                                CvInvoke.GaussianBlur(m, m, new Size(3, 3), 3);
                                watch.Stop();
                                Trace.WriteLine(String.Format("Device '{0}' time: {1} milliseconds", defaultDevice.Name,
                                                              watch.ElapsedMilliseconds));
                                CvInvoke.OclFinish();
                            }
                        }
                    }

                    Trace.WriteLine(Environment.NewLine + "Disable OpenCL");
                    CvInvoke.UseOpenCL = false;
                    UMat m2 = new UMat(2048, 2048, DepthType.Cv8U, 3);
                    m2.SetTo(new MCvScalar(100, 100, 100));
                    CvInvoke.GaussianBlur(m2, m2, new Size(3, 3), 3);

                    Stopwatch watch2 = Stopwatch.StartNew();
                    m2.SetTo(new MCvScalar(100, 100, 100));
                    CvInvoke.GaussianBlur(m2, m2, new Size(3, 3), 3);
                    watch2.Stop();
                    Trace.WriteLine(String.Format("CPU time: {0} milliseconds", watch2.ElapsedMilliseconds));
                    CvInvoke.UseOpenCL = true;
                }
            }
        }