2015-01-15 4 views
0

Я использую рабочую станцию, содержащую 4 карты GeForce GTX Titan для разработки CUDA. Я работаю над Ubuntu 12.04.5, и ни один из этих графических процессоров не используется для отображения. Я замечаю, что cudaGetDeviceProperties использует тайм-аут выполнения ядра. Это применимо, когда я не на Windows и не использую дисплей?CUDA - запуск завершен и был завершен - Ubuntu и нет отображения

Я поставил следующий код, чтобы проверить это в одном из моих ядер, как правило, работает нормально:

__global__ void update1(double *alpha_out, const double *sDotZ, const double *rho, double, *minusAlpha_out, clock_t *global_now) 
{ 
    clock_t start = clock(); 
    clock_t now; 

    for (;;) { 
     now = clock(); 
     clock_t cycles = now > start ? now - start : now + (0xffffffff - start); 
     if (cycles >= 50000000000) { 
      break; 
     } 
    } 
    *global_now = now; 
} 

Запуск ядра выглядит следующим образом:

update1<<<1, 1>>>(d_alpha + idx, d_tmp, d_rho + idx, d_tmp, global_now); 
CudaCheckError(); 
cudaDeviceSynchronize(); 

Для достаточно большого числа циклов ожидания , Я вижу ошибку:

CudaCheckError() with sync failed at /home/.../xxx.cu:295: 
the launch timed out and was terminated 

Он отлично работает для небольшого количества циклов. Если я запустил этот же код на графическом процессоре Tesla K20m с отключенным временем выполнения ядра, я не вижу эту ошибку, и программа работает как обычно. Если я вижу эту ошибку, это определенно означает, что я нажимаю ограничение по времени ядра, которое, кажется, включено или может быть что-то еще не так с моим кодом? Все упоминания этой проблемы кажутся людьми, использующими Windows, или же используя свою карточку для отображения, так как это возможно. Я вижу эту ошибку?

ответ

3

У Linux также есть сторожевой таймер. На Ubuntu, по моему опыту, он активен для устройств отображения, которые сконфигурированы через xorg.conf (например, /etc/X11/xorg.conf, но точный способ настройки будет варьироваться в зависимости от версии и).

Так что да, в Linux можно увидеть ошибку тайм-аута выполнения ядра.

В общем, вы можете обойти его несколькими способами, но поскольку у вас есть несколько графических процессоров, наилучшим подходом является удаление графических процессоров, на которые вы хотите выполнять вычисления, с вашей конфигурации дисплея (например, xorg.conf или независимо от того), а затем запускать свои вычислительные задачи на них. Как только X не настроен на использование определенного графического процессора, у этого GPU не будет никакого сторожевого пса, связанного с ним.

Дополнительные конкретные данные даны here.

Если вы собираетесь переустанавливать вещи, то другой подход, который обычно работает, чтобы ваши вычислительные графические процессоры выходили из пути отображения, заключается в загрузке ОС Linux с не включенными в систему графическими процессорами. После того, как все настроено так, как вы хотите отображать, затем добавьте вычислительные графические процессоры в систему и загрузите набор инструментов linux. Вы захотите вручную загрузить драйвер дисплея, а не позволить инструментарию linux сделать это, и отменить выбор, чтобы установить установщик драйвера дисплея linux, изменить xorg.conf. Аналогично, ваши графические процессоры сконфигурированы для использования вычислений, но не будут отображаться из пути отображения ,

+0

Большое спасибо за ваш ответ. Мы вообще не запускаем X. Нам удалось отключить тайм-аут выполнения, используя «nvidia-smi -r» для сброса графических процессоров. Это якобы не поддерживается на этих графических процессорах, но, похоже, все равно работает. Теперь мы не можем найти способ повторно включить его (а не то, что мы хотим), поэтому, как это было включено в первую очередь, это немного озадачивает. –

Смежные вопросы