#32
az eredeti SOLT1es K7ben, aminek most nem jut eszembe a neve ez igaz volt:
a DIE 20%a csak vezeték(egységek között)
kb 25% prefetch és függőségvizsgálat
10% elágazásbecslés.
a maradék 45% volt az L1 cache, meg az effektív utasításvégrehajtár, regiszterek, stb...
"Elnézést, hogy közbeszólok, de valóban létezik olyan, hogy utasítás késleltetés (instruction latency). Ez azt jelenti, hogy legalább mennyi időbe telik a CPU-nak egy utasítást végrehajtása. Ez a gyakorlatban a teljes fetch-decode-execute-store műveletsort jelenti. A Prescott esetén 30 órajelciklus, mivel ennyi lépésből áll a pipeline. Tehát, ha én semmi mást nem akarok kiszámoltatni a CPU-val, csak hogy mennyi 1+2, akkor az utasítás memóriából történő betöltése és az eredmény memóriában való eltárolása között 30 órajelciklus telik el. >> Késleltetés."
ezt is tekinthetjük késleltetésnek, bár én még sosem láttam a késleltetést szót ilyen módon felhasználva, és nekem kicsit erökltettnek tűnik, mert itt feldolgozás, azaz munkavégzés zajlik, tehát ez nem késleltetés az eredeti értelemben. ez nekem új. amennyiben a cikk írója erre gondolt, meg kell, hogy kövessem ezen esetben.
a te példáddal azonban vannak problémáim:
1: a 30 lépcső az azt jelenti, hogy mikor a kívánt adatok már benne vnannak a regiszterbe onnantól kezdve amíg az eredmény a regiszterbe jut.
hozzávetőleg: 1 L1 cache olvasás-írás +2*1 órajelet jelent, egy L2 cache olvasás és írás +2*6 órajelet jelent és egy rendszermemóriaolvasás+írás több, mint 200 órajel(2*100+). teáht a 30 órajel az OPTIMÁLIS esetben van, és regiszterből regiszterbe értendő.
itt jönnek a bonyolítások:
ha az utasítás, amit éppen végre kell hajtani fel van bontva belső makro-utasításokra(amire nagyon jó esély van) akkor az nem 30, hanem n*30 órajelet vesz igénybe, ahol n természesetesen egész szám.
ez azért van, mert a mai X86 procik kívül CISC belül RISC filozófia alapján működnek, azaz a bonyolultabb utasításokat felbontják makróutasításokra. Az X86 utasítások nagyobbik(sokkal nagyobbik) része 2, avgy több makró utasításra van felbontva, ezen esetekben a végrehajtás valamennyi*30 órajelet vesz igénybe(ilyenkor persze semmilyen memória-késletetésről nincs szó, a makró-utasítások teljesen rejtve vannak a programok elől, és részeredmények nem hagyják el a processzort)
"Bocs, a 10%-ban benne van már az a rész is, ami még a végrehajtás előtt az utasítások sorrendjét úgy rendezi át, hogy az optimális legyen a végrehajtási sebesség szempontjából. Olyan ez, mint egy jó fordítóprogram, amely optimalizálja a kódot. Csak hardveresen megvalósítva... :-)"
ez így nem igaz. a processzornak szigorúan tilos átrendezni az utasítások sorrendjét. még az is nagyon bonyolult dolog, hogy mely utasítások hajthatóak végre egyszerre. és nem azért, mert olyan nehéz ellenőrizni, hogy mely feldolgozó egységek szabadok, a függőségek, az utasítások egymásra épülése jelenti a problémát. mégegyszer: az utasítások sorrendje nagyon szigorúan meg van határozva az x86 kód esetén, semmiféle felcserélés nem megengedett.