Внезапное получение предупреждений maxrregcount и неопределенных ошибок ссылок при связывании - PullRequest
0 голосов
/ 29 мая 2018

Я поддерживаю библиотеку CUDA API со вкусом C + = - .Текущий коммит библиотеки относительно хорошо протестирован, с некоторыми примерами программ и довольно большим количеством пользователей.Однако когда-то совсем недавно (не могу точно сказать, когда) и, не совершая ничего нового, я теперь получаю предупреждения NVCC во время фазы «dlink» моих примеров программ, например:

/path/to/nvcc /path/to/cuda-api-wrappers/examples/modified_cuda_samples/vectorAdd/vectorAdd.cu -dc -o /path/to/cuda-api-wrappers/CMakeFiles/vectorAdd.dir/examples/modified_cuda_samples/vectorAdd/./vectorAdd_generated_vectorAdd.cu.o -ccbin /opt/gcc-5.4.0/bin/gcc -m64 -gencode arch=compute_52,code=compute_52 --std=c++11 -Xcompiler -Wall -O3 -DNDEBUG -DNVCC -I/path/to/cuda/include -I/path/to/cuda-api-wrappers/src
/path/to/nvcc -gencode arch=compute_52,code=compute_52 --std=c++11 -Xcompiler -Wall -O3 -DNDEBUG -m64 -ccbin /opt/gcc-5.4.0/bin/gcc -dlink /export/path/to/cuda-api-wrappers/CMakeFiles/vectorAdd.dir/examples/modified_cuda_samples/vectorAdd/./vectorAdd_generated_vectorAdd.cu.o /path/to/cuda/lib64/libcublas_device.a -o /export/path/to/cuda-api-wrappers/CMakeFiles/vectorAdd.dir/./vectorAdd_intermediate_link.o
@O@ptxas info    : 'device-function-maxrregcount' is a BETA feature
@O@ptxas info    : 'device-function-maxrregcount' is a BETA feature
@O@ptxas info    : 'device-function-maxrregcount' is a BETA feature
... this repeats many times ...

, но dlinkлицо действительно делает выводЭто уже странно, поскольку я не использовал явные бета-функции в явном виде.

/opt/gcc-5.4.0/bin/g++   -Wall -Wpedantic -O2 -DNDEBUG  -L/path/to/cuda/lib64 -rdynamic CMakeFiles/vectorAdd.dir/examples/modified_cuda_samples/vectorAdd/vectorAdd_generated_vectorAdd.cu.o CMakeFiles/vectorAdd.dir/vectorAdd_intermediate_link.o  -o examples/bin/vectorAdd lib/libcuda-api-wrappers.a -Wl,-Bstatic -lcudart_static -Wl,-Bdynamic -lpthread -ldl -lrt -lnvToolsExt -Wl,-Bstatic -lcudadevrt -Wl,-Bdynamic 
CMakeFiles/vectorAdd.dir/vectorAdd_intermediate_link.o: In function `__cudaRegisterLinkedBinary_25_cublas_compute_70_cpp1_ii_f0559976':
link.stub:(.text+0xe0): undefined reference to `__fatbinwrap_25_cublas_compute_70_cpp1_ii_f0559976'
CMakeFiles/vectorAdd.dir/vectorAdd_intermediate_link.o: In function `__cudaRegisterLinkedBinary_25_xerbla_compute_70_cpp1_ii_cd7f3ad3':
link.stub:(.text+0x190): undefined reference to `__fatbinwrap_25_xerbla_compute_70_cpp1_ii_cd7f3ad3'
CMakeFiles/vectorAdd.dir/vectorAdd_intermediate_link.o: In function `__cudaRegisterLinkedBinary_23_nrm2_compute_70_cpp1_ii_8edbce95':
link.stub:(.text+0x240): undefined reference to `__fatbinwrap_23_nrm2_compute_70_cpp1_ii_8edbce95'
... more udnefined reference errors here ...

Мой вопрос: почему это произошло и как мне обойти / избежать / разрешить?

Примечания:

  • Я использую раздельную компиляцию
  • Я получаю эти конкретные ошибки с CUDA 9.1 и устройством SM 5.2 (нет 7.0).
  • The CMakeLists.txt здесь здесь .
  • Я явно очищаю CMakeCache.txt перед сборкой.
  • Это случилось со мной как на GNU / Linux Mint 18.3, так и на Fedora 26На первой машине было выполнено несколько apt-get dist-upgrade, и теперь GCC до версии 5.5.0, если это имеет значение.На второй машине - действительно не было никаких изменений, о которых я знаю;тот же компилятор и версия CUDA.

1 Ответ

0 голосов
/ 29 мая 2018

Частичный ответ / обходной путь:

Эта проблема, кажется, возникает, только когда задействовано libcublas .Если я удаляю /path/to/cuda/lib64/libcublas_device.a из командной строки фазы -dlink, все предупреждения и ошибки исчезают (включая более поздние этапы).И на самом деле, моя библиотека-оболочка не замечает cublas, не знаю, почему CMake добавляет ее;это не в $CUDA_LIBRARIES.См. Также:

Почему CMake принудительно использует libcublas с разделяемой компиляцией?

...