Я пытаюсь объявить и инициализировать массив массивов в CUDA.Я использую следующий фрагмент кода:
int** h_array = (int**)malloc(num_of_arrays * sizeof(int*));
int** d_array;
cudaMallocHost((void**)&d_array, num_of_arrays * sizeof(int*));
for(size_t i = 0 ; i < num_of_arrays ; i++){
cudaMallocHost(&h_array[i], array_size * sizeof(int));
}
for(size_t i = 0 ; i < num_of_arrays ; i++){
cudaMemcpy(d_array[i], h_array[i], array_size * sizeof(int), cudaMemcpyHostToDevice);
}
int** h_array2 = (int**)malloc(num_of_arrays * sizeof(int*));
Обратите внимание, что h_array2 инициализируется правильно (это массив массивов, для которого каждый массив инициализируется правильно).Затем я пытаюсь сделать следующее:
for(size_t i = 0 ; i < num_of_arrays ; i++){
cudaMemcpy(d_array[i], h_arra2[i], array_size * sizeof(int), cudaMemcpyHostToDevice);
}
Подводя итог, я пытаюсь объявить и инициализировать массив массивов в памяти устройства.Я знаю, что не могу получить доступ к памяти устройства из памяти хоста.
Код выше, похоже, не работает.
Не могли бы вы сказать мне, что не так и помочь мне?Заранее спасибо.