我在我们机构的GPU集群上运行我的OpenCL C代码,该集群有8个节点,每个节点都有一个Intel Xeon 8C proc,带有3个NVIDIA Tesla M2070 GPU(总共24个GPU)。我需要从主机代码中找到一种方法来识别哪些GPU已经占用,哪些是免费的,并将我的作业提交给那些可用的GPU。我能找到的最接近的答案是
How to programmatically discover specific GPU on platform with multiple GPUs (OpenCL 1.1)?
任何人都可以帮我解决如何选择节点并选择可免费计算的GPU。我在OpenCL C中写作。
杰拉德
答案 0 :(得分:2)
不幸的是,没有标准的方法来做这种事情。
如果您想充分利用GPU的计算能力,而又不是内存消耗问题,我建议每个设备使用两个上下文:作为第一个末端计算的内核,第二个仍然是内核工作,并且您有时间用数据填充缓冲区并在第一个上下文中启动下一个任务,反之亦然。就我而言(AMD GPU,OpenCL 1.2)节省了0到20%的计算时间。三种上下文有时会执行速度较慢,有时会更快,因此,我不建议您将其作为一种标准技术,但是可以尝试。根据我的经验,四个以上的上下文是无用的。
答案 1 :(得分:0)
为每个设备创建一个命令队列,然后在每个内核提交时使用OpenCL事件,并在提交新内核以供执行之前检查它们的状态。无论哪个命令队列具有最少未完成的内核,都应该入队。