Нет, он не будет использовать какие-либо функции, необходимые для явной программы. Будут использоваться только те функции, которые являются прозрачными для пользователя (например, кеш или файлы большего размера).
Кроме того, вы должны убедиться, что ваш объектный файл содержит версию кода, скомпилированную на промежуточном языке PTX, который может быть динамически скомпилирован в целевую архитектуру или программа не будет работать.
Скомпилировать виртуальную архитектуру (nvcc -arch compute_13
), чтобы обеспечить или создать жирный двоичный код с кодом для нескольких архитектур, используя опцию -gencode
для nvcc.
С жирным двоичным кодом вы можете запрограммировать функции, доступные только при более высокой вычислительной способности, если вы завершите код внутри #if __CUDA_ARCH__ >= xyz
условных препроцессоров.
спасибо, что ответ. Я предпочитаю создавать живые двоичные файлы с кодом для всех вычислительных возможностей. – sgarizvi
Обратите внимание, что лучший вариант - сделать оба (создать жирный бинарный файл, который также содержит версию PTX). Таким образом, программа всегда будет работать даже на будущих графических процессорах с разными наборами инструкций. – tera
Вторая часть моего предыдущего комментария не форматировалась правильно. Вместо этого я перевел его на ответ. – tera