• Zedas
    #28
    "1. Mint az általad linkelt doksiból kiderül, csak a simple instruction ALU-ból van kettő, a lassabb complex instruction ALU-ból csak egy van."

    Az esetek 90%-ban egyszerű aritmetikai műveletek történnek (rotálás, shiftelés, add, adc, stb.), de nem is ezért írtam, csak példának hogy igenis duplikálva van.

    "2. A K7-K8-ban is több ALU van, függetlenül attól, hogy nem HT/SMT-s. Ettől van, hogy több (integer) utasítást tud végrehajtani egy órajelciklus alatt (még többet, mint a P4)."
    Megint kevered.
    Megpróbálom röviden:
    - A modernebb CPUkban a magas órajel és a komplex utasítások miatt (több órajel egy utasítás) pipelineokat vezettek be, ezeken ülnek a végrehajtási egységek.
    - Intelnél hosszú pipelineok vannak, AMDnél rövidek (P3 is rövid volt)
    - Minél hosszabb a pipe, annál költségesebb egy ugrás (ki kell dobni az összes előkészített adatot a pipeline-ból).
    - Viszont a hosszú pipeline előnye, hogy ha jó predikciós egységed van, össze tudod válogatni úgy a következő n darab utasítást, hogy viszonylag jól ki legyen használva mindegyik funkcionális egység. Minnél hosszabb a line, annál nagyobb az n.

    Namost eddig a pontig a HT nélküli P4 és az A64 azonosak, egy szálat futtatnak. Nyilván, minnél jobban van duplikálva az összes belső egység, annál több utasítást tudnak futtatni.

    Ámde! Sokszor van olyan, hogy van egymás után sok olyan utasítás, melyek ugyanazokat a belső részeket használják. Ilyenkor rengeteg rész üzemen kívül van (ezt használja ki az M, ezeket lekapcsolja), de van egy másik mód: duplikáljuk meg a címregisztert, illetve lássuk el az összes belső egységet egy bittel, ami jelzi hogy az adott részegység mely szálat futtat. Így, ha olyan a kód, lehetőség van két független szál futtatására: az egyes szálak ugyanazt a pipeline-t használják, ám (szerencsés esetben) más más belső részeket vesznek igénybe. Tehát ha ilyen kódod van végtelen ciklusban:

    cyc1:
    add eax, ebx
    mul ecx
    jmp cyc2

    akkor látható hogy a 2. utasítás az első eredményére vár, viszont más ALU-t használ.
    Namost ha van két ilyen szálad és HT futtatod őket, akkor az egyik szál az 1. utasítást hajtja végre, a második a 2. at (egyszerre), és utána fordítva.

    Belátható hogy ebben az esetben a teljesítménynovekedés 100%, hiszen a kódot amúgy nem lehetne párhuzamosítani semmilyen módon az egymásra utaltság miatt.

    Remélem sikerült értelmesen leírnom.

    A lényeg tehát az, hogy a HT lényegében minimális új egység hozzáadásával segíthet a nem használt pipeline egységek kihasználásában.

    Ja, még annyi hogy a plusz SSE2 (vagy persze 3, ami +13 új utasítás) alig valamennyi helyet fogkal a DIE-on, mert nincs hozzá se cache, se predikció, se mikrokód (illetve elenyésző).