WTF, alsof dit nieuw is... in HPF (high performance fortran) werkt dit al jaren (sinds 1993) zo...
"alleen maar aangeven wat parallel uitgevoerd kan worden..." dat is juist de hele clou! Je wilt dat de compiler dat zelf ziet...
edit:
@tw-is back: ik neem aan dat je op mij reageert: ja. daar is een commando voor.
Ik vind trouwens ook nog een oude extensie voor C: MPI (Message Passing Interface, sinds 1994). Werkt ook heel goed...
edit2: @.oisyn
Ja, maar dat is ook niet echt nieuw: je kan die MPI extensie ook zo automatiseren... maar goed... compiler is compiler... hoe automatischer, hoe beter, niet? behalve voor de mensen die geoptimaliseerd code schrijven dan, zoals ik.
@Bitage: jij roept toch ook maar "zoiets"

"als het geen nieuws was, zou het er niet staan"
edit3:
@die twee onder mij: ja, ik weet er iets meer van dan de gemiddelde boer, ze geven geen MSc. Computer Engineering diploma's aan jan en alleman. Ik vind het dus heel knap dat jullie weten dat ik "de ballen verstand" heb van computer architecture, terwijl dat juist mijn specialiteit is. Maar goed, Ik weet niet wat jullie probleem is, maar ik mis in jullie afzeikverhaal in ieder geval de concrete onderbouwing.
edit4:
@oisyn: heb je door dat je mij beschuldigd van dat ik doe alsof ik het allemaal zo goed weet, terwijl jij dat zelf aan het doen bent? Ik stel alleen aan de kaak dat ik zo op het eerst gezicht niet zie wat hier nieuw aan is. Extensies voor C die parallelle systemen ondersteunen bestaan al. Het enige wat ze hebben gedaan is de compiler iets aangepast. Eigenlijk meer een soort "macro". Maar wat krijg ik voor reacties? Mensen die reageren alsof ik hun moeder heb beledigd.
En verder: als mensen met een WO diploma maar een theoretische onderzoekers zijn, die niets waard zijn in de praktijk, waarom krijgen ze dan wel meer betaald dan HBOers? Ik weet niet welke WOer jou ooit het leven zuur heeft gemaakt, maar jou standpunt is echt onredelijk.
Maar goed een voorbeeld: (hun voorbeeld)
sieve {for (int i=0; i<n; i++) {a [i] = b [i] - f;}}
is in HPF gelijk aan:
_forall (i=0:n)
__a(i) = b(i) - f
_end forall
Dit voorbeeld is, zoals al werd gezegd, embarrassingly parallel. Ik vraag mij bijvoorbeeld af wat de compiler doet met zoiets als:
sieve {for (int i=2; i<n; i++) {a [i] = a [i-1] + a[i-2] ;}}
en dat is nog een relatief simpel probleem. Neem bijv. een N-body probleem en het wordt nog complexer. Je kan het partitioneren, maar je blijft de randen houden... veel dataverkeer... lost die compiler vast niet zelf op...
In andere gevallen, bijvoorbeeld wanneer n heel klein is, kost het distribueren van de data over al de CPU's meer tijd dan berekening op 1 CPU had gekost... wanneer de programmeur verwacht dat de compiler dat voor hem uitzoekt en dat dus niet gebeurt, zal zijn code trager draaien.
Als je het tweede voorbeeld ziet, zie je trouwens dat je de code ook moet omgooien voor deze extensie...
Misschien moet je de bron even lezen, dan wordt het al een stuk duidelijker. Je kunt wel een compiler bouwen die dit uitvogelt, maar dit is lang niet zo efficient als het zou kunnen zijn omdat de compiler alleen weet wat de code zou moeten doen, niet wat uiteindelijk de bedoeling is.
De hulp die de programmeur bij dit Sieve systeem moet bieden is minimaal. Hij hoeft alleen maar de juiste codeblokken te markeren waarvan hij het niet erg vindt dat de resultaten pas aan het eind van het totale blok gegarandeerd klaar zijn. Dat helpt het systeem bij het analyseren van het programma en zo worden de taken verdeeld over de beschikbare cores, en kan daarnaast informatie geven over wat te doen om je code beter parallelliseerbaar te maken. Dit alles staat echt in schril contrast met het werk dat je moet verzetten om zelf te zorgen dat je code over meerdere threads verdeeld wordt.
hoe automatischer, hoe beter, niet? behalve voor de mensen die geoptimaliseerd code schrijven dan, zoals ik.
Oh please

. Het is wel te horen dat jij nog nooit aan grote commerciële projecten hebt gewerkt. En ik wed dat je alleen maar *denkt* dat je code optimaal is omdat je *iets* van assembly afweet, maar eigenlijk de ballen verstand hebt van hoe ondeterministisch en complex hedendaagse CPUs zijn waardoor jouw schijnend optimale code eigenlijk vol zit met memory- en pipeline stalls. Get a life en wees niet zo naïef door te denken dat jij het allemaal wel beter weet.
.edit2: lol, jij denkt serieus dat een master in computer engineering iets zegt over praktijkervaring? Als je al niet eens snapt dat je op een universiteit wordt opgeleid tot onderzoeker met een theoretische achtergrond, dan denk ik idd dat ze die diploma's aan Jan en Alleman geven ja

. Zeker als je hier ook nog eens gaat roepen dat dit "niet nieuw is" terwijl je je schijnbaar niet in hebt verdiept wat dit nou eigenlijk doet.
Desalniettemin ging ik uit van je galery page hier op t.net, daar stond geen software development aangevinkt terwijl je schijnbaar wel de moeite hebt genomen om het in te vullen. Dat, icm "elektrotechniek" bij de opleiding en je professionele ervaring met server- en netwerkbeheer doet mij vermoeden dat je met hele andere dingen bezig bent dan op professionele basis geoptimaliseerde software te schrijven. Klik trouwens gerust op mijn galery page om erachter te komen wat ik in mijn dagelijkse leven doe. Kom met keiharde voorbeelden ipv gaan lopen zwaaien met je papiertje, want dat zegt idd geen zak.
Mijn onderbouwing staat er trouwens al, in de eerste twee alinea's van deze post. Je MPI argument houdt geen stand omdat dat vereist dat je je code omgooit voor dergelijke extensies, net als bij OpenMP ben je nog op een te low-level manier bezig met het parallelliseren, waar ze ook voor zijn ontworpen. De changes voor Sieve zijn echter minimaal en werken juist op een hoog niveau, door je applicatie te analyseren en te doorgronden, om zo te bepalen hoe jouw -sequentieel opgezette- code paths kunnen worden geparallelliseerd, en je bovendien hints te geven over de te verwijderen dependencies om het nog beter parallelliseerbaar te maken.
Het feit dat jij denkt dat dit al bestaat door met HPF of en MPI te komen geeft eigenlijk al aan dat je er geen idee van hebt wat dit nou eigenlijk doet en wat het doel ervan is. En het spijt me zeer, maar daar gaat je diploma je ook niet bij helpen.