CUDA предназначен для работы с такими языками программирования, как C , C++ и Fortran . Эта доступность облегчает специалистам по параллельному программированию использование ресурсов графического процессора, в отличие от предыдущих API, таких как Direct3D и OpenGL , которые требовали продвинутых навыков графического программирования. [2] Графические процессоры на базе CUDA также поддерживают такие среды программирования, как OpenMP , OpenACC и OpenCL ; [3] [1] и HIP путем компиляции такого кода в CUDA.
CUDA была создана Nvidia . [4] Когда оно было впервые представлено, это название было аббревиатурой от Compute Unified Device Architecture, [5] но позже Nvidia отказалась от обычного использования этой аббревиатуры. [ когда? ]
Фон
Графический процессор (GPU) в качестве специализированного компьютерного процессора отвечает требованиям ресурсоемких задач обработки трехмерной графики высокого разрешения в реальном времени . К 2012 году графические процессоры превратились в высокопараллельные многоядерные системы, позволяющие эффективно манипулировать большими блоками данных. Эта конструкция более эффективна, чем центральный процессор (ЦП) общего назначения для алгоритмов в ситуациях, когда обработка больших блоков данных выполняется параллельно, например:
Ян Бак, находясь в Стэнфорде в 2000 году, создал игровую установку 8K с использованием 32 карт GeForce, а затем получил грант DARPA на выполнение параллельного программирования общего назначения на графических процессорах . Затем он присоединился к Nvidia, где с 2004 года курирует разработку CUDA. Продвигая CUDA, Дженсен Хуанг стремился к тому, чтобы графические процессоры Nvidia стали основным оборудованием для научных вычислений. CUDA был выпущен в 2006 году. Примерно в 2015 году фокус CUDA сместился на нейронные сети. [6]
Онтология
В следующей таблице представлено неточное описание онтологии платформы CUDA.
Способности программирования
Пример потока обработки CUDA
Копирование данных из основной памяти в память графического процессора
Ядра CUDA графического процессора выполняют ядро параллельно.
Скопируйте полученные данные из памяти графического процессора в основную память.
Платформа CUDA доступна разработчикам программного обеспечения через библиотеки с ускорением CUDA, директивы компилятора , такие как OpenACC , и расширения стандартных языков программирования, включая C , C++ и Fortran . Программисты C/C++ могут использовать «CUDA C/C++», скомпилированный в PTX с помощью nvcc , компилятора C/C++ на базе LLVM от Nvidia или самого clang. [7] Программисты на Фортране могут использовать «CUDA Fortran», скомпилированный с помощью компилятора PGI CUDA Fortran от The Portland Group . [ нужно обновить ]
Помимо библиотек, директив компилятора, CUDA C/C++ и CUDA Fortran, платформа CUDA поддерживает другие вычислительные интерфейсы, включая OpenCL от Khronos Group , [8] Microsoft DirectCompute , OpenGL Compute Shader и C++ AMP . [9] Сторонние оболочки также доступны для Python , Perl , Fortran, Java , Ruby , Lua , Common Lisp , Haskell , R , MATLAB , IDL , Julia и встроенная поддержка в Mathematica .
В индустрии компьютерных игр графические процессоры используются для рендеринга графики и для расчетов физики игр (физические эффекты, такие как мусор, дым, огонь, жидкости); примеры включают PhysX и Bullet . CUDA также использовалась для ускорения неграфических приложений в вычислительной биологии , криптографии и других областях на порядок и более. [10] [11] [12] [13] [14]
CUDA предоставляет как API низкого уровня ( API драйвера CUDA , не с одним исходным кодом), так и API более высокого уровня ( API среды выполнения CUDA , с одним исходным кодом). Первоначальный пакет CUDA SDK был обнародован 15 февраля 2007 года для Microsoft Windows и Linux . Поддержка Mac OS X была позже добавлена в версии 2.0, [15] которая заменяет бета-версию, выпущенную 14 февраля 2008 года. [16] CUDA работает со всеми графическими процессорами Nvidia, начиная с серии G8x, включая GeForce , Quadro и линейку Tesla . CUDA совместима с большинством стандартных операционных систем.
CUDA 8.0 поставляется со следующими библиотеками (для компиляции и выполнения, в алфавитном порядке):
cuBLAS — библиотека базовых подпрограмм линейной алгебры CUDA
CUDART — библиотека времени выполнения CUDA
cuFFT — библиотека быстрого преобразования Фурье CUDA
cuRAND — библиотека генерации случайных чисел CUDA
cuSOLVER — коллекция плотных и разреженных прямых решателей на основе CUDA.
cuSPARSE — библиотека разреженных матриц CUDA
NPP — библиотека NVIDIA Performance Primitives
nvGRAPH — библиотека NVIDIA Graph Analytics.
NVML — библиотека управления NVIDIA
NVRTC — библиотека компиляции среды выполнения NVIDIA для CUDA C++
CUDA 8.0 поставляется со следующими программными компонентами:
nView – программное обеспечение для управления настольными компьютерами NVIDIA nView
NVWMI — набор инструментов NVIDIA для управления предприятием
GameWorks PhysX — многоплатформенный игровой физический движок.
CUDA 9.0–9.2 поставляется со следующими компонентами:
CUTLASS 1.0 – собственные алгоритмы линейной алгебры,
Видеодекодер NVIDIA устарел в CUDA 9.2; теперь он доступен в NVIDIA Video Codec SDK.
CUDA 10 поставляется со следующими компонентами:
nvJPEG – гибридная (ЦП и ГП) обработка JPEG
CUDA 11.0–11.8 поставляется со следующими компонентами: [17] [18] [19] [20]
CUB — новая из поддерживаемых библиотек C++.
Поддержка нескольких экземпляров графического процессора MIG
CUDA имеет ряд преимуществ перед традиционными вычислениями общего назначения на графических процессорах (GPGPU) с использованием графических API:
Разбросанное чтение — код может читать из произвольных адресов в памяти.
Единая виртуальная память (CUDA 4.0 и выше)
Единая память (CUDA 6.0 и выше)
Общая память . CUDA предоставляет быструю область общей памяти, которую можно использовать совместно между потоками. Его можно использовать в качестве кэша, управляемого пользователем, обеспечивая более высокую пропускную способность, чем это возможно при использовании поиска текстур. [21]
Ускоренная загрузка и обратная связь с графическим процессором.
Полная поддержка целочисленных и побитовых операций, включая целочисленный поиск текстур.
Ограничения
Будь то главный компьютер или устройство графического процессора, весь исходный код CUDA теперь обрабатывается в соответствии с правилами синтаксиса C++. [22] Так было не всегда. Более ранние версии CUDA были основаны на правилах синтаксиса C. [23] Как и в более общем случае компиляции кода C с помощью компилятора C++, возможно, что старый исходный код CUDA в стиле C либо не скомпилируется, либо не будет вести себя так, как изначально предполагалось.
Взаимодействие с языками рендеринга, такими как OpenGL, является односторонним: OpenGL имеет доступ к зарегистрированной памяти CUDA, но CUDA не имеет доступа к памяти OpenGL.
Копирование между памятью хоста и устройства может привести к снижению производительности из-за пропускной способности системной шины и задержки (частично это можно облегчить с помощью асинхронной передачи памяти, обрабатываемой механизмом DMA графического процессора).
Для достижения наилучшей производительности потоки должны выполняться группами по меньшей мере по 32, при этом общее количество потоков исчисляется тысячами. Ветвления в программном коде существенно не влияют на производительность при условии, что каждый из 32 потоков проходит один и тот же путь выполнения; Модель выполнения SIMD становится существенным ограничением для любой по своей сути расходящейся задачи (например, перемещения структуры данных разделения пространства во время трассировки лучей ).
Для современных версий недоступна эмуляция или резервная функциональность.
Действительный C++ иногда может быть помечен и препятствовать компиляции из-за того, как компилятор подходит к оптимизации с учетом ограничений целевого графического процессора. [ нужна цитата ]
В устройствах с одинарной точностью на устройствах с вычислительными возможностями CUDA 1.x первого поколения ненормальные числа не поддерживаются и вместо этого сбрасываются до нуля, а точность операций деления и извлечения квадратного корня немного ниже, чем математические операции с одинарной точностью, соответствующие стандарту IEEE 754. Устройства, поддерживающие вычислительные возможности версии 2.0 и выше, поддерживают ненормальные числа, а операции деления и извлечения квадратного корня по умолчанию соответствуют стандарту IEEE 754. Тем не менее, при желании пользователи могут получить более быструю математику игрового уровня, чем устройства с вычислительными возможностями 1.x, установив флаги компилятора, отключающие точное деление и точные квадратные корни, а также включив сброс ненормальных чисел до нуля. [24]
В отличие от OpenCL , графические процессоры с поддержкой CUDA доступны только от Nvidia. [25] Попытки реализовать CUDA на других графических процессорах включают:
Проект Coriander: преобразует исходный код CUDA C++11 в OpenCL 1.2 C. Ответвление CUDA-on-CL, предназначенное для запуска TensorFlow . [26] [27] [28]
CU2CL: преобразование CUDA 3.2 C++ в OpenCL C. [29]
GPUOpen HIP: тонкий уровень абстракции поверх CUDA и ROCm , предназначенный для графических процессоров AMD и Nvidia. Имеет инструмент преобразования для импорта исходного кода CUDA C++. Поддерживает CUDA 4.0 плюс C++11 и float16.
ZLUDA — это замена CUDA на графических процессорах AMD и ранее графических процессорах Intel с производительностью, близкой к исходной. [30] Intel и AMD заключили с разработчиком Анджеем Яником отдельный контракт на разработку программного обеспечения в 2021 и 2022 годах соответственно. Однако ни одна из компаний не решила выпустить его официально из-за отсутствия варианта использования в бизнесе. Контракт AMD включал пункт, который позволял Янику самостоятельно выпускать свой код для AMD, что позволяло ему выпустить новую версию, поддерживающую только графические процессоры AMD. [31]
ChipStar может компилировать и запускать программы CUDA/HIP на передовых платформах OpenCL 3.0 или Level Zero. [32]
Пример
Этот пример кода на C++ загружает текстуру из изображения в массив на графическом процессоре:
текстура < float , 2 , cudaReadModeElementType > tex ;void foo () { cudaArray * cu_array ;// Выделяем массив cudaChannelFormatDesc описание = cudaCreateChannelDesc < float > (); cudaMallocArray ( & cu_array , & описание , ширина , высота );// Копируем данные изображения в массив cudaMemcpyToArray ( cu_array , image , width * height * sizeof ( float ), cudaMemcpyHostToDevice );// Устанавливаем параметры текстуры (по умолчанию) tex . AddressMode [ 0 ] = cudaAddressModeClamp ; текс . AddressMode [ 1 ] = cudaAddressModeClamp ; текс . filterMode = cudaFilterModePoint ; текс . нормализовано = ложь ; // не нормализуем координаты// Привязываем массив к текстуре cudaBindTextureToArray ( tex , cu_array );// Запускаем ядро dim3 blockDim ( 16 , 16 , 1 ); dim3gridDim ( ( ширина + blockDim.x - 1 ) /blockDim.x , ( высота + blockDim.y - 1 ) /blockDim.y,1 ) ; _ _ _ _ _ _ _ _ _ _ _ ядро <<< GridDim , BlockDim , 0 >>> ( d_data , высота , ширина );// Отвязываем массив от текстуры cudaUnbindTexture ( tex ); } //конец foo()__global__ void kernel ( float * odata , int height , int width ) { unsigned int x = blockIdx . х * блокДим . х + идентификатор потока . Икс ; беззнаковое целое число y = blockIdx . y * blockDim . y + идентификатор потока . й ; if ( x < ширина && y < высота ) { float c = tex2D ( tex , x , y ); odata [ y * ширина + x ] = c ; } }
Ниже приведен пример на Python , который вычисляет произведение двух массивов на графическом процессоре. Неофициальные привязки языка Python можно получить на PyCUDA . [33]
импортировать pycuda.compiler как comp , импортировать pycuda.driver как drv , импортировать numpy, импортировать pycuda.autoinitмод = комп . SourceModule ( """ __global__ void Multiple_them(float *dest, float *a, float *b) { const int i = threadIdx.x; dest[i] = a[i] * b[i]; } """ )умножить_их = мод . get_function ( "умножить_их" )а = число . случайный . рандн ( 400 ) . astype ( numpy . float32 ) b = numpy . случайный . рандн ( 400 ) . astype ( numpy . float32 )место = число . Zeros_like ( a ) Multiple_them ( drv.Out ( dest ) , drv.In ( a ) , drv.In ( b ) , block = ( 400 , 1 , 1 ) ) _ _печать ( адресат - a * b )
Дополнительные привязки Python для упрощения операций умножения матриц можно найти в программе pycublas . [34]
импортировать 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: [35]
импортный купиа = купи . случайный . randn ( 400 ) b = купи . случайный . рандн ( 400 )dest = купи . нули_подобно ( а )печать ( адресат - a * b )
Поддерживаемые графические процессоры
Поддерживаемые версии CUDA Compute Capability для версии CUDA SDK и микроархитектуры (по кодовому названию):
Примечание. CUDA SDK 10.2 — это последняя официальная версия для macOS, поскольку в более новых версиях поддержка macOS не будет доступна.
Поддержка SDK CUDA Toolkit для версий Visual Studio. [48]
Каждый SDK CUDA Toolkit поддерживает ряд версий компилятора для определенных операционных систем. Вот матрица CUDA Toolkit для поддержки Visual Studio:
Вычислительные возможности CUDA по версиям с соответствующими полупроводниковыми процессорами графического процессора и моделями карт графического процессора (отдельно по различным областям применения):
SYCL — открытый стандарт от Khronos Group для программирования различных платформ, включая графические процессоры, с использованием современного C++ с одним исходным кодом , аналогичный высокоуровневому API CUDA Runtime API ( с одним исходным кодом ) .
BrookGPU - компилятор графической группы Стэнфордского университета.
^ аб Аби-Чахла, Феди (18 июня 2008 г.). «CUDA от Nvidia: конец процессора?». Аппаратное обеспечение Тома . Проверено 17 мая 2015 г.
^ Зунич, Питер (24 января 2018 г.). «CUDA против OpenCL против OpenGL». Видеомейкер . Проверено 16 сентября 2018 г.
Ссылки _ Разработчик NVIDIA . 24 апреля 2013 г. Проверено 4 ноября 2019 г.
^ "Домашняя страница NVIDIA CUDA" . 18 июля 2017 г.
^ Шимпи, Ананд Лал; Уилсон, Дерек (8 ноября 2006 г.). «Nvidia GeForce 8800 (G80): графические процессоры, переработанные для DirectX 10». АнандТех . Проверено 16 мая 2015 г.
^ Витт, Стивен (27 ноября 2023 г.). «Как Nvidia Дженсена Хуанга способствует революции искусственного интеллекта». Житель Нью-Йорка . ISSN 0028-792X . Проверено 10 декабря 2023 г.
^ «Компилятор CUDA LLVM» . 7 мая 2012 г.
^ Первая демонстрация OpenCL на графическом процессоре на YouTube.
^ Демонстрация DirectCompute Ocean, работающая на графическом процессоре Nvidia CUDA, на YouTube
^ Василиадис, Гиоргос; Антонатос, Спирос; Полихронакис, Михалис; Маркатос, Евангелос П.; Иоаннидис, Сотирис (сентябрь 2008 г.). «Gnort: Высокопроизводительное обнаружение сетевых вторжений с использованием графических процессоров» (PDF) . Последние достижения в области обнаружения вторжений . Конспекты лекций по информатике. Том. 5230. стр. 116–134. дои : 10.1007/978-3-540-87403-4_7. ISBN978-3-540-87402-7.
^ «Используйте графический процессор Nvidia для научных вычислений» . БОИНК. 18 декабря 2008 г. Архивировано из оригинала 28 декабря 2008 г. Проверено 8 августа 2017 г.
^ «Комплект разработки программного обеспечения Nvidia CUDA (CUDA SDK) – примечания к выпуску версии 2.0 для MAC OS X» . Архивировано из оригинала 6 января 2009 г.
^ «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. дои : 10.1145/1375527.1375572. ISBN978-1-60558-158-3.
^ «Руководство по программированию на CUDA C, версия 8.0» (PDF) . Зона разработчиков nVidia . Январь 2017. с. 19 . Проверено 22 марта 2017 г.
^ «NVCC принудительно компилирует C++ файлов .cu» . 29 ноября 2011 г.
^ Уайтхед, Натан; Фит-Флоря, Алекс. «Точность и производительность: числа с плавающей запятой и соответствие стандарту IEEE 754 для графических процессоров Nvidia» (PDF) . Нвидиа . Проверено 18 ноября 2014 г.
^ «Продукты с поддержкой CUDA» . Зона КУДА . Корпорация Нвидиа . Проверено 3 ноября 2008 г.
^ «Проект Coriander: компилируйте коды CUDA в OpenCL, запускайте повсюду» . Фороникс.
^ Перкинс, Хью (2017). «куда-он-кл» (PDF) . ИВОКЛ . Проверено 8 августа 2017 г.
^ «hughperkins/coriander: Создайте код NVIDIA® CUDA™ для устройств OpenCL™ 1.2» . Гитхаб. 6 мая 2019 г.
^ Ларабель, Майкл (12 февраля 2024 г.), «AMD незаметно профинансировала внешнюю реализацию CUDA, основанную на ROCm: теперь это открытый исходный код», Phoronix , получено 12 февраля 2024 г.
Ссылки _ Архивировано из оригинала 20 апреля 2009 г. Проверено 8 августа 2017 г.
^ "КуПи" . Проверено 8 января 2020 г.
^ «Руководство по программированию 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» . Разработчик NVIDIA .
^ «Примечания к выпуску CUDA 11.1» . Разработчик NVIDIA .
^ «Примечания к выпуску CUDA 11.5» . Разработчик NVIDIA .
^ «Примечания к выпуску CUDA 11.8» . Разработчик NVIDIA .
^ "Архив набора инструментов NVIDIA CUDA" . 28 февраля 2024 г.
^ «Характеристики NVIDIA Quadro NVS 420» . База данных графических процессоров TechPowerUp . 25 августа 2023 г.
↑ Ларабель, Майкл (29 марта 2017 г.). «NVIDIA внедряет поддержку графического процессора Tegra X2 в версии Nouveau» . Фороникс . Проверено 8 августа 2017 г.
^ Спецификации Nvidia Xavier на TechPowerUp (предварительные)
^ «NVIDIA представляет поддержку графического процессора Volta с открытым исходным кодом для своей SoC Xavier» .
^ "Архитектура NVIDIA Ады Лавлейс" .
^ Анализ архитектуры графического процессора Тьюринга с помощью микробенчмаркинга
^ «H.1. Функции и технические характеристики - Таблица 13. Поддержка функций в зависимости от вычислительной мощности» . docs.nvidia.com . Проверено 23 сентября 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 г.
^ В технических документах диаграммы куба Tensor Core представляют ширину единицы скалярного произведения в высоту (4 FP16 для Volta и Turing, 8 FP16 для A100, 4 FP16 для GA102, 16 FP16 для GH100). Два других измерения представляют количество единиц скалярного произведения (4x4 = 16 для Вольты и Тьюринга, 8x4 = 32 для Ампера и Хоппера). Полученные серые блоки представляют собой операции FMA FP16 за цикл. Pascal без ядра Tensor показан только для сравнения скорости, как и Volta V100 с типами данных, отличными от FP16.
^ «Информационный документ по архитектуре NVIDIA Turing» (PDF) . nvidia.com . Проверено 5 сентября 2023 г.
^ «Графический процессор NVIDIA с тензорным ядром» (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 . дои : 10.1109/tpds.2022.3217824. S2CID 249431357.
^ «Выполнение параллельного потока ISA версии 7.7» .
^ Райхан, доктор медицины Аамир; Голи, Негар; Аамодт, Тор (2018). «Моделирование графических процессоров с поддержкой ускорителя глубокого обучения». arXiv : 1811.08309 [cs.MS].
^ "Архитектура NVIDIA Ады Лавлейс" .
^ форма x преобразованный размер операнда, например, 2 тензорных ядра x 4x4x4xFP16/цикл = 256 байт/цикл
^ = продукт в первых 3 строках таблицы
^ = произведение двух предыдущих строк таблицы; форма: например, 8x8x4xFP16 = 512 байт
^ Берджесс, Джон (2019). «RTX ON – графический процессор NVIDIA TURING». 31-й симпозиум IEEE Hot Chips 2019 (HCS) . стр. 1–27. дои : 10.1109/HOTCHIPS.2019.8875651. ISBN978-1-7281-2089-8. S2CID 204822166.
^ зависит от устройства
^ "Тегра X1". 9 января 2015 г.
^ Архитектура графического процессора NVIDIA H100 с тензорным ядром
^ Ч.1. Функции и технические характеристики. Таблица 14. Технические характеристики по вычислительным возможностям.
^ Подробное описание архитектуры NVIDIA Hopper
^ может выполнять только 160 целочисленных инструкций согласно руководству по программированию.
^ 128 по данным [1]. 64 от ФП32 + 64 отдельных блока?
^ 64 ядрами FP32 и 64 гибкими ядрами FP32/INT.
^ «Руководство по программированию CUDA C++» .
^ 32 полосы FP32 объединяются в 16 полос FP64. Возможно, ниже в зависимости от модели.
^ поддерживается только 16 полосами FP32, они объединяются в 4 полосы FP64.
^ abcdef в зависимости от модели
^ Эффективная скорость, вероятно, через порты FP32. Нет описания реальных ядер FP64.
^ Также может использоваться для сложения и сравнения целых чисел.
^ 2 такта/инструкция для каждого раздела SM Берджесс, Джон (2019). «RTX ON – графический процессор NVIDIA TURING». 31-й симпозиум IEEE Hot Chips 2019 (HCS) . стр. 1–27. дои : 10.1109/HOTCHIPS.2019.8875651. ISBN 978-1-7281-2089-8. S2CID 204822166.
^ Дюрант, Люк; Жиру, Оливье; Харрис, Марк; Стэм, Ник (10 мая 2017 г.). «Внутри Volta: самый совершенный в мире графический процессор для центров обработки данных». Блог разработчиков NVIDIA .
^ Планировщики и диспетчеры имеют отдельные исполнительные блоки, в отличие от Ферми и Кеплера.
^ Диспетчеризация может перекрываться одновременно, если это занимает более одного цикла (когда количество исполнительных блоков меньше, чем 32/SM Partition)
^ Возможна двойная выпуск трубы MAD и трубы SFU.
^ Не более одного планировщика может выдать 2 инструкции одновременно. Первый планировщик отвечает за варпы с нечетными идентификаторами. Второй планировщик отвечает за варпы с четными ID.
^ ab только общая память, без кэша данных
^ общая память abcdef отдельная, но L1 включает в себя кэш текстур
^ «H.6.1. Архитектура». docs.nvidia.com . Проверено 13 мая 2019 г.
^ «Демистификация микроархитектуры графического процессора посредством микробенчмаркинга» (PDF) .
^ Цзя, Чжэ; Маджиони, Марко; Штайгер, Бенджамин; Скарпацца, Даниэле П. (2018). «Анализ архитектуры графического процессора NVIDIA Volta с помощью микробенчмаркинга». arXiv : 1804.06826 [cs.DC].
^ «Анализ архитектуры графического процессора Ampere посредством микробенчмаркинга» .
^ Обратите внимание, что Цзя, Чжэ; Маджиони, Марко; Смит, Джеффри; Даниэле Паоло Скарпацца (2019). «Анализ графического процессора NVidia Turing T4 с помощью микробенчмаркинга». arXiv : 1903.07486 [cs.DC].не согласен и заявляет, что кэш инструкций L0 составляет 2 КБ на раздел SM и кэш инструкций L1 16 КБ на SM.
^ Цзя, Чжэ; Маджиони, Марко; Штайгер, Бенджамин; Скарпацца, Даниэле П. (2018). «Анализ архитектуры графического процессора NVIDIA Volta с помощью микробенчмаркинга». arXiv : 1804.06826 [cs.DC].
^ «I.7. Вычислительные возможности 8.x» . docs.nvidia.com . Проверено 12 октября 2022 г.
^ «Приложение F. Характеристики и технические характеристики» (PDF) .(3,2 МБ) , стр. 148 из 175 (версия 5.0, октябрь 2012 г.).
^ «Биоинформатика nVidia CUDA: BarraCUDA» . БиоЦентрик . 19 июля 2019 г. Проверено 15 октября 2019 г.
^ «Часть V: Физическое моделирование». Разработчик NVIDIA . Проверено 11 сентября 2020 г.
дальнейшее чтение
Бак, Ян; Фоули, Тим; Хорн, Дэниел; Шугерман, Джереми; Фатахалян, Кайвон; Хьюстон, Майк; Ханрахан, Пэт (1 августа 2004 г.). «Брук для графических процессоров: потоковые вычисления на графическом оборудовании». Транзакции ACM с графикой . 23 (3): 777–786. дои : 10.1145/1015706.1015800. ISSN 0730-0301.
Николлс, Джон; Бак, Ян; Гарланд, Майкл; Скадрон, Кевин (01 марта 2008 г.). «Масштабируемое параллельное программирование с помощью CUDA: является ли CUDA той моделью параллельного программирования, которую ждали разработчики приложений?». Очередь . 6 (2): 40–53. дои : 10.1145/1365490.1365500. ISSN 1542-7730.