Каковы значения по умолчанию для параметров арки и кода при использовании 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, указывает, но я не могу найти ссылку в Интернете).