Projekt VeriGPU rozwija otwarty procesor graficzny w języku Verilog

Projekt VeriGPU ma na celu stworzenie otwartego GPU opracowanego w języku opisu i modelowania systemów elektronicznych Verilog. Początkowo projekt jest rozwijany przy użyciu symulatora Verilog, ale po doprowadzeniu go do gotowości można go wykorzystać do produkcji prawdziwych chipów. Rozwój projektu jest rozpowszechniany na licencji MIT.

VeriGPU jest jednostką przetwarzania specyficzną dla aplikacji (ASIC) zoptymalizowaną pod kątem przyspieszenia obliczeń związanych z systemami uczenia maszynowego. W planach jest zapewnienie kompatybilności z frameworkiem głębokiego uczenia maszynowego PyTorch oraz możliwość tworzenia aplikacji dla VeriGPU z wykorzystaniem API HIP (Heterogeneous-Compute Interface). W przyszłości nie jest wykluczone dodanie obsługi innych interfejsów API, takich jak SYCL i NVIDIA CUDA.

GPU ewoluuje w oparciu o zestaw instrukcji RISC-V, ale wynikająca z tego wewnętrzna architektura zestawu instrukcji GPU jest słabo kompatybilna z RISC-V ISA, ponieważ w sytuacjach, w których projekt GPU nie pasuje do reprezentacji RISC-V , zadanie zachowania zgodności z RISC-V nie jest ustawione. . Rozwój koncentruje się na możliwościach potrzebnych systemom uczenia maszynowego, dlatego w celu zmniejszenia rozmiaru i złożoności macierzy chipowej używany jest tylko format zmiennoprzecinkowy BF16 i tylko operacje zmiennoprzecinkowe, które są wymagane w uczeniu maszynowym, takie jak exp, log, tanh i sqrt są dostępne.

Z już dostępnych komponentów kontroler GPU, APU (Accelerated Processing Unit) do operacji na liczbach całkowitych („+”, „-”, „/”, „*”), blok do operacji zmiennoprzecinkowych („+”, „*” ) i jednostka rozgałęziająca. Do tworzenia aplikacji oferowany jest asembler oraz wsparcie dla kompilacji kodu C++ w oparciu o LLVM. Spośród planowanych funkcji, równoległego wykonywania instrukcji, buforowania danych i pamięci instrukcji, wyróżniają się operacje SIMT (Single Instruction Multiple Thread).

Projekt VeriGPU rozwija otwarty procesor graficzny w języku Verilog


Źródło: opennet.ru

Dodaj komentarz