Lines Matching refs:clEnv
194 static inline void RelinquishMagickCLDevices(MagickCLEnv clEnv)
199 if (clEnv->devices != (MagickCLDevice *) NULL)
201 for (i = 0; i < clEnv->number_devices; i++)
202 clEnv->devices[i]=RelinquishMagickCLDevice(clEnv->devices[i]);
203 clEnv->devices=(MagickCLDevice *) RelinquishMagickMemory(clEnv->devices);
205 clEnv->number_devices=0;
371 static void SelectOpenCLDevice(MagickCLEnv clEnv,cl_device_type type)
380 for (i = 0; i < clEnv->number_devices; i++)
381 clEnv->devices[i]->enabled=MagickFalse;
383 for (i = 0; i < clEnv->number_devices; i++)
385 device=clEnv->devices[i];
390 for (j = i+1; j < clEnv->number_devices; j++)
395 other_device=clEnv->devices[j];
584 clEnv;
586 clEnv=(MagickCLEnv) AcquireMagickMemory(sizeof(*clEnv));
587 if (clEnv != (MagickCLEnv) NULL)
589 (void) ResetMagickMemory(clEnv,0,sizeof(*clEnv));
590 ActivateSemaphoreInfo(&clEnv->lock);
591 clEnv->cpu_score=MAGICKCORE_OPENCL_UNDEFINED_SCORE;
592 clEnv->enabled=MagickTrue;
595 clEnv->enabled=MagickFalse;
597 return clEnv;
666 % cl_kernel AcquireOpenCLKernel(MagickCLEnv clEnv,
671 % o clEnv: the OpenCL environment.
707 % void AcquireOpenCLKernel(MagickCLEnv clEnv,ExceptionInfo *exception)
711 % o clEnv: the OpenCL environment.
717 static void LoadOpenCLDeviceBenchmark(MagickCLEnv clEnv,const char *xml)
789 clEnv->cpu_score=device_benchmark->score;
798 for (i = 0; i < clEnv->number_devices; i++)
800 device=clEnv->devices[i];
889 static MagickBooleanType LoadOpenCLBenchmarks(MagickCLEnv clEnv,
916 for (i = 0; i < clEnv->number_devices; i++)
917 clEnv->devices[i]->score=1.0;
919 SelectOpenCLDevice(clEnv,CL_DEVICE_TYPE_GPU);
927 LoadOpenCLDeviceBenchmark(clEnv,(const char *) GetStringInfoDatum(
935 static void AutoSelectOpenCLDevices(MagickCLEnv clEnv,ExceptionInfo *exception)
953 SelectOpenCLDevice(clEnv,CL_DEVICE_TYPE_GPU);
955 SelectOpenCLDevice(clEnv,CL_DEVICE_TYPE_CPU);
958 for (i = 0; i < clEnv->number_devices; i++)
959 clEnv->devices[i]->enabled=MagickFalse;
960 clEnv->enabled=MagickFalse;
964 if (LoadOpenCLBenchmarks(clEnv,exception) == MagickFalse)
968 if (clEnv->cpu_score == MAGICKCORE_OPENCL_UNDEFINED_SCORE)
972 for (i = 0; i < clEnv->number_devices; i++)
974 if (clEnv->devices[i]->score == MAGICKCORE_OPENCL_UNDEFINED_SCORE)
983 BenchmarkOpenCLDevices(clEnv);
985 best_score=clEnv->cpu_score;
986 for (i = 0; i < clEnv->number_devices; i++)
987 best_score=MagickMin(clEnv->devices[i]->score,best_score);
989 for (i = 0; i < clEnv->number_devices; i++)
991 if (clEnv->devices[i]->score != best_score)
992 clEnv->devices[i]->enabled=MagickFalse;
1012 % void BenchmarkOpenCLDevices(MagickCLEnv clEnv,ExceptionInfo *exception)
1016 % o clEnv: the OpenCL environment.
1091 static void RunDeviceBenckmark(MagickCLEnv clEnv,MagickCLEnv testEnv,
1097 default_CLEnv=clEnv;
1101 static void CacheOpenCLBenchmarks(MagickCLEnv clEnv)
1125 clEnv->cpu_score);
1126 for (i = 0; i < clEnv->number_devices; i++)
1131 device=clEnv->devices[i];
1135 if (IsSameOpenCLDevice(clEnv->devices[j],device))
1157 static void BenchmarkOpenCLDevices(MagickCLEnv clEnv)
1177 for (i = 0; i < clEnv->number_devices; i++)
1178 clEnv->devices[i]->score=MAGICKCORE_OPENCL_UNDEFINED_SCORE;
1180 for (i = 0; i < clEnv->number_devices; i++)
1182 device=clEnv->devices[i];
1184 RunDeviceBenckmark(clEnv,testEnv,device);
1187 for (j = i+1; j < clEnv->number_devices; j++)
1192 other_device=clEnv->devices[j];
1200 clEnv->cpu_score=RunOpenCLBenchmark(MagickTrue);
1201 default_CLEnv=clEnv;
1204 CacheOpenCLBenchmarks(clEnv);
1223 % MagickBooleanType AcquireOpenCLKernel(MagickCLDevice clEnv,
1463 clEnv;
1469 clEnv=GetCurrentOpenCLEnv();
1470 if (clEnv == (MagickCLEnv) NULL)
1473 for (i = 0; i < clEnv->number_devices; i++)
1474 if (clEnv->devices[i]->profile_kernels != MagickFalse)
1476 if (i == clEnv->number_devices)
1484 for (i = 0; i < clEnv->number_devices; i++)
1489 device=clEnv->devices[i];
1825 clEnv;
1827 clEnv=GetCurrentOpenCLEnv();
1828 if (clEnv == (MagickCLEnv) NULL)
1834 InitializeOpenCL(clEnv,exception);
1836 *length=clEnv->number_devices;
1837 return(clEnv->devices);
1925 clEnv;
1927 clEnv=GetCurrentOpenCLEnv();
1928 if (clEnv == (MagickCLEnv) NULL)
1930 return(clEnv->enabled);
1994 % MagickBooleanType HasOpenCLDevices(MagickCLEnv clEnv,
1999 % o clEnv: the OpenCL environment.
2005 static MagickBooleanType HasOpenCLDevices(MagickCLEnv clEnv,
2022 for (i = 0; i < clEnv->number_devices; i++)
2024 if ((clEnv->devices[i]->enabled != MagickFalse))
2027 if (i == clEnv->number_devices)
2032 for (i = 0; i < clEnv->number_devices; i++)
2034 if ((clEnv->devices[i]->enabled != MagickFalse) &&
2035 (clEnv->devices[i]->program == (cl_program) NULL))
2059 for (i = 0; i < clEnv->number_devices; i++)
2067 device=clEnv->devices[i];
2114 static cl_uint GetOpenCLDeviceCount(MagickCLEnv clEnv,cl_platform_id platform)
2122 if (clEnv->library->clGetPlatformInfo(platform,CL_PLATFORM_VERSION,
2127 if (clEnv->library->clGetDeviceIDs(platform,
2133 static void LoadOpenCLDevices(MagickCLEnv clEnv)
2173 number_devices=GetOpenCLDeviceCount(clEnv,platforms[i]);
2177 clEnv->number_devices+=number_devices;
2179 if (clEnv->number_devices == 0)
2184 clEnv->devices=(MagickCLDevice *) AcquireQuantumMemory(clEnv->number_devices,
2186 if (clEnv->devices == (MagickCLDevice *) NULL)
2188 RelinquishMagickCLDevices(clEnv);
2192 (void) ResetMagickMemory(clEnv->devices,0,clEnv->number_devices*
2194 devices=(cl_device_id *) AcquireQuantumMemory(clEnv->number_devices,
2199 RelinquishMagickCLDevices(clEnv);
2202 clEnv->number_contexts=(size_t) number_platforms;
2203 clEnv->contexts=(cl_context *) AcquireQuantumMemory(clEnv->number_contexts,
2205 if (clEnv->contexts == (cl_context *) NULL)
2209 RelinquishMagickCLDevices(clEnv);
2218 status=clEnv->library->clGetDeviceIDs(platforms[i],CL_DEVICE_TYPE_CPU |
2219 CL_DEVICE_TYPE_GPU,clEnv->number_devices,devices,&number_devices);
2226 clEnv->contexts[i]=openCL_library->clCreateContext(properties,number_devices,
2240 device->context=clEnv->contexts[i];
2274 clEnv->devices[next]=device;
2277 if (next != clEnv->number_devices)
2278 RelinquishMagickCLDevices(clEnv);
2283 MagickPrivate MagickBooleanType InitializeOpenCL(MagickCLEnv clEnv,
2286 LockSemaphoreInfo(clEnv->lock);
2287 if (clEnv->initialized != MagickFalse)
2289 UnlockSemaphoreInfo(clEnv->lock);
2290 return(HasOpenCLDevices(clEnv,exception));
2294 clEnv->library=openCL_library;
2295 LoadOpenCLDevices(clEnv);
2296 if (clEnv->number_devices > 0)
2297 AutoSelectOpenCLDevices(clEnv,exception);
2299 clEnv->initialized=MagickTrue;
2300 UnlockSemaphoreInfo(clEnv->lock);
2301 return(HasOpenCLDevices(clEnv,exception));
2852 % o clEnv: the OpenCL environment to be released.
2856 static MagickCLEnv RelinquishMagickCLEnv(MagickCLEnv clEnv)
2858 if (clEnv == (MagickCLEnv) NULL)
2861 RelinquishSemaphoreInfo(&clEnv->lock);
2862 RelinquishMagickCLDevices(clEnv);
2863 if (clEnv->contexts != (cl_context *) NULL)
2868 for (i=0; i < clEnv->number_contexts; i++)
2869 (void) openCL_library->clReleaseContext(clEnv->contexts[i]);
2870 clEnv->contexts=(cl_context *) RelinquishMagickMemory(clEnv->contexts);
2872 return((MagickCLEnv) RelinquishMagickMemory(clEnv));
2890 % MagickCLDevice RequestOpenCLDevice(MagickCLEnv clEnv)
2894 % o clEnv: the OpenCL environment.
2897 MagickPrivate MagickCLDevice RequestOpenCLDevice(MagickCLEnv clEnv)
2909 if (clEnv == (MagickCLEnv) NULL)
2912 if (clEnv->number_devices == 1)
2914 if (clEnv->devices[0]->enabled)
2915 return(clEnv->devices[0]);
2923 for (i = 0; i < clEnv->number_devices; i++)
2925 if (clEnv->devices[i]->enabled == MagickFalse)
2928 score=clEnv->devices[i]->score+(clEnv->devices[i]->score*
2929 clEnv->devices[i]->requested);
2932 device=clEnv->devices[i];
3036 clEnv;
3038 clEnv=GetCurrentOpenCLEnv();
3039 if (clEnv == (MagickCLEnv) NULL)
3041 clEnv->enabled=value;
3042 return(clEnv->enabled);