OpenCL (Cell B. E., PS3) Multicore Architectures and ... · Friedrich-Alexander-Universität...
Transcript of OpenCL (Cell B. E., PS3) Multicore Architectures and ... · Friedrich-Alexander-Universität...
Friedrich-Alexander-Universität Erlangen-NürnbergApelt, Nicolas – Zoellner, Christian 1
OpenCL (Cell B. E., PS3)
Multicore Architectures and ProgrammingApelt, Nicolas – Zoellner, Christian
Hardware-Software-Co-Design
Universität Erlangen-Nürnberg
Friedrich-Alexander-Universität Erlangen-NürnbergApelt, Nicolas – Zoellner, Christian 2
Übersicht
Image Flooding Algorithmus Implementierung OpenCL
Integer Factorization Algorithmus Implementierung C Implementierung OpenCL
Friedrich-Alexander-Universität Erlangen-NürnbergApelt, Nicolas – Zoellner, Christian 3
Image Flooding (Algorithmus)
Naiv Setze Farbe des Startpunktes Untersuche anschliessend rekursiv alle Nachbarn des Punktes
und deren Nachbarn und deren Nachbarn …
Friedrich-Alexander-Universität Erlangen-NürnbergApelt, Nicolas – Zoellner, Christian 4
Image Flooding (Algorithmus)
Scanline Farbe des Startpunktes als Referenzfarbe speichern Startpunkt auf Stack legen Solange Stack nicht leer
- Hole Punkt vom Stack- Faerbe alle Punkte gleicher/aehnlicher Farbe links und rechts in der
gleichen Zeile ein- Lege alle Punkte gleicher bzw. aehnlicher Farbe auf den Stack, die
oberhalb oder unterhalb der eingefaerbten Reihe liegen
Vorteile Etwas schneller, da eine Zeile gleich in einem Durchlauf
eingefaerbt wird Geringere Stackgroesse, da auch weniger Punkte (einzeln)
untersucht werden muessen
Friedrich-Alexander-Universität Erlangen-NürnbergApelt, Nicolas – Zoellner, Christian 5
Image Flooding (Algorithmus)
Versuch Keine Verwendung eines Stack (oder einer Queue) Erstellung einer Hoehenkarte mit Differenzen zur
Referenzfarbe Sukzessives Fluten des Gebietes unterhalb des Schwellwertes
- Das komplette Bild wird durchlaufen und das geflutete Gebiet wird sukzessive (an den Raendern) immer weiter vergroessert
- keine weitere Vergroesserung des Gebietes mehr moeglich → Ende
Ergebnis Die haeufigen Speicherzugriffe auf ein relativ grosses bzw.
weit verteiles Speichergebiet kosten zu viel Performance Sowohl auf CPU als auch unter OpenCL (GPU und Cell B. E)
signifikant langsamer (etwa Faktor 100)
Friedrich-Alexander-Universität Erlangen-NürnbergApelt, Nicolas – Zoellner, Christian 6
Image Flooding (Implementierung OpenCL)
Probleme Bei komplexen Bildern die (nahezu) vollstaendig geflutet
werden, stoesst man schnell an Speichergrenzen (Stack) Ueberpruefung auf doppelte Elemente beim Hinzufuegen hilft
etwas, kostet jedoch hingegen wieder Performance Spezieller Datentyp fuer Bilder
- Vorteile 2-dimensionales Caching Ablage in speziellem Format im Graphik-/Textur-Speicher (kann auch komprimiert abgelegt
werden)
- Probleme Andere Byte-Order, muss vor und nach Bearbeitung angepasst werden
Friedrich-Alexander-Universität Erlangen-NürnbergApelt, Nicolas – Zoellner, Christian 7
Integer Factorization (Algorithmus)
Auswahl des Algorithmus
Quadratisches Sieb- schnellstes Verfahren (bis etwa 100-110 Dezimalstellen)- Implementierung im Rahmen des Seminars zu komplex
Probedivision- trivial, zu langsam
Sieb des Eratosthenes- Schlecht parallelisierbar
Pollard-p-1- Komplexitaet: O(n1/3)
Pollard-Rho- niedriegere Komplexitaet als Pollard-p-1: O(n1/4 polylog(n))- einfach zu implementieren
Friedrich-Alexander-Universität Erlangen-NürnbergApelt, Nicolas – Zoellner, Christian 8
Integer Factorization (Implementierung C)
Extrem schnell bei Zahlen bis 32-Bit Trivial
Bei groesseren Zahlen unter Verwendung der GMPLib immer noch sehr schnell
Optimierungen: Berechnung des GGT erst nach einigen Iterationen
- Beispiel: 128 bit-Zahl, GGT nach i Iterationen i= 1: 100% i=10: 52% i=50: 48% Hoehere Werte fuer i brachten keine weitere (signifikante) Verbesserung
Keine nennenswerten Probleme
Friedrich-Alexander-Universität Erlangen-NürnbergApelt, Nicolas – Zoellner, Christian 9
Integer Factorization (Implementierung C)
Einfache Implementierung:
...while (mpz_cmp_si(d, 1) == 0){
mpz_mul (x, x, x); mpz_add_ui (x, x, 1); mpz_mod (x, x, n);mpz_mul (y, y, y); mpz_add_ui (y, y, 1); mpz_mod (y, y, n);mpz_mul (y, y, y); mpz_add_ui (y, y, 1); mpz_mod (y, y, n);mpz_sub(c, x, y);mpz_abs(c, c);mpz_gcd(d, c, n);
}...
Friedrich-Alexander-Universität Erlangen-NürnbergApelt, Nicolas – Zoellner, Christian 10
Integer Factorization (Implementierung C)
Optimierte Implementierung:...while (mpz_cmp_si(d, 1) == 0){
mpz_set_si(p,1);for (i=1; i<=50; i++) {
mpz_mul (x, x, x); mpz_add_ui (x, x, 1); mpz_mod (x, x, n);mpz_mul (y, y, y); mpz_add_ui (y, y, 1); mpz_mod (y, y, n);mpz_mul (y, y, y); mpz_add_ui (y, y, 1); mpz_mod (y, y, n);mpz_sub(c, x, y);mpz_abs(c, c);mpz_mul(p,p,c);mpz_mod(p,p,n);
}mpz_gcd(d, p, n);
}...
Friedrich-Alexander-Universität Erlangen-NürnbergApelt, Nicolas – Zoellner, Christian 11
Integer Factorization (Implementierung OpenCL)
Parallelisierung Mehrfaches Starten des gleichen Kernel
- Unterschiedliche Startwerte fuer die Threads
Jeder Kernel durchlaeuft nur eine bestimmte Anzahl an Iterationen- Findet er waehrenddessen einen Faktor, so terminiert er vorzeitig
Der Host prueft, ob einer der Kernel einen (gueltigen) Faktor gefunden hat- Falls ja, ist die Arbeit beendet.- Wenn nicht, beginnt der Prozess wieder von vorn.
Friedrich-Alexander-Universität Erlangen-NürnbergApelt, Nicolas – Zoellner, Christian 12
Integer Factorization (Implementierung OpenCL)__kernel void PollardRho(ulong n_, __global ulong * x_, __global ulong * d_) {
const int idx = (get_global_id(0) * get_local_size(0)) + get_local_id(0);const ulong n = n_;ulong x = x_[idx];ulong y = x;ulong d;
for (int i = 0; i < (1<<14); ++i) {x = F(x, n); y = F(F(y,n),n);d = gcd(abs_diff(y, x), n);
if ((d > 1) && (d < n))break;
else if (d == n) {y = x;--x;
}}d_[idx] = d;x_[idx] = x;
mem_fence(CLK_LOCAL_MEM_FENCE);mem_fence(CLK_GLOBAL_MEM_FENCE);
}
Friedrich-Alexander-Universität Erlangen-NürnbergApelt, Nicolas – Zoellner, Christian 13
Integer Factorization (Implementierung OpenCL)
Probleme Absturz des Kernels nach einigen Sekunden
- Loesung: Watchdog im Treiber beendet Kernel nach etwa 5-7 Sekunden Tritt bei Tesla-Karten und PS3 nicht auf (spaeter?)
Das ewige Problemkind: Ueberlauf bei Multiplikation- Multiplikation zweier 64-Bit-Zahlen liefert 127-Bit-Zahl- Loesung: Aufteilung der Multiplikation in vier 32-Bit-Multiplikationen
Gleiches fuer Modulo und Subtraktion\
- Mit dieser polynomiellen Zahlendarstellung lassen sich im Grunde beliebig grosse Zahlen berechnen
Geschwindigkeit- Trotz praktisch identischer Implementierung ist das OpenCL-Programm
um etliche Groessenordnungen langsamer Teilweise erklaerbar: Kompilieren und Initialisieren kostet Zeit Unklar: Iterationen erheblich langsamer als auf CPU
Debugging- Keine allgemeine Debugging-Moeglichkeit
Friedrich-Alexander-Universität Erlangen-NürnbergApelt, Nicolas – Zoellner, Christian 14
ENDE