我有一个程序,分为两部分,和. 这两个部分都能够作为独立单元运行,并用 C++ 编写。是为集群系统编写的,完全在 CPU 节点上运行,通过 MPI 连接(在同一 CPU 上用于多个内核和不同节点),以及旨在在单个 GPU 上运行。正在做 FEM 计算,而仅使用静态密集矩阵和可变向量进行矩阵向量乘法(矩阵大小通常为 5kx5k-15kx15k 复数双精度元素)。矩阵向量乘法的结果必须可以从所有线程访问.
为了使 GPU 上的内存负载尽可能低,到目前为止,我的策略是仅在第一个 MPI 线程中创建静态矩阵,但是通过创建尽可能多的因为里面有线,但只为一个实例生成矩阵。在线程 0 中进行乘法运算后,使用 MPI 将结果分发给所有其他线程。根据该结果进行计算,然后重新启动具有不同的参数。
现在我必须移植到相同的节点, 没有 GPU。我正在查看 PBLAS 函数 (PZGEMV) 或 PLASMA 库,以及 Trilinos 库(我已经在,因此集成在应该很容易),但我不确定密集分布的矩阵向量乘法是否可用。移植的最佳策略是什么,并使生成的程序尽可能高效?