• Komolytalan
    #24
    ""De a CPU ezt nem fogja kiszopni az újából, hogy "a" változó ilyen, "b" meg olyan, és a jelenlegi gépikód nem tartalmaz olyan utasítást, amivel ezt meg lehetne neki súgni."
    Az intelnek hala van. Csak a legtobb programozo nem tud rola, mert az elmult 10 evben kerultek be es ezert nem tanitjak magyar iskolakban. Attol meg letezik es az intelligensebb forditoprogramok berakjak ezeket a buta programozok helyett."
    Megnéztem az intel instruction setjének doksiját, és én csak olyat találtam, amivel azt lehet szabályozni, hogy cachelje-e a memória területet vagy sem. Viszont ez nem elég, mivel a maghoz dedikált cache, meg a közös cache egészen más filozófia, másra jó. A jó az, ha 1x berakjuk a cache - lehetőleg minél gyorsabba - az adatot, ott piszok sok műveletet végzünk rajta, míg elfajul odáig a helyzet, hogy vissza kelljen írni memóriába. A memória kommunikáció, a magok közötti kommunikáció - mind-mind fáj. Jelen architekturában ha sok mag használ egy területet akkor az nem lesz gyors. Márpedig globális változók vannak - egy számítási segédtáblát pl nem szokás lemásolni minden egyes szálhoz. Attól, hogy sok mag használ egy memória területet sokszor sokkal gyorsabb futást eredményezne, ha minden mag tudná cachelni ugyanazt a területet. Pl az előre számolt segédtáblázatok tipikusan ilyenek: a program futásának első időszakában RW, és akkor legfeljebb közös cache-be kerülhet, utána meg RO, és lehet minden magban másolat róla, mivel úgyse fog módosulni. De ahhoz hogy ez működhessen a programnyelvek részéről is kellene változás: nem elég az, hogy egy adatterület változó/konstans, hanem kellene egy olyan is, ami változóként indulhat, és utána konstans lesz (tömbre, bonyolultabb strukturákra, azok elemeire is). A procinak meg meg kellene tudni mondani azt, hogy ez egy olyan adatterület, ami RO, vagyis akár 1000 mag mind becachelheti, ha minden második mov erről szól a kódban. Mert ha nem, akkor várhatja majd a 8-10 ciklusokat, mire hozzá bír férni.

    "Egyebkent 1000-szer annyi mag az akkor jelent 1000x-es teljesitmenynovekedest, ha a memoria ki birja szolgalni es a szalak nem nyulkalnak bele allandoan egymas adatteruleteibe. Ha ez teljesul, akkor mukodik."
    Na igen, csak sok itt a ha. A jelenlegi DDR3 memóriák 9-10ns körül vannak. Az EDO ram meg 10-15 éve 60-70ns volt. Persze tudom, a DDR akkor penge, ha sok adatot kell túrnia, de én nem láttam még olyan asm kódot, ahol minden csupa rep volna. Vagyis persze, gyorsabb a DDR3 mint egy 10ns EDO lenne de messze nem 40x, amit a max sávszélesség mutat. Hanem mondjuk 15-20x, jóindulattal. Vagyis a mai szupergyors DDR3 jobban fog egy 6 magos 2Ghz procit, mint egy EDO fogott 5x86-ot. Persze biztos tudnának gyorsabb memóriát is csinálni, gondolom csak passzióból várakozik 2x annyit ütemciklus százalékában egy proci jelenleg mint 10 éve.