cudart_static - когда это необходимо? - PullRequest
0 голосов
/ 02 июля 2018

Поскольку новые драйверы поставляются со средой выполнения CUDA (я могу выбрать 9.1 или 9.2 на странице загрузки драйверов), мой вопрос: должна ли моя библиотека (которая использует ядро ​​CUDA внутренне) поставляться с -lcudart_static?

У меня были проблемы с запуском ядер, скомпилированных с 9.2, на системах, которые использовали драйверы 9.1 CUDA. Какой самый «совместимый» способ гарантировать, что моя библиотека будет работать везде, где установлен последний драйвер CUDA? (Я уже компилирую для виртуальной архитектуры)

1 Ответ

0 голосов
/ 02 июля 2018

Поскольку новые драйверы поставляются со средой выполнения CUDA (я могу выбрать 9.1 или 9.2 на странице загрузки драйверов)

Нет, это неправильно. Этот выбор на странице загрузки драйверов связан с тем, что каждая версия CUDA имеет минимальную требуемую версию драйвера, связанную с ним . Это не означает, что драйвер поставляется вместе со средой выполнения CUDA (иными словами, драйвер не устанавливает libcudart.so в linux и никогда этого не делает - с некоторым тщательным экспериментированием в чистой установке вы можете доказать это сами).

Некоторые дополнительные комментарии:

-lcudart_static на самом деле по умолчанию для текущих / последних версий nvcc. Вы можете узнать это, прочитав руководство nvcc . Поэтому по умолчанию ваш исполняемый файл при компиляции / сборке с nvcc уже должен быть статически связан с библиотекой времени выполнения CUDA, соответствующей версии nvcc, которую вы используете для компиляции. Причина, по которой вам может потребоваться указать это или что-то подобное, заключается в том, что вы создаете приложение, например, с помощью набор инструментов GNU (в Linux), а не nvcc.

Цель статического связывания с библиотекой времени выполнения CUDA, как вы догадываетесь, состоит в том, чтобы приложение могло быть построено таким образом, что для правильной работы ему не требуется установка инструментария CUDA. Требуется только машина с установленным драйвером графического процессора.

Самый совместимый способ обеспечения того, чтобы приложение работало на нескольких компьютерах с набором драйверов GPU, - это компиляция приложения с использованием самого старого набора инструментов CUDA, необходимого для удовлетворения потребностей самых ранних версий. Драйвер графического процессора в диапазоне, который вы намереваетесь охватить. Опять же, вы можете обратиться к таблице здесь .

...