Диагностика проблем ядра CUDA - PullRequest
3 голосов
/ 16 апреля 2011

CUDA имеет много документации и руководств повсюду, но я не смог найти какую-либо форму инструкции по диагностике ядер, которые компилируются, но получают загадочные, расплывчатые сообщения об ошибках, такие как «неопределенный запуск»сбой "за пределами нормы" Имеют ли смысл эти блочные / сеточные структуры? "и т. д.

Можно ли как-то перехватить файл кубина и провести статический анализ структур памяти и т. д.?Прости мою нубность, но я не могу найти нигде определенного, идиотского гида.

Всем хороших выходных.

Что я ищу

  • Как выделить промежуточный файл cubin
  • Что с ним делать потом, чтобы выяснить, что происходит, в частности зарегистрировать и сконфигурировать память, чтобы увидеть, нарушает ли мой код какие-либо требования к оборудованию, или я просто отсутствуетошибка где-то один за другим.

Для тех, кто сталкивается с этим позже (у меня, кажется, есть привычка создавать ТАК вопросы, которые продолжают появляться в моих собственных запросах спустя месяцы ...) CUDA-Memcheck дает гораздо более интересные ответы, чем обработчики 'check error'.например,

========= Error: process didn't terminate successfully
========= Invalid __global__ write of size 4
=========     at 0x00000040 in decomp
=========     by thread (1,0,0) in block (0,0,0)
=========     Address 0x00101024 is out of bounds
=========
========= ERROR SUMMARY: 1 error

Мне даже не нужно объяснять это сообщение об ошибке ...

Ответы [ 3 ]

3 голосов
/ 16 апреля 2011

В CUDA «неопределенная ошибка запуска» является эквивалентом segfault.

Последние версии инструментария поставляются с утилитой cuda-memcheck.Он выполняет valgrind, как анализ транзакций памяти внутри исполняющего ядра, и сообщит о переполнении буфера или любом недопустимом использовании указателя в ядре.Вы можете использовать это как отправную точку для дальнейшего анализа.Если вы используете карту Fermi, в ядре также есть поддержка printf, нетрудно сгенерировать собственную функцию assert для проверки и сообщения об ошибках в ядре.

CUDA также поставляется сотладчик исходного уровня, но вам нужен выделенный графический процессор для его использования.Если вы используете Linux и имеете только один графический процессор, выйдите из X11 и запустите его из консоли TTY.

2 голосов
/ 16 апреля 2011

Используете ли вы cudaGetLastError ()?Это может помочь дать дополнительную информацию, если она еще не использовалась для сообщения о «неопределенной ошибке запуска».

2 голосов
/ 16 апреля 2011

Если вы установите флаг Keep Preprocessed Files --keep, это оставит файлы CUBIN и множество других без присмотра, чтобы вы могли взглянуть на них. Но я не уверен, что это сильно поможет.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...