Вы перепутали параметры для выбора фазы компиляции (-ptx
и -cubin
) с параметрами для управления целевыми устройствами (-code
), поэтому вам следует вернуться к документации.
NVCC - драйвер компилятора NVIDIA. Параметры -ptx
и -cubin
используются для выбора определенных фаз компиляции, по умолчанию без каких-либо специфических для фазы параметров nvcc будет пытаться создать исполняемый файл из входных данных. Большинство людей используют опцию -c
, чтобы nvcc создавал объектный файл, который впоследствии будет связан с исполняемым файлом компоновщика платформы по умолчанию, опции -ptx
и -cubin
действительно очень полезны, если вы используете Driver API , Для получения дополнительной информации о промежуточных этапах обратитесь к руководству nvcc, которое устанавливается при установке CUDA Toolkit .
- Выходные данные
-ptx
представляют собой текстовый файл PTX. PTX - это язык промежуточной ассемблера для графических процессоров NVIDIA, который еще не был полностью оптимизирован и впоследствии будет собран для кода, специфичного для устройства (например, разные устройства имеют различное число регистров, поэтому полная оптимизация PTX будет неправильной).
- Выходные данные
-cubin
представляют собой толстый двоичный файл, который может содержать одно или несколько двоичных изображений для конкретного устройства, а также (необязательно) PTX.
Аргумент -code
, на который вы ссылаетесь, имеет совершенно другую цель. Я бы посоветовал вам ознакомиться с документацией по nvcc, которая содержит несколько примеров, в общем, я бы посоветовал использовать вместо этого параметр -gencode
, поскольку он обеспечивает больший контроль и позволяет ориентироваться на несколько устройств в одном двоичном файле. В качестве быстрого примера:
-gencode arch=compute_xx,code=\'compute_xx,sm_yy,sm_zz\'
заставляет nvcc нацеливаться на все устройства с вычислительной способностью xx (это бит arch=
) и вставлять PTX (code=compute_xx
), а также двоичные файлы, специфичные для устройств для sm_yy и sm_zz, в окончательный толстый двоичный файл.