Abstract
For å spare strøm og redusere oppheting kjører moderne prosessorer på lavere frekvens enn de tidligere prosessorene. Produsentene kompenserer performansetapet ved å innpakke flere kjerner i en brikke som da kan kjøre flere programmer samtidig. Selv om prosessorer med flere kjerner har større total regnekraft enn de tidligere prosessorer, kjører likevel de fleste eksisterende programmer tregere enn på de eldre prosessorer. Dette skjer fordi programmer flest er skrevet på en måte som tillater dem å utnytte kun en av flere kjerner. For at et program skal kunne utnytte flere kjerner, må det omskrives nesten fra bunnen av, som er tidskrevende og dyrt. Ikke minst, utivklerne må lære en helt ny tankemåte. I dette arbeidet, som ble utført i perioden 2005-2009 ved Institutt for informatikk og Simula, har vi undersøkt hvordan vi kan gjøre det lettere å utvikle parallelle programmer som bruker flere kjerner. Vi tok utgangspunktet i det matematiske rammeverket av ”Kahn process networks”, som stammer fra 1970-tallet, og implementerte et bibliotek som gjør det mulig at eksisterende programmer kan lett utvides til å bruke flere kjerner. Med bruk av vårt bibliotek vil programmer automatisk kunne bruke alle tilgjengelige kjerner i en datamaskin, uten noen endringer. Våre eksperimenter har også vist at tilpasning av eksisterende programmer til vårt bibliotek krever minimale endringer i eksisterende kode.
The appearance of commodity multi-core processors, has spawned a wide interest in parallel programming, which is widely-regarded as more challenging than sequential programming. KPNs are a model of concurrency that relies exclusively on message passing, and that has some advantages over parallel programming tools in wide use today:
simplicity, graphical representation, and determinism. Because of determinism, it is possible to reliably reproduce faults, an otherwise notoriously difficult problem with parallel programs. KPNs have gained acceptance in simulation and signal-processing communities. In this thesis, we investigate the applicability of KPNs to implementing general-purpose parallel computations for multi-core machines. In particular, we investigate 1) how KPNs can be used for modeling general-purpose problems; 2) how an efficient KPN run-time can be implemented; 3) what KPN scheduling strategies give good run-time performance. For these purposes, we have developed Nornir, an efficient run-time system for executing KPNs. With Nornir, we show that it is possible to develop a high-performance KPN run-time for multi-core machines. We experimentally demonstrate that problems expressed in the Kahn model resemble very much their sequential implementations, yet perform much better than when expressed in the MapReduce model, which has become widely-recognized as a simple parallel programming model. Lastly, we use Nornir to evaluate several load-balancing methods: static assignment, work-stealing, our improvement of work-stealing, and a method based on graph partitioning. The understanding brought by this evaluation is significant not only in the context of the Kahn model, but also in the more general context of load-balancing (potentially distributed) applications written in message-passing style.