cudaMemcpy2D error

direct to the question

i need to copy 4 2d arrays to gpu, i use cudaMallocPitch and cudaMemcpy2D to accelerate its speed, but it turns out there are problems i can not figure out

the code segment is as follows:

int valid_dim[][NUM_USED_DIM];

int test_data_dim[][NUM_USED_DIM];

int *g_valid_dim;

int *g_test_dim;				 

//what i should say is the variable with a prefix g_ shows that it is on the gpu, the ones without the prefix indicate it is on the host

size_t g_valid_dim_pitch = 0;

size_t g_test_dim_pitch = 0;

pitch = sizeof(int) * NUM_USED_DIM;

cudaMallocPitch((void **)&g_valid_dim, &g_valid_dim_pitch, pitch, FILE_DATA_NUM);

cudaMemcpy2D(g_valid_dim, g_valid_dim_pitch, valid_dim, pitch, pitch, FILE_DATA_NUM, cudaMemcpyHostToDevice);


cudaMallocPitch((void **)&g_test_dim, &g_test_dim_pitch, pitch, FILE_DATA_NUM);

cudaMemcpy2D(g_test_dim, g_test_dim_pitch, test_data_dim, pitch, pitch, FILE_DATA_NUM, cudaMemcpyHostToDevice);

the first cudaMemcpy2D is ok, but the second can not run through, which makes ma frustrated yesterday.

Do you have some advice for me to fix it ?

thank you very much!

I don’t understand your memory allocation in your host code … it should be static “int_valid_dim[NUM_USED_DIM]”.

Your naming of your variables is quite confusing. Here is a example from my code

I modified my code and hope that I don’t introduce any error in the code.