z diskuze :mr.qeg píše:Tak jsem trochu uvažoval nad tím, proč vlastně Intel na ADL zakázal úplně AVX512, když tam má ten Thread-Director, který by dle PR slajdů měl dynamicky přidělovat instrukce těm nejvhodnějším jádrům. Identifikovat AVX512 a posílat ji jen a pouze na GC jádra by tak neměl být žádný problém, což?
pokud mam proces a rad bych v nem pustil 24 threadu a nechal to bezet na vsem co procesor ma, musim se omezit na tu mnozinu instrukci, ktere umi mala jadra a zapomenout na rozsireni, co umi velka jadra?
Ano, musis. Staci si uvedomit, jak funguje scheduler v OS. Mas rekneme 1000 aktivnich vlaken z procesu, a je 24 vlaken CPU. Scheduler nemuze vedet, kdy ktera uloha uvolni procesor, a kdyz se nejakej CPU thread uvolni, mozna ze jedinej volnej proces thread bude takovy, ktery predtim bezel na uplne jinem CPU threadu. = Driv nebo pozdeji musis prohodit proces thread mezi malym / velkym CPU a naopak.
Kdyz scheduler "vraci" nejakej thread procesu na nejake CPU, musi obnovit stav procesoru presne do stavu v jakem byl kdyz CPU "odebral" tomu threadu. Jinak receno, musi se ulozit do pameti / obnovit vsechny registry CPU. Rekneme ze mas thread ktery bezel na velkem CPU, a pouzival AVX512 registry. Pak mu byl CPU odebran, a pak pridelen malej CPU. Kam obnovis ty AVX512 registry ? a kdo bude vykonavat ty AVX512 instrukce...
Existuji reseni... ale vsechny jsou nahovno. Mohl bys rozhodnout jestli program bude mit povoleno pouzivat AVX512... jenomze tohle musis rozhodnout uplne na zacatku pri spusteni. Pokud jednou pouzije AVX512 tak uz musi bezet jen na velkych CPU. Jak bys tohle resil ? budes delat whitelist / blacklist vsech programu na svete... asi ne ze. Skenovat binarky jestli pouzivaji AVX512 nelze, protoze dneska existuje spousta programu ktere si dynamicky vybiraji kod za behu.
Takze intel vlastne udelal jedinou logickou vec - omezil vsechna CPU na stejnou sadu instrukci.
https://diit.cz/clanek/alder-lake-zarad ... ru-avx-512