我可以创建 pthread 吗?我可以在每个 pthread 中创建 opencl 环境并调用相同的内核。我想要做的是在同一设备上并行启动 opencl 内核。这可能吗?
谢谢回答。
乍一看,这似乎是不必要的。
当您启动 OpenCL 内核时,使用 clEnqueueNDRange() API 调用,您可以启动任意数量的内核;每个都作为同一设备上的自己的线程。OpenCL 模型是一个上下文/命令队列可以在 GPU 上启动 100 到 1000 个轻量级内核线程。
正如 Tim 所指出的,当 OpenCL 支持这么多线程/内核时,你为什么要使用 opencl 进入 pthreads。与 pthread 相比,GPU 上的其他线程的重量非常轻。Pthread 成本高昂,并且涉及大量上下文切换开销,这实际上可能会显着降低您的性能。
但是使用相同的命令队列启动许多内核将按顺序执行内核。每个内核应该有不同的命令队列。我相信单一上下文不应该是并行启动内核的问题......