Я запускаю мое ядро и проверку возможных ошибок следующим образом:ядра таймаута для большого массива, когда X Server на
kernel<<<grid,block>>>(d_Basis, d_repul_aux,nao);
cout<<"done with the ERIs...."<<endl;
std::string error = cudaGetErrorString(cudaPeekAtLastError());
cout<<error<<endl;
HANDLE_ERROR(cudaMemcpy(eris_gpu_cpu_aux.data(),d_repulsion_aux,eris_size*sizeof(double),cudaMemcpyDeviceToHost));
где cudaGetErrorString (cudaPeekAtLastError()) используется для того, чтобы сделать ошибку проверки ядро и я определили:
static void HandleError(cudaError_t err,
const char *file,
int line) {
if (err != cudaSuccess) {
printf("%s in %s at line %d\n", cudaGetErrorString(err),
file, line);
exit(EXIT_FAILURE);
}
}
#define HANDLE_ERROR(err) (HandleError(err, __FILE__, __LINE__))
Когда сервер X выключен, вычисление выполняется, как показано на рисунке; но если я перехожу на сервере X, ядро зависает, и я получаю следующий результат:
done with the ERIs....
no error
the launch timed out and was terminated in main.cu at line 1038
Линия 1038 в исходном коде соответствует:
HANDLE_ERROR (cudaMemcpy (eris_gpu_cpu_aux.data() , d_repulsion_aux, eris_size * SizeOf (дважды), cudaMemcpyDeviceToHost));
Что означает, что вычисление происходит сбой при копировании результатов с устройства на хост. Я использую графическую карту GEforce GTx-480 и CUDA 7.5.
Попытка решить проблему, я попытался отключить опцию «Интерактивный» в файле /etc/X11/xorg.conf, но X-сервер не распознает эту опцию. Что я могу сделать для совместного использования ресурсов графического процессора между X Server и моим приложением GPGPU? Я настаиваю на этом, потому что мне неудобно писать и/или отлаживать мой код, используя среду текстового режима.
Ошибка cudaMemcpy, следующий за ядром, на самом деле является неудачным завершением ядра. Вы должны следовать инструкциям [здесь] (http://nvidia.custhelp.com/app/answers/detail/a_id/3029/~/using-cuda-and-x). Ваши утверждения о том, что X-сервер не распознает этот параметр, не имеют смысла. Этот параметр обрабатывается драйвером NVIDIA GPU, а не X-сервером. Поэтому я предполагаю, что вы неправильно изменили xorg.conf, иначе вы изменили файл xorg.conf, который ваш X-сервер даже не использует для конфигурации дисплея. –
Большое спасибо за ваш совет. Фактически, я использовал неверный синтаксис для отключения интерактивной опции, можно найти пример правильного синтаксиса [здесь.] (Http://devblogs.nvidia.com/parallelforall/hpc -визуализация-nvidia-tesla-gpus /) – user3116936
Итак, проблема исправлена? –