Black Friday = Pricewatch Bekijk onze selectie van de beste Black Friday-deals en voorkom een miskoop.

Multiprocessing (parallel programmeren op meerdere cores)

Pagina: 1
Acties:

  • Herko_ter_Horst
  • Registratie: November 2002
  • Niet online
Naar aanleiding van nieuws: Intel waarschuwt developers voor komst duizenden cores lijkt het mij interessant een discussie te voeren over de specifieke uitdagingen van multiprocessing[1], de verschillen met andere vormen van multitasking[2], de mogelijke gevolgen daarvan voor programmeerparadigmas[3] en meer algemeen de reden dat concurrent computing[4] als ingewikkeld word ervaren.

[1] Wikipedia: Multiprocessing
[2] Wikipedia: Computer multitasking
[3] Wikipedia: Parallel programming model
[4] Wikipedia: Concurrent computing (zie ook: Wikipedia: Parallel computing)

[ Voor 12% gewijzigd door Herko_ter_Horst op 03-07-2008 15:07 ]

"Any sufficiently advanced technology is indistinguishable from magic."


  • Herko_ter_Horst
  • Registratie: November 2002
  • Niet online
Om zelf af te trappen: in mijn dagelijks werk maak ik relatief beperkt (min of meer automatisch) gebruik van multiprocessing: in webapplicaties is multitasking min of meer een gegeven (de server handelt immers meerdere verzoeken "tegelijkertijd" af), zonder dat daar direct of specifiek voor mij als applicatieprogrammeur rekening mee moet worden gehouden.

Natuurlijk is het zo dat je toegang tot bepaalde resources moet synchroniseren, maar een behoorlijk deel van de parallelisatie gaat "automagisch" goed. Uiteraard is dit een relatief beperkte - en makkelijk te begrijpen - vorm van parallelisatie: het simpelweg "naast elkaar" uitvoeren van meerdere instanties van dezelfde seriële taak.

Buiten mijn werk om hobby ik ook nog wel eens wat in de gaming sfeer (en dan bedoel ik dus het programmeren daarvan). Vrijwel alle literatuur daaromtrent gaat uit van een single-threaded programmeermodel waarbij de "main loop" alle taken sequentieel uitvoert, teneinde uiteindelijk een serieel device (met name de grafische kaart/monitor) op tijd te kunnen voorzien van informatie. Optimalisaties zijn gericht op het zo kort mogelijk houden van de sequentieel uitgevoerde taken.

Het lijkt mij erg interessant te onderzoeken hoe parallel computing in games voordelen kan opleveren. Mijns inziens zijn de potentiele voordelen enorm, juist omdat je vaak te maken hebt met asynchrone processen: het verwerken van input van de gebruiker, het uitrekenen van acties van de AI elementen in een game, het berekenen van het fysieke model (de "simulatie" van het door de speler bestuurde element), het berekenen van het visuele model voor output naar het scherm, het berekenen van het aurale model voor output naar de speakers, etc.

Maar om dit behapbaar te houden zul je je goed bewust moeten zijn van de specifiek uitdagingen m.b.t. asynchrone verwerking. Vandaar dit topic :)

Ik ben benieuwd naar bestaande kennis en ervaring met concurrent programming en waarom dit zo vaak als buitengewoon ingewikkeld wordt ervaren. Ik heb zelf namelijk het gevoel dat concurrent programming niet heel veel anders is dan bestaande vormen van programmeren. Het stelt echter wel hogere eisen aan de juiste mate van abstractie en inkapseling van data (om in OO termen te spreken) en straft fouten daarin harder af.

[ Voor 17% gewijzigd door Herko_ter_Horst op 03-07-2008 15:10 ]

"Any sufficiently advanced technology is indistinguishable from magic."


  • chris
  • Registratie: September 2001
  • Laatst online: 11-03-2022
Wat heel interessant is in dit licht: Software Transactional Memory.

Interessant paper: Beatiful Concurrency, en nog interessanter: een praatje door Adam Langley: Software Transactional Memory en eentje door Simon Peyton Jones: Programming in the age of concurrency software: Software Transactional Memory. Volgens mij is dit dé manier: geen rare locks meer, composable en alles wordt dus een stuk eenvoudiger voor de programmeur.

  • .oisyn
  • Registratie: September 2000
  • Laatst online: 00:04

.oisyn

Moderator Devschuur®

Demotivational Speaker

Zoals in die draad ook genoemd: [alg] Gebruik maken van multiple cores
Lijkt me nutteloos om daar weer opnieuw over te beginnen. Wellicht dat een mod je reactie naar die andere draad kan verplaatsen.

Give a man a game and he'll have fun for a day. Teach a man to make games and he'll never have fun again.


Verwijderd

Ik werk momenteel aan mijn master afstudeerproject bij Silicon Hive, hier wordt uitermate veel gebruik gemaakt van parallellisme om te kunnen concurreren met de hardwired oplossingen. De drie belangrijkste niveaus waarop hier gebruik wordt gemaakt van parallellisme zijn:
- Task level parallellisme: meerdere cores die ieder een taak uitvoeren,
- Data level parallellisme: SIMD instructies zoals ook Intel en AMD ze hebben met bijvoorbeeld MMX,
- Instruction level parallellisme: iets waar je als programmeur van een intel processor vrij weinig mee te maken heeft. Maar een processor (vooral die van SiHi en andere) heeft vaak meerdere issue sloten waarin parallel instructies worden uitgevoerd.

Dit is een kleine greep van de verschillende niveaus waarop, ook in hedendaagse "desktop" systemen, parallellisme beschikbaar is.

  • .oisyn
  • Registratie: September 2000
  • Laatst online: 00:04

.oisyn

Moderator Devschuur®

Demotivational Speaker

Verwijderd schreef op donderdag 03 juli 2008 @ 15:19:
- Instruction level parallellisme: iets waar je als programmeur van een intel processor vrij weinig mee te maken heeft. Maar een processor (vooral die van SiHi en andere) heeft vaak meerdere issue sloten waarin parallel instructies worden uitgevoerd.
Heeft intel/AMD ook, alleen kun je dat niet expliciet opgeven maar is het afhankelijk van hoe je je instructies ordent en natuurlijk in welke mate ze van elkaar afhankelijk zijn.

Give a man a game and he'll have fun for a day. Teach a man to make games and he'll never have fun again.


  • chris
  • Registratie: September 2001
  • Laatst online: 11-03-2022
.oisyn schreef op donderdag 03 juli 2008 @ 15:12:
Zoals in die draad ook genoemd: [alg] Gebruik maken van multiple cores
Lijkt me nutteloos om daar weer opnieuw over te beginnen. Wellicht dat een mod je reactie naar die andere draad kan verplaatsen.
Ja, wellicht wat dubbelop, maar het lost wel een pijnpunt op: state die geshared is. Dát is wat het parallel programmeren zo moeilijk maakt.
Pagina: 1