Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/heroku/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
OpenCL在第一次函数调用时创建新线程,为什么?_Opencl - Fatal编程技术网

OpenCL在第一次函数调用时创建新线程,为什么?

OpenCL在第一次函数调用时创建新线程,为什么?,opencl,Opencl,当我调用OpenCL函数时,我不会想象会创建新线程,在本例中,为了简单地获取平台ID,我的程序会创建8个新线程 cl_platform_id platforms[10] = {0}; cl_uint numberofplatforms = 0; clGetPlatformIDs(10, platforms, &numberofplatforms);//this creates 8 threads 由于我没有创建上下文,只是简单地请求平台ID来查看可用的内容,为什么这个函数要创建所

当我调用OpenCL函数时,我不会想象会创建新线程,在本例中,为了简单地获取平台ID,我的程序会创建8个新线程

cl_platform_id platforms[10] = {0}; cl_uint numberofplatforms = 0; clGetPlatformIDs(10, platforms, &numberofplatforms);//this creates 8 threads 由于我没有创建上下文,只是简单地请求平台ID来查看可用的内容,为什么这个函数要创建所有这些线程?我使用Windows 7 64位,I7 920与HT我怀疑它是创建8个线程,因为我有8个内核,英特尔和英伟达SDK我都有一个GTS 250和GTX 560,而我与Nvidia OpenCL库连接并使用它的头。p>
这不是一个大问题,但是如果我在分析了设备之后决定不使用OpenCL,结果却发现有8个无用的线程。有人知道为什么会发生这种情况吗?

很多OpenCL函数都是非阻塞的,这意味着它们以队列的形式向设备发出命令,我很确定在宿主程序继续运行其余代码的同时,线程被用来控制设备


举例说明:当您调用ClenqueueEndRangeKernel时,内核不一定立即运行,但程序在ClenqueueEndRangeKernel调用后继续运行代码。因此,我猜这个函数将一些信息传递给控制计算设备的独立线程,并确保内核最终运行。

很多OpenCL函数都是非阻塞的,这意味着它们以队列的形式向设备发出命令,我很确定线程用于控制设备,而主机程序继续运行其余代码


举例说明:当您调用ClenqueueEndRangeKernel时,内核不一定立即运行,但程序在ClenqueueEndRangeKernel调用后继续运行代码。因此,我猜这个函数会将一些信息传递给控制计算设备的独立线程,并确保内核最终运行。

我猜,通过独立线程监控GPU,与GPU的通信可能会更简单。我猜通过独立线程监控GPU,与GPU的通信可能会更简单。