Vx — это язык системного программирования для гетерогенных вычислений, где память CPU, GPU, NPU и ускорителей является частью системы типов. Поток хозяина, разыменовывающий указатель устройства, является ошибкой компиляции, а не сегфолтом. Он доступен для macOS на Apple Silicon и Linux x86_64. Гетерогенность принадлежит системе типов, а не времени выполнения. Где находятся данные — это часть их типа. Большинство языков рассматривают ускоритель как инфраструктуру: вы пишете математику, а большой непрозрачный runtime решает, как его отправить. Vx рассматривает его как семантику. Тензор, закрепленный в высокопропускной памяти NPU, имеет другой тип, чем тот, что находится в памяти DRAM хоста, и переход между ними требует явного вызова transfer() — даже когда граница оборудования свободна. На унифицированной памяти Apple этот перевод компилируется почти в ничего. Тем не менее, он записывается, потому что локальность данных должна быть доказуема чтением исходного кода, а не профилированием бинарника.
Компилятор исключает типизацию адресного пространства, прием емкости, шовные контракты, линейные типы, достижимость топологии и проблемы автоматического дифференцирования. Машина объявляется, а не предполагается. Большинство компиляторов жестко закодировывают модель стоимости. Vx читает ее. Файл машины описывает иерархию памяти и интерконнект реального компонента, и компилятор принимает или отвергает размещения относительно него. Единицы — точные целочисленные преобразования, никогда не числа с плавающей точкой: префиксы SI — десятичные (GB = 10^9), префиксы IEC — двоичные (GiB = 2^30). Число, скопированное с листа спецификаций поставщика, означает то, что имел в виду лист. Репозиторий поставляется с файлами машин для H100, H200, B200, A100, MI300X, Apple M4 и многоузловых конфигураций с несколькими GPU — каждый с указанием источников и пометкой непроверенных данных как непроверенных.
Как компилируется: Передний фронт, ориентированный на данные и параллельный. Каждый символ, номинальный тип и мономорфизованный вариант — это плоский идентификатор из 256 битов. Система номинальных типов плюс обязательная упаковка для рекурсивных типов развязывает модули, так что конвейер работает параллельно по ядрам без механизма запросов и без конкуренции за блокировки. Компиляция проходит по плоским массивам, а не по деревьям, преследуемым указателями. Один и тот же исходный код компилируется в байт-одинаковый MLIR независимо от того, собирается ли он последовательно или параллельно. Это утверждается в наборе тестов, а не просто надеется — на эталонном масштабе, в одном потоке, в четырех потоках, и когда пул потоков полностью удален из пути, плюс корпус перекомпилируется в свежих процессах, чтобы каждый запуск имел свое собственное семя хеша.
Часто задаваемые вопросы: Что такое Vx и что делает его уникальным?
Vx — это язык системного программирования для гетерогенных вычислений, где типы памяти для CPU, GPU, NPU и ускорителей являются частью системы типов. Это предотвращает ошибки времени выполнения, такие как сегфолты, путем обнаружения разыменования указателей устройства во время компиляции. Он рассматривает ускорители как семантические компоненты, а не как инфраструктуру, требуя явных передач данных между пространствами памяти даже когда границы оборудования свободны.
Источник: Hacker News · Сводку подготовил HeadlinesBriefing