Параллельное выполнение потока - Parallel Thread Execution
Эта статья слишком полагается на Рекомендации к основные источники. (Август 2020 г.) (Узнайте, как и когда удалить этот шаблон сообщения) |
Параллельное выполнение потока (PTX, или же NVPTX[1]) является низкоуровневым параллельно нить исполнение виртуальная машина и архитектура набора команд используется в Nvidia с CUDA среда программирования. В nvcc компилятор переводит код, написанный на CUDA, C ++ -подобный язык, в инструкции PTX, а графический драйвер содержит компилятор, который переводит инструкции PTX в двоичный код[2] которые могут быть запущены на процессорных ядрах Графические процессоры Nvidia. В Коллекция компиляторов GNU также имеет базовую возможность для генерации PTX в контексте OpenMP разгрузка.[3] Встроенная сборка PTX может использоваться в CUDA.[4]
Регистры
PTX использует произвольно большой набор регистров; вывод компилятора почти чистый форма разового назначения, причем последовательные строки обычно относятся к последовательным регистрам. Программы начинаются с деклараций формы
.reg .u32 %р<335>; // объявляем 335 регистров% r0,% r1, ...,% r334 типа 32-битного целого числа без знакаЭто язык ассемблера с тремя аргументами, и почти все инструкции явно указывают тип данных (с точки зрения знака и ширины), с которым они работают. Имена регистров начинаются с символа%, а константы являются буквальными, например:
shr.u64 % rd14, % rd12, 32; // сдвигаем вправо 64-битное целое число без знака из% rd12 на 32 позиции, получаем% rd14cvt.u64.u32 % rd142, % r112; // преобразовываем 32-битное целое число без знака в 64-битноеСуществуют регистры предикатов, но скомпилированный код в модели шейдеров 1.0 использует их только в сочетании с командами ветвления; условная ветвь
@%стр. 14 бюстгальтер $ label; // переход к $ labelВ setp.cc.type инструкция устанавливает регистр предиката на результат сравнения двух регистров соответствующего типа, также есть набор инструкция, где set.le.u32.u64 % r101, % rd12, % rd28 устанавливает 32-битный регистр % r101 к 0xffffffff если 64-битный регистр % rd12 меньше или равен 64-битному регистру % rd28. Иначе % r101 установлен на 0x00000000.
Есть несколько предопределенных идентификаторов, которые обозначают псевдорегистры. Среди прочего, % tid,% ntid,% ctaid, и % nctaid содержат, соответственно, индексы резьбы, размеры блоков, индексы блоков и размеры сетки.[5]
Государственные пространства
Нагрузка (ld) и сохраните (ул) команды относятся к одному из нескольких отдельных пространств состояний (банков памяти), например ld.param.Существует восемь пространств состояний:[5]
.reg: регистры.sreg: специальные регистры только для чтения, зависящие от платформы.const: общая, постоянная память.Глобальный: глобальная память, общая для всех потоков.местный: локальная память, частная для каждого потока.param: параметры, переданные ядру.общий: память, разделяемая между потоками в блоке.tex: глобальная память текстур (не рекомендуется)
Общая память объявляется в файле PTX через строки в начале формы:
.общий .выровнять 8 .b8 pbatch_cache[15744]; // определение 15744 байта, выровненного по 8-байтовой границеНаписание ядер в PTX требует явной регистрации модулей PTX через API драйвера CUDA, что обычно более громоздко, чем использование CUDA Runtime API и компилятора NVIDIA CUDA, nvcc. Проект GPU Ocelot предоставил API для регистрации модулей PTX вместе с вызовами ядра CUDA Runtime API, хотя GPU Ocelot больше не поддерживается активно.[6]
Смотрите также
Рекомендации
- ^ "Руководство пользователя серверной части NVPTX - документация LLVM 7". llvm.org.
- ^ «Бинарные утилиты CUDA». docs.nvidia.com. Получено 2019-10-19.
- ^ "nvptx". GCC Wiki.
- ^ «Встроенная сборка PTX на CUDA». docs.nvidia.com. Получено 2019-11-03.
- ^ а б "PTX ISA версии 2.3" (PDF).
- ^ «GPUOCelot: платформа динамической компиляции для PTX». github.com.
внешняя ссылка
- PTX ISA версии 1.4 NVIDIA, 31 марта 2009 г.
- PTX ISA версии 2.3 NVIDIA, 03.11.2011
- PTX ISA версии 3.2 NVIDIA, 19.07.2013
- PTX ISA версии 4.0 NVIDIA, 12 апреля 2014 г.
- PTX ISA версии 4.3 NVIDIA, 15 августа 2015 г.
- PTX ISA версии 5.0 NVIDIA, 2017-06-xx
- PTX ISA версии 6.0 NVIDIA, 2017-09-xx
- PTX ISA версии 6.1 NVIDIA, 2018-03-xx
- PTX ISA версии 6.2 NVIDIA, 2018-08-xx
- PTX ISA версии 6.3 NVIDIA, 2018-10-xx
- PTX ISA версии 6.4 NVIDIA, 2019-08-xx
- PTX ISA версии 6.5 NVIDIA, 2019-11-xx
- PTX ISA версии 7.0 NVIDIA, 2020-05-xx
- PTX ISA версии 7.1 NVIDIA, 2020-09-xx
- Страница PTX ISA в NVIDIA Developer Zone