【问题标题】:OpenCL creates new threads upon first function call, why?OpenCL 在第一次函数调用时创建新线程,为什么?
【发布时间】:2012-03-10 18:08:57
【问题描述】:

当我调用 OpenCL 函数时,我不会想象会创建新线程,在这种情况下,为了简单地获取平台 ID,我的程序会创建 8 个新线程。

 cl_platform_id 平台[10] = {0};
    cl_uint 平台数 = 0;
    clGetPlatformIDs(10, platform, &numberofplatforms);//这会创建8个线程

由于我没有创建上下文,而只是询问平台 ID 以查看可用的内容,为什么这个函数会创建所有这些线程?我正在使用 Windows 7 64 位,i7 920 和 HT(我怀疑它正在创建 8 个线程,因为我有 8 个内核),英特尔和 Nvidia SDK(我有 GTS 250 和 GTX 560),而我与 Nvidia OpenCL 库链接并使用其标头。

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

【问题讨论】:

  • 我猜想通过单独的线程监控它与 GPU 的通信会更简单。

标签: opencl


【解决方案1】:

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-11-22
    • 2021-06-18
    • 2011-07-13
    • 2022-01-08
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多