У меня установлена последняя версия инструментария CUDA и драйверов, установленных на сервере 12.04. Драйверы работают нормально: весь пример кода NVIDIA компилируется и запускается, и я написал, скомпилировал и запустил несколько программ CUDA. На днях я пошел использовать новый профилировщик командной строки nvprof и получил следующую ошибку:
Error: unable to locate profiling library libcuinj64.so.5.0.35.
Я дважды проверил библиотеки CUDA, и эта конкретная библиотека фактически включена в LD_LIBRARY_PATH. (Я использовал метод, описанный здесь ). Запуск ldconfig -v
показывает, что все библиотеки Cuda загружены в LD_LIBRARY_PATH:
/usr/local/cuda-5.0/lib:
libcurand.so.5.0 -> libcurand.so.5.0.35
libnpp.so.5.0 -> libnpp.so.5.0.35
libcusparse.so.5.0 -> libcusparse.so.5.0.35
libcufft.so.5.0 -> libcufft.so.5.0.35
**libcuinj32.so.5.0 -> libcuinj32.so.5.0.35**
libcudart.so.5.0 -> libcudart.so.5.0.35
libnvToolsExt.so.5.0 -> libnvToolsExt.so.5.0.35
libcublas.so.5.0 -> libcublas.so.5.0.35
/usr/local/cuda-5.0/lib64:
libcurand.so.5.0 -> libcurand.so.5.0.35
libcuinj64.so.5.0 -> libcuinj64.so.5.0.35
libnpp.so.5.0 -> libnpp.so.5.0.35
libcusparse.so.5.0 -> libcusparse.so.5.0.35
libcufft.so.5.0 -> libcufft.so.5.0.35
libcudart.so.5.0 -> libcudart.so.5.0.35
libnvToolsExt.so.5.0 -> libnvToolsExt.so.5.0.35
libcublas.so.5.0 -> libcublas.so.5.0.35
Библиотека-нарушитель выделена жирным шрифтом. На этом этапе старый компилятор командной строки работает нормально, сам компилятор работает нормально, так что, похоже, он специфичен для nvprof.
Я не уверен, что это Ubuntu или сборка nvprof, предоставляемая NVIDIA. У кого-нибудь есть опыт запуска nvprof под 12.04 или даже 12.10? Кто-нибудь видел эту проблему раньше? Я понимаю, что это довольно нишевый вопрос, но вы никогда не знаете.
ОБНОВЛЕНИЕ: Эта проблема сохраняется в Ubuntu 12.04 с CUDA 5.5 (выпущена 1 августа 2013 г.). Исправление все еще работает, вам просто нужно использовать обновленную библиотеку (см. Ниже).
Я знаю, что это старая версия, но это все еще первая проблема в Google, и я хотел, чтобы люди знали, как ее исправить. Глядя на strace, я понял, что библиотека не найдена ни в одном из путей (похоже, она просматривает другой набор папок по некоторым причинам). Несмотря на это, я просто связал свою копию библиотеки с одним из каталогов, на которые она смотрела, и он работал отлично. Я запустил этот код:
sudo ln -s `locate libcuinj64.so.5.0.35` /usr/lib/x86_64-linux-gnu/libcuinj64.so.5.0.35
Вы можете просто запустить команду locate самостоятельно, если вы хотите вставить ее вручную, но если у вас есть только одна копия библиотеки, это будет работать нормально. Сначала создайте каталог верхнего уровня, если у вас его нет по какой-либо причине:
sudo mkdir -p /usr/lib/x86_64-linux-gnu/
Надеюсь, это поможет!
Обновление для CUDA 5.5: библиотека для CUDA 5.5 - libcuinj64.so .5.5.22. Итак, однострочная команда:
sudo ln -s `locate libcuinj64.so.5.5.22` /usr/lib/x86_64-linux-gnu/libcuinj64.so.5.5.22
Вероятно, это связано с неправильной установкой $ LD_LIBRARY_PATH. Эта переменная среды должна включать путь к библиотеке CUDA. Пример:
setenv QUDA_INSTALL_PATH /usr/local/cuda/lib64
setenv LD_LIBRARY_PATH $QUDA_INSTALL_PATH/lib64:$LD_LIBRARY_PATH