0

我在我们机构的 GPU 集群上运行我的 OpenCL C 代码,该集群有 8 个节点,每个节点都有一个 Intel Xeon 8C proc 和 3 个 NVIDIA Tesla M2070 GPU(总共 24 个 GPU)。我需要从我的主机代码中找到一种方法来识别哪些 GPU 已经被占用,哪些是空闲的,并将我的工作提交给那些可用的 GPU。我能找到的最接近的答案是

如何以编程方式在具有多个 GPU(OpenCL 1.1)的平台上发现特定 GPU?

在多 GPU 系统中,给定 PCI 供应商、设备和总线 ID,如何将 OpenCL 设备与特定 GPU 匹配?.

任何人都可以帮助我如何选择一个节点并选择一个可以免费计算的 GPU。我正在用 OpenCL C 写作。

杰拉德

4

2 回答 2

2

不幸的是,没有标准的方法来做这样的事情。

如果您想充分利用 GPU 的计算能力并且您的问题不是内存占用,我可以建议每个设备使用两个上下文:作为第一个计算端的内核,第二个内核仍在工作,而您有时间用数据填充缓冲区并在第一个上下文中启动下一个任务,反之亦然。在我的情况下(AMD GPU、OpenCL 1.2)如果可以节省 0% 到 20% 的计算时间。三个上下文提供有时较慢的执行,有时更快,所以我不建议将此作为标准技术,但您可以尝试。根据我的经验,四个或更多的上下文是无用的。

于 2020-03-25T08:23:55.740 回答
0

每个设备都有一个命令队列,然后在每次内核提交时使用 OpenCL 事件,并在提交新内核执行之前检查它们的状态。无论哪个命令队列的未完成内核最少,您都应该排队。

于 2013-06-11T11:20:15.527 回答