HTML

gondolataim elsősorban játékfejlesztésről

Elsősorban játékfejlesztés magyarul: az enginem fejlesztése során felmerülő problémák, ötletek, tévutak stb dokumentálása, amely számomra és talán mások számára is hasznos lehet később Másodsorban gondolatok szavakban...

Kapcsolat:
aalberik 'at' gmail 'dot' com

Haletető

Galéria

Címkék

Összes

Linkblog

Naptár

december 2024
Hét Ked Sze Csü Pén Szo Vas
<<  < Archív
1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31

Dupla szál, dupla buffer

2010.03.11. 15:49 :: syam

Az elmúlt időben sokat foglalkozva a csontváz alapú animálással sokféle optimalizálási lehetőség felmerült. Legtöbbjük csak korlátozottan vagy speciális helyzetekben volt alkalmazható. Utolsó választásom a probléma többszálúsításra esett mivel manapság egyre inkább elterjedtté válnak a két- ill. többmagos cpu-k.

Ha teljesítményfokozásra szeretnénk használni a másik szálat akkor óvatosnak kell lennünk. Előfordulhat ugyanis, hogy a kétszálas megoldás lassabb lehet, mint az eredeti változat. Különösen igaz ez akkor, ha a két szálat szinkronizálnunk kell várakozás beiktatásával vagyis úgy tünik, hogy a szinkronizálás ezen formája teljesítményfokozás céljából mindenképp kerülendő (bár nem ástam magam mélyre a szálazás rejtelmeibe a szinkronizálás másfajta lehetőségeiért).

Azonban viszonylag egyszerűen kiiktathatjuk a várakozás szükségességét, ha a két szál által használt adatot dupla buffereljük. Mint legtöbb esetben ez itt is azt jelenti, hogy az egyik szál az egyik bufferból csak olvas, míg a másik szál a másik bufferbe csak ír. Amikor a másik szál végzett az írással (mivel gyakorta ez a lassabb művelet) akkor a buffereket felcseréljük. Így sosem fordulhat elő, hogy az írás alatt álló buffer kerül olvasásra. Megjegyzendő, hogy a bufferváltás csak egy utasításból állhat! Ellenkező esetben a bufferváltás közben bizonyos ideig ugyanazon buffert használhatja vagy ugyanazt az adatot láthatja a két szál (ezen hiba felismerése majdnem 2 órámba került).

Két gyakorlati alkalmazás az esetemben:

  • a renderelés mindig nem abból a vertex bufferből történik, amelynek a vertexeit számoljuk vagyis a fő szál olvas és az animáló szál ír
  • az animálandó modellek listája is szintén dupla bufferelt, de itt a fő szál ír és az animáló szál olvas

Szólj hozzá!

Címkék: csontváz multithread

A bejegyzés trackback címe:

https://sakura7.blog.hu/api/trackback/id/tr21831578

Kommentek:

A hozzászólások a vonatkozó jogszabályok  értelmében felhasználói tartalomnak minősülnek, értük a szolgáltatás technikai  üzemeltetője semmilyen felelősséget nem vállal, azokat nem ellenőrzi. Kifogás esetén forduljon a blog szerkesztőjéhez. Részletek a  Felhasználási feltételekben és az adatvédelmi tájékoztatóban.

Nincsenek hozzászólások.
süti beállítások módosítása