ΠŸΡ€Π΅Π΄ΡΡ‚Π°Π²Π»Π΅Π½ Tyr, Linux-Π΄Ρ€Π°ΠΉΠ²Π΅Ρ€ для GPU ARM Mali, написанный Π½Π° Rust

ДэниСл АлмСйда (Daniel Almeida), Π·Π°Π½ΠΈΠΌΠ°ΡŽΡ‰ΠΈΠΉΡΡ Ρ€Π°Π·Π²ΠΈΡ‚ΠΈΠ΅ΠΌ Π²ΠΈΠ΄Π΅ΠΎΠΊΠΎΠ΄Π΅ΠΊΠΎΠ² Π² ΠΊΠΎΠΌΠΏΠ°Π½ΠΈΠΈ Collabora, ΠΎΠΏΡƒΠ±Π»ΠΈΠΊΠΎΠ²Π°Π» Π² спискС рассылки Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠΎΠ² Linux-ядра Π½Π°Ρ‡Π°Π»ΡŒΠ½ΡƒΡŽ Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΡŽ Π΄Ρ€Π°ΠΉΠ²Π΅Ρ€Π° Tyr для GPU ARM Mali, Π² ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… примСняСтся тСхнология CSF (Π‘ommand Stream Frontend), Ρ‚Π°ΠΊΠΈΡ… ΠΊΠ°ΠΊ Mali G310, G510 ΠΈ G710. Код Π΄Ρ€Π°ΠΉΠ²Π΅Ρ€Π° написан Π½Π° языкС Rust ΠΈ насчитываСт Ρ‡ΡƒΡ‚ΡŒ большС 600 строк ΠΊΠΎΠ΄Π°. Π Π°Π±ΠΎΡ‚Π° Π½Π°Π΄ Π΄Ρ€Π°ΠΉΠ²Π΅Ρ€ΠΎΠΌ Tyr вСдётся совмСстно сотрудниками ΠΊΠΎΠΌΠΏΠ°Π½ΠΈΠΉ Collabora, Arm ΠΈ Google.

Π’ качСствС каркаса для создания Π½ΠΎΠ²ΠΎΠ³ΠΎ Π΄Ρ€Π°ΠΉΠ²Π΅Ρ€Π° ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Π½Ρ‹ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Ρ‹ абстрактного Π΄Ρ€Π°ΠΉΠ²Π΅Ρ€Π° rust_platform_driver ΠΈ Π΄Ρ€Π°ΠΉΠ²Π΅Ρ€Π° Nova, Ρ€Π°Π·Π²ΠΈΠ²Π°Π΅ΠΌΠΎΠ³ΠΎ для GPU NVIDIA, написанного Π½Π° Rust ΠΈ частично Π΄ΠΎΠ±Π°Π²Π»Π΅Π½Π½ΠΎΠ³ΠΎ Π² ядро 6.15. Π€ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ для взаимодСйствия с GPU Mali ΠΏΠΎΡ€Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½Π° ΠΈΠ· ΡΡƒΡ‰Π΅ΡΡ‚Π²ΡƒΡŽΡ‰Π΅Π³ΠΎ DRM-Π΄Ρ€Π°ΠΉΠ²Π΅Ρ€Π° Panthor (Direct Rendering Manager), написанного Π½Π° языкС Π‘ΠΈ. uAPI Π΄Ρ€Π°ΠΉΠ²Π΅Ρ€Π° Tyr ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ‡Π΅Π½ uAPI Π΄Ρ€Π°ΠΉΠ²Π΅Ρ€Π° Panthor, Ρ‡Ρ‚ΠΎ позволяСт ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ с Π½ΠΈΠΌ ΡƒΠΆΠ΅ ΡΡƒΡ‰Π΅ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠ΅ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Ρ‹ пространства ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Ρ.

ВСхнология CSF, примСняСмая начиная с 10 поколСния GPU Mali, ΠΏΡ€ΠΈΠΌΠ΅Ρ‡Π°Ρ‚Π΅Π»ΡŒΠ½Π° выносом Π½Π° сторону ΠΏΡ€ΠΎΡˆΠΈΠ²ΠΊΠΈ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ Π΄Ρ€Π°ΠΉΠ²Π΅Ρ€Π° ΠΈ задСйствованиСм Π½ΠΎΠ²ΠΎΠΉ ΠΌΠΎΠ΄Π΅Π»ΠΈ ΠΎΡ€Π³Π°Π½ΠΈΠ·Π°Ρ†ΠΈΠΈ выполнСния Ρ€Π°Π±ΠΎΡ‚ Π½Π° GPU. Π’ GPU с интСрфСйсом CSF вмСсто ΠΌΠΎΠ΄Π΅Π»ΠΈ Π½Π° основС ΠΎΡ‚ΠΏΡ€Π°Π²ΠΊΠΈ Ρ†Π΅ΠΏΠΎΡ‡ΠΊΠΈ Ρ€Π°Π±ΠΎΡ‚ примСняСтся модСль Π½Π° основС ΠΏΠΎΡ‚ΠΎΠΊΠ° ΠΊΠΎΠΌΠ°Π½Π΄ с ΠΏΠ»Π°Π½ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ΠΌ ΠΎΡ‡Π΅Ρ€Π΅Π΄ΠΈ ΠΏΠΎΡ‚ΠΎΠΊΠ° ΠΊΠΎΠΌΠ°Π½Π΄ Π½Π° сторонС ΠΏΡ€ΠΎΡˆΠΈΠ²ΠΊΠΈ. Для ΠΎΡ€Π³Π°Π½ΠΈΠ·Π°Ρ†ΠΈΠΈ Ρ€Π°Π±ΠΎΡ‚Ρ‹ ΠΏΠ»Π°Π½ΠΈΡ€ΠΎΠ²Ρ‰ΠΈΠΊΠ° Π² GPU встроСн ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½Ρ‹ΠΉ ΠΌΠΈΠΊΡ€ΠΎΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»Π»Π΅Ρ€ Cortex-M7, Π° для выполнСния инструкций CSF прСдусмотрСн ΡΠΏΠ΅Ρ†ΠΈΠ°Π»ΡŒΠ½Ρ‹ΠΉ Π±Π»ΠΎΠΊ выполнСния ΠΊΠΎΠΌΠ°Π½Π΄ (Command Execution Unit).

Π€ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ Tyr ΠΏΠΎΠΊΠ° отстаёт ΠΎΡ‚ Π΄Ρ€Π°ΠΉΠ²Π΅Ρ€Π° Panthor, Π½ΠΎ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠΈ Π½Π°ΠΌΠ΅Ρ€Π΅Π½Ρ‹ постСпСнно ΡΠΎΠΊΡ€Π°Ρ‰Π°Ρ‚ΡŒ Ρ€Π°Π·Ρ€Ρ‹Π² Π΄ΠΎ Ρ‚Π΅Ρ… ΠΏΠΎΡ€ ΠΏΠΎΠΊΠ° Π½Π΅ Π±ΡƒΠ΄Π΅Ρ‚ достигнут ΠΏΠ°Ρ€ΠΈΡ‚Π΅Ρ‚ Π² возмоТностях Π΄Ρ€Π°ΠΉΠ²Π΅Ρ€ΠΎΠ². ΠΠ΅Π΄ΠΎΡΡ‚Π°ΡŽΡ‰ΠΈΠ΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ Ρ‚Ρ€Π΅Π±ΡƒΡŽΡ‚ ΠΈΠ½Ρ‚Π΅Π³Ρ€Π°Ρ†ΠΈΠΈ Π² ядро Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Ρ… абстракций для создания Π΄Ρ€Π°ΠΉΠ²Π΅Ρ€ΠΎΠ² Π½Π° Rust, поэтому Ρ€Π°Π·Π²ΠΈΡ‚ΠΈΠ΅ Π΄Ρ€Π°ΠΉΠ²Π΅Ρ€Π° Tyr Π±ΡƒΠ΄Π΅Ρ‚ синхронизировано с Π΄ΠΎΠ±Π°Π²Π»Π΅Π½ΠΈΠ΅ΠΌ Π² ядро Π΄Π°Π½Π½Ρ‹Ρ… абстракций. НапримСр, Π² ядрС ΠΏΠΎΠΊΠ° ΠΎΡ‚ΡΡƒΡ‚ΡΡ‚Π²ΡƒΡŽΡ‚ возмоТности для ΠΌΠ°ΠΏΠΏΠΈΠ½Π³Π° памяти Π² Rust-Π΄Ρ€Π°ΠΉΠ²Π΅Ρ€Π°Ρ… для GPU, Ρ€Π°Π·Π²ΠΈΠ²Π°Π΅ΠΌΡ‹Π΅ Π² Π΅Ρ‰Ρ‘ Π½Π΅ принятом Π½Π°Π±ΠΎΡ€Π΅ ΠΏΠ°Ρ‚Ρ‡Π΅ΠΉ GPUVM.

Π˜ΡΡ‚ΠΎΡ‡Π½ΠΈΠΊ: opennet.ru

Π”ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ ΠΊΠΎΠΌΠΌΠ΅Π½Ρ‚Π°Ρ€ΠΈΠΉ