Přeskočit na obsah
Magazín Chatujme.cz
Programování · čtení na 4 min

Specifikace Vulkanu přidala volbu mezi menším obrazem v paměti a rychlejším přístupem

Khronos vydal 31. července aktualizaci specifikace Vulkanu 1.4.358 s jediným novým rozšířením. VK_EXT_image_tiling_control dovoluje u každého obrazu zvlášť říct, jestli má ovladač zvolit uspořádání dat, které šetří paměť, nebo to, které zrychluje přístup. Dosud to bylo na ovladači a aplikace do jeho volby neviděla.

Grafický čip AMD Fiji s pamětí HBM na společné podložce
Grafický čip a paměť na jedné podložce. Jak se v ní obrazová data poskládají, rozhodoval dosud ovladač sám. Foto: C. Spille/pcgameshardware.de, Wikimedia Commons (CC BY-SA 4.0)

Skupina Khronos vydala 31. července aktualizaci specifikace Vulkanu s označením 1.4.358. Přibylo v ní jediné nové rozšíření, zato takové, pod kterým jsou podepsaní lidé z AMD, Valve, Samsungu, NVIDIE, Intelu a Nintenda: VK_EXT_image_tiling_control.

Dvě hodnoty, za kterými se skrývá víc možností

Obrazem (VkImage) se ve Vulkanu myslí blok obrazových dat v paměti grafické karty – textura, plocha, na kterou se vykresluje, hloubková mapa. Jak se ta data v paměti poskládají, dosud řídily dvě hodnoty. VK_IMAGE_TILING_LINEAR je ukládá po řádcích za sebou, jak by je člověk psal na papír. VK_IMAGE_TILING_OPTIMAL nechává uspořádání na ovladači: ten si obraz rozseká na dlaždice a poskládá je tak, aby bylo čtení sousedních bodů rychlejší.

Návrhový dokument rozšíření to popisuje jako typický kompromis mezi místem a časem: lineární uspořádání šetří paměť, optimální zrychluje přístup. Potíž je v tom, co se skrývá pod druhou z těch hodnot. Karta jich totiž může umět víc – několik různých optimálních uspořádání, každé s jinou spotřebou paměti a jinou rychlostí – a která se použije, si ovladač vybírá sám. Aplikace o té volbě neví a nemá ji jak ovlivnit.

Podle návrhu má přitom vývojář navíc informace, ke kterým se ovladač nedostane: ví, jak se obraz bude používat, a zná cílovou platformu. „Byly zjištěny případy, kdy ovladač nedokáže bez dalších podrobností zvolit nejlepší možnost pro všechny aplikace,“ stojí v dokumentu (přeloženo z angličtiny). Dosavadní náhrada byla nepřímá – měnit parametry vytvoření obrazu a pak měřit, jestli se uspořádání vůbec změnilo. Že ladění a měření vadí vývojářům shaderů ze všeho nejvíc, ukázala i anketa Khronosu mezi více než čtyřmi sty z nich.

Tři hodnoty místo zkoušení

Rozšíření přidává strukturu VkImageTilingControlCreateInfoEXT, kterou aplikace připojí k popisu vznikajícího obrazu. Obsahuje jedinou položku a ta nabývá tří hodnot:

  • VK_IMAGE_TILING_CONTROL_DEFAULT_EXT – chová se stejně, jako by struktura nebyla připojená vůbec;
  • VK_IMAGE_TILING_CONTROL_MIN_SIZE_EXT – ovladač má zvolit uspořádání s nejmenší spotřebou paměti;
  • VK_IMAGE_TILING_CONTROL_MAX_PERFORMANCE_EXT – má zvolit to nejrychlejší, i za cenu vyšší spotřeby.

Vedle toho přibývá příznak imageTilingControl; podle návrhu ho musí karta podporovat vždy, když podporuje samotné rozšíření. Návrh vysvětluje i to, proč nestačil jeden přepínač: u pouhého zapnuto/vypnuto by se muselo dodat zvlášť zjišťování výchozího chování, a to se může časem měnit.

Záruka platí jen v jednom směru

Hodnota pro nejmenší velikost je závazná: paměťový nárok obrazu s ní nesmí být větší než u zbylých dvou. U hodnoty pro nejvyšší rychlost žádný slib není. Návrh to říká rovnou – doba přístupu k obrazu závisí na příliš mnoha věcech, takže ovladač udělá, co může. Obě volby se navíc u některých obrazů srovnají do téhož výsledku; třeba tam, kde rozměry přesně vycházejí na velikost dlaždice, žádný kompromis neexistuje.

Zato se volba musí promítnout do dotazů, kterými si aplikace zjišťuje velikost a rozvržení obrazu ještě před jeho vytvořením. Jinak by si vývojář vyžádal úsporné uspořádání a paměť si naplánoval podle čísel platných pro jiné.

Zarovnání šlo ovlivnit už dva roky, uspořádání ne

Ve specifikaci je rozšíření VK_MESA_image_alignment_control, jehož jediným autorem je Hans-Kristian Arntzen z Valve; popis rozšíření nese datum poslední úpravy 3. května 2024. Řeší příbuzný problém z druhé strany: aplikace jím žádá o menší zarovnání obrazu v paměti, než jaké by karta jinak vyžadovala. Popis uvádí jako příklad vrstvení nad rozhraním Direct3D 12, kde se u umísťovaných prostředků počítá s určitým zarovnáním a napodobit to jinak znamená plýtvat výplní.

Nové rozšíření to starší neruší a Arntzen je podepsaný i pod ním. Když aplikace určí strop zarovnání, musí to omezit i výběr uspořádání – obojí platí zároveň.

Co dalšího v 1.4.358 je

Zbytek aktualizace jsou opravy a upřesnění: rozvolnění požadavku na jedinečnost identifikátoru paměťového objektu v hlášení o alokacích, upřesnění, že rozložení VK_IMAGE_LAYOUT_PREINITIALIZED se týká jen lineárních obrazů, nebo dovolení, aby dotaz na počet ořezaných útvarů přeskočil zdegenerované trojúhelníky. Vydání také přebírá změny z bezpečnostně kritické varianty Vulkan SC 1.0.22.

Předchozí aktualizace 1.4.357 vyšla 17. července, mezi oběma je tedy čtrnáct dní. Stejnou dvoutýdenní pauzu bez aktualizace specifikace zmiňuje i server Phoronix.

Ve specifikaci ano, v ovladači zatím neznámo

Rozšíření nese pořadové číslo 688 a revizi 1 z 19. června 2026; jako autor je u něj uvedený Noah Fredriks z AMD. Je to rozšíření zařízení, tedy volitelná část rozhraní – aplikace si musí zjistit, jestli ho konkrétní karta a ovladač nabízejí. Jestli už to některý z nich umí, se ze seznamu změn nepozná – o implementacích v něm není nic.

Strojový popis rozhraní, ze kterého se generují hlavičkové soubory, dnes vede 472 rozšíření označených jako podporovaná pro Vulkan. Sto padesát jedna z nich má předponu EXT a 149 předponu KHR; příloha specifikace ta první označuje za vícedodavatelská a ta druhá za khronosovská.

Zdroje: seznam změn ve Vulkanu 1.4.358, návrhový dokument rozšíření, jeho příloha ve specifikaci, příloha k VK_MESA_image_alignment_controlzpráva serveru Phoronix. Počty rozšíření jsou spočítané ze souboru vk.xml ve stejné verzi.

Diskuse

Zatím tu nikdo nediskutuje. Můžete být první.

Napsat příspěvek

Diskutovat můžete i bez účtu. S registrací se ale příspěvek zveřejní hned a nemusíte pokaždé vyplňovat jméno. Účet už máte? Přihlaste se.

Nezveřejňujeme ho, slouží jen redakci.

Podporuje zápis Texy: **tučně**, *kurzíva*, odrážky, odkazy.

Dál k tématu

Programování

Překladač Rustu zrychlil za osm měsíců o 5,6 %. Polovinu z toho udělal jediný nástroj

Nicholas Nethercote měří rychlost překladače Rustu deset let a jednou za čas sepíše, co se změnilo. Poslední shrnutí vyšlo 31. července: průměrné zkrácení doby překladu 5,59 %, z toho zhruba polovina připadá na dokumentační nástroj. Zajímavější než ta čísla jsou ale dva jednotlivé případy – jeden o prázdných voláních, druhý o osmi bajtech navíc.

Programování

Turso přepsal SQLite do Rustu, nad stejným jádrem teď staví Postgres. Zatím jen ze zdroje

Databázový projekt Turso, který vznikl jako přepis SQLite do jazyka Rust, oznámil 16. července, že nad stejným jádrem staví i Postgres. Autoři to popisují jako „LLVM databází“: jedno jádro a víc jazykových rozhraní nad ním. Hotová databáze to zatím není – balíčky ke stažení neexistují a oznámení samo mluví o základu, ne o hotovém produktu.

Programování

Pád ripgrepu ukazuje na chybu v jádře Linuxu. Model od OpenAI odmítl s laděním pomoct

Vývojář nahlásil 26. července, že ripgrep sestavený proti knihovně musl občas spadne při hledání v obřím stromu adresářů. O dva dny později zveřejnil analýzu, podle které za pádem stojí souběh ve správě paměti jádra Linuxu: vlákno přestane vidět bajt, který samo o deset instrukcí dřív zapsalo. Potvrzení od vývojářů jádra zatím není.