I have a problem that i need to implement it with 2D arrays, but the thing is i’m confused on how to allocate the the arrays, i read a lot about it and i don’t know if its best to
use cudaMalloc, or cudaMallocPitch or even map the 2D array to 1D array and the send it to the GPU, and also i have the same confusion in copying the array so if anyone
knows about which is the best way to do that i would be greatful for your help.
I suppose I should stop hogging my 2D memory class since so many people seem to need 2D arrays… but I won’t :D
Anywho, the easiest is to flatten the array to 1 dimension, and then to get the 1D index from a 2D type would be some_array[y*width + x] where y and x are the indexes that would be used on the 2D array.
The other way to do it would be the way below, and I typed this in the reply window so don’t expect anything to compile perfectly right away.
int** host;
int** device;
host = new int*[height];
cudaMalloc(device, sizeof(int*)*height);
for(int i = 0; i < width; i++) {
cudaMalloc(&host[i], sizeof(int)*width);
}
cudaMemcpy(device, host, cudaMemcpyHostToDevice);
thnx and I really appretiate your help but I found the second way is very disturbing so I already used the first way of flattening the matrix into 1D array and again thnx for the help