Выполняет ли компилятор CUDA JIT оптимизацию времени компоновки устройства?
До того, как в CUDA 11.2 была введена оптимизация времени соединения (DLTO) устройств, было относительно легко обеспечить прямую совместимость, не слишком беспокоясь о различиях в производительности. Обычно вы просто создаете файл fatbinary, содержащий PTX для минимально возможной арки и SASS для конкретных архитектур, на которые вы обычно нацеливаетесь. Для любых будущих архитектур GPU JIT-компилятор затем соберет PTX в SASS, оптимизированный для этой конкретной архитектуры GPU.
Однако теперь с DLTO мне менее ясно, как обеспечить прямую совместимость и поддерживать производительность на этих будущих архитектурах.
Скажем, я компилирую / связываю приложение, используя
nvcc
со следующими параметрами:
Компилировать
-gencode=arch=compute_52,code=[compute_52,lto_52]
-gencode=arch=compute_61,code=lto_61
Ссылка на сайт
-gencode=arch=compute_52,code=[sm_52,sm_61] -dlto
Это создаст файл fatbinary, содержащий PTX для, посредников LTO для и, и SASS, оптимизированный по времени соединения для
sm_52
а также
sm_61
(или, по крайней мере, это похоже на случай сброса результирующих разделов fatbin с помощью cuobjdump -all в любом случае).
Предполагая, что приведенное выше верно, что происходит, когда приложение запускается на более поздней архитектуре графического процессора (например,
sm_70
)? Компилятор JIT просто собирает
cc_52
PTX без использования оптимизации времени компоновки (что приводит к менее оптимальному коду)? Или это как-то связывает LTO-посредников с помощью оптимизации времени компоновки? Есть ли способ определить / указать, что делает JIT-компилятор?
1 ответ
По словам сотрудника NVIDIA на форумах CUDA, ответ «еще нет»:
Хороший вопрос. Мы работаем над поддержкой JIT LTO, но в 11.2 она не поддерживается. Таким образом, в примере, который вы даете во время JIT, он будет JIT для каждого отдельного PTX в кубин, а затем сделает кубинную ссылку. Это то же самое, что мы всегда делали для JIT-компоновки. Но в будущих выпусках у нас должна быть больше поддержки JIT LTO.