Aika vaikee puhelimella googletaa kun tulee eri tulokset samoilla hauilla joka kerta. Jostain tälläsestä kyse.
Hot Chips isn’t just a conference where companies give in-depth presentations on the architectures behind high performance chips.
chipsandcheese.com
edit: ei siis liittynyt suoranaisesti SSE-käskyihin, mutta zen5 ei ole panostettu sellaisen koodin nopeutumiseen, vaan enemmän 256 ja 512 bit koodiin.
Ok, kiitos, eli siellä on muutkin käskyt hidastuneet.
Eli siis kaikki sellaiset vektorikäskyt, joilla zen4lla oli yhden kellojakson viive, omaavat nyt kahden kellojakson viiveen.
Käytännössä yhden kellojakson käskyjä on lähinnä kokonaislukujen yhteen- ja vähennyslaskut, loogiset operaatiot(and, or, xor) sekä vertailukäskyt, ei juuri muuta. Lähes kaikki muut käskyt vie useamman kellojakson, eivätkä ne ole hidastuneet.
Skalaaripuolella näiden käskyjen viive on hyvin tärkeä, koska niillä aivan jatkuvasti lasketaan mm. muistiosoitteita ja indeksejä, ja näitä on usein useamman käskyjn sekvensseinä, joita sitten käytetään inputteina sille, mistä dataa lataillaan tai mikä haara otetaan yms.
Vektoripuolella näiden viive ei kuitenkaan ole niin tärkeä koska siellä niitä käytetään pääasiassa vain itse laskettavalle datalle, jossa se viive ei ole niin oleellinen(ja jos siinä datassa on sen verran rinnakkaisuutta että sen voi vektoroida, siinä on tyypillisesti myös sen verran rinnakkaisuutta että sen voi unrollata peittämään viiveitä), ja lisäksi nykyaikana sellaisessa koodissa jonka saa vektoroitua se data on muutenkin usein liukulukumuodossa.
(toki joskus tehdään indeksilaskentaa myös vektoripuolella, gather(*) on AVX2ssa tuettu ja AVX-512ssa taitaa olla myös scatter(*), mutta tämä on paljon harvinaisempaa kuin skalaaripuolella)
* gather on siis lataus jossa ladataan vektori siten että joka elementillä on vähintään osittain itsenäinen osoite eikä lueta yhtenäistä vektorinlevyistä pötköä muistia, käytännössä siellä on yleensä basepointer joka on skalaari ja sitten vektori indeksejä, joka linja i lataa osoitteesta joka on base + index
. Scatter on sitten sama toiseen suuntaan, joka vektorilinja talletetaan omaan erilliseen muistiosoitteseensa, yleensä samalla tavalla osoitteeseen base +index