Hello to all,
I have an array of float. Its size is (xdimydim3).
I want create a 2d matrix of size (xdim,ydim*3) on the device, using cudaMallocPitch and cudaMemcpy2d.
The code is:
[codebox]
void call_kernel(int xdim, int ydim, REAL* array, REAL* d_array, int argc, char** argv)
{
dim3 dBlock(BLOCK_X, BLOCK_Y, BLOCK_Z);
dim3 dGrid( (xdim)/dBlock.x,
(ydim)/dBlock.y);
CUT_DEVICE_INIT(argc, argv);
size_t pitch;
cudaMallocPitch((void**) &d_array, &pitch, xdimsizeof(REAL), 3ydim);
cudaMemcpy2D(d_array, pitch, array, xdimsizeof(REAL), xdimsizeof(REAL), 3*ydim, cudaMemcpyHostToDevice);
cudaFree(d_array);
}
REAL* create3dArray(int xdim, int ydim)
{
REAL* ptr = (REAL*)malloc(xdimydim3*sizeof(REAL));
for (int i=0; i<xdim; i++)
for (int j=0; j<ydim; j++)
{
ptr[i*xdim+j+xdim*ydim*0]=i;
ptr[i*xdim+j+xdim*ydim*1]=j;
ptr[i*xdim+j+xdim*ydim*2]=11.0;
}
}
int main(int argc, char** argv)
{
const int iDimX = 64;
const int iDimY = 64;
REAL* array3 = create3dArray(iDimX,iDimY);
REAL* d_array;
call_kernel(iDimX, iDimY, array3, d_array, argc, argv);
}
[/codebox]
the code works correctly if the matrix is (xdim,ydim), and the array is of size (xdim*ydim)
but i get bus error on my mac-book if I try to set ydim to 3*ydim
can someone explain me why?
Thanks in advance
Francesco