Keresés

Hirdetés

Új hozzászólás Aktív témák

  • P.H.

    senior tag

    válasz DRB #41 üzenetére

    A HSA a leírt két definíciód között van (ahogy az említett nVidia PTX is pl.):

    - API sok helyen és sok szinten van, előre megírt/megvalósított eljárások összessége, pl. legalapvetőbben OS szinten is így megvalósítható az, hogy egy-egy alkalmazás memóriát foglaljon, írjon/olvasson lemezre, mutasson valamit a képernyőn úgy, hogy ne kelljen a legalacsonyabb szinten megvalósítani külön-külön minden programozónak ezeket (és/vagy az egymás mellett futó programok ne zavarják egymást). Ilyen szempontból a BIOS egy része is API ugyanúgy, ahogy az OpenGL is az, de más-más szinten és célra.

    - az utasításkészleteket közvetlenül megértik a CPU-k, GPU-k, vezérlők (pl. egy-egy SmartCard-szabványnak is eltérő utasításkészlete van, amit megért); ritkábban a nekik megfelelő gépi kóddal, gyakrabban az azt leképező assembly nyelvvel közvetlenül használhatóak (ez például az R600-ra épülő Radeon GPU utasításkészletének leírása). Így bármi megírható rájuk, de az csak azon az architektúrán fut egyáltalán vagy hatékonyan.

    A HSA, a PTX és a többi virtuális ISA a kettő között van: a hardware nem érti meg közvetlenül, ezért fordítani kell külön ARM-ra, x64-re, nVidia-ra, bármire, ami támogatja, de assembly nyelven leírható elemi utasításokból épül fel (mint pl. a PTX), magasabb szintű programozási struktúrák nélkül (nincs for ciklus vagy while se). Egy-egy ilyen vitruális utasítás gépi megvalósítása lehet direkten leképezhető egy-egy gépi utasításra (erre törekszenek a HSA-nál a belépő támogatók, a PTX-nél az nV), vagy sokra (ez a teljesítmény rovására megy, de korábbi hardware-ken is futnak az újabb verzióra épülő programok; gyenge példaként mintha egy AVX-re fordított program is futna egy P3-mon, csak lassan - ezért jó hasonlat a Java).

    Kb. ilyen a viszony a tradicionális API-k és a virtuális ISA-k között, amit ez a dokumentáció mutat , címe "Using inline PTX assembly in CUDA". A PTX-re lefordított bytekódot az nVidia semelyik GPU-ja nem érti meg közvetlenül (a CUDA-programozási környezetek erre fordítanak), a driver-ben van a végső fordító. Viszont egyrészt egyszer, a program az indításakor fordul le PTX-ből arra a gépben levő GPU által megértett gépi kódra, futás közben nem lassít a fordítás ˇ(lásd Java), másrészt erre a szintre lehet más komolyen optimalizálni (mivel a legtöbb vISA utasításnak közvetlenül egy-egy gépi utasítás felel meg; amelynek most nem, annak a következő generációs hardware-ben már meg fog).

    [ Szerkesztve ]

    Arguing on the Internet is like running in the Special Olympics. Even if you win, you are still ... ˙˙˙ Real Eyes Realize Real Lies ˙˙˙

Új hozzászólás Aktív témák