AMX kód na konci používá TILERELEASE, což vymaže AMX konfiguraci. Pokud se AMX nepoužívá, tak context-switch nic neřeší, pokud se používá, tak se ten obsah těch registrů musí uložit, aby pak zase mohl být obnoven.
Jo, ještě jedna perlička - AMX může používat jen 1 thread jednoho jádra (ne ten druhý v případě MT), takže scheduler s tím taky musí počítat.
Aha. Na prvním místě je možné AMX používat na obou HT threadech jednoho jádra. Nedojde k problému, jenom jde dolů výkon. Vizte kapitolu 20.17.2 v linku.
https://kib.kiev.ua/x86docs/Intel/Intel-OptimGuide/355308-003.pdf
Na druhém místě mi nebylo jasné, jak se scheduler dozví, že thread použil AMX. Při vytvoření threadu se v registru XCR0 zakáže podpora AMX (a obdobně to funguje u AVX). Když thread poprvé použije AMX instrukci, dojde na trap (NMI) #NM (Device Not Available, 0x07, původně používaný když není k dispozici matematický koprocesor), kernel následně v nt!KiNpxNotAvailableFault zapíše do struktury KTHREAD flag HasUsedAVX512, AMX povolí, a navrátí řízení na příslušnou instrukci. Tím se zároveň zapne podpora AMX u instrukcí použitých při přepínání kontextu, ze skupiny XSAVE/XRSTOR. Konkrétně XSAVES má formu optimalizace, kde ukládá kompaktní formu. No a zbytek je černá magie scheduleru: thread s flagem HasUsedAVX512 se nechává co nejdéle běžet na konkrétním fyzickém jádru, na druhý HT thread se nevěší AMX ani latency-sensitive workload, atd. Vše psáno v kontextu Windows; na Linuxu to bude nejspíš dost podobné.
Takže ano, převážně jste měl pravdu. Díky za nasměrování na zajímavý topic.