Tyjo diky. Ale stejne se budu opakovat...dost si neumim predstavit, ze by se investoval cas do nekolika algoritmu, kazdy pro jinou kombinaci SSE/AVX/AXV-512 whatever. Takze ve vysledku se musime spolehnout na prekladac (ale ne bude vedet jeste min, nez vyvojar, kde pobezi vysledek) nebo na JIT, nebo na knihovny, ktere to SIMD zvladnou*.
Osobne mi to nepripadne jako dobre investovana plocha cipu, asi hlavne u toho AVX-512, ktery je jeste rozdeleny do podmnozin.
* ale asi to pomaha u benchmarku vytvorenych primo na telo tomu cipu :)
Nevím jak Linux, ale na open source variantě BSD (čti Darwin) si lze ověřit, že Apple to tak dělá.
Dělal optimalizace jak pro PowerPC/Altivec, tak i pro x86_64/SSE 3 nebo 4.2).
A to je jen open source libc, u API operačního systému dělá mnohem více, např. https://developer.apple.com/documentation/accelerate
10. 11. 2022, 12:40 editováno autorem komentáře
takto: v praxi to bude min kombinaci, spis se postupne jednotlive sety pridavaji. Ale vyvijet pro ruzne AVX-512 muze byt... rekl bych, ze bych to vyvijet nechtel, ale vlastne chtel :) [v podstate to i trosku zni jako dream job, odpocinout si od oblacku :] Akorat by to bylo drahy, do toho IMHO malokdo pujde, pokud to nebude z nejakeho duvodu jedina moznost.
To byli idioti, například stahovali knížky o Go pro své vývojáře z pirátských stránek. Jeden z investorů byl pornoherec (to jsem se dozvěděl až zpětně). Ten “manažer” byl obchoďák z českého IBM, kterého vyhodili pro neschopnost. Prostě startup jedna radost. Bohužel to všechno vyplavalo na povrch se zpožděním. Nicméně tým vývojářů byl v pohodě.
Tak ony tam budou nejspíš nějaké generace implementující instrukce, které si Intel rezervoval předem a plánoval je postupně implementovat. Takže to reálně bude spíš 4-8 kombinací (generací).
Nebo možná zvažovali vytvářet čipy pro speciální účely, ale to se u obecného CPU příliš výrobně nevyplatí, tam mají víc smysl opravdu speciální čipy.
Takže spíš varianta 1, a toho kódu tak moc nebude - typicky bude jedna generická implementace, jedna optimalizovaná na základní AVX-2 nebo základní AVX-512 a jedna na specifické AVX-512 a v runtime se rozhodne, která se použije. Pokud by runtime podporovalo neúplnou konfiguraci pro daný účel, tak se spadne o celý level níž - nikdo nebude nutit vývojáře, aby maximalizovali využití pro všechny možné kombinace, které nejspíš ani nebudou existovat.
Tak tak, je to trosku ukazano v https://www.root.cz/clanky/rozsireni-instrukcni-sady-f16c-fma-a-avx-512-na-platforme-x86-64/#k16 V praxi je to tedy tak 6-7 moznosti (tedy zatim, pokud do toho nehodi vidle AMD).