Каковы значения по умолчанию для параметров арки и кода при использовании nvcc?
При компиляции кода CUDA вы должны выбрать, для какой архитектуры генерируется ваш код. nvcc
предоставляет два параметра для указания этой архитектуры, в основном:
-
arch
указывает виртуальную атаку, которая может быть compute_10
, compute_11
и т.д.
-
code
указывает реальную архитектуру, которая может быть sm_10
, sm_11
и т.д.
Итак, команда вроде этого:
nvcc x.cu -arch=compute_13 -code=sm_13
Будет генерировать код "cubin" для устройств с возможностью вычисления 1,3. Пожалуйста, поправьте меня, если я ошибаюсь. Что я хотел бы знать, каковы значения по умолчанию для этих двух параметров? Какая архитектура по умолчанию используется nvcc, если не указано значение для arch
или code
?
Ответы
Ответ 1
Хорошо, мне наконец удалось узнать значения по умолчанию. Моя ошибка в том, что я не читал целую главу о компиляции графического процессора в документации NVCC с самого начала и до самого конца. Таким образом,
nvcc x.cu
эквивалентно для
nvcc x.cu –arch=compute_10 -code=sm_10,compute_10
Это значения по умолчанию. Компиляция выполняется по умолчанию виртуальной архитектуре compute_10
, а a.out
, которая является результатом компиляции, будет включать код CUBIN для реальной архитектуры sm_10
и код сборки PTX для архитектуры compute_10
, которая будет перекомпилирован "как раз вовремя" драйвером CUDA, если ваша архитектура больше, чем sm_10
.
Ответ 2
Я считаю, что по умолчанию это compute_10
, так как вы не можете использовать какие-либо функции compute_13, если не указать явно, что это то, что вы хотите. (Предположительно, документация NVCC, которая поставляется с инструментарием CUDA, указывает, но я не могу найти ссылку в Интернете).