구조체의 벡터를 저장하는 응용 프로그램이 있습니다. 이 구조체는 메모리 및 giga-flop/s와 같은 시스템에서 각 GPU에 대한 정보를 보유합니다. 각 시스템마다 다른 수의 GPU가 있습니다.MPI Receive/Gather Dynamic Vector Length
나는 한 번에 여러 컴퓨터에서 실행되는 프로그램이 있으며이 데이터를 수집해야합니다. 나는 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()'체크 아웃 – arunmoezhi
내가 말했듯이 당신은 GATHERV를 사용해 볼 수 있습니다. 이것으로 각 기계는 자신의 길이의 벡터를 보낼 수 있습니다. 이것을 달성하기 위해'recvcounts'를 사용하십시오. – arunmoezhi
감사합니다 MPI_Gatherv() 잘 작동했습니다! – jdimarco218