当我使用cuda-gdb调试程序时,我打印了数组之一,但输出不是我期望的。
在以下程序中,当使用cuda-gdb运行“ p * sendbuff @ 2”时,结果为“ 0 0”。不是“ 1 1”。我运行“ p trecv”,输出为“ 1“。这是正确的。我猜想sendbuff值正确,但是输出了错误的输出。有人可以告诉我这是怎么回事吗?
该程序可能存在某些错误,或者使用该软件存在错误。
int nDev = 2;
float trecv[1024];
float** sendbuff = (float**)malloc(nDev * sizeof(float*));
float** recvbuff = (float**)malloc(nDev * sizeof(float*));
cudaStream_t* s = (cudaStream_t*)malloc(sizeof(cudaStream_t)*nDev);
//picking GPUs based on localRank for (int i = 0; i < nDev; ++i) {
for(int j=0;j<1024;j++) {
trecv[j]=5;
}
CUDACHECK(cudaSetDevice(localRank*nDev + i));
CUDACHECK(cudaMalloc(sendbuff + i, size * sizeof(float)));
CUDACHECK(cudaMalloc(recvbuff + i, size * sizeof(float)));
CUDACHECK(cudaMemset(sendbuff[i], 1, size * sizeof(float)));
CUDACHECK(cudaMemset(recvbuff[i], 0, size * sizeof(float)));
cudaMemcpy(trecv, sendbuff[i], sizeof(float)*size, cudaMemcpyDeviceToHost);
CUDACHECK(cudaStreamCreate(s+i)); }