Хотя моя программа компилируется без ошибок, я запускаю свою программу, и мои начальные операторы С работают, но когда я ударил свою первую функцию CUDA cudaMallocHost()
, программа просто перестает делать что-либо. Я не получаю ошибок, и мне нужно использовать cntr-c для ручного выхода. Я попытался удалить различные части, и кажется, что всякий раз, когда я ударяю любую из своих функций CUDA, он имеет тот же эффект.Почему моя программа перестает работать без ошибок?
Я включил cuda.h
и cuda_runtime.h
, и я компиляция .cu
файла с nvcc
с NVIDIA SDK и CUDA 5.5 установлен.
int main(){
int set[6][6] = {{1,2,3,4,5,6}, {7,8,9,10,11,12}, {13,14,15,16,17,18}, {19,20,21,22,23,24}, {25,26,27,28,29,30}, {31,32,33,34,35,36}};
int *i=0, *d_d=0, a, b, nbytes;
int size = sizeof(set[0]);
nbytes = size*size*sizeof(int);
for(a=0;a<6;a++){
for(b=0;b<6;b++){
printf("%d, ", set[a][b]);
}
printf("\n");
}
/*end safezone*/
cudaMallocHost((void**)&set, nbytes);
memset(set,0,nbytes);
printf("CPUmem");
cudaMalloc((void**)&d_d, nbytes);
cudaMemset(set,0,nbytes);
printf("GPUmem");
cudaMemcpy(d_d, set, nbytes, cudaMemcpyHostToDevice);
dim3 threads = dim3(((size % 512) + 1), 1);
dim3 blocks = dim3((threads.x/512) + 1, 1);
printf("Copied & DIM setup");
matrixflop<<<blocks, threads>>>(set);
printf("Threads created");
cudaMemcpy(set, d_d, nbytes, cudaMemcpyDeviceToHost);
/*start safezone*/
for(a=0;a<6;a++){
for(b=0;b<6;b++){
printf("%d, ", set[a][b]);
}
printf("\n");
}
/*end safezone*/
cudaFreeHost(i);
cudaFree(d_d);
printf("Success");
getchar();
exit(EXIT_SUCCESS);
return 0;
}
Отредактировано для включения кода.
Что делает самый базовый пример от NVIDIA? –
Пожалуйста, отредактируйте свое сообщение и включите минимальный пример, который демонстрирует проблему, с которой вы сталкиваетесь. Благодарю. –
Почему ваш код содержит * ошибку * CUDA API, проверяющую ошибку? – talonmies