У меня есть класс CUDA, назовем его A
, определенный в файле заголовка. Я написал тестовое ядро, которое создает экземпляр класса A
, который отлично компилируется и дает ожидаемый результат.
Вдобавок у меня есть основное ядро CUDA, которое также отлично компилируется и дает ожидаемый результат. Однако, когда я добавляю код в свое основное ядро для создания экземпляра класса A
, компилятор nvcc дает сбой из-за ошибки сегментации.
Обновление:
Чтобы уточнить, ошибка сегментации происходит во время компиляции, а не при запуске ядра. Строка, которую я использую для компиляции:
`nvcc --cubin -arch compute_20 -code sm_20 -I<My include dir> --keep kernel.cu`
где <My include dir>
- это путь к моему локальному пути, содержащему некоторые файлы заголовков служебных программ.
Мой вопрос: прежде чем тратить много времени на изоляцию минимального примера, демонстрирующего поведение (нетривиально из-за относительно большой базы кода), сталкивался ли кто-нибудь с подобной проблемой? Может ли компилятор nvcc выйти из строя и умереть, если ядро слишком длинное или использует слишком много регистров?
Если такая проблема, как счетчик регистров, может таким образом повлиять на компилятор, мне нужно будет переосмыслить, как реализовать мое ядро, чтобы использовать меньше ресурсов. Это также будет означать, что сокращение всего до минимального примера, скорее всего, устранит проблему. Однако, если это даже невозможно, я не хочу тратить время на тупик, а скорее попытаюсь сократить все до минимального примера и отправлю отчет об ошибке в NVIDIA.
Обновление:
По предложению @njuffa я повторно запустил компиляцию с включенным флагом -v
. Вывод заканчивается следующим:
#$ ptxas -arch=sm_20 -m64 -v "/path/to/kernel_ptx/kernel.ptx" -o "kernel.cubin"
Segmentation fault
# --error 0x8b --
Это говорит о том, что проблема связана с программой ptxas
, которая не может сгенерировать двоичный файл CUDA из файла ptx
.
nvcc --cubin -arch compute_20 -code sm_20 -I<my include dir> --keep kernel.cu
- person naitsirhc   schedule 12.12.2012nvcc --version
сообщаетCuda compilation tools, release 5.0, V0.2.1221
- person naitsirhc   schedule 12.12.2012sm_20
вызывало такие ошибки. Вы можете проверить, проходит ли компиляция сsm_30
. - person Florent DUGUET   schedule 15.05.2016