Что делать, если вычислительные возможности двоичных файлов cuda не соответствуют вычислительным возможностям текущего устройства?

Я все еще не могу полностью понять вычислительные возможности cuda при компиляции исходного кода.

Предположим, что бинарные файлы скомпилированы с использованием флагов от (code=sm_30, Compute=30) до (code=sm_62, Compute=62) (версия nvcc — 10.1). ,

что происходит, когда устройство Turing (например, RTX2080Ti) запускает эти двоичные файлы?

Несмотря на то, что двоичные файлы не включают code=sm_75, calculate=75 для архитектуры Turing, почему они правильно работают на устройстве Turing?

Компилирует ли устройство Тьюринга JIT код PTX compute=62 (поскольку compute=75 не упоминается) и генерирует SASS Тьюринга (code=sm_75) вместо SASS 65 во время выполнения?


person sungjun cho    schedule 11.08.2020    source источник
comment
docs.nvidia.com/ cuda/cuda-compiler-driver-nvcc/   -  person talonmies    schedule 11.08.2020
comment
Флаги указываются иначе: code=sm_30, calculate=30. Флаги выглядят так: arch=compute_30,code=sm_30. Для этого синтаксиса ни один из приведенных вами флагов не указывает поколение PTX, и устройство Тьюринга не может работать с кодом SASS от любого sm_30 до sm_62. Поэтому я думаю, что в вашем вопросе отсутствуют важные детали и точность/ясность с точки зрения того, как на самом деле компилируется код. PTX указывается, когда вы видите arch=compute_30,code=compute_30 (например). Любой PTX числовой арки ниже, чем calculate_75, может быть скомпилирован JIT в sm_75 SASS.   -  person Robert Crovella    schedule 11.08.2020
comment
@RobertCrovella Подводя итог, я имел в виду, что хотя указано только arch=compute_30,code=compute_30, как устройство Тьюринга может запускать приложение (поскольку мы не указываем arch=compute_75,code=compute_75, устройство Тьюринга не должно запускать приложение)   -  person sungjun cho    schedule 11.08.2020
comment
arch=compute_30,code=compute_30 говорит nvcc встроить cc3.0 PTX в двоичный файл. PTX может быть перенаправлен с помощью JIT-компиляции драйвером графического процессора (не требует набора инструментов CUDA) в любую будущую архитектуру, поддерживаемую этим драйвером графического процессора. Если у вас есть драйвер графического процессора, совместимый с CUDA 10.1, этот драйвер может поддерживать Turing. Когда вы пытаетесь запустить приложение, драйвер просматривает двоичный пакет и обнаруживает, что подходящего SASS не существует. Затем он обнаруживает, что существует подходящий PTX, и использует этот PTX для создания кода SASS, который работает на устройстве Turing.   -  person Robert Crovella    schedule 11.08.2020
comment
Это стандартный механизм прямой совместимости, который всегда был частью CUDA, и здесь, в теге cuda, обсуждается множество вопросов, таких как этот и те, на которые он ссылается. Ваш вопрос, возможно, является дубликатом этого.   -  person Robert Crovella    schedule 11.08.2020
comment
@RobertCrovella Спасибо. Теперь это имеет смысл. Я не был уверен, что драйвер графического процессора сгенерирует SASS целевого устройства из старого PTX. В приведенном выше случае драйвер графического процессора будет генерировать SASS Turing из cc3.0 PTX, что может быть неэффективным из-за старого PTX.   -  person sungjun cho    schedule 11.08.2020