k-NN Klassifikation auf dem STI Cell BE Prozessor Michael Mair, Adrian Marte, Martin Schöpf, Daniel Winkler
Übersicht Cell Prozessor - Überblick Parallelisierungsstrategieen Cell- kNN Version 1.0 Cell- kNN Version 2.0 Ergebnisse Fazit
Cell Prozessor - Überblick
EIB- Bus
EIB- Bus
Testumgebung Hardware: PS3 yellow dog linux release 6.0 (pyxis)(2.6.23- 9.ydl6.1) (spu / ppu- ) gcc 4.1.1 libspe2 standarlibrary cell sdk 3.1
Parallelisierungsstrategien Parallelisierung über die Distanz zweier Punkte Version 1.0 Mit SIMD auch in Version 2.0 Parallelisierung über Testpunkte Version 2.0 Parallelisierung über Trainingspunkte
Parallelisierung über Distanz zweier Punkte Version 1.0 Bezogen auf knn.f90, function distance !PARALLEL(dimension) d = (inst1%val – inst2%val)**2 !PARALLEL(dimension), reduction distance = sum(d)
Parallelisierung über Distanz zweier Punkte Version 1.0
Ergebnisse Version 1.0 Zeiten und Speedup Berechnung mit allen (6) SPEs Sehr schlechter Speedup
Ergebnisse Version 1.0 Fortsetzung Abhängigkeit von der Anzahl benützer SPEs
Ergebnisse Version 1.0 Eigenschaften Wenige Dimensionen Datenmenge: 3136 Byte → 522 Byte pro SPE 522 Byte pro MFC Transfer, anstatt möglichen 16 kByte Viele SPE-Threads 60000 * 6 SPE-Threads pro Test Punkt Insgesamt 10000 * 60000 * 6 SPE-Threads Bei jedem Vergleich müssen Daten vom RAM in den LS der SPEs geladen werden Threads werden zeitgleich gestartet, die alle auf den RAM zugreifen → Bootleneck
Parallelisierung über Testpunkte Version 2.0 Bezogen auf knn.f90, program main !PARALLEL(n_query) forall (i=1:n_query) knn(i) k_nearest(k,query_inst(i),ref_inst,n_ref)
Parallelisierung über Testpunkte Version 2.0
Ergebnisse Version 2.0 Zeiten und Speedup Berechnung mit allen (6) SPEs Sehr guter Speedup
Ergebnisse Version 2.0 Fortsetzung Abhängigkeit von der Anzahl benützer SPEs
Ergebnisse Version 2.0 Eigenschaften Weniger Zugriffe der SPEs auf den RAM Verwendung des schnellen EIB (Element Interconnect Bus) mit 307 Gbyte/sek Einmalige Erstellung der verwendeten Threads 6 Threads vs. 10000 * 60000 * 6 Threads Geringe Auslastung der PPU
Ergebnisse Zusammenfassung
Fazit - Erfahrungen Herkömmliche Programmierung nicht anwendbar (PPU ist sehr langsam) Programmierung muss sehr maschinennahe passieren Speicher von SPEs begrenzt: zusätzliche Überlegungen bzgl. LS der SPEs sind notwendig da es keinen swap gibt Theoretische Geschwindigkeit schwer erreichbar