Data Access Problem on the Cell BE Architecture
Author
Kozumplik, Ales
Term
4. term
Education
Publication year
2009
Pages
83
Abstract
Cell Broadband Engine (Cell BE) er en processor designet til multimedie, videospil og krævende videnskabelige beregninger. For at opnå høj ydeevne kan de fleste af dens kerner ikke tilgå hovedhukommelsen direkte. I stedet har hver 256 KB lokal hukommelse og skal flytte data med DMA (Direct Memory Access). For at holde processoren beskæftiget flettes disse datatransporter sammen med beregning, ofte via dobbelt-buffering (to skiftevis anvendte buffere). Håndtering af DMA, buffere og synkronisering skaber meget og fejlfølsom boilerplate-kode. Denne afhandling præsenterer Dali, en eksperimentel udvidelse til et C-lignende imperativt sprog, som hjælper med at automatisere dataadgang på Cell BE. Dali tilføjer to idéer: accessor-erklæring (programmøren beskriver en strategi for adgang til hovedhukommelsen) og accessor-anvendelse (strategien anvendes på en variabel inden for et scope). For eksempel kan man ved sekventiel gennemløb af et array bruge en dobbelt-buffering accessor; Dali-kompileren genererer da automatisk den nødvendige DMA- og bufferhåndtering, så programmøren kan fokusere på selve problemet. Dali understøtter også andre strategier, såsom spekulativ forhåndsindlæsning (prefetch af data, der sandsynligvis snart skal bruges, baseret på hints) og cache-metoder, der udnytter høj lokalitet ved at gemme nærliggende elementer. Den vigtigste begrænsning er, at korrekthed afhænger af, at programmøren vælger en accessor, som passer til programmets faktiske adgangsmønstre ved kørsel. En uhensigtsmæssig strategi - f.eks. dobbelt-buffering ved overvejende tilfældig adgang - kan spilde båndbredde og gøre programmet langsommere eller endda give forkerte resultater, hvis der ikke foretages runtime-kontrol. Afhandlingen gennemgår også andre tilgange til at styre hukommelsesadgang. For at vurdere levedygtigheden byggede vi en eksperimentel Dali-kompiler, der parser Dali-kode og genererer C++ til Cell-værktøjskæden, som kan køre på en Cell-maskine. Vi dokumenterer både implementeringsarbejdet og flere simple eksperimenter med programmer genereret af vores kompiler.
The Cell Broadband Engine (Cell BE) is a processor designed for multimedia, video games, and demanding scientific computations. To achieve high performance, most of its cores cannot access main memory directly. Instead, each has 256 KB of local memory and must move data using DMA (Direct Memory Access). To keep the processor busy, programmers interleave these data transfers with computation, often using double buffering (two alternating buffers). Managing DMA, buffers, and synchronization produces a large amount of error-prone boilerplate code. This thesis presents Dali, an experimental extension to a C-like imperative language that helps automate data access on Cell BE. Dali adds two ideas: accessor declaration (the programmer describes a strategy for accessing main memory) and accessor application (the programmer applies that strategy to a variable within a scope). For example, when traversing an array element by element, a double-buffering accessor can be applied; the Dali compiler then automatically generates the necessary DMA and buffer management, allowing the programmer to focus on the core problem. Dali also supports other strategies, such as speculative prefetch (fetching data likely to be needed soon, based on hints) and caching methods that exploit data locality by keeping nearby elements around. The main limitation is that correctness depends on the programmer choosing an accessor that matches the program’s actual runtime access pattern. Using an unsuitable strategy - for instance, double buffering on mostly random access - can waste bandwidth and slow the program, or even produce incorrect results if no runtime checks are present. The thesis also surveys other approaches to managing memory access. To evaluate feasibility, we built an experimental Dali compiler that parses Dali code and emits C++ for the Cell toolchain, which runs on a Cell machine. We report on the implementation effort and several simple experiments with programs generated by our compiler.
[This summary has been rewritten with the help of AI based on the project's original abstract]
Documents
