211service.com
Het probleem met multi-core computers
De topcomputers van tegenwoordig hebben dual-coreprocessors: twee rekeneenheden die tegelijkertijd verschillende taken aankunnen. En volgend jaar zullen de grote chipfabrikanten Intel en AMD quad-coresystemen hebben uitgerold. Hoewel meerdere processors in theorie sneller zijn dan een enkele kern, is het schrijven van software die gebruikmaakt van veel processors - een taak die parallel programmeren wordt genoemd - buitengewoon moeilijk.
Recent onderzoek van MIT zou parallel programmeren echter gemakkelijker kunnen maken, en uiteindelijk helpen om de prestaties van persoonlijke computers op schema te houden. De onderzoekers stellen een nieuw computerraamwerk voor dat gespecialiseerde software-instructies en aanpassingen aan multi-core hardware combineert, waardoor programmeurs software kunnen schrijven zonder dat ze te maken krijgen met vervelende parallelle programmeerdetails.
Historisch gezien was het schrijven van software voor multi-coresystemen de taak van experts in de supercomputerwereld. Maar met het komende tijdperk van persoonlijke supercomputers, moeten gemiddelde programmeurs ook software kunnen schrijven met meerdere cores in gedachten.
Dat is eng, zegt Krste Asanovic , hoogleraar elektrotechniek en computerwetenschappen aan het MIT, omdat de meesten dat nog nooit hebben gedaan, en het is best moeilijk om te doen. Asanovic en zijn collega's pakken een van de belangrijkste uitdagingen aan waarmee programmeurs worden geconfronteerd wanneer ze software proberen te schrijven die efficiënt werkt op multi-coresystemen: het coördineren van meerdere taken die op afzonderlijke kernen worden uitgevoerd op een manier die het systeem niet doet crashen .
Wanneer een applicatie zoals Microsoft Outlook of een videospeler wordt geparallelliseerd, worden bepaalde taken verdeeld over de processors. Maar vaak moeten deze afzonderlijke taken in een gedeelde geheugencache duiken om toegang te krijgen tot gegevens. Wanneer een transactie toegang heeft tot het geheugen en een andere transactie toegang nodig heeft tot hetzelfde deel van het geheugen en er geen goede beveiligingen zijn getroffen, kan een systeem crashen. Dit kan worden vergeleken met een stel met een gedeelde betaalrekening met beperkte middelen die tegelijkertijd cheques schrijven en per ongeluk rood staan van de rekening.
Standaard parallel programmeren vereist dat een programmeur op deze gelijktijdige activiteiten anticipeert en ervoor zorgt dat zodra een bepaalde activiteit toegang krijgt tot het geheugen, andere activiteiten worden geblokkeerd, zodat ze wachten tot de transactie is voltooid.
Als ze correct worden geïmplementeerd, versnellen de sloten parallelle systemen, maar het in de praktijk brengen ervan is ingewikkeld, zegt Jim Larus, research area manager bij Microsoft. Zo legt hij uit dat twee verschillende applicaties tegelijkertijd sloten kunnen krijgen, waardoor ze op elkaar moeten wachten. Zonder dat er een derde partij komt om de impasse te doorbreken, zegt Larus, zouden de applicaties bevroren blijven.
De MIT-onderzoekers omzeilen dit door een benadering te gebruiken die transactiegeheugen wordt genoemd, een onderzoeksgebied dat de afgelopen vijf jaar is geëxplodeerd, zegt Asanovic. Transactioneel geheugen coördineert softwarebewerkingen, zodat programmeurs het niet in hun programma's hoeven te schrijven. Hiermee kunnen meerdere transacties tegelijkertijd hetzelfde geheugen delen. Wanneer een transactie is voltooid, controleert het systeem of andere transacties geen wijzigingen in het geheugen hebben aangebracht die de uitkomst van de eerste transactie zouden belemmeren. Als dat het geval is, wordt de transactie opnieuw uitgevoerd totdat deze is gelukt.
Hoewel het transactiegeheugen in sommige gevallen werkt, is het nog steeds niet perfect, legt Asanovic uit. Meestal zijn de transacties klein en kan de vaste omvang van het geheugen in de hardware ze snel aan. Maar, zegt hij, af en toe vereisen transacties meer geheugen dan de vaste hoeveelheid die beschikbaar is, en wanneer dit gebeurt, crasht het systeem. Asanovic zegt dat door een kleine back-upgeheugencache aan de hardware toe te voegen en door software toe te voegen om te herkennen wanneer de transacties overlopen, de capaciteit van het transactiegeheugen kan worden vergroot, waardoor eerdere systeemstoringen worden verholpen.
De methode die de MIT-onderzoekers gebruiken, is gebaseerd op een combinatie van software en hardware om het transactiegeheugen beter te maken, zegt Larus van Microsoft, en er zijn talloze ontwerpen geweest die in verschillende mate afhankelijk zijn van software of hardware. Het is nog niet duidelijk waar de juiste lijn ligt tussen het gebruik van hardware en software om het probleem op te lossen, zegt hij, maar de onderzoekers pakken belangrijke onopgeloste problemen aan bij het programmeren van multi-coresystemen.
Microsoft, AMD, Intel en universiteiten zoals MIT en Stanford, onder andere, investeren allemaal om multi-coresystemen gemakkelijker te programmeren te maken. Naast het verbeteren van het transactiegeheugen, onderzoeken onderzoekers betere manieren om parallelle programma's te debuggen en ook om bibliotheken met kant-en-klare parallelle bewerkingen te creëren, zodat programmeurs stukjes code in software kunnen pluggen zonder elke keer de knikken te hoeven oplossen.
Momenteel worden de dual-coresystemen niet zo beïnvloed door het gebrek aan echt parallelle programma's als de komende quad-coresystemen zullen zijn, zegt Asanovic. Voor het grootste deel zijn besturingssystemen zoals Windows en Mac OS X in staat om applicaties effectief op te splitsen op een dual-core systeem. Zo draait een virusscanner onopvallend op de achtergrond op de ene core, terwijl applicaties als Microsoft Word of Firefox op de andere core draaien, zonder dat de snelheid wordt belemmerd.
Maar als het gaat om 4, 8 of 16 cores, moeten de applicaties zelf worden aangepast om meer prestaties te krijgen. Asanovic zegt dat transactioneel geheugen geen wondermiddel zal zijn dat het gemakkelijker maakt om deze systemen te programmeren, maar hij verwacht dat het een onderdeel zal zijn van het toekomstige parallelle computermodel. Het is een mechanisme dat nuttig lijkt te zijn, zegt hij.