В этом месяце Nvidia представила, возможно, одно из самых значительных обновлений своей программной платформы CUDA GPU за последние годы. Новый релиз CUDA 13.1 представляет программирование CUDA Tile, которое поднимает разработку ядер над моделью исполнения SIMT (single-instruction, multiple-thread) и приводит ее в соответствие с тензорно-ориентированной моделью исполнения процессоров класса Blackwell и их преемников.
Переходя к структурированным блокам данных, или тайлам (плиткам), Nvidia меняет подход разработчиков к проектированию задач для GPU, закладывая основу для архитектур следующего поколения, которые будут включать в себя более специализированные вычислительные ускорители и, следовательно, меньше зависеть от параллелизма на уровне потоков.
Прежде чем продолжить, стоит уточнить, что принципиальное различие между традиционной моделью программирования CUDA и новой CUDA Tile заключается не в возможностях, а в том, что контролируют программисты. В исходной модели CUDA программирование основано на исполнении SIMT (одна инструкция, множество потоков). Разработчик явно разделяет задачу на потоки и блоки потоков, выбирает размеры сетки и блоков, управляет синхронизацией и тщательно проектирует шаблоны доступа к памяти, чтобы соответствовать архитектуре GPU. Производительность в значительной степени зависит от низкоуровневых решений, таких как использование варпов (warps), тайлинг разделяемой памяти, использование регистров и явное использование инструкций или библиотек тензорных ядер. Короче говоря, программист контролирует, как вычисления выполняются на аппаратном обеспечении.
CUDA Tile переносит программирование на тайло-центричную абстракцию. Разработчик описывает вычисления с точки зрения операций над тайлами — структурированными блоками данных, такими как подматрицы — не указывая потоки, варпы или порядок выполнения. Затем компилятор и среда выполнения автоматически отображают эти операции над тайлами на потоки, тензорные ядра, ускорители тензорной памяти (TMA) и иерархию памяти GPU. Это означает, что программист сосредотачивается на том, какие вычисления должны происходить с данными, а CUDA определяет, как они эффективно выполняются на аппаратном обеспечении, что обеспечивает масштабируемость производительности между поколениями GPU, начиная с Blackwell и заканчивая будущими архитектурами.
Но зачем вносить такие существенные изменения на уровне CUDA? За этим шагом стоит несколько мотивов: кардинальные архитектурные изменения в GPU и способ работы современных задач GPU. Во-первых, ИИ, моделирование и технические вычисления больше не вращаются вокруг скалярных операций: они полагаются на плотную тензорную математику. Во-вторых, новейшее оборудование Nvidia также следует той же траектории, интегрируя тензорные ядра и TMA в качестве основных архитектурных улучшений. В-третьих, и тензорные ядра, и TMA значительно различаются между архитектурами.
От Turing (первой архитектуры GPU, включившей тензорные блоки в качестве вспомогательных) до Blackwell (где тензоры стали основными вычислительными движками), Nvidia неоднократно перерабатывала способы планирования тензорных движков, способы организации и перемещения данных, а также то, какая часть конвейера выполнения управляется варпами и потоками по сравнению со специализированным оборудованием. В Turing тензоры использовались для выполнения матричных инструкций, выдаваемых варпами, но в Blackwell все перешло к конвейерам выполнения, использующим собственные тайлы, с автономными движками памяти, что в корне уменьшило роль традиционных элементов управления SIMT.
В результате, поскольку тензорное оборудование агрессивно масштабируется, отсутствие единообразия между поколениями сделало низкоуровневую настройку на уровнях варпов и потоков непрактичной, поэтому Nvidia пришлось поднять CUDA к более высоким уровням абстракции, которые описывают намерения на уровне тайлов, а не на уровне потоков, оставляя все оптимизации компиляторам и средам выполнения. Одним из бонусов такого подхода является то, что он может извлекать прирост производительности практически во всех задачах на протяжении всего активного жизненного цикла своих архитектур GPU.
Обратите внимание, что он не отказывается от путей SIMT с NVVM/LLVM и PTX полностью; когда они нужны разработчикам, они могут писать соответствующие ядра. Однако, когда им нужно использовать тензорные ядра, они должны писать тайловые ядра.
В центре этого нового стека CUDA Tile находится CUDA Tile IR, виртуальный набор инструкций, который играет ту же роль для тайловых задач, что и параллельное исполнение потоков (PTX) для ядер SIMT. В традиционном стеке CUDA PTX служит переносимой абстракцией для потоково-ориентированных программ, которая гарантирует, что ядра SIMT сохраняются между поколениями GPU. CUDA Tile IR предназначен для обеспечения той же долгосрочной стабильности для вычислений на основе тайлов: он определяет блоки тайлов, их взаимосвязи, операции, которые их преобразуют, но скрывает детали выполнения, которые могут меняться от одного семейства GPU к другому.
Этот виртуальный ISA также становится целью для компиляторов, фреймворков и предметно-ориентированных языков, которые хотят использовать семантику на уровне тайлов. Разработчики инструментов, которые ранее генерировали PTX для SIMT, теперь могут создавать параллельные бэкенды, которые генерируют Tile IR для тензорно-ориентированных задач. Среда выполнения принимает Tile IR в качестве входных данных и назначает работу аппаратным конвейерам, тензорным движкам и системам памяти таким образом, чтобы максимизировать производительность, не раскрывая изменчивость на уровне устройств программисту.
В дополнение к самой Tile IR, CUDA 13.1 представляет еще один ключевой компонент для воплощения CUDA Tile в жизнь: cuTile Python, предметно-ориентированный язык, который позволяет разработчикам создавать ядра, ориентированные на массивы и тайлы, непосредственно на Python.
На данный момент усилия по разработке сосредоточены в основном на алгоритмах, ориентированных на ИИ, но Nvidia планирует расширять функциональность, возможности и производительность с течением времени, а также представить реализацию на C++ в будущих выпусках. Само программирование на основе тайлов, безусловно, не ограничивается искусственным интеллектом и разработано как абстракция общего назначения. По мере развития CUDA Tile от Nvidia его можно применять к широкому спектру приложений, включая научное моделирование (на архитектурах, поддерживающих требуемую точность), обработку сигналов и изображений/видео, а также многие задачи HPC, которые разбивают задачи на вычисления на основе блоков.
В своем первоначальном выпуске поддержка CUDA Tile ограничена графическими процессорами класса Blackwell с вычислительными возможностями 10.x и 12.x, но будущие выпуски обеспечат поддержку “большего количества архитектур”, хотя неясно, говорим ли мы о Hopper предыдущего поколения или Rubin следующего поколения.
С помощью CUDA Tile Nvidia реорганизует программную модель CUDA вокруг моделей выполнения на основе тензоров, которые доминируют в современных задачах. Традиционный CUDA Tile будет сосуществовать с проверенной моделью SIMT, поскольку не все задачи интенсивно используют тензорную математику, хотя вектор развития отрасли более или менее ясен, поэтому Nvidia будет следовать ему.
CUDA Tile IR от Nvidia обеспечивает абстракцию, обеспечивающую архитектурную стабильность, необходимую для будущих поколений оборудования, ориентированного на тензоры, в то время как cuTile Python (и аналогичные языки), а также улучшенные инструменты предлагают практические способы для разработчиков перейти от рабочих процессов, интенсивно использующих SIMT.
В сочетании с расширенными функциями секционирования, оптимизацией математических библиотек и улучшенными инструментами отладки CUDA 13.1 знаменует собой важную веху в долгосрочной стратегии Nvidia: абстрагирование от аппаратной сложности и обеспечение бесшовной масштабируемости производительности для каждого поколения графических процессоров.
Всегда имейте в виду, что редакции некоторых изданий могут придерживаться предвзятых взглядов в освещении новостей.
8/7
Автор – Anton Shilov




