Новый уровень абстракции обещает упрощение жизни, однако 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, где вы оперируете матрицами и массивами на уровне высокоуровневых операций, а все низкоуровневые детали остаются под капотом.
Основой CUDA Tile служит CUDA Tile IR промежуточное представление, которое вводит виртуальный набор инструкций для работы с плитками. Если PTX обеспечивает переносимость SIMT программ, то CUDA Tile IR расширяет платформу CUDA нативной поддержкой tile-программ. Разработчик фокусируется на разбиении параллельной задачи на плитки и блоки плиток, а CUDA Tile IR сопоставляет их с потоками, иерархией памяти и тензорными ядрами. Более высокий уровень абстракции позволяет строить поверх Tile IR новые компиляторы, фреймворки и предметно-ориентированные языки под оборудование NVIDIA, примерно так же как PTX служит основой для SIMT пути.
При этом выбирать между SIMT и tile подходом раз и навсегда не нужно. Tile программирование на GPU дополняет существующую модель. Когда требуется полный контроль над потоками и ручная оптимизация, разработчики продолжают писать привычные SIMT ядра. Когда нужно эффективно задействовать тензорные ядра и блочные операции, можно подключать tile ядра.
Большинство программистов, однако, не будет работать напрямую с CUDA Tile IR. Для них NVIDIA предлагает инструменты уровня NVIDIA cuTile Python реализации для Python, использующей CUDA Tile IR как back-end. Отдельный блог-пост и примеры кода показывают, как с этим работать. А вот разработчики собственных компиляторов, библиотек и DSL будут взаимодействовать именно с Tile IR: документация и спецификация описывают абстракции, синтаксис и семантику этого промежуточного представления. Инструменты, которые сегодня генерируют PTX, смогут быть адаптированы так, чтобы в качестве цели добавился и CUDA Tile IR.
Появление CUDA Tile в составе CUDA 13.1 должно упростить разработку производительного GPU-кода для ИИ и других ресурсоёмких задач. Разработчики получают возможность сильнее опираться на высокоуровневое описание алгоритмов, не отказываясь при этом от привычной SIMT модели, когда нужен точный низкоуровневый контроль.