Внезапно получение "__builtin_ia32_sqrtsd_round" не определено с помощью nvcc / gcc - PullRequest
0 голосов
/ 24 марта 2020

У меня есть проект CUDA NSight, который прекрасно компилируется, но неожиданно нет. На прошлой неделе у меня было установлено несколько системных обновлений (Ubuntu 18.04), которые, вероятно, являются причиной (или ее частью). К сожалению, я не знаю, что именно было установлено. Я не помню, чтобы в списке были какие-либо объекты CUDA.

В любом случае, командная строка nv cc, созданная Nsight, выглядит следующим образом:

/usr/local/cuda-10.2/bin/nvcc -I/usr/include/gdal -O2 --compile --relocatable-device-code=false -gencode arch=compute_37,code=compute_37 -gencode arch=compute_61,code=compute_61 -gencode arch=compute_37,code=sm_37 -gencode arch=compute_61,code=sm_61  -x cu -o  "MySource.o" "../MySource.cu"

Это дает кучу очень похожие ошибки, начиная с:

/usr/lib/gcc/x86_64-linux-gnu/7/include/avx512fintrin.h(1761): error: identifier "__builtin_ia32_sqrtsd_round" is undefined

/usr/lib/gcc/x86_64-linux-gnu/7/include/avx512fintrin.h(1770): error: identifier "__builtin_ia32_sqrtss_round" is undefined

/usr/lib/gcc/x86_64-linux-gnu/7/include/avx512fintrin.h(2728): error: identifier "__builtin_ia32_scalefsd_round" is undefined

/usr/lib/gcc/x86_64-linux-gnu/7/include/avx512fintrin.h(2737): error: identifier "__builtin_ia32_scalefss_round" is undefined

avx512fintrin.h действительно существует в указанном месте и имеет отметку даты еще в декабре.

Я использую Ubuntu 18.04 x64. g cc и g ++ оба сообщают как: 7.5.0

Запуск CUDA 10.2 (и подтверждено nvidia-smi). nv cc - версия отчетов о выпуске 10.2 V10.2.89

Сборка образца cuda-10.2 / samples / 0_Simple / matrixMul (с make), сборка без ошибок.

Где находятся идентификаторы в ошибках определены? Что мне не хватает? Что изменилось или было повреждено?

1 Ответ

1 голос
/ 24 марта 2020

Мне кажется, я нашел проблему. @ Mar c Комментарий Глисса о GDAL был большой подсказкой. Я использую NV cc, чтобы скомпилировать все. Для стандартного C ++ это просто передает работу g ++. У меня тоже были такие же пути включения. Интерфейс GDAL C ++ (который я использую), конечно, не может быть вызван напрямую из CUDA. Удаление пути включения GDAL из CUDA nv cc и реорганизация включаемых файлов устранили проблему.

Приятным побочным эффектом является то, что он заставил меня значительно улучшить гигиену включаемых файлов!

Еда на вынос: с последними Linux обновлениями GDAL даже не нравится включаться в код CUDA.

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