我想在同一设备上同时运行两种不同的算法,假设我的设备有2个计算单元。这可以通过创建2个不同的内核,2个程序和2个命令队列来实现吗?
我试过测试这个,但似乎第二个内核没有执行,所以我想知道这是否可能?
在Nvidia OpenCL Programming Guide中,我读过:
“对于计算能力2.x及更高版本的设备,多个内核可以在设备上同时执行,因此通过使用流来启用足够的内核并发执行,也可以实现最大利用率。”
现在我不确定这是否真的意味着我可以运行多个不同的内核或只运行相同内核的多个实例(这些只是简单的旧工作项)。
我还检查过我的Nvidia GeForce GT 525M的计算能力为2.1。
答案 0 :(得分:2)
是的,在同一设备上运行不同内核的多个命令队列是完全合法的。
两个内核都应该执行,即使设备不支持并发内核执行(然后它们只是按顺序运行)。您的代码中可能存在错误。请记住,您必须独立clFinish
两个命令队列(或者每个内核调用都有一个事件)。
让两个内核实际并发运行可能很困难。即使设备支持硬件中的这种行为,如果任何资源不足以同时运行它们,内核仍然可以按顺序运行。
如果你们的两个算法本身可以完全并行运行以使用大多数设备资源,那么在尝试并行执行后,在同一个命令队列中运行它们会更容易。