Параллельная вычислительная платформа и модель программирования
В вычислительной технике CUDA ( первоначально Compute Unified Device Architecture ) — это запатентованная [1] платформа параллельных вычислений и интерфейс прикладного программирования (API), который позволяет программному обеспечению использовать определенные типы графических процессоров (GPU) для ускоренной обработки общего назначения, подход, называемый вычислениями общего назначения на GPU ( GPGPU ). API CUDA и его среда выполнения: API CUDA — это расширение языка программирования C , которое добавляет возможность указывать параллелизм на уровне потоков в C, а также указывать операции, специфичные для устройства GPU (например, перемещение данных между CPU и GPU). [2] CUDA — это программный уровень, который предоставляет прямой доступ к набору виртуальных инструкций GPU и параллельным вычислительным элементам для выполнения вычислительных ядер . [3] Помимо драйверов и ядер среды выполнения, платформа CUDA включает в себя компиляторы, библиотеки и инструменты разработчика, которые помогают программистам ускорять свои приложения.
CUDA предназначена для работы с такими языками программирования, как C , C++ , Fortran и Python . Эта доступность упрощает специалистам по параллельному программированию использование ресурсов GPU, в отличие от предыдущих API, таких как Direct3D и OpenGL , которые требовали продвинутых навыков в графическом программировании. [4] Графические процессоры на базе CUDA также поддерживают программные фреймворки, такие как OpenMP , OpenACC и OpenCL . [5] [3]
CUDA была создана компанией Nvidia в 2006 году. [6] Когда она была впервые представлена, ее название было аббревиатурой от Compute Unified Device Architecture, [7] но позже Nvidia отказалась от общепринятого использования этой аббревиатуры и теперь редко ее расширяет. [8]
Ян Бак, работая в Стэнфорде в 2000 году, создал 8K-игровую установку с использованием 32 видеокарт GeForce, затем получил грант DARPA на выполнение параллельного программирования общего назначения на графических процессорах . Затем он присоединился к Nvidia, где с 2004 года курировал разработку CUDA. Продвигая CUDA, Дженсен Хуанг стремился сделать графические процессоры Nvidia общим оборудованием для научных вычислений. CUDA была выпущена в 2006 году. Около 2015 года фокус CUDA переключился на нейронные сети. [9]
Онтология
В следующей таблице представлено неточное описание онтологии фреймворка CUDA.
Способности программирования
Платформа CUDA доступна разработчикам программного обеспечения через библиотеки с ускорением CUDA, директивы компилятора , такие как OpenACC , и расширения стандартных языков программирования, включая C , C++ , Fortran и Python . Программисты C/C++ могут использовать «CUDA C/C++», скомпилированный в PTX с помощью nvcc , компилятора C/C++ на основе LLVM от Nvidia , или непосредственно с помощью clang. [10] Программисты Fortran могут использовать «CUDA Fortran», скомпилированный с помощью компилятора PGI CUDA Fortran от The Portland Group . [ требуется обновление ] Программисты Python могут использовать библиотеку cuNumeric для ускорения приложений на графических процессорах Nvidia.
Помимо библиотек, директив компилятора, CUDA C/C++ и CUDA Fortran, платформа CUDA поддерживает другие вычислительные интерфейсы, включая OpenCL от Khronos Group , [11] DirectCompute от Microsoft , OpenGL Compute Shader и C++ AMP . [12] Также доступны сторонние оболочки для Python , Perl , Fortran, Java , Ruby , Lua , Common Lisp , Haskell , R , MATLAB , IDL , Julia и встроенная поддержка в Mathematica .
В индустрии компьютерных игр графические процессоры используются для графического рендеринга и для расчетов игровой физики (физические эффекты, такие как мусор, дым, огонь, жидкости); примерами являются PhysX и Bullet . CUDA также использовалась для ускорения неграфических приложений в вычислительной биологии , криптографии и других областях на порядок или больше. [13] [14] [15] [16] [17]
CUDA предоставляет как API низкого уровня (CUDA Driver API, не с одним источником), так и API более высокого уровня (CUDA Runtime API, с одним источником). Первоначальный CUDA SDK был опубликован 15 февраля 2007 года для Microsoft Windows и Linux . Поддержка Mac OS X была позже добавлена в версии 2.0, [18] которая заменяет бета-версию, выпущенную 14 февраля 2008 года. [19] CUDA работает со всеми графическими процессорами Nvidia, начиная с серии G8x, включая GeForce , Quadro и линейку Tesla . CUDA совместима с большинством стандартных операционных систем.
CUDA 8.0 поставляется со следующими библиотеками (для компиляции и выполнения, в алфавитном порядке):
cuBLAS – библиотека подпрограмм базовой линейной алгебры CUDA
CUDART – библиотека времени выполнения CUDA
cuFFT – библиотека быстрого преобразования Фурье CUDA
cuRAND – библиотека генерации случайных чисел CUDA
cuSOLVER – коллекция плотных и разреженных прямых решателей на основе CUDA
cuSPARSE — библиотека разреженных матриц CUDA
NPP – библиотека примитивов производительности NVIDIA
nvGRAPH – библиотека NVIDIA Graph Analytics
NVML – библиотека управления NVIDIA
NVRTC – библиотека компиляции среды выполнения NVIDIA для CUDA C++
CUDA 8.0 поставляется со следующими программными компонентами:
nView – программное обеспечение NVIDIA nView для управления рабочим столом
NVWMI – набор инструментов NVIDIA Enterprise Management
GameWorks PhysX – это многоплатформенный игровой физический движок
CUDA 9.0–9.2 поставляется со следующими другими компонентами:
CUDA имеет ряд преимуществ по сравнению с традиционными вычислениями общего назначения на графических процессорах (GPGPU) с использованием графических API:
Рассеянное чтение — код может считывать данные с произвольных адресов в памяти.
Унифицированная виртуальная память (CUDA 4.0 и выше)
Унифицированная память (CUDA 6.0 и выше)
Общая память – CUDA предоставляет быстрый регион общей памяти, который может быть общим для потоков. Это может быть использовано как управляемый пользователем кэш, что обеспечивает более высокую пропускную способность, чем при использовании поиска текстур. [24]
Более быстрая загрузка и обратная передача данных в графический процессор и обратно
Полная поддержка целочисленных и побитовых операций, включая целочисленный поиск текстур
Ограничения
Будь то для хост-компьютера или устройства GPU, весь исходный код CUDA теперь обрабатывается в соответствии с правилами синтаксиса C++. [25] Так было не всегда. Более ранние версии CUDA были основаны на правилах синтаксиса C. [26] Как и в более общем случае компиляции кода C с помощью компилятора C++, возможно, что старый исходный код CUDA в стиле C либо не будет компилироваться, либо будет вести себя не так, как изначально предполагалось.
Взаимодействие с языками рендеринга, такими как OpenGL, является односторонним: OpenGL имеет доступ к зарегистрированной памяти CUDA, но CUDA не имеет доступа к памяти OpenGL.
Копирование между памятью хоста и устройства может привести к снижению производительности из-за пропускной способности системной шины и задержек (эту проблему можно частично компенсировать с помощью асинхронной передачи данных памяти, обрабатываемой механизмом прямого доступа к памяти графического процессора).
Потоки должны работать группами не менее 32 для лучшей производительности, при этом общее количество потоков должно исчисляться тысячами. Ветви в программном коде не оказывают существенного влияния на производительность, при условии, что каждый из 32 потоков следует одному и тому же пути выполнения; модель выполнения SIMD становится существенным ограничением для любой изначально расходящейся задачи (например, прохождение структуры данных разбиения пространства во время трассировки лучей ).
Для современных версий функции эмуляции или отката недоступны.
Допустимый C++ иногда может быть помечен и помешать компиляции из-за способа, которым компилятор подходит к оптимизации с учетом ограничений целевого устройства GPU. [ необходима ссылка ]
В одинарной точности на устройствах CUDA compute capabilities 1.x первого поколения ненормальные числа не поддерживаются и вместо этого сбрасываются в ноль, а точность операций деления и квадратного корня немного ниже, чем у математики одинарной точности, соответствующей IEEE 754. Устройства, поддерживающие compute capabilities 2.0 и выше, поддерживают ненормальные числа, а операции деления и квадратного корня по умолчанию соответствуют IEEE 754. Однако пользователи могут получить более быструю игровую математику устройств compute capabilities 1.x, если это необходимо, установив флаги компилятора для отключения точных делений и точных квадратных корней, а также для сброса ненормальных чисел в ноль. [27]
В отличие от OpenCL , графические процессоры с поддержкой CUDA доступны только от Nvidia, поскольку это проприетарная технология. [28] [1] Попытки реализовать CUDA на других графических процессорах включают:
Проект Coriander: Преобразует исходный код CUDA C++11 в OpenCL 1.2 C. Форк CUDA-on-CL, предназначенный для запуска TensorFlow . [29] [30] [31]
CU2CL: Преобразование CUDA 3.2 C++ в OpenCL C. [32]
GPUOpen HIP: Тонкий уровень абстракции поверх CUDA и ROCm, предназначенный для графических процессоров AMD и Nvidia. Имеет инструмент конвертации для импорта исходного кода CUDA C++. Поддерживает CUDA 4.0 плюс C++11 и float16.
ZLUDA — это готовая замена CUDA на графических процессорах AMD и ранее на графических процессорах Intel с производительностью, близкой к родной. [33] Разработчик Анджей Яник был отдельно нанят Intel и AMD для разработки программного обеспечения в 2021 и 2022 годах соответственно. Однако ни одна из компаний не решила выпустить его официально из-за отсутствия бизнес-кейса. Контракт AMD включал пункт, который позволял Янику выпускать свой код для AMD независимо, что позволяло ему выпустить новую версию, которая поддерживает только графические процессоры AMD. [34]
chipStar может компилировать и запускать программы CUDA/HIP на продвинутых платформах OpenCL 3.0 или Level Zero. [35]
Пример
Этот пример кода на языке C++ загружает текстуру из изображения в массив на графическом процессоре:
Ниже приведен пример на Python , который вычисляет произведение двух массивов на GPU. Неофициальные привязки языка Python можно получить из PyCUDA . [36]
импортировать pycuda.compiler как comp импортировать pycuda.driver как drv импортировать numpy импортировать pycuda.autoinitmod = comp . SourceModule ( """ __global__ void multiply_them(float *dest, float *a, float *b) { const int i = threadIdx.x; dest[i] = a[i] * b[i]; } """ )умножить_их = mod . get_function ( "умножить_их" )a = numpy.random.randn ( 400 ) .astype ( numpy.float32 ) b = numpy.random.randn ( 400 ) .astype ( numpy.float32 )dest = numpy.zeros_like ( a ) multiply_them ( drv.Out ( dest ) , drv.In ( a ) , drv.In ( b ) , блок = ( 400 , 1 , 1 ) )распечатать ( назначение - a * b )
Дополнительные привязки Python для упрощения операций умножения матриц можно найти в программе pycublas . [37]
импорт numpy из pycublas импорт CUBLASMatrixA = CUBLASMatrix ( numpy . mat ( [ [ 1 , 2 , 3 ], [ 4 , 5 , 6 ]], numpy . float32 )) B = CUBLASMatrix ( numpy . mat ( [ [ 2 , 3 ], [ 4 , 5 ], [ 6 , 7 ]], numpy . float32 )) C = A * B print ( C . np_mat ())
в то время как CuPy напрямую заменяет NumPy: [38]
импортировать cupya = cupy.random.randn ( 400 ) b = cupy.random.randn ( 400 )dest = cupy.zeros_like ( a )распечатать ( назначение - a * b )
Поддерживаемые графические процессоры
Поддерживаемые версии CUDA Compute Capability для версии CUDA SDK и микроархитектуры (по кодовому имени):
Примечание: CUDA SDK 10.2 — последний официальный релиз для macOS, поскольку в более новых версиях поддержка macOS будет недоступна.
Возможности вычислений CUDA по версиям с соответствующими полупроводниками GPU и моделями карт GPU (разделенными по различным областям применения):
'*' – только OEM -продукты
Особенности и характеристики версии
[58]
Типы данных
Примечание: любые пропущенные строки или пустые записи отражают некоторую нехватку информации по данному конкретному пункту. [59]
Тензорные ядра
Примечание: любые пропущенные строки или пустые записи отражают некоторую нехватку информации по данному конкретному пункту. [62] [63] [64] [65] [66] [67]
[75] [76] [77] [78]
Технические характеристики
[89]
[90]
Многопроцессорная архитектура
[119]
Для получения дополнительной информации прочтите руководство по программированию Nvidia CUDA. [120]
CUDA конкурирует с другими вычислительными стеками GPU: Intel OneAPI и AMD ROCm .
В то время как CUDA от Nvidia имеет закрытый исходный код, OneAPI от Intel и ROCm от AMD имеют открытый исходный код.
Intel OneAPI
oneAPI — это инициатива, основанная на открытых стандартах, созданная для поддержки разработки программного обеспечения для различных аппаратных архитектур. [123] Библиотеки oneAPI должны реализовывать открытые спецификации, которые публично обсуждаются специальными группами по интересам, предоставляя возможность любому разработчику или организации реализовывать собственные версии библиотек oneAPI. [124] [125]
Первоначально это решение было разработано компанией Intel, но другими его последователями стали Fujitsu и Huawei.
Единый фонд ускорения (UXL)
Unified Acceleration Foundation (UXL) — это новый технологический консорциум, работающий над продолжением инициативы OneAPI, с целью создания новой экосистемы программного обеспечения ускорителей с открытым стандартом, связанных с ней открытых стандартов и проектов спецификаций через рабочие группы и специальные группы интересов (SIG). Цель состоит в том, чтобы предложить открытые альтернативы CUDA от Nvidia. Основными компаниями, стоящими за этим, являются Intel, Google, ARM, Qualcomm, Samsung, Imagination и VMware. [126]
SYCL – открытый стандарт от Khronos Group для программирования различных платформ, включая графические процессоры, с использованием современного C++ с одним исходным кодом , аналогичного высокоуровневому CUDA Runtime API ( с одним исходным кодом )
BrookGPU – компилятор графической группы Стэнфордского университета
^ "Домашняя страница Nvidia CUDA". 18 июля 2017 г.
^ Шимпи, Ананд Лал; Уилсон, Дерек (8 ноября 2006 г.). "Nvidia GeForce 8800 (G80): графические процессоры, переработанные для DirectX 10". AnandTech . Получено 16 мая 2015 г. .
^ Демонстрация DirectCompute Ocean, запущенная на графическом процессоре Nvidia с поддержкой CUDA на YouTube
^ Василиадис, Гиоргос; Антонатос, Спирос; Полихронакис, Михалис; Маркатос, Евангелос П.; Иоаннидис, Сотирис (сентябрь 2008 г.). "Gnort: Высокопроизводительное обнаружение вторжений в сеть с использованием графических процессоров" (PDF) . Последние достижения в обнаружении вторжений . Конспект лекций по информатике. Том 5230. С. 116–134. doi :10.1007/978-3-540-87403-4_7. ISBN978-3-540-87402-7.
^ Schatz, Michael C.; Trapnell, Cole; Delcher, Arthur L.; Varshney, Amitabh (2007). "Высокопроизводительное выравнивание последовательностей с использованием графических процессоров". BMC Bioinformatics . 8 : 474. doi : 10.1186/1471-2105-8-474 . PMC 2222658. PMID 18070356 .
^ Manavski, Svetlin A.; Giorgio, Valle (2008). «CUDA-совместимые графические карты как эффективные аппаратные ускорители для выравнивания последовательностей Смита-Уотермана». BMC Bioinformatics . 10 (Suppl 2): S10. doi : 10.1186/1471-2105-9-S2-S10 . PMC 2323659 . PMID 18387198.
^ «Пирит – Google Code».
^ "Используйте графический процессор Nvidia для научных вычислений". BOINC. 2008-12-18. Архивировано из оригинала 2008-12-28 . Получено 2017-08-08 .
^ "Nvidia CUDA Software Development Kit (CUDA SDK) – Release Notes Version 2.0 for MAC OS X". Архивировано из оригинала 2009-01-06.
^ "CUDA 1.1 – Теперь на Mac OS X". 14 февраля 2008 г. Архивировано из оригинала 22 ноября 2008 г.
^ «Раскрыты возможности CUDA 11». 14 мая 2020 г.
^ «CUDA Toolkit 11.1 представляет поддержку графических процессоров серий GeForce RTX 30 и Quadro RTX». 23 сентября 2020 г.
^ «Улучшение распределения памяти с новыми функциями NVIDIA CUDA 11.2». 16 декабря 2020 г.
^ «Изучение новых возможностей CUDA 11.3». 16 апреля 2021 г.
^ Зильберштейн, Марк; Шустер, Ассаф ; Гейгер, Дэн; Патни, Анжул; Оуэнс, Джон Д. (2008). "Эффективное вычисление сумм-произведений на графических процессорах с помощью программно-управляемого кэша" (PDF) . Труды 22-й ежегодной международной конференции по суперкомпьютерам – ICS '08 (PDF) . Труды 22-й ежегодной международной конференции по суперкомпьютерам – ICS '08. стр. 309–318. doi :10.1145/1375527.1375572. ISBN978-1-60558-158-3.
^ "CUDA C Programming Guide v8.0" (PDF) . nVidia Developer Zone . Январь 2017 г. стр. 19 . Получено 22 марта 2017 г. .
^ "NVCC заставляет компилировать файлы .cu на C++". 29 ноября 2011 г.
^ Уайтхед, Натан; Фит-Флореа, Алекс. «Точность и производительность: плавающая точка и соответствие IEEE 754 для графических процессоров Nvidia» (PDF) . Nvidia . Получено 18 ноября 2014 г. .
^ "CUDA-Enabled Products". CUDA Zone . Nvidia Corporation . Получено 2008-11-03 .
^ «Проект Coriander: Компиляция кодов CUDA в OpenCL, запуск везде». Phoronix.
^ Перкинс, Хью (2017). "cuda-on-cl" (PDF) . IWOCL . Получено 8 августа 2017 г.
^ "hughperkins/coriander: Сборка кода NVIDIA® CUDA™ для устройств OpenCL™ 1.2". GitHub. 6 мая 2019 г.
^ Ларабель, Майкл (2024-02-12), «AMD тихо профинансировала внедрение Drop-In CUDA на основе ROCm: теперь оно с открытым исходным кодом», Phoronix , получено 2024-02-12
^ "pycublas". Архивировано из оригинала 2009-04-20 . Получено 2017-08-08 .
^ "CuPy" . Получено 2020-01-08 .
^ "Руководство по программированию NVIDIA CUDA. Версия 1.0" (PDF) . 23 июня 2007 г.
^ "Руководство по программированию NVIDIA CUDA. Версия 2.1" (PDF) . 8 декабря 2008 г.
^ "Руководство по программированию NVIDIA CUDA. Версия 2.2" (PDF) . 2 апреля 2009 г.
^ "Руководство по программированию NVIDIA CUDA. Версия 2.2.1" (PDF) . 26 мая 2009 г.
^ "Руководство по программированию NVIDIA CUDA. Версия 2.3.1" (PDF) . 26 августа 2009 г.
^ "Руководство по программированию NVIDIA CUDA. Версия 3.0" (PDF) . 20 февраля 2010 г.
^ "Руководство по программированию NVIDIA CUDA C. Версия 3.1.1" (PDF) . 21 июля 2010 г.
^ "Руководство по программированию NVIDIA CUDA C. Версия 3.2" (PDF) . 9 ноября 2010 г.
^ "CUDA 11.0 Release Notes". Разработчик NVIDIA .
^ "CUDA 11.1 Release Notes". Разработчик NVIDIA .
^ "CUDA 11.5 Release Notes". Разработчик NVIDIA .
^ "CUDA 11.8 Release Notes". Разработчик NVIDIA .
^ "NVIDIA Quadro NVS 420 Specs". База данных графических процессоров TechPowerUp . 25 августа 2023 г.
^ Ларабель, Майкл (29 марта 2017 г.). «NVIDIA выпускает поддержку графического процессора Tegra X2 в Nouveau». Phoronix . Получено 8 августа 2017 г.
^ Характеристики Nvidia Xavier на TechPowerUp (предварительные)
^ «Добро пожаловать — Jetson Linux Developer Guide 34.1 документация».
^ «NVIDIA обеспечивает поддержку графического процессора Volta с открытым исходным кодом для своей системы на кристалле Xavier».
^ «Архитектура NVIDIA Ады Лавлейс».
^ Анализ архитектуры графического процессора Turing с помощью микробенчмаркинга
^ "H.1. Характеристики и технические характеристики – Таблица 13. Поддержка функций на вычислительную мощность". docs.nvidia.com . Получено 23.09.2020 .
^ «Руководство по программированию CUDA C++».
^ Fused-Multiply-Add, фактически выполнено, Dense Matrix
^ как SASS с версии 7.5, как PTX с версии 8.0
^ «Техническое описание. Серия NVIDIA Jetson AGX Orin» (PDF) . nvidia.com . Проверено 5 сентября 2023 г.
^ "Архитектура графического процессора NVIDIA Ampere GA102" (PDF) . nvidia.com . Получено 5 сентября 2023 г. .
^ Луо, Вейле; Фан, Руибо; Ли, Зею; Ду, Дайю; Ван, Цян; Чу, Сяовэнь (2024). «Сравнительный анализ и анализ архитектуры графического процессора Nvidia Hopper». arXiv : 2402.13499v1 [cs.AR].
^ "Datasheet NVIDIA A40" (PDF) . nvidia.com . Получено 27 апреля 2024 г. .
^ "АРХИТЕКТУРА ГРАФИЧЕСКОГО ПРОЦЕССОРА NVIDIA AMPERE GA102" (PDF) . 27 апреля 2024 г.
^ "Технический паспорт NVIDIA L40" (PDF) . 27 апреля 2024 г.
^ В Whitepapers кубические диаграммы Tensor Core представляют ширину единицы скалярного произведения в высоту (4 FP16 для Volta и Turing, 8 FP16 для A100, 4 FP16 для GA102, 16 FP16 для GH100). Два других измерения представляют количество единиц скалярного произведения (4x4 = 16 для Volta и Turing, 8x4 = 32 для Ampere и Hopper). Результирующие серые блоки представляют собой операции FMA FP16 за цикл. Pascal без ядра Tensor показан только для сравнения скорости, как и Volta V100 с типами данных, отличными от FP16.
^ "Техническая документация по архитектуре NVIDIA Turing" (PDF) . nvidia.com . Получено 5 сентября 2023 г. .
^ "NVIDIA Tensor Core GPU" (PDF) . nvidia.com . Получено 5 сентября 2023 г. .
^ «Подробный обзор архитектуры NVIDIA Hopper». 22 марта 2022 г.
^ форма x размер преобразованного операнда, например, 2 тензорных ядра x 4x4x4xFP16/цикл = 256 байт/цикл
^ = продукт первых 3 строк таблицы
^ = произведение двух предыдущих строк таблицы; форма: например, 8x8x4xFP16 = 512 байт
^ Сан, Вэй; Ли, Энг; Гэн, Тонг; Штуйк, Сандер; Корпорал, Хенк (2023). «Раскрытие тензорных ядер с помощью микротестов: задержка, пропускная способность и числовые характеристики». Труды IEEE по параллельным и распределенным системам . 34 (1): 246–261. arXiv : 2206.02874 . doi : 10.1109/tpds.2022.3217824. S2CID 249431357.
^ «Параллельное выполнение потоков ISA версии 7.7».
^ Берджесс, Джон (2019). «RTX ON – NVIDIA TURING GPU». Симпозиум IEEE Hot Chips 31 (HCS) 2019 г. стр. 1–27. doi :10.1109/HOTCHIPS.2019.8875651. ISBN978-1-7281-2089-8. S2CID 204822166.
^ Берджесс, Джон (2019). «RTX ON – NVIDIA TURING GPU». Симпозиум IEEE Hot Chips 31 (HCS) 2019 г. стр. 1–27. doi :10.1109/HOTCHIPS.2019.8875651. ISBN978-1-7281-2089-8. S2CID 204822166.
^ H.1. Характеристики и технические характеристики – Таблица 14. Технические характеристики по вычислительным возможностям
^ Подробное описание архитектуры NVIDIA Hopper
^ может выполнять только 160 целочисленных инструкций согласно руководству по программированию
^ 128 согласно [1]. 64 из FP32 + 64 отдельных единиц?
^ 64 ядрами FP32 и 64 гибкими ядрами FP32/INT.
^ «Руководство по программированию CUDA C++».
^ 32 полосы FP32 объединяются в 16 полос FP64. Может быть меньше в зависимости от модели.
^ поддерживается только 16 полосами FP32, они объединяются в 4 полосы FP64
^ abcdef в зависимости от модели
^ Эффективная скорость, вероятно, через порты FP32. Нет описания реальных ядер FP64.
^ Может также использоваться для сложения и сравнения целых чисел.
^ 2 такта/инструкция для каждого раздела SM Берджесс, Джон (2019). "RTX ON – The NVIDIA TURING GPU". Симпозиум IEEE Hot Chips 31 (HCS) 2019 г. стр. 1–27. doi :10.1109/HOTCHIPS.2019.8875651. ISBN 978-1-7281-2089-8. S2CID 204822166.
^ Дюрант, Люк; Жиру, Оливье; Харрис, Марк; Стэм, Ник (10 мая 2017 г.). «Внутри Volta: самый передовой в мире графический процессор для центров обработки данных». Блог разработчиков Nvidia .
^ Планировщики и диспетчеры имеют выделенные исполнительные блоки в отличие от Fermi и Kepler.
^ Диспетчеризация может перекрываться одновременно, если она занимает более одного цикла (когда исполнительных блоков меньше, чем 32/SM Partition)
^ Может ли двойной выпуск труб MAD и труб SFU?
^ Не более одного планировщика могут выдавать 2 инструкции одновременно. Первый планировщик отвечает за варпы с нечетными идентификаторами. Второй планировщик отвечает за варпы с четными идентификаторами.
^ ab только общая память, без кэша данных
^ abcdef разделяемая память отделена, но L1 включает кэш текстур
^ «Демистификация микроархитектуры графического процессора посредством микробенчмаркинга» (PDF) .
^ Цзя, Чжэ; Маджиони, Марко; Штайгер, Бенджамин; Скарпацца, Даниэле П. (2018). «Анализ архитектуры графического процессора NVIDIA Volta с помощью микробенчмаркинга». arXiv : 1804.06826 [cs.DC].
^ «Анализ архитектуры графического процессора Ampere с помощью микробенчмаркинга».
^ Обратите внимание, что Цзя, Чжэ; Маджиони, Марко; Смит, Джеффри; Даниэле Паоло Скарпацца (2019). «Анализ графического процессора NVidia Turing T4 с помощью микробенчмаркинга». arXiv : 1903.07486 [cs.DC].не согласен и заявляет 2 КБ кэша инструкций L0 на раздел SM и 16 КБ кэша инструкций L1 на раздел SM
^ Цзя, Чжэ; Маджиони, Марко; Штайгер, Бенджамин; Скарпацца, Даниэле П. (2018). «Анализ архитектуры графического процессора NVIDIA Volta с помощью микробенчмаркинга». arXiv : 1804.06826 [cs.DC].
^ "Эксклюзив: Заговор с целью ослабить контроль Nvidia над ИИ, нацелившись на программное обеспечение". Reuters . Получено 2024-04-05 .
^ "Вопрос: Что означает ROCm? · Проблема № 1628 · RadeonOpenCompute/ROCm". Github.com . Получено 18 января 2022 г. .
Дальнейшее чтение
Бак, Ян; Фоли, Тим; Хорн, Дэниел; Шугерман, Джереми; Фатахалиан, Кейвон; Хьюстон, Майк; Ханрахан, Пэт (01.08.2004). «Brook для графических процессоров: потоковые вычисления на графическом оборудовании». ACM Transactions on Graphics . 23 (3): 777–786. doi :10.1145/1015706.1015800. ISSN 0730-0301.
Николс, Джон; Бак, Ян; Гарланд, Майкл; Скадрон, Кевин (2008-03-01). «Масштабируемое параллельное программирование с CUDA: является ли CUDA той параллельной моделью программирования, которую ждали разработчики приложений?». Очередь . 6 (2): 40–53. doi :10.1145/1365490.1365500. ISSN 1542-7730.