将代码从 GPU 移植到 MPI 节点的最佳方式

计算科学 矩阵 mpi 布拉斯
2021-12-12 12:16:48

我有一个程序,分为两部分,AB. 这两个部分都能够作为独立单元运行,并用 C++ 编写。A是为集群系统编写的,完全在 CPU 节点上运行,通过 MPI 连接(在同一 CPU 上用于多个内核和不同节点),以及B旨在在单个 GPU 上运行。A正在做 FEM 计算,而B仅使用静态密集矩阵和可变向量进行矩阵向量乘法(矩阵大小通常为 5kx5k-15kx15k 复数双精度元素)。矩阵向量乘法的结果必须可以从所有线程访问A.

为了使 GPU 上的内存负载尽可能低,到目前为止,我的策略是仅在第一个 MPI 线程中创建静态矩阵A,但是通过创建尽可能多的B因为里面有线A,但只为一个实例生成矩阵。在线程 0 中进行乘法运算后,使用 MPI 将结果分发给所有其他线程。A根据该结果进行计算,然后重新启动B具有不同的参数。

现在我必须移植B到相同的节点A, 没有 GPU。我正在查看 PBLAS 函数 (PZGEMV) 或 PLASMA 库,以及 Trilinos 库(我已经在A,因此集成在B应该很容易),但我不确定密集分布的矩阵向量乘法是否可用。移植的最佳策略是什么,并使生成的程序尽可能高效?

0个回答
没有发现任何回复~