2013-10-01 2 views
0

У меня есть Eclipse Nsight 5.0 (CUDA 5.0), установленный на 64-битной машине Ubuntu 12.04 с двумя графическими картами: Geforce GT 240 Desktop UI и Geforce GTX 480 для отладки. Я могу скомпилировать и запустить программу cuda просто отлично. Однако, когда я устанавливаю breakpointer в коде cuda и начинаю отладку, курсор не останавливается на строке, а перескакивает до конца функции ядра.Отладчик не разбивается на код ядра

Я установил в Debug Configurations Geforce GTX 480 в качестве отладчика и проверил возвращаемое значение каждого вызова ядра. Что еще я могу попробовать? Также я не имею права root на этом ПК.

+0

Точки останова не обязательно попадают в функции ядра. Фактически выполненный на графическом процессоре код существенно отличается от кода, который вы пытаетесь установить точки останова, поскольку компилятор CUDA обычно выполняет очень агрессивную оптимизацию кода. – JackOLantern

ответ

1

Выполняется ли ваше ядро ​​при запуске под отладчиком (например, видите ли вы, что значения обновлены)? Возможно, ваш драйвер NVIDIA несовместим с набором инструментов.

Если ядро ​​не выполняется, скорее всего, это что-то простое, например. ваше ядро ​​скомпилировано для архитектуры, которая несовместима с картой, которую вы используете для отладки.

У вас есть cudaDeviceSynchronize после вызова вашего ядра? Вы проверяете его возвращаемое значение?

+0

Да, ядро ​​запускается под отладчиком, как при обычном запуске программы. Я вызываю cudaDeviceSynchronize после каждого вызова ядра, а также проверяю, равна ли возвратная шкала cudaSuccess. Я должен проверить, какой драйвер установлен для GeForce GTX 480. Где я могу проверить, какой драйвер совместим с CUDA 5.0? – user2773181

+0

Инструмент CUDA требует драйвера 304.54 или новее, хотя в некоторых очень редких случаях новейший драйвер может не работать со старыми инструментами. Вы пробовали отладку cuda-gdb из оболочки? – Eugene

+0

Проверка возвращаемого значения 'cudaDeviceSynchronize' после вызова ядра недостаточно для обнаружения всех типов сбоев запуска. В частности, он не поймает тип отказа запуска, возникающего из-за того, что ядро ​​компилируется для несовместимой архитектуры. Просмотрите [правильную проверку ошибок cuda] (http://stackoverflow.com/questions/14038589/what-is-the-canonical-way-to-check-for-errors-using-the-cuda-runtime-api). –

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