Какова цель использования нескольких «арочных» флагов в компиляторе Nvidia NVCC?

Недавно я понял, как NVCC компилирует код устройства CUDA для различных вычислительных архитектур.

Насколько я понимаю, при использовании опции NVgen -gencode «arch» - это минимальная вычислительная архитектура, требуемая приложением программиста, а также минимальная вычислительная архитектура устройства, для которой JIT-компилятор NVCC будет компилировать PTX-код.

Я также понимаю, что параметр «code» -gencode - это вычислительная архитектура, для которой NVCC полностью компилирует приложение, так что компиляция JIT не требуется.

После проверки различных Makefiles проекта CUDA я заметил, что регулярно происходят следующие события:

-gencode arch=compute_20,code=sm_20
-gencode arch=compute_20,code=sm_21
-gencode arch=compute_21,code=sm_21

и после некоторого чтения я обнаружил, что несколько архитектур устройств могут быть скомпилированы для одного двоичного файла - в данном случае sm_20, sm_21.

Мои вопросы: почему так много пар «арка / код» необходимо? Все ли значения "арки" используются в приведенном выше?

какая разница между этим и сказать:

-arch compute_20
-code sm_20
-code sm_21

Самая ранняя виртуальная архитектура в полях "arch" выбирается автоматически или есть какое-то другое неясное поведение?

Есть ли какие-либо другие особенности компиляции и времени выполнения, о которых мне следует знать?

Я прочитал руководство,http://docs.nvidia.com/cuda/cuda-compiler-driver-nvcc/index.html#gpu-compilation и я до сих пор не ясно, что происходит во время компиляции или во время выполнения.

Ответы на вопрос(2)

Ваш ответ на вопрос