|
dev.gamez.lv Latvian Game Developers Community
|
View previous topic :: View next topic |
Author |
Message |
Marcina
Joined: 15 Aug 2006 Posts: 26 Location: Rīga
|
Posted: Sat Dec 16, 2006 6:53 pm Post subject: Neiespējamais |
|
Zinu, ka it kā tas nav iespējams, bet nu tomēr...
Vai var piespiest, ka tiek veiktas divas darbības vienlaikus, piemēram
1) i*5
2) i+56
Tikai atcerieties, ka ne par cikliem te iet runa, bet gan, kā dabūt, lai mašīna veic uzreiz divas operācijas.
Labi, pieņemam, ka viens kodols - fiziski it kā nav iespējams, bet manam datoram core duo - divi kodoli, tātad faktiski šāds gadījums var pastāvēt!!
Vai kāds ir interesējies un zin, kā to izdarīt!
Ar lielu gribu noklausīšos!!! |
|
Back to top |
|
|
bubu Indago Uzvarētājs
Joined: 23 Mar 2004 Posts: 3223 Location: Riga
|
Posted: Sat Dec 16, 2006 7:03 pm Post subject: |
|
No tādu mazu operāciju paralelizēšanas nav nekādas jēgas. Jādomā ir augstākā līmenī. Piemēram - vienlaicīgi lasīt failus un zīmēt kautko uz ekrāna. Vai tml.
To sauc par multithreadingu. Ir tāds thread, operētājsistēma to uzskata par kautko, kas spēj izpildīt programmu, tb tam tiek izdalīts procesora laiks. Parasti programma = viens threads. Taču programma var radīt papildus threadus, kuri var izpildīt programmas kodu paralēli. Ja ir vairāk-kodolu procesors, tad threadi izpildīsies katrs uz sava kodola. Ja nav, tad threadi izpildīsies pamīšus - tb bišķu no viena, bišķu no otra, un tā ciklā kamēr tie izbeidzās.
Katrā ziņā tas nav vienkārši. Tur rodās daudzas problēmas - kā sasinhronizēt threadus, kā nepieļaut vienlaicīgu viena mainīgā izmaiņu no dažādiem threadiem, ko darīt ar statiskiem lokālajiem mainīgajiem, utt.
Sāc lasīt te: http://en.wikipedia.org/wiki/Thread_%28computer_science%29
Vēl arī šo var apskatīties:
http://paulbridger.net/multithreading_tutorial
http://www.flipcode.com/articles/article_multithreading.shtml
http://www.codeproject.com/useritems/MultithreadingTutorial.asp
http://users.actcom.co.il/~choo/lupg/tutorials/multi-thread/multi-thread.html
http://igdavienna.org/documents/A%20Multithreaded%20Approach%20to%20a%20Rendering%20Pipeline.htm
Un gūglē meklē uz keywordiem: multithreading, threads. |
|
Back to top |
|
|
GiGa Indago Uzvarētājs
Joined: 25 Sep 2003 Posts: 887
|
Posted: Sat Dec 16, 2006 7:07 pm Post subject: |
|
Atceries, ka viena procesa viens threads reizē var izpildīties tikai uz vienas cores. Tas nozīmē - ja vari programmu sadalīt divos paralēlos threados, ir cerība, ka tie izpildīsies paralēli, ja tev ir vairāku proči/cores. Bet viena threada divas sekojošas instrukcijas uz dažādām corēm - nē.
Var izmantot modernu procesoru papildus instrukcijas, kas ļauj vairāka līdzīgas darbības (piemēram, vairākas float reizināšanas) veikt vienlaicīgi uz vienas cores. Bet divas pilnīgi dažādas darbības: * un +, nē. Vismaz ne ar man zināmām procesora instrukcijām |
|
Back to top |
|
|
bubu Indago Uzvarētājs
Joined: 23 Mar 2004 Posts: 3223 Location: Riga
|
Posted: Sat Dec 16, 2006 7:21 pm Post subject: |
|
Ar AltiVec instrukcijām uz PPC var reizē saskaitīt un sareizināt. Tā ir dikti noderīga instrukcija vektoru skalārajam reizinājumam. Kautgan tagad ar SSE3 arī var ātri (tb ātrāk nekā bez SSE3) izrēķināt vektoru skalāro reizinājumu (tikai gan ne reizinot un saskaitot vienlaicīgi). Un kāpēc vekotru skalārais reizinājums ir svarīgs man droši vien stāstīt nevajag (matricu reizināšana, vektora garuma izrēķināšana - šie abi arī rēķinās ar vektoru skalārā reizinājuma palīdzību).
AltiVec ir SSE analogs uz PPC procesoriem. PPC tiek lietots vecajos Apple Makos, kā arī Xbox360 un Wii konsolēs. |
|
Back to top |
|
|
|
|
You cannot post new topics in this forum You cannot reply to topics in this forum You cannot edit your posts in this forum You cannot delete your posts in this forum You cannot vote in polls in this forum
|
Powered by phpBB © 2001, 2005 phpBB Group
|