Выполняет ли компилятор 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_52PTX без использования оптимизации времени компоновки (что приводит к менее оптимальному коду)? Или это как-то связывает LTO-посредников с помощью оптимизации времени компоновки? Есть ли способ определить / указать, что делает JIT-компилятор?

1 ответ

Решение

По словам сотрудника NVIDIA на форумах CUDA, ответ «еще нет»:

Хороший вопрос. Мы работаем над поддержкой JIT LTO, но в 11.2 она не поддерживается. Таким образом, в примере, который вы даете во время JIT, он будет JIT для каждого отдельного PTX в кубин, а затем сделает кубинную ссылку. Это то же самое, что мы всегда делали для JIT-компоновки. Но в будущих выпусках у нас должна быть больше поддержки JIT LTO.

Другие вопросы по тегам