【发布时间】:2012-08-22 20:25:04
【问题描述】:
我有一个存储结构向量的应用程序。这些结构保存有关系统上每个 GPU 的信息,例如内存和 giga-flop/s。每个系统上有不同数量的 GPU。
我有一个同时在多台机器上运行的程序,我需要收集这些数据。我对 MPI 很陌生,但大多数情况下可以使用 MPI_Gather(),但是我想知道如何收集/接收这些动态大小的向量。
class MachineData
{
unsigned long hostMemory;
long cpuCores;
int cudaDevices;
public:
std::vector<NviInfo> nviVec;
std::vector<AmdInfo> amdVec;
...
};
struct AmdInfo
{
int platformID;
int deviceID;
cl_device_id device;
long gpuMem;
float sgflops;
double dgflops;
};
集群中的每台机器都会填充其MachineData 的实例。我想收集这些实例中的每一个,但我不确定如何收集 nviVec 和 amdVec,因为它们的长度因每台机器而异。
【问题讨论】:
-
请张贴代码。另请查看
MPI_GATHERV() -
正如我所说,您可以尝试使用 GATHERV。有了这个,每台机器都可以发送一个自己长度的向量。使用
recvcounts来完成此操作。 -
感谢 MPI_Gatherv() 运行良好!