2

我已经实现了 Cholesky 分解,用于使用 ATI Stream SDK 在 GPU 上求解大型线性方程。现在我想利用越来越多的 GPU 的计算能力,我想在多个 GPU 上运行这段代码。

目前我安装了一台机器和一台 GPU,并且 cholesky 分解运行正常。我想为 N 台机器做这件事,并且都安装了一个 GPU。所以建议我应该如何进行。

4

3 回答 3

2

首先,您必须意识到这种方法将为节点之间的任何通信引入三个级别的延迟:

  1. 机器 1 上的 GPU 内存到机器 1 上的主内存
  2. 机器 1 上的主内存到机器 2 上的主内存
  3. 机器 2 上的主内存到机器 2 上的 GPU 内存

一个好的第一步是进行一些包络计算,以确定通过在多台机器之间拆分问题所获得的速度是否会超过您引入的延迟。

一旦您确定该方法是您想要遵循的方法,那么正确实施它几乎取决于您。请注意,目前,NVIDIA 的 CUDA 或 OpenCL 库将是您更好的选择,因为它们允许您访问 GPU 进行计算,而无需将其与 X 会话耦合。一旦 AT​​I 的 OpenCL 实现支持 GPU,那么这也应该是一个可行的选择。

由于您已经有一个有效的 GPU 实现,以下是您必须遵循的基本步骤:

  • 确定如何更新分解算法以支持不同节点的处理
  • 设置 N 台计算机之间的数据交换(我注意到您为此选择了 MPI)
  • 设置将输入问题分配给计算节点的分散操作
  • 设置机器与其 GPU 之间的数据交换
  • 设置收集操作,将节点的结果收集到一个节点中
于 2009-09-10T08:46:33.637 回答
0

这是一个非常专业的问题。建议您查看Stream 开发者资源Stream 开发者论坛

于 2009-09-09T06:16:31.870 回答
0

我把这个 Q 展示给了我的一位了解这些事情的同事。他建议你使用 ScaLAPACK。

于 2009-09-11T16:30:13.433 回答