3.20.35 Параметры Nvidia PTX
Для Nvidia PTX определены следующие параметры:
-
-m64 -
Игнорируется, но сохраняется для обратной совместимости. Поддерживается только 64-разрядный ABI.
-
-march=architecture-string -
Генерировать код для указанной целевой архитектуры PTX ISA. Допустимые строки архитектур: ‘sm_30’, ‘sm_35’, ‘sm_37’, ‘sm_52’, ‘sm_53’, ‘sm_61’, ‘sm_70’, ‘sm_75’, ‘sm_80’ и ‘sm_89’. Значение по умолчанию зависит от конфигурации компилятора; см. --with-arch.
Этот параметр задаёт значение макроса препроцессора
__PTX_SM__; например, для ‘sm_35’ его значение равно ‘350’. -
-misa=architecture-string -
Псевдоним -march=.
-
-march-map=architecture-string -
Выбрать ближайшее доступное значение -march=, возможности которого не превышают требуемые. Например, для -march-map=sm_50 выбирается -march=sm_37, а для -march-map=sm_53 — -march=sm_53.
-
-mptx=version-string -
Генерировать код для указанной версии PTX ISA. Допустимые строки версий: ‘3.1’, ‘4.1’, ‘4.2’, ‘5.0’, ‘6.0’, ‘6.3’, ‘7.0’, ‘7.3’ и ‘7.8’. По умолчанию используется версия PTX ISA, в которой появилась поддержка выбранной целевой архитектуры PTX ISA (см. -march=), но не ниже ‘6.3’ или ‘7.3’ для -march=sm_52 и выше.
Этот параметр задаёт значения макросов препроцессора
__PTX_ISA_VERSION_MAJOR__и__PTX_ISA_VERSION_MINOR__; например, для ‘3.1’ значения макросов равны соответственно ‘3’ и ‘1’. -
-mmainkernel -
Включить в код ядро __main. Предназначено для автономного выполнения, а не для выгрузки выполнения.
-
-moptimize -
Применять оптимизации для разделённого выполнения. Этот параметр включён по умолчанию, если выбран любой уровень оптимизации.
-
-msoft-stack -mno-soft-stack-
Для -mno-soft-stack (значение по умолчанию, если не указан -mgomp) использовать «нативные» стеки PTX, то есть генерировать код, использующий память
.localили PTXallocaнепосредственно для хранения стека. Если не активны -mptx=7.3 или выше и -march=sm_52 или выше, массивы переменной длины и динамическое выделение памяти в стеке с помощьюallocaне поддерживаются.Для -msoft-stack (подразумевается параметром -mgomp) генерировать код, не использующий память
.localили PTXallocaнепосредственно для хранения стека. Вместо этого указатель стека для каждого варпа поддерживается явно. Это позволяет выделять в стеке память переменной длины (для массивов переменной длины илиalloca), а при использовании глобальной памяти для базового хранилища даёт возможность обращаться к автоматическим переменным из других потоков или с помощью атомарных инструкций. Этот вариант генерации кода используется для выгрузки OpenMP, но параметр доступен отдельно для тестирования компилятора; чтобы генерировать код, пригодный для компоновки с программами, использующими выгрузку OpenMP, используйте параметр -mgomp. -
-muniform-simt -
Переключиться на вариант генерации кода, позволяющий выполнять все потоки в каждом варпе, сохраняя при этом состояние памяти и побочные эффекты так, как если бы вне областей OpenMP SIMD был активен только один поток в каждом варпе. Все атомарные операции и вызовы среды выполнения (malloc, free, vprintf) выполняются условно (только если индекс текущей дорожки равен индексу главной дорожки), а присваиваемый регистр копируется из главной дорожки с помощью инструкции перемешивания. Вне областей SIMD главной является дорожка 0; внутри таких областей каждый поток считает главной себя. Массив разделяемой памяти
int __nvptx_uni[]хранит битовые маски из одних нулей или единиц для каждого варпа, указывая текущий режим (0 вне областей SIMD). Каждый поток может выполнить побитовое И над маской по адресуtid.yи текущим индексом дорожки, чтобы вычислить индекс главной дорожки. -
-mgomp -
Генерировать код для использования при выгрузке OpenMP: включает параметры -msoft-stack и -muniform-simt, а также выбирает соответствующий вариант multilib.
© Free Software Foundation
Licensed under the GNU Free Documentation License, Version 1.3.
https://gcc.gnu.org/onlinedocs/gcc-15.3.0/gcc/Nvidia-PTX-Options.html