03.02.2015 Aufrufe

Grundlagen der CELL Programmierung

Grundlagen der CELL Programmierung

Grundlagen der CELL Programmierung

MEHR ANZEIGEN
WENIGER ANZEIGEN

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

Hurra! Ihre Datei wurde hochgeladen und ist bereit für die Veröffentlichung.

Erfolgreich gespeichert!

Leider ist etwas schief gelaufen!