В рамках проекта Представлен VeriGPU Несколько дней назад начал работу по разработке открытого графического процессора, который призван разрабатываться под язык моделирования и описания электронных систем Verilog.
Тем, кто не знаком с VeriGPU, следует знать, что он позиционируется как специализированный процессор (ASIC), оптимизированный для ускорения вычислений, связанных с системами машинного обучения.
способ начать, проект разрабатывается с использованием симулятора Verilog, но после того, как он будет готов, его можно будет использовать для производства настоящих чипсов.
Планы включают поддержку среды глубокого обучения PyTorch. и возможность разработки приложений для VeriGPU с использованием API HIP (Heterogeneous Computing Interface). В будущем не исключено включение поддержки других API, таких как SYCL и NVIDIA CUDA.
Важно отметить, что разработка этого GPU направлена непосредственно на обучение машинному обучению. Таким образом, в идеале он должен поддерживать современные платформы машинного обучения, такие как PyTorch и Tensorflow, а это означает, что он почти наверняка должен поддерживать NVIDIA CUDA или AMD HIP.
Хотя упоминается и то, что Я знаю, что могу реализовать интерфейс OpenCL или SYCL, хотя поддержка основных фреймворков в настоящее время ограничена. В DeepCL есть специальная среда глубокого обучения OpenCL, но она имеет относительно ограниченный набор слоев нейронной сети и возможных сетевых топологий по сравнению с PyTorch и Tensorflow.
В настоящее время мы не собираемся реализовывать выполнение вне очереди, т. е. запуск одной инструкции до того, как запустится предыдущая, потому что это сложно в сценарии многопоточности с одной инструкцией (SIMT), и потому что это заставляет ядра использовать больше площади кристалла. , и, следовательно, их меньше (или они дороже).
С другой стороны, мы будем реализовывать параллельное выполнение инструкций, когда мы запускаем инструкцию, в то время как предыдущая инструкция все еще выполняется. Это стандартный и довольно легкий, он не занимает слишком много места на кристалле.
Никакого кэширования в настоящее время не реализовано (ни уровня 1, ни уровня 2, ни уровня 3, ни даже кэширования инструкций :P). Поскольку я намереваюсь создать GPU с другим механизмом кэширования, чем у CPU, я подумаю об этом, как только он станет больше похож на GPU.
Графический процессор развивается на основе набора инструкций RISC-V., но получившаяся внутренняя архитектура набора инструкций GPU плохо совместима с RISC-V ISA, так как в ситуациях, когда компоновка GPU не соответствует рендерингу RISC-V, помимо не постановки задачи поддержания совместимости с RISC-V .
С момента разработки фокусируется на возможностях, необходимых для систем машинного обучения, поэтому для уменьшения размера и сложности массива микросхем используется только формат с плавающей запятой BF16, и используются только те операции с плавающей запятой, которые востребованы для машинного обучения, такие как exp, log, tanh и sqrt. имеется в наличии.
Среди уже доступных компонентов, например, драйвер GPU, APU (Accelerated Processing Unit) для целочисленных операций («+»,»-«,»/»,»*»), модуль для операций с плавающей запятой («+», »*») и ответвления, а также поддержка компилятора HIP.
Для создания приложений предоставляется ассемблер и поддержка компиляции кода C++ на основе LLVM. Из ожидаемых возможностей выделяются параллельное выполнение инструкций, кэширование данных и память инструкций, операции SIMT (Single Instruction Multiple Thread).
Наконец, если вам интересно узнать об этом больше о разработке этого графического процессора с открытым исходным кодом, вы должны знать, что разработки проекта распространяются по лицензии MIT, и вы можете ознакомиться с кодом, а также с ходом проекта от по следующей ссылке.