De situatie is niet dat iemand een spel ontwikkeld voor een bepaald platform en dan opeens tjakka, heej , laten we het ook voor een ander platform ontwikkelen.
Ze houden er van te voren rekening mee. In theorie hoeft dat helemaal geen probleem te zijn. Je brengt gewoon meerdere abstractie lagen aan. Bijvoorbeeld een kleine core set routines die met de hardware praten, met daarnaast 99% van je code die niks hardware specifiek doet.
Maar dan is het nog een immens karwei. Geen van de hardware (pc, ps2, ps3, xbox) praat in termen van 3d-werelden, phyics, etc. De hardware zelf biedt over het algemeen een erg minimale set operaties aan.
Maar zelfs dat is alweer een abstractie. De hardware zelf is zelf namelijk weer opgebouwd uit nog een minimalere set operaties: namelijk een. (ja, precies 1!). De transistor. Je kunt elk mogelijk algoritme maken door transistors te koppelen. Maar een Half-Life2 engine maken als hardware dmv transistors zou dan theoretisch mogelijk zijn: het is een onmens karwei en niet bepaald schaalbaar (hoe update je dat? ehm niet!)
Dat in de praktijk het lastig is om spellen voor meerdere hardware en software platformen te ontwikkelen is dan ook vaak opzet van de fabrikant. Ze leveren bewust een eigen api (abstractie-laag) die alleen op hun eigen hardware draait.
Daarnaast komt met elke abstractie laag een performance prijs. Stel dat op verschillende hardware verschillende core operaties verschillende performance hebben. Dan gebruik je dus een algoritme dat gemiddeld wel aardig draait, terwijl andere (functioneel gelijkwaardige) algoritmes misschien voor specifieke hardware sneller zouden zijn. Een mooi voorbeeld waar dit merkbaar is Java. De generiekheid van de logica achter het de code uit zich in slechtere performance.
Een nog extremer voorbeeld is brute-force hardware emulatie. Wat vooral geschikt is om ongeplande portabiliteit te verkrijgen. Je hebt dan nog steeds machiene specifieke code, maar je 'interpreteert' het dan op een andere machiene en simuleert het gedrag. En ja, dat is zo langzaam als het klinkt.
Daarnaast baseren de meeste game-corps hun games op 3rd-party api's zoals de Unreal Engine. De unreal-engine zelf is netjes volgens de idee-en hierboven over abstractie in elkaar gezet, en bevat dus ook 1 klein software module'tje dat per platform verschilt. De games-fabrikant zelf werkt dan met Unreal Script, dat platform onafhankelijk is, en wel praat in termen van natuurkunde weten, 3d-werelden, etc.
Een alternatieve technologie die af en toe opduikt is trouwens template-based (generatieve) programming. Waar je niet een programma schijft, maar een programma dat een programma genereert (ben je er nog?). Zie ook
http://www.program-transf...GenerativeProgrammingWiki
Die techniek duikt nu ook in web-ontwikkeling dmv Ruby on Rails bijvoorbeeld.
De playstation Cell technologie is trouwens minder moeilijk te gebruiken dan er door sommige (slecht-geschoolde?) programmeurs wordt beweerd, mits er gebruik wordt gemaakt van een declaratieve programmeertaal waar elke functie zich wiskundig gedraagt (gegeven dezelfde input altijd dezelfde output).
Dat soort functies kun je inherent parrelel uitvoeren zonder problemen. Object-georienteerd daarintegen is heel moeilijk parrelel (of zelfs concurrent) te maken: juist doordat de object state mogen bevatten. Maar ook dat begint een minder groot probleem te worden nu de hardware steeds betere primitieven voor message-passing begint te leveren. (Wat op hetzelfde neer komt als declaratief programmeren en de state stiekem rondgeven als argument aan elke functie. Dit zie je nog terug in programmeertalen zoals python, waar je $this mee krijgt als eerste argument)
Meer informatie over referentiele transparency:
http://en.wikipedia.org/w...ct_%28computer_science%29
http://en.wikipedia.org/wiki/Referential_transparency
Het komt in ieder geval erop neer dat alle delen van een programma die referentieel transparant zijn, inherent gewoon parrelel kunnen worden uitgevoerd zonder dat de werking hiervan op welke manier dan ook anders zal uitpakken.
Denk aan een wiskundige formule ala (a / a) * (b x b) .. waar de sub-expressies (a / a) en (b x b) door een aparte chip zouden kunnen worden uitgerekent. (alle wiskunde is per defintie referentieel transparant)
Nou is het wel zo dat niet alle algoritmes parralel sneller kunnen worden. Denk dan bijvoorbeeld aan de wiskundige formule (a * (b * (c - d))). Waar je eerst (c - d) moet uitrekenen, om (b * (c - d)) uit te rekenen, waarna je pas weer (a * (b * (c - d))) kunt weten.
Mits goed gebruikt zijn alle superlatieven van Sony over hoe goed de performance van de PS3 zal zijn, dan ook niet overdreven. In plaats van een dure, snelle chip, die een-voor-een commando's uitvoert, een hele zooi goedkopere, langzame, chips die tezamen veel meer informatie kunnen verwerken. Het zou wel eens veel goedkoper veel meer rekenkracht kunnen opleveren.
De wiskunde die bij 3d graphics komt kijken is overigens juist heel geschikt voor parralelisme. Gegeven een view-port en een zooi shaders staat de bereking van elke pixel op zichzelf (en kan dus parrelel plaats vinden). Alle 3d kaarten die op dit moment op de markt zijn dan ook op dit princiepe gebaseerd.
En dat je die truuk en zo'n chip dus alleen voor 3d graphics zou kunnen gebruiken is dan ook klinkklare onzin. Er is niks 3d specifiek aan een 3d kaart en waarom dat ding niet allang onze main CPU vervangen heeft? Joost mag het weten! Misschien iets met geld, aandelen, backward-compatibility met oude software, corruptie of regelrechte zwendel.
Maar Sony dus niet, die begrepen het wel, hulde! Het is slechts een kwestie van tijd voordat je desktop-cpu ook op deze wijze in elkaar steekt.