Всякий раз, когда я бегу мой сценарий, содержащий эти строки:CUDA выделения массив строк
char ** gpu_reads;
HANDLE_ERROR(cudaMalloc((void **)&gpu_reads, inputDim * sizeof(char *)));
for(i=0; i<inputDim; i++) {
HANDLE_ERROR(cudaMalloc((void **)&(gpu_reads[i]), (READS_LENGTH + 1) * sizeof(char)));
}
for(i=0; i<inputDim; i++) {
HANDLE_ERROR(cudaMemcpy(gpu_reads[i], reads[i], sizeof(char) * (READS_LENGTH + 1), cudaMemcpyHostToDevice));
}
Вторая строка возвращает «неизвестная ошибка». Я пробовал разное распределение в моей программе (это был первый), но никто из них не работал.
Цель этих строк просто выделить массив (длины, установленных пользователем, с помощью переменной inputDim
строк (фиксированной длины).
Я пробовал различные версии (то есть, используя только 3 указатели, 1 указатель ...), но никто не похоже на работу ...
Любые идеи?
полный код доступен на моем GitHub repository, где многие выделения сделаны.
Почему у меня такое же количество звезд на 4-й строке, что и на 2-ом в '(void **)'? –
CUDA - это не C, а C++. – Olaf
Выделите '(READS_LENGTH * inputDim)' байты в одном фрагменте, и вам никогда не придется бороться со сломанными циклами. – Drop