Высокий уровень абстракции и совместимость с будущим. NVIDIA представила CUDA Tile — новую парадигму программирования GPU
NewsMakerНовый уровень абстракции обещает упрощение жизни, однако SIMT остаётся рядом и выбор подхода зависит от ваших задач.
NVIDIA объявила о крупнейшем обновлении платформы CUDA с момента её появления в 2006 году. Вместе с CUDA 13.1 компания запускает CUDA Tile новый подход к программированию GPU, основанный на блочной, или tile, модели. Главное в этом нововведении то, что разработчик описывает алгоритмы на более высоком уровне и не привязывается к деталям специализированного железа вроде тензорных ядер.
Классическая CUDA раскрывает модель SIMT single-instruction, multiple-thread. Программист явно управляет блоками и потоками, тонко настраивает размещение данных и синхронизацию, что даёт максимум гибкости, но требует большого опыта. Написать код, который хорошо работает на разных поколениях GPU, часто непросто, даже с помощью библиотек уровня NVIDIA CUDA-X или CUTLASS. CUDA Tile предлагает более высокий уровень абстракции по сравнению с SIMT.
Современные вычислительные задачи, особенно в сфере искусственного интеллекта, в основном опираются на тензоры. Под них NVIDIA создаёт специальные аппаратные блоки тензорные ядра NVIDIA Tensor Cores и ускорители памяти NVIDIA Tensor Memory Accelerators. Эти механизмы уже стали стандартной частью новых архитектур GPU. Чем сложнее становится железо, тем больше требуется программных решений, которые помогают использовать его возможности. CUDA Tile как раз и скрывает детали работы тензорных ядер и связанных с ними программных моделей, так что код, написанный с использованием CUDA Tile, должен быть совместим как с текущими, так и с будущими архитектурами.
При блочном, tile-ориентированном программировании разработчик мыслит не отдельными элементами массивов, а плитками данных. Он описывает, как разбить данные на такие фрагменты и какие операции над каждым фрагментом нужно выполнить. То, как эти операции будут разложены по потокам, как будут использованы уровни памяти и тензорные ядра, берут на себя компилятор и среда выполнения. По сути, это напоминает подход в Python с библиотеками вроде NumPy, где вы оперируете матрицами и массивами на уровне высокоуровневых операций, а все низкоуровневые детали остаются под капотом.
NVIDIA объявила о крупнейшем обновлении платформы CUDA с момента её появления в 2006 году. Вместе с CUDA 13.1 компания запускает CUDA Tile новый подход к программированию GPU, основанный на блочной, или tile, модели. Главное в этом нововведении то, что разработчик описывает алгоритмы на более высоком уровне и не привязывается к деталям специализированного железа вроде тензорных ядер.
Классическая CUDA раскрывает модель SIMT single-instruction, multiple-thread. Программист явно управляет блоками и потоками, тонко настраивает размещение данных и синхронизацию, что даёт максимум гибкости, но требует большого опыта. Написать код, который хорошо работает на разных поколениях GPU, часто непросто, даже с помощью библиотек уровня NVIDIA CUDA-X или CUTLASS. CUDA Tile предлагает более высокий уровень абстракции по сравнению с SIMT.
Современные вычислительные задачи, особенно в сфере искусственного интеллекта, в основном опираются на тензоры. Под них NVIDIA создаёт специальные аппаратные блоки тензорные ядра NVIDIA Tensor Cores и ускорители памяти NVIDIA Tensor Memory Accelerators. Эти механизмы уже стали стандартной частью новых архитектур GPU. Чем сложнее становится железо, тем больше требуется программных решений, которые помогают использовать его возможности. CUDA Tile как раз и скрывает детали работы тензорных ядер и связанных с ними программных моделей, так что код, написанный с использованием CUDA Tile, должен быть совместим как с текущими, так и с будущими архитектурами.
При блочном, tile-ориентированном программировании разработчик мыслит не отдельными элементами массивов, а плитками данных. Он описывает, как разбить данные на такие фрагменты и какие операции над каждым фрагментом нужно выполнить. То, как эти операции будут разложены по потокам, как будут использованы уровни памяти и тензорные ядра, берут на себя компилятор и среда выполнения. По сути, это напоминает подход в Python с библиотеками вроде NumPy, где вы оперируете матрицами и массивами на уровне высокоуровневых операций, а все низкоуровневые детали остаются под капотом.