Я использую CUDA 4.0 arch. с устройством Compute_Capability 2.0 (GTX460). В чем разница между файлом 'cubin' и 'ptx'? Я думаю, что кубин - это собственный код для gpu, так что это арка. а ptx - промежуточный язык, который запускается на устройствах Fermi (например, Geforce GTX 460) с помощью компиляции JIT. Когда я компилирую источник cu, я могу выбрать между ptx или кубиной. Если я хочу файл кубика, я выбираю "code = sm_20". Но если я хочу ptx файл, я использую "code = compute_20". Правильно ли это?
NVIDIA NVCC и CUDA: Cubin против PTX
Ответ 1
Вы перепутали параметры, чтобы выбрать фазу компиляции (-ptx
и -cubin
) с параметрами управления целевыми устройствами (-code
), поэтому вы должны пересмотреть документацию.
NVCC - это драйвер компилятора NVIDIA. Параметры -ptx
и -cubin
используются для выбора определенных фаз компиляции по умолчанию без каких-либо фазовых опций. Nvcc попытается создать исполняемый файл из входов. Большинство людей используют параметр -c
, чтобы заставить nvcc создать объектный файл, который позже будет связан с исполняемым файлом компоновщиком платформы по умолчанию, опции -ptx
и -cubin
действительно полезны, если вы используете 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 в конечный жирный бинарный файл.