Saadaval on Vcc, C/C++ kompilaator Vulkanile

Pärast kolme aasta arendust on esitlemisel uurimisprojekt Vcc (Vulkan Clang Compiler), mis on suunatud kompilaatori loomisele, mis suudab tõlkida C++ keeles kirjutatud koodi GPU-dele, mis toetavad Vulkan graafilist API-d. Erinevalt GPU programmeerimise mudelitest, mis põhinevad šeedrikoodide keeltel GLSL ja HLSL, arendab Vcc ideed loobuda täielikult eraldi šeedrikoodide keeltest ja võimaldab C/C++ koodi otsest kompileerimist Vulkanile. Projekti arengut jagatakse MIT litsentsi alusel.

Koodi kompileerimiseks kasutatakse projekti LLVM ja Clang komponente eesrindlikena. GPU-l toimimiseks arendatakse välja oma vahepealne šeedri esitusviis Shady ning kompilaator, mis muudab koodi sellesse esitusviisi. Võimaluse korral toetatakse tavalise standardse C/C++ koodi kompileerimist, ning GPU-spetsiifiliste võimaluste toetamiseks pakutakse mitu täiendavat sisseehitatud funktsiooni.

Vcc kasutab C/C++ keele põhifunktsioone programmeerimise juhtimiseks, sealhulgas "goto" operaatorit. Funktsioonide kutsumine, rekursiivsete funktsioonide kasutamine, füüsiliste, tähistatud ja funktsiooni näitajate kasutamine, näitajate aritmeetika ning tüüpide jaotuse määramine mälus on lubatud.

C/C++ võimaluste, nagu funktsioonid ja näidikud, toetamiseks on Shady vahe- esitus laiendatud eristruktuuride toega. Üldiselt põhineb Shady vahe-esitus SPIR-V 3-l ja kasutab laiendatud võimaluste rakendamiseks emulatsiooni, mida ei ole võimalik otseselt SPIR-V peal teostada. Spetsiifilistele shader-programmidele mõeldud võimaluste kasutamiseks pakutakse sisseehitatud funktsioone ja annotatsioone. #include descriptor_set(0) descriptor_binding(1) uniform sampler2D texSampler; location(0) input vec3 vertexColor; location(1) input vec2 texCoord; location(0) output vec4 outColor; fragment_shader void main() { vec4 fragColor; fragColor.xyz = vertexColor; fragColor.w = 1.0f; outColor = texture2D(texSampler, texCoord) * fragColor; }

Tööks on vajalik Vulkan 1.1 toega GPU, VK_KHR_buffer_device_address laiendused ja Int8, Int16 ning Int64 tüübid. Vcc on ühilduv Vulkan draiveritega radv (AMD Mesa), amdvlk (AMD), nvk (NVIDIA), anv (Intel Mesa) ning AMD, Intel Arc ja NVIDIA patenteeritud draiveritega. Teostuspiirangutena mainitakse C++ erandite toetuse puudumist, malloc/free funktsioonide kättesaamatust ning funktsioonide ja pointerite ülekandmatust host-süsteemi ja GPU vahel.

Allikas: opennet.ru

Osta usaldusväärne veebihosting DDoS kaitsega, VPS VDS serverid 🔥 Osta usaldusväärne veebihosting DDoS kaitsega, VPS VDS serverid | ProHoster