Hardver Ismeretek IA32 -> IA64
Problémák az IA-32-vel Bonyolult architektúra CISC ISA (RISC jobb a párhuzamos feldolgozás szempontjából) Változó utasításhossz és forma nehéz dekódolni és párhuzamosítani Lehetséges megoldás: IA-32 ISA utasításait széttördelhetjük RISC-szerű rövid utasításokra ez azonban bonyolult HW-t igényel Címtartomány problémák (2^32 = 4GB) Kevés általános célú regiszter sok memóriahivatkozás, akkor is, ha logikusan nem kéne (pl. eredmények átmeneti tárolására ezt regiszterekben lehetne tárolni) Titkos regiszterek használata bonyolítja a HW-t pénz++ Általában igaz: teljesítmény nagy része nem arra megy el amire kéne (nem számol, hanem zsonglőrködik a CPU)
Megoldások Félmegoldás: EMT-64 IA-32 64 bites kiterjesztése Pl. P4 architektúra, 64 bites címekkel, 64 bites regiszterekkel Végső megoldás: IA-64 HP & Intel közös fejlesztés Teljesen új architektúra tiszta lap
EMT-64 (EM64T Extended Memory 64 technology) rövid története AMD 64 bites kiegészítést tervez az x86, 32 bites architektúrához, elnevezi x86-64-nek Később átnevezi AMD64-nek Intel is lép, bevezeti a 64bites kiegészítést, melyet rendre IA-32e, EM64T, Intel 64 néven nevez Általános név a kiegészítésre: x86-64 v. x64 Intel 64 és AMD64 szinte ugyanaz, minimális különbségek vannak (pár operandust enged az EMT64, amit AMD64 nem, de ezek kivételével kompatibilisek, mindkettő 32bites gép 64bitesre való kiterjesztése, 64bites új utasításkészlettel) Intel és AMD egymást sakkban tartják egy szerződéssel: ha Intel felmondja, nem készíthet x64-es gépet, ha AMD, nem használhatja az ia32-es architektúrát (így az x64-et sem)
x64 kiegészítései 64bit integer típus támogatása Plusz regiszterek (ált.reg.-ek száma 8-ról 16-ra) Több SSE (Streaming SIMD Extensions) regiszter Nagyobb fizikai és virtuális címtér (2^32-ről akár 2^64) NX (Non-execute) bit, futtathatatlan memóriarészek puffer overflow támadások ellen Stb Az x64-es architektúra alapvetően 32 bites architektúra, annak minden gondjával
x64 előnye 32 bites kódot alapból képes futtatni, SW-k jelentős része 32 bites (OS, driverek, stb) Nagy adatmozgatásoknál a 64bites memóriaelérés jól jöhet (szerverek, 3D)
IA-64 HP rájött hogy a RISC megközelítés határa az egy utasítás per egy órajel Új architektúrát dolgozott ki, melyet EPIC-nek (Explicitly Parallel Instruction Computing) neveztek el Itt több utasítás is végrehajtódik egy órajel alatt, de nem a CPUnak kell vizsgálnia hogy melyek lehetnek ezek, hanem a fordító vizsgálja meg, és generál ennek megfelelő kódot a HWből ezt a vizsgálatot ki lehet hagyni olcsóbb, gyorsabb HP társul az Intellel, közösen fejlesztik az architektúrát Megkapja az Itanium nevet, melyet később Itanic-nak csúfol a közösség (a nehéz fejlesztés, késések miatt) Sokan az IA-64-től várták a szerverpiac robbanását (HP még most is ettől várja)
IA-64 előrejelzések változása (2004)
Főbb IA-64 újítások RISC megvalósítás (EPIC Expl. Parall. Inst. Comp.) Szoftver (fordító) kiváltja a bonyolult HW elemek implementálását, jól párhuzamosítható kódot generál Rengeteg regiszter kevesebb memóriahivatkozás 128 db általános célú 64 bites regiszter 128 db lebegőpontos regiszter (IEEE 745) 80 bit sok regiszter, így a részeredmények regiszterbe kerülhetnek mem. helyett 128 db spec. alkalmazás regiszter (státusz, ia32, stb) 64 bit 64 db 1bit predikátumregiszter feltételes futtatáshoz használt 8 db elágazásregiszter (branching) 64 bit indirekt elágazás esetén a célcímeket tartalmazzák IA-32-es kódot először HW-ből tudott, de lassan, így HW emuláció kikerült és egy SW réteg csinálja gyorsabban: IA- 32 Execution Layer (IA-32 EL)
Főbb IA-64 újítások Utasításütemezés feladata a fordítón a fordító már előre kideríti mely utasítások végezhetők párhuzamosan és ezeket megfelelő csoportokba szervezve készíti el a kódot. A HW-nek már nem kell ezen gondolkodnia csak vakon ütemezni a csoportokból. A fejlesztés végén, a végső fordításnál nagyon sokáig is optimalizálhat a fordító, jó fordítókat készíteni is nehéz Predikáció utasítások feltételhez kötöttek (pl. CMOVZ R2,R3,R1 ha R1=0, R3 megy R2-be) feltételes elágazások csökkenthetők. IA-64 minden utasítása feltételessé tehető, minden ágat elkezd végrehajtani, a végrehajtási cső végén a feltétel alapján eldobja vagy végrehajtja Spekulatív betöltés memória regiszter betöltéseket a fordító előbbre hozza, mert lassúak. Ha sikertelen, nem megszakít, hanem mérgezett bitet használ ha amúgy sem kell ez az érték később, akkor simán dobjuk spóroltunk egy fölösleges megszakításkezelést
IA-64 Elképzelés jó Megvalósítás (SW) nagyon bonyolult, nem használja ki a HW-t Menet közben az x64 architektúrák mérhetőek lettek az IA-64-hez (ahol a fordítók nem tudják a HW-t kihasználni) Nehalem és Opetron azonos teljesítményt nyújt olcsóbban fejlesztést megint csak hátráltatja A távolabbi jövő mégis egy új, tisztán 64 bites architektúra Most érdemes megnézni a trendet : Google Trends példa ( itanium, core 2 duo, core i7 ) Top500.org, proc. arch. csoport
IA-64 Google Trends (2009 szept) kék: itanium 2,8 ; piros: nehalem 1 ; sárga: core 2 duo 16,4 ; zöld: core i7 1,8
IA-64 Google Trends (2010 szept) kék: itanium 2,8 ; piros: nehalem 1 ; sárga: core 2 duo 16,4 ; zöld: core i7 1,8
IA-64 Top500
IA-64 Top500