Grundlagen der CELL Programmierung
Grundlagen der CELL Programmierung
Grundlagen der CELL Programmierung
Erfolgreiche ePaper selbst erstellen
Machen Sie aus Ihren PDF Publikationen ein blätterbares Flipbook mit unserer einzigartigen Google optimierten e-Paper Software.
1<br />
<strong>Grundlagen</strong> <strong>der</strong> <strong>CELL</strong><br />
<strong>Programmierung</strong><br />
Seminarvortrag im Rahmen des Seminars<br />
„Ausgewählte Themen in Hardwareentwurf und Optik“<br />
WS 2005/2006<br />
von<br />
Benjamin Kalisch
Inhalt<br />
2<br />
<br />
<br />
<br />
<br />
Was ist Cell<br />
Erste Generation (Hardware)<br />
<strong>Programmierung</strong><br />
Spezialregister & Channels<br />
...<br />
...<br />
...<br />
<br />
<br />
MFC<br />
SPE<br />
<br />
Linux und Bibliotheken<br />
<br />
Programmierbeispiel<br />
<br />
Schlussfolgerungen<br />
Quelle: [16]
Was ist Cell<br />
3<br />
Die Cell Broadband Engine Architecture (CBEA), kurz Cell, ist ein, von<br />
Sony Toshiba und IBM entwickelter, heterogener Multi-Core Prozessor.<br />
Ziele<br />
Hohe Leistung in Multimedia Anwendungen<br />
Energieeffizienz (GFLOPS/Watt)<br />
• Verzicht auf out-of-or<strong>der</strong> Execution höherer Takt<br />
Daten<br />
• Transistoren<br />
• Chip-Fläche<br />
• Technologie<br />
234 Millionen<br />
235 mm²<br />
90 nm SOI
4<br />
Hardware<br />
Quellen [1], [2], [6], [7], [14], [24]
Erste Generation<br />
5<br />
[ Quelle: http://www.research.ibm.com/cell/cell_chip.html ]<br />
© IBM
Erste Generation<br />
5<br />
Grundidee:<br />
1 Hauptprozessor<br />
unterstützt von 8<br />
„Anwendungsbeschleunigern“<br />
[ Quelle: http://www.research.ibm.com/cell/cell_chip.html ]<br />
© IBM
Erste Generation<br />
5<br />
Grundidee:<br />
1 Hauptprozessor<br />
unterstützt von 8<br />
„Anwendungsbeschleunigern“<br />
S<br />
X<br />
U<br />
MFC<br />
L<br />
S<br />
[ Quelle: http://www.research.ibm.com/cell/cell_chip.html ]<br />
© IBM
Erste Generation - PPE<br />
6<br />
Power Processor Element (PPE)<br />
L2 Cache: 512kB, kohärent<br />
Optimierter 64bit POWER Prozessor<br />
• 2-way simultaneous Multithreading<br />
• SIMD Erweiterung (AltiVec)<br />
• kompatibel zu POWER Anwendungen<br />
• Führt das Betriebssystem aus<br />
[ Quelle: http://www.research.ibm.com/cell/cell_chip.html ] © IBM
Erste Generation - SPE (SXU)<br />
Synergistic Processing Element (SPE)<br />
Synergistic Execution Unit (SXU)<br />
SIMD Prozessor auf 128bit Vektoren<br />
4-Wege SIMD Einheit<br />
Register File 128 Einträge à 128bit<br />
Loop-unrolling<br />
Instruktionen ähnlich AltiVec<br />
Hauptspeicherzugriff nur per DMA<br />
7<br />
[ Quelle: http://www.research.ibm.com/cell/cell_chip.html ]<br />
© IBM
Erste Generation - SPE (LS)<br />
Synergistic Processing Element (SPE)<br />
Local Store (LS)<br />
256kB für Instruktionen und Daten<br />
Single ported SRAM<br />
Zugriffsprioritäten<br />
Granularität<br />
1. DMA 128B<br />
2. Load + Store 16B<br />
3. Instruction Fetch 128B<br />
8<br />
Abgebildet in Hauptspeicher Domäne<br />
Lokaler Zugriff: Keine Adressübersetzung<br />
Kein Adressschutz<br />
[ Quelle: http://www.research.ibm.com/cell/cell_chip.html ]<br />
© IBM
Quelle: [24]<br />
Erste Generation - SPE (MFC)<br />
Synergistic Processing Element (SPE)<br />
Memory Flow Controller (MFC)<br />
DMA Controller inklusive MMU<br />
Transfergrößen 1B bis 16kB<br />
Alignment 128 Byte<br />
2 Befehls Queues:<br />
lokal SPU Queue (16 E.)<br />
global Proxy Queue (8 E.)<br />
Kommunikation zum MFC:<br />
lokal Channel Interface<br />
global MMIO Register<br />
9<br />
[ Quelle: http://www.research.ibm.com/cell/cell_chip.html ]<br />
© IBM
10<br />
<strong>Programmierung</strong><br />
Quellen<br />
Allgemein [22], [13], [17], [25], [26]<br />
Skalar, SIMDization [19], [20], [21]<br />
MFC, Channels [24]
MMIO Register (1/3)<br />
11<br />
32bit Spezialregister sind in Hauptspeicherdomäne verfügbar.<br />
Memory Mapped I/O Register<br />
Kommunikationsregister<br />
SPU_Out_Mbox<br />
SPU_In_Mbox<br />
SPU_Sig_Notify_1(/2)<br />
MFC_MSSync<br />
Nachrichten SPE PPE<br />
Nachrichten PPE SPE (Queue)<br />
Kommunikation SPE SPE o<strong>der</strong> I/O<br />
Modi: „Logical-Or“ Many-to-One<br />
„Overwrite“ One-to-One<br />
Stellt Abschluss ausstehen<strong>der</strong> DMA Befehle sicher<br />
Wichtig für sicheren Prozesswechsel<br />
C-Mnemonics
MMIO Register (2/3)<br />
12<br />
DMA Befehlsregister<br />
Adressierung relativ zu BE_MMIO_Base<br />
Beispiel: Reihenfolge für DMA Befehl initialisiert durch PPE<br />
Adresse SPE(n):<br />
BE_MMIO_Base<br />
+ n 0x80000<br />
+ 0x43004<br />
1. S: Local Store Adresse MFC_LSA<br />
2. S: Hauptspeicheradresse MFC_EAL (+ MFC_EAH)<br />
3. S: Größe und Tag zur Kontrolle MFC_Size_Tag<br />
4. S: Auszuführen<strong>der</strong> Befehl MFC_ClassID_CMD<br />
Startet Hinzufügversuch<br />
5. L: Hinzufügen erfolgreich MFC_CMDStatus<br />
DMA Informationsregister<br />
Tag-Gruppe ausgeführt Prxy_TagStatus<br />
PPE Interrupt möglich
MMIO Register (3/3)<br />
13<br />
SPE Kontrollregister<br />
SPU_NPC<br />
SPU_RunCntl<br />
SPU_Status<br />
LS Adresse <strong>der</strong> nächsten Instruktion<br />
Nur gültig, wenn SPU idle (SPU_Status[R] = 0)<br />
Startet und Stoppt SPU<br />
• Stop Request Stoppt SPE<br />
• Run Request Startet SPE bei SPU_NPC<br />
SPE Status Register, wichtige Bitfel<strong>der</strong>:<br />
Bit<br />
R<br />
I<br />
P<br />
Bedeutung (falls Bit = 1)<br />
SPU running<br />
Ungültige Instruktion<br />
Stop-and-Signal Instruktion<br />
<br />
<br />
SPU angehalten<br />
SPU angehalten<br />
SPU_Status enthält in diesem Fall auch den Stoppcode
SPU Channel Interface<br />
14<br />
Registerinhalte bei MMIO und Channel Interface größtenteils identisch.<br />
Unterschiede: Store+Load/DMA Befehle Channel Read/Write Befehle<br />
SPU Assembler<br />
RDCH RT, CH<br />
WRCH CH, RA<br />
RCHCNT RT, CH<br />
MMIO Register<br />
MFC_Size_Tag<br />
MFC_CMDStatus<br />
Channel Äquivalent<br />
MFC_Size & MFC_TagID<br />
Nichts, wrch blockiert bis Platz ist<br />
ChannelCH Register RT<br />
Register RA ChannelCH<br />
#Einträge in CH Register RT<br />
SPU Channel C-Intrinsics<br />
d = spu_readch( channel );<br />
d = spu_readchcnt( channel );<br />
d,a = u32<br />
spu_writech( channel, a );
MFC <strong>Programmierung</strong><br />
15<br />
SPU DMA C-Intrinsics<br />
spu_mfcdma64 (ls, eahi, ealow, size, tag, cmd);<br />
d = spu_mfcstat( type );<br />
MFC Assembler Befehle (cmd):<br />
put<br />
puts<br />
putb<br />
putl<br />
get*<br />
barrier<br />
getllar<br />
putllc<br />
Kopiert: LS Hauptspeicher<br />
Startet SPU nach Kopieren (nur Proxy)<br />
Ordnet diesen Befehl relativ zu vorherigen<br />
DMA Befehlsliste aus dem LS (nur SPU)<br />
Kopiert: LS Hauptspeicher<br />
Erzeugt Speicherbarriere<br />
Atomic get, entspricht PowerPC lwarx<br />
Atomic put, entspricht PowerPC stwcx<br />
MFC_PUT_CMD<br />
MFC_PUTS_CMD<br />
MFC_PUTB_CMD<br />
MFC_PUTL_CMD<br />
MFC_GET*_CMD<br />
MFC_BARRIER_CMD<br />
MFC_GETLLAR_CMD<br />
MFC_PUTLLC_CMD
MFC <strong>Programmierung</strong><br />
15<br />
SPU DMA C-Intrinsics<br />
spu_mfcdma64 (ls, eahi, ealow, size, tag, cmd);<br />
d = spu_mfcstat( type );<br />
MFC Assembler Befehle (cmd):<br />
Channel writes:<br />
ls MFC_LSA<br />
eahigh MFC_EAH<br />
ealow MFC_EAL<br />
size MFC_Size<br />
tag MFC_TagID<br />
cmd MFC_CMD<br />
put<br />
puts<br />
putb<br />
putl<br />
get*<br />
barrier<br />
getllar<br />
putllc<br />
Kopiert: LS Hauptspeicher<br />
Startet SPU nach Kopieren (nur Proxy)<br />
Ordnet diesen Befehl relativ zu vorherigen<br />
DMA Befehlsliste aus dem LS (nur SPU)<br />
Kopiert: LS Hauptspeicher<br />
Erzeugt Speicherbarriere<br />
Atomic get, entspricht PowerPC lwarx<br />
Atomic put, entspricht PowerPC stwcx<br />
MFC_PUT_CMD<br />
MFC_PUTS_CMD<br />
MFC_PUTB_CMD<br />
MFC_PUTL_CMD<br />
MFC_GET*_CMD<br />
MFC_BARRIER_CMD<br />
MFC_GETLLAR_CMD<br />
MFC_PUTLLC_CMD
SPE Programmzuweisung<br />
16
SPE Programmzuweisung<br />
16<br />
Einige Alternativen<br />
1. Instr. & Daten direkt per store<br />
2. Interrupt auf PPE möglich<br />
1.<br />
3. Kann man sich mit getbs sparen<br />
4. Stop-and-Signal Instruktion<br />
Assembler stop u14<br />
Interrupt auf PPE<br />
3.<br />
2.<br />
4.
SPE Instruktionssatz (Auszug)<br />
17<br />
LS Instruktionen<br />
Integer Instruktionen<br />
Logik Instruktionen<br />
lqx rt, ra, rb<br />
stqx rt, ra, rb<br />
a rt, ra, rb<br />
xor rt, ra, rb<br />
Shift and Rotate Instruktionen<br />
rotqby rt, ra, rb<br />
Compare and Branch Instruktionen<br />
ceq rt, ra, rb<br />
brz rt, i16<br />
Floating Point Instruktionen<br />
Kontroll Instruktionen<br />
Channel Instruktionen<br />
fma rt, ra, rb, rc<br />
fcgt rt, ra, rb<br />
Load Quadword<br />
Store Quadword<br />
Add Word<br />
Logical XOR<br />
Rotate Quadword left by Bytes<br />
Compare Equal Word<br />
Branch if zero<br />
Floating Point Multiply and Add<br />
Floating Point Compare Greater Than
Spezielles an SPEs<br />
18<br />
SPE Error-Handling & System-Calls nur auf PPE Weiterleitung<br />
Run-to-Completion Nutzung empfohlen (preemptive möglich)<br />
Branch-Hint Instruktion<br />
Verbessert Static Branch Prediction (‘not taken‘)<br />
• Rechtzeitiger und korrekter Hint keine Penalty<br />
• Maximal ein ausstehen<strong>der</strong> Branch-Hint<br />
hbr<br />
s11, ra<br />
hbrp Instruction-Fetch-Hint<br />
Erhöht I-Fetch Priorität
Predication auf SPEs<br />
19<br />
Bitwise Select<br />
Vermeidung kleiner Branches durch Predication<br />
Assembler:<br />
C-Intrinsic:<br />
selb rt, ra, rb, rc<br />
d = spu_sel(a, b, pattern);<br />
Beispiel:<br />
cmp<br />
bra<br />
x cond<br />
x, else<br />
then: add d d+1<br />
bra done<br />
else: add<br />
done:<br />
d d+a<br />
<br />
cmp<br />
x cond<br />
add y d+a<br />
add z d+1<br />
selb d, z, y, x
Skalararithmetik auf SPEs<br />
20<br />
SPEs besitzen keine dedizierte Skalarlogik<br />
LS Zugriffe 16B aligned + Register 16B breit<br />
Position in Register = Offset im LS<br />
Bsp.1:<br />
Bsp.2:<br />
a[0] = c[0] + b[0] ̌<br />
a[1] = c[2] + b[3] <br />
[i] = Offset relativ zum 16B Alignment<br />
Quelle: [19]
Skalararithmetik auf SPEs<br />
20<br />
SPEs besitzen keine dedizierte Skalarlogik<br />
LS Zugriffe 16B aligned + Register 16B breit<br />
Position in Register = Offset im LS<br />
Add<br />
Bsp.1:<br />
Bsp.2:<br />
a[0] = c[0] + b[0] ̌<br />
a[1] = c[2] + b[3] <br />
[i] = Offset relativ zum 16B Alignment<br />
Quelle: [19]
Skalararithmetik auf SPEs<br />
20<br />
SPEs besitzen keine dedizierte Skalarlogik<br />
LS Zugriffe 16B aligned + Register 16B breit<br />
Position in Register = Offset im LS<br />
Add<br />
Bsp.1:<br />
Bsp.2:<br />
a[0] = c[0] + b[0] ̌<br />
a[1] = c[2] + b[3] <br />
[i] = Offset relativ zum 16B Alignment<br />
Quelle: [19]
Skalararithmetik auf SPEs<br />
20<br />
SPEs besitzen keine dedizierte Skalarlogik<br />
LS Zugriffe 16B aligned + Register 16B breit<br />
Position in Register = Offset im LS<br />
Add<br />
Bsp.1:<br />
Bsp.2:<br />
a[0] = c[0] + b[0] ̌<br />
a[1] = c[2] + b[3] <br />
[i] = Offset relativ zum 16B Alignment<br />
Lösung: Register Rotieren<br />
Speichern auch problematisch<br />
a[1] geän<strong>der</strong>t, was mit a[0],a[2],a[3] <br />
Quelle: [19]<br />
Rotate<br />
Add
Skalararithmetik auf SPEs<br />
20<br />
SPEs besitzen keine dedizierte Skalarlogik<br />
LS Zugriffe 16B aligned + Register 16B breit<br />
Position in Register = Offset im LS<br />
Add<br />
Bsp.1:<br />
Bsp.2:<br />
a[0] = c[0] + b[0] ̌<br />
a[1] = c[2] + b[3] <br />
[i] = Offset relativ zum 16B Alignment<br />
Lösung: Register Rotieren<br />
Speichern auch problematisch<br />
a[1] geän<strong>der</strong>t, was mit a[0],a[2],a[3] <br />
Quelle: [19]<br />
Lösung: Read, Insert, Write<br />
Rotate<br />
Add
Skalararithmetik auf SPEs<br />
20<br />
SPEs besitzen keine dedizierte Skalarlogik<br />
LS Zugriffe 16B aligned + Register 16B breit<br />
Position in Register = Offset im LS<br />
Add<br />
Bsp.1:<br />
Bsp.2:<br />
a[0] = c[0] + b[0] ̌<br />
a[1] = c[2] + b[3] <br />
[i] = Offset relativ zum 16B Alignment<br />
Lösung: Register Rotieren<br />
Speichern auch problematisch<br />
a[1] geän<strong>der</strong>t, was mit a[0],a[2],a[3] <br />
Quelle: [19]<br />
Lösung: Read, Insert, Write<br />
Rotate<br />
Add<br />
Einfachere Lösung für Beides:<br />
Pro Skalar 16B und Position 0<br />
GCC: float example __attribute__ ((aligned (16)));
21<br />
Linux und Bibliotheken<br />
Quellen<br />
Linux [3], [4], [18]<br />
libspe [11]<br />
spu_intrinsics [13]
Linux auf Cell<br />
22<br />
Anpassungen: Spezieller Interrupt Controller und SPEs<br />
SPE Thread Verwaltung durch SPU File System (spufs)<br />
Verzeichnisse entsprechen logischem SPE Kontext<br />
Mapping auf SPEs übernimmt BS (Virtualisierung)<br />
Quelle: [3]<br />
SPU starten: System-Call mit Parametern auf run<br />
Übergabepointer auf: struct spufs_run_arg {<br />
u32 npc;<br />
u32 status; };<br />
Aufrufen<strong>der</strong> Thread blockiert<br />
Outb. Inter. MBox<br />
Outbound MBox<br />
Local Store<br />
Register File<br />
RUN<br />
Inbound MBox
libspe.h<br />
(1/2)<br />
23<br />
libspe.h = SPE Runtime Management Library<br />
Ist PPE C-Bibliothek<br />
POSIX-Thread ähnliche SPE Nutzung auf User-Level Basis<br />
Unterscheidung: SPE Group SPE Thread<br />
spe_gid_t speid_t<br />
Gang-Scheduling für Gruppen möglich<br />
Kommunikationsfunktionen:<br />
u32 = spe_read_out_mbox( speid );<br />
spe_write_in_mbox( speid, u32 );<br />
spe_write_signal( speid, reg, u32 );
libspe.h<br />
(2/2)<br />
24<br />
Verwaltungsfunktionen:<br />
program* = spe_open_image( *filename );<br />
gid = spe_create_group( policy, priority, spe_events );<br />
speid = spe_create_thread( gid, *program, *argp, *envp, mask, flags );<br />
succ = spe_wait( speid, *status, options );<br />
Funktionen zum Zugriff auf SPE Ressourcen (z.B.)<br />
void* = spe_get_ls( speid );<br />
Än<strong>der</strong>nung gewählter Einstellungen (z.B.)<br />
succ = spe_set_affinity( speid, mask );<br />
Form einer Thread Funktion<br />
int main( speid, argp, envp );
spu_intrinsics<br />
intrinsics.h<br />
25<br />
Ist SPE C-Bibliothek<br />
Enthält alle bisher gezeigten C-Intrinsics<br />
Führt Vektor-Datentypen ein<br />
vector unsigned int<br />
vector float<br />
vec_uint4<br />
vec_float4<br />
qword<br />
Ermöglicht direkte Vektor-Operationen<br />
d = spu_add(a, b);<br />
//a, b, c, d Vektoren<br />
d = spu_madd(a, b, c);<br />
d = spu_compeq(a, b);
Programmierbeispiel PPE<br />
26<br />
/* --------------------------------------- context.h --------------------------------------- */<br />
typedef struct {<br />
vector float pos;<br />
vector float vel;<br />
float delta_t;<br />
} context;<br />
/* ------------------------------------ ppeprogram.c ------------------------------------ */<br />
extern spe_program_handle_t speprogram;<br />
int main() {<br />
int status;<br />
context ctx;<br />
speid_t speid;<br />
// [ . . . ]<br />
speid = spe_create_thread(0, &speprogram, &ctx, NULL, -1, 0);<br />
(void) spe_wait(speid, &status, 0);<br />
}
Programmierbeispiel SPE<br />
27<br />
/* ------------------------------------ speprogram.c ------------------------------------ */<br />
int main(unsigned long long spu_id, unsigned long long parm) {<br />
unsigned int tag_id = 0;<br />
vector float delta_t_vec;<br />
context ctx;<br />
spu_mfcdma32(&ctx, parm, sizeof(context), tag_id, MFC_GET_CMD);<br />
(void) spu_mfcstat(2);<br />
delta_t delta_t<br />
delta_t_vec = spu_splats(ctx.delta_t);<br />
ctx.pos = spu_madd(ctx.vel, delta_t_vec, ctx.pos);<br />
delta_t<br />
delta_t<br />
}<br />
spu_mfcdma32(&ctx, parm, sizeof(context), tag_id, MFC_PUT_CMD);<br />
(void) spu_mfcstat(2);
Schlussfolgerungen<br />
28
Schlussfolgerungen<br />
29<br />
MMIO Register und Channels wichtiger<br />
Bestandteil <strong>der</strong> Architekturausnutzung<br />
In Hochsprache (C/C++) programmierbar<br />
Höherer Programmieraufwand<br />
• Vereinfacht durch Bibliotheken<br />
• Mehraufwand = Performance<br />
SP FP Matrixmultiplikation<br />
P4 (SSE3, 3.2GHz): 25.6GFLOPS<br />
3.2 GHZ Cell:<br />
• XL C Compiler<br />
Hohe Maximalperformance<br />
• SP FP<br />
• DP FP<br />
204 GFLOPS<br />
20 GFLOPS<br />
Quelle [26]
Quellen<br />
30<br />
[1]<br />
[2]<br />
[3]<br />
[4]<br />
[5]<br />
[6]<br />
[7]<br />
[8]<br />
„A Streaming Processing Unit for a <strong>CELL</strong> Processor“<br />
Autoren: B. Flachs, S. Asano, S.H. Dhong, P. Hofstee, G. Gervais, R. Kim, T. Le, P. Liu, J. Leenstra, J. Liberty, B. Michael,<br />
H. Oh, S.M. Mueller, O. Takahashi, A. Hatakeyama, Y. Watanabe, N. Yano<br />
http://www-306.ibm.com/chips/techlib/techlib.nsf/techdocs/E815CC047A60914687256FC000734156<br />
“The Design and Implementation of a First-Generation <strong>CELL</strong> Processor”<br />
Autoren: D. Pham, S. Asano, M. Bollinger, M.N. Day, H.P. Hofstee, C. Johns, J. Kahle, A. Kameyama, J. Keaty, Y. Masubuchi,<br />
M. Riley, D. Shippy, D. Stasiak, M. Suzuoki, M. Wang, J. Warnock, S. Weitzel, D. Wendel, T. Yamazaki, K. Yazawa<br />
http://www-306.ibm.com/chips/techlib/techlib.nsf/techdocs/7FB9EC5D5BBF51ED87256FC000742186<br />
“Spufs: The Cell Synergistic Processing Unit as a virtual file system”<br />
Autor: Arnd Bergmann<br />
http://www-128.ibm.com/developerworks/power/library/pa-cell/<br />
“Meet the Experts: Arnd Bergmann on Cell”<br />
Autoren: Arnd Bergmann, developerWorks<br />
http://www-128.ibm.com/developerworks/power/library/pa-expert4<br />
“Just like being there: Papers from the Fall Processor Forum 2005: Unleashing the power of the Cell Broadband Engine”<br />
Autor: developerWorks<br />
http://www-128.ibm.com/developerworks/power/library/pa-fpfunleashing/<br />
“Cell Architecture Explained Version 2”<br />
Autor: Nicholas Blachford<br />
http://www.blachford.info/computer/Cell/Cell0_v2.html<br />
“Introduction to the Cell multiprocessor”<br />
Autoren: J.A. Kahle, M.N. Day, H.P. Hofstee, C.R. Johns, T.R. Maeurer, D. Shippy<br />
http://www.research.ibm.com/journal/rd/494/kahle.html<br />
“Hardware and Software Architectures for the Cell Broadband Engine processor”<br />
Michael Day, Peter Hofstee<br />
http://www.casesconference.org/cases2005/pdf/Cell-tutorial.pdf
Quellen<br />
31<br />
[9]<br />
[10]<br />
[11]<br />
[12]<br />
[13]<br />
[14]<br />
[15]<br />
[16]<br />
“A remote Procedure Call Implementation for the Cell Broadband Architecture”<br />
Part of: “Cell Broadband Engine (Cell BE) Software Sample and Library Source Code”<br />
http://www.alphaworks.ibm.com/tech/cellswopen&S_TACT=105AGX16&S_CMP=DWPA<br />
“<strong>CELL</strong>: A New Platform for Digital Entertainment”<br />
Autoren: Dominic Mallinson, Mark DeLoura<br />
http://www.research.scea.com/research/html/CellGDC05/index.html<br />
“SPE Runtime Management Library”<br />
http://www.bsc.es/projects/deepcomputing/linuxoncell/development/release2.0/libspe/libspe_v1.0.pdf<br />
“Optimizing Compiler for a <strong>CELL</strong> Processor”<br />
Autoren: Alexandre E. Eichnberger, Kathryn O’Brien, Kevin O’Brian, Peng Wu, Tong Chen, Peter H. Oden, Daniel A. Prenner,<br />
Janice C. Shepherd, Byoungro So, Zehra Sura, Amy Wang, Tao Zhang, Peng Zhao, Michael Gschwind<br />
http://cag.csail.mit.edu/crg/papers/eichenberger05cell.pdf<br />
“SPU C/C++ Language Extensions”<br />
http://www-306.ibm.com/chips/techlib/techlib.nsf/techdocs/30B3520C93F437AB87257060006FFE5E<br />
“Cell Moves into the Limelight”<br />
Autor: Kevin Krewell<br />
http://www-306.ibm.com/chips/techlib/techlib.nsf/techdocs/D9439D04EA9B080B87256FC00075CC2D<br />
“Porting the GNU Tool Chain to the Cell Architecture”<br />
Autor: Ulrich Weigand<br />
http://www.gccsummit.org/2005/2005-GCC-Summit-Proceedings.pdf<br />
“Unleashing the Power: A programming example of large FFTs on Cell“<br />
Autoren: Alex Chow, Gordon Fossum, Daniel A.Brokenshire<br />
http://www.power.org/news/events/barcelona/
Quellen<br />
32<br />
[17]<br />
[18]<br />
[19]<br />
[20]<br />
[21]<br />
[22]<br />
[23]<br />
[24]<br />
[25]<br />
[26]<br />
“SPU Application Binary Interface Specification”<br />
http://www-306.ibm.com/chips/techlib/techlib.nsf/techdocs/02E544E65760B0BF87257060006F8F20<br />
“Cell Broadband Engine Linux Reference Implementation Application Binary Interface Specification”<br />
http://www-306.ibm.com/chips/techlib/techlib.nsf/techdocs/44DA30A1555CBB73872570B20057D5C8/<br />
“Efficient SIMD Code Generation for Runtime Alignment & Length Conversion”<br />
Peng Wu, Alexandre Eichenberger, Amy Wang<br />
http://www.research.ibm.com/cellcompiler/slides/cgo05.pdf<br />
”An Integrated Simdization Framework using virtual vectors”<br />
Peng Wu, Alexandre Eichenberger, Amy Wang, Peng Zhao<br />
http://www.research.ibm.com/cellcompiler/slides/ics05.pdf<br />
”Vectorization for SIMD Architectures with Alignment Constraints”<br />
Alexandre Eichenberger, Peng Wu, Kevin O’Brian<br />
http://www.research.ibm.com/cellcompiler/slides/pldi04.pdf<br />
“Cell Broadband Engine Programming Tutorial”<br />
Cell Broadband Engine Architecture Joint Software Reference Environment Series<br />
“Meet the experts: Alex Chow on Cell Broadband Engine programming models”<br />
Alex Chow<br />
http://www-128.ibm.com/developerworks/power/library/pa-expert8/<br />
“Cell Broadband Engine Architecture”<br />
http://www-306.ibm.com/chips/techlib/techlib.nsf/techdocs/1AEEE1270EA2776387257060006E61BA<br />
“Synergistic Processor Unit Instruction Set Architecture”<br />
http://www-306.ibm.com/chips/techlib/techlib.nsf/techdocs/76CA6C7304210F3987257060006F2C44/<br />
Cell Broadband Engine Architecture and its first implementation – A Performance View<br />
http://www-128.ibm.com/developerworks/power/library/pa-cellperf/
Fragen <br />
33