CUDA を使用して、main() とは異なる関数から GPU ごとに 1 つずつ、異なる配列にメモリを割り当てたいのですが、ポインター演算に関して何かを見逃していたに違いありません。ここで私が考えたのは、
void InitThisMemory(int***, int N, int Nout, size_t* pitch, int height, int width); // This function's purpose is to initialize A and the pitch
int main(void){
int** A;
int N = 10;
int NOut = 2;
int height = 2, width = 2;
size_t pitch;
InitThisMemory(&A, N, NOut, &pitch, height, width);
return 0;
}
InitThisMemory(int ***A, int N, int Nout, size_t* pitch, int height, int width){
int i;
*A = (int**)malloc(Nout * sizeof(int*));
for(i = 0;i < Nout;i++){
cudaSetDevice(i);
cudaMallocPitch((void**)&(*A[i]), &(*pitch), width, height);
}
}
免責事項: 私の実際のコードではありませんが、これでエラーが再現されるはずです。どこかで変数の割り当てを逃した場合はお知らせください。
問題は算数にあると思うのはなぜですか。単純に、これが非常にうまく機能するからですNout = 1
(つまり、私は 1 つのデバイスしか使用していないということです)。
何か案は?