Hirdetés

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

  • #25954560
    törölt tag

    Több magot akkor fog kihasználni, ha több szálon fut. Ahhoz meg az kell, hogy a feladatot lebontsd párhuzamosan végezhető műveletekre, lehetőleg hasonló számításigénnyel. Mindezt ideális esetben tetszőleges számú szálra, például az adatmennyiség n részre osztásával. Általában ehhez szükséges valami extra művelet, ami a részműveletek eredményéből összerakja a végeredményt. Például ha az a feladat, hogy készíts fényességdiagramot egy fényképről, akkor a képet feloszthatod annyi részre ahány mag van és a részekre párhuzamosan végrehajtod a számlálást. Végül pedig összeadod a részeredményeket. Persze ha lehetséges, akkor menet közben is egyből aggregálhatsz, csak akkor figyelni kell a szinkronizálásra. (Amire persze amúgy is figyelni kell). Ha eleve több feladat van (mint például egy web szerver esetén) akkor tipikusan a thread pool architektúrát szokták alkalmazni, amikoris az n (vagy n-1) végrehajtó szál párhuzamosan, de önállóan dolgozza fel a kéréseket. A feladatokat funkcionálisan is szét lehet bontani, csak ekkor nagyobb probléma az egyenlő elosztás illetve a tetszőleges skálázódás. Pl. egy játék esetén lehet dedikált futási szála a rajzolásnak, a hangkezelésnek, a hálózatkezelésnek -- csak ezek ugye közel sem azonos processzorigényűek.

    64 bites architektúra általában nem igényel speciális kódot, de persze ki lehet használni az előnyeit a nagyobb címtartománynak. Például ha van sok adatot tartalmazó fájlod amit eddig seek/read módon használtál véletlen elérésre, azt most nyugodtan bemappolhatod (jajj) a memóriába és így majd az operációs rendszer a hardver segítségével meggyorsíthatja a működést.
    Ugyanakkor át kell nézni a jelenlegi programot, nem végez-e trükköket (tipikusan pointer -> int -> pointer konverziót) ami nem működik 64 biten.

    Az x86-64 továbbá nem csak azt jelenti, hogy 64 bites a címtartomány, hanem több regiszter is van. Ezzel viszont c++ esetén elég a fordítónak foglalkozni.

    aha. latom mar, kozben talaltam par jo linket is.
    ha kizarolag unix/linux rendszerrol beszelunk, akkor mindig a kernel intezkedik az uj szalak szetosztasarol a magok kozott? (mondjuk terhelestol fuggoen)
    ha nem kene hozzanyulni minden egyes uj sokmagos proci megjelenesekor, akkor hogyan lehet erdemben 2, 4 es 8 magra elore megirni? megirom nyolc szalra es akkor ket magon is 2x4 szalon fut majd?
    memoriateruletek hozzaferesevel nem kell foglalkozni? vagy lehet azert nemileg optimalizalni?
    szerencsere olyan a cuccos h konnyu sok szalra bontani es raadasul csak az altaluk irt adattablak miatt kell figyelni arra h egyszerre csak egy valaki irhat. (nehogy belefussunk szoftveresen a tlb bugba :) )

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