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

时间:2012-03-10 18:08:57

标签: opencl

当我调用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位,带有HT的i7 920(我怀疑它创建8个线程,因为我有8个核心),英特尔和Nvidia SDK(我有GTS 250和GTX 560),而我是链接Nvidia OpenCL库并使用其标题。

这不是一个大问题,但是如果我在分析设备后决定不使用OpenCL,只会有8个无用的线程“躺着”。有人知道为什么会这样吗?

1 个答案:

答案 0 :(得分:0)

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

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