使用 CUDA,我想为不同的数组分配内存,每个 GPU 的内存来自与 main() 不同的函数,但我一定错过了指针运算方面的一些东西。这是我的想法,
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
仅仅是因为如果(这意味着我只使用一个设备),这很好用。
有任何想法吗?