.[ ČeskéHry.cz ].
vícejádrové programování?

 
odeslat nové téma   Odpovědět na téma    Obsah fóra České-Hry.cz -> Obecné
Zobrazit předchozí téma :: Zobrazit následující téma  
Autor Zpráva
shipo



Založen: 05. 11. 2007
Příspěvky: 19

PříspěvekZaslal: 8. únor 2008, 12:00:07    Předmět: vícejádrové programování? Odpovědět s citátem

Neznáte někdo nějaký odkaz, název knihy nebo příklad o problematice rozdělení aplikace(her) na paralelně běžící části?
Stačilo by snad rozumně vytvořit co nejvíce podprocesů a nechat systém ať si je aktuálně rozdělí na jádra CPU podle zátěže?
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
rezna



Založen: 27. 07. 2007
Příspěvky: 2156

PříspěvekZaslal: 8. únor 2008, 12:15:58    Předmět: Odpovědět s citátem

vysokoskolska skripta o paralelismu - zakladni synchronizacni techniky (mutex, kriticka sekce, ...) - rozdeleni casovych kvant pro jednotliva vlakna/procesy - vzdavani se casoveho kvanta - aktivni/pasivni cekani - ...

netyka se to vice-jadroveho programovani - obecne staci multi-threaded programovani - to ze mas vic jader je dnes jenom takove "IN", ackoliv je to stare a zname protoze vice procesorove stanice jsou tu uz nekolik desitek let, a stejne tak treba gridy/clustery
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
Fila



Založen: 31. 07. 2007
Příspěvky: 853

PříspěvekZaslal: 8. únor 2008, 14:25:20    Předmět: Re: vícejádrové programování? Odpovědět s citátem

shipo napsal:
Stačilo by snad rozumně vytvořit co nejvíce podprocesů a nechat systém ať si je aktuálně rozdělí na jádra CPU podle zátěže?

Co nejvic snad ani neni potreba (staci kdyz jich nebude min nez jader), dulezite je ono "rozumne" -- system neni zpravidla v pridelovani CPU blby, horsi je rozdelit aplikaci tak, aby se jednotlive procesy/vlakna opravdu rovnomerne podelily praci a vyuzily tak co nejvic z CPU v systemu. Pokud bys mel 100 procesu, jeden by delal 99 % prace a zbylych 99 se delilo o 1 %, byl by ti naprd system o libovolnem mnozstvi procesoru Smile.

Jinak nic konkretniho o paralelizaci problemu ve hrach neznam, dulezite je prostudovat si jak funguji synchronizacni nastroje operacniho systemu, jak psal Rezna. Pak je taky dulezite naucit se trosku "myslet paralelne" -- muzes napr. studovat existujici paralelni algoritmy.
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
Ladis



Založen: 18. 09. 2007
Příspěvky: 1536
Bydliště: u Prahy

PříspěvekZaslal: 8. únor 2008, 15:43:39    Předmět: Odpovědět s citátem

Ve hrach je multithreading relativne stale jeste novinka, takze o tom asi moc clanku nenajdes. Muzes si vygooglit clanky a prezentace Tima Sweeneyho, autora noveho Unreal3 enginu, nicmene po zadani tim sweeney multithreading do Googlu je spousta toho jen nejaky kratky zpravy nebo diskuzni fora Sad.

EDIT: Jo jinak, ja bych problem vyuziti jader CPU zkusil realizovat modelem producer-consumer. Pro predstavu, nejaky prehledny priklad: Mas softwarovou transformaci vertexu modelu ve hre, tak single-threaded model je, ze projde pole vertexu od zacatku do konce a kazdy transformuje. Multi-threaded model producer-consumer je, ze mas objekt, ktery vrati nasledujici kus N vertexu ke zpracovani, a objekty, ktere obdrzeny kus transformuji (a nekam ulozi). Takze pak pro 2 jadra mas 2 consumer-thready, kazdy si vezme treba 1000 vertexu, a kdyz je s jejich zpracovanim hotov, tak si vezme dalsi kus, dokud to neni cele zpracovane (predpokladam vytizeni objektem vracejiciho vertexy minimalni; obe jadra budou naplno vytizena a je jedno, jestli nektera zpracovavana data jsou zpracovana rychleji nebo pomaleji - narozdil od modelu, kdy si zpracovavana data rozdelis na stejne velke dily).
_________________
Award-winning game developer
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
rezna



Založen: 27. 07. 2007
Příspěvky: 2156

PříspěvekZaslal: 8. únor 2008, 16:27:26    Předmět: Odpovědět s citátem

Ladis: to je dobry napad, ale musi se dat pozor na to abys ty pocty vertexu mel opravdu rozumne velke, jinak muze prijit neprijemna rezie prepinani vlaken a prilis velka rezie pridelovani kusu

treba pokud nekdo pracuje s 1M vertexu tak 1k vertexu jako dil je dost malo. spis tak 100k vertexu by bylo optimalni - protoze si predstav ze se bude muset 1000x prepnout vlakno a 1000x pridelit zpracovavany kus.

kdezto i pri kusu 100k vertexu je porad sance na az 2nasob. urychleni a pritom tam nemas rezii prepinani vlaken - prepne se +- 10x

Autor: dalsi moznosti kde je uziti multithreadingu (a tim moznost pripnout vlakna k ruznym procesorum (nerikam schvalne jadrum, protoze proste jsou to procesory) je oddelit grafiku a fyziku a kazde pocitat s jinou frekvenci (ikdyz i toto si kolega z prace osetril do single-threadu). typicky fyzika drzi svuj posledni stav vystaveny 0.1s a az pak se znovu dopocita a vystavi novy stav - to mezi tim se interpoluje (protoze typicky grafika na 60FPS ma tedy delku jednoho "stavu" 0.0166s.

ale je potreba se zamyslet jestli se ti tyto hratky vyplati.

PRO:
-- jednoznacne pro je zprehledneni citelnosti kodu
-- nemyslim ted samotnou synchronizaci vlaken/procesu ale to samotne oprogramovani fyziky napr. proste dany kus kodu je jenom fyzika, v nekonecne smycce se ti nemicha vsechno dohromady

PROTI:
-- problemy s uvaznutim - dead-locky - toto je snad nejhorsi vec nad odladeni, protoze to typicky nastava zcela nahodne
-- problemy se sdilenim dat - musis si dat pozor aby vsechna data ktera sdilis a je mozne do nich i zapisovat byla pocitve uzamykana a tudiz nedoslo k tomu ze jeden druhemu neco prepise

takze prvne by tvoje uvaha hlavne mela smerovat na to co je pro tebe lepsi - jestli obetovat cast vykonu a mit kod ktery se nechova cas od casu znacne nepredpovidatelne a nebo jestli ti stoji jit do nekonecneho debugovani a hlavne do teoretickych uvah a modelovani propojeni sdilenych objektu za nejaky ten vykonnostni narust.
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
Fila



Založen: 31. 07. 2007
Příspěvky: 853

PříspěvekZaslal: 8. únor 2008, 16:48:53    Předmět: Odpovědět s citátem

Jen poopravim Reznu -- pokud ti bezi na kazdem procesoru jedno vlakno, tak te nemusi trapit prepinani stavu, zadny se neprepina. I tak je ale treba davat bacha, abys vytezil vic z paralelniho spracovani, nez promrhal komunikaci mezi thready a zamykanim. Obecne se hodi paralelizovat vypocty, kdy jsi schopen rozdelit data nad kterymi pracujes na vice skupin a ty pridelit jednotlivym vlaknum, v momente, kdy se o tato data (pri zapisu) vlakna tahaji, to je problematicke.
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
kerekes



Založen: 29. 07. 2007
Příspěvky: 57

PříspěvekZaslal: 8. únor 2008, 17:04:53    Předmět: Odpovědět s citátem

Pokial by slo o c++, tak nedavno som zacal skumat OpenMP. Ide o kniznicu pre podporu multithreadingu na zaklade zdielanej pamate. Pracuje sa s tym celkom jednoducho (resp. ovela jednoduchsie ako priamo s volanim os-ka (winapi). Musi to vsak podporovat kompilator. Defaultne to podporuje vc++ 2005 pro, myslim ze aj g++ od nejakej verzie 4.2.
Napriklad automaticke rozdelenie spracovania cyklu for sa da definovat:

kód:

#include <omp.h>
...
#pragma omp parallel for
for(int i......)
{
   // toto sa rovnomerne rozlozi do vlakien, ktorych
   //pocet je vecsinou rovny poctu procesorov/jadier pocitaca
}

Podporuje to viacero konstrukcii pre blizsie info vid dokumentaciu.

Avsak nieje to ziaden zazrak a mysliet "paralelne" a na synchronizaciu je potrebne.

Napriklad jednoduchy cyklus v ktorom som vykonaval nejaky "hardcore" vypocet (seria sqrt,cos,sin,pow a pod) a vysledky ukladal linearne do pola prebehol s povolenym OpenMP zdruba o 90% rychlejsie (na dvojjadrovom cpu). Obe jadra boli vytazene na 100% v task manageri. (vysledok cas 1.17s vs 2.28s).

Ked som to ale aplikoval na SW skinovanie (rozdelenie cyklu skinovania vrcholov), tak pri testoch to nepreukazalo ziaden vykon naviac. Zrejme nejake zavislosti a thready na seba museli cakat....ajked tam ziadne zavislosti nevidim Smile ..... mozno citanie z rovnakeho pola matic a zdrojovych (bind pose) vrcholov.
Mozno by to bolo dobre skusit na urovni postav. (Pri testoch sa skinovalo 100 postav o 3400 vrcholoch....(16fps takze bottleneck bol tam) viem ze gpu to da omnoho rychlejsie....slo mi o skusenie openmp)

Kazdopadne sa s tym este pohram a odporucam to pre jednoduchost pouzivania aj ostatnym.
[/code]
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
shipo



Založen: 05. 11. 2007
Příspěvky: 19

PříspěvekZaslal: 9. únor 2008, 06:52:13    Předmět: Odpovědět s citátem

Všem moc děkuju za rychlé odpovědi Smile , docela mě nasměrovali(už vím co a kde hledat).
Nejde mi ani tak o pararelní řešení 1 výpočtu(SIMD), ale spíš o zkloubení několika různejch oblastí(AI,Fyzika,příprava,analýza) ve hře, co si můžou krádkodobě žít vlastním životem. Krásně to vystihl rezna:
rezna napsal:
dalsi moznosti je oddelit grafiku a fyziku a kazde pocitat s jinou frekvenci (ikdyz i toto si kolega z prace osetril do single-threadu). typicky fyzika drzi svuj posledni stav vystaveny 0.1s a az pak se znovu dopocita a vystavi novy stav - to mezi tim se interpoluje (protoze typicky grafika na 60FPS ma tedy delku jednoho "stavu" 0.0166s.

A ty pak pomocí vláken(thread) a procesů nechat rozdělit na uživatelovi procesory, s ohledem na prepinani stavu(ukladáním stavu procesoru na zásobník).
Škoda že o tom není zrovna moc článků, ale pararelní programování je taky zajímavý. Ještě jednou dík.
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
Zobrazit příspěvky z předchozích:   
odeslat nové téma   Odpovědět na téma    Obsah fóra České-Hry.cz -> Obecné Časy uváděny v GMT + 1 hodina
Strana 1 z 1

 
Přejdi na:  
Nemůžete odesílat nové téma do tohoto fóra
Nemůžete odpovídat na témata v tomto fóru
Nemůžete upravovat své příspěvky v tomto fóru
Nemůžete mazat své příspěvky v tomto fóru
Nemůžete hlasovat v tomto fóru


Powered by phpBB © 2001, 2005 phpBB Group


Vzhled udelal powermac
Styl "vykraden" z phpBB stylu MonkiDream - upraveno by rezna