2017-11-05 4 views
0

Ich habe ein OpenCL sequenzielles Programm und ein paralleles Programm, das aus dem gleichen Algorithmus besteht. Ich habe die Ausführungszeit Ergebnisse als 133000 Millisekunden für sequentielle und 17 Millisekunden als Kernel-Zeit für parallel. Also, wenn ich die Geschwindigkeit, die 133000/17 ist berechnen, bekomme ich 7823 als Beschleunigung. Ob so viel Geschwindigkeit möglich ist?Open CL Beschleunigung erreicht ist über 7000

+0

Was genau ist Ihr Programm zu tun? Zeigen Sie einen Code (z. B. einen [MCVE]) in Ihrer Frage an, bearbeiten Sie also Ihre Frage **, um sie zu verbessern. –

+1

Das ist wirklich groß ... Hast du die beiden Ausgaben sorgfältig verglichen, um zu sehen, ob der Job richtig gemacht wird? –

+1

Erläutern Sie auch in Ihrer Frage, wie Sie Ihren Code kompiliert haben. Ohne viel mehr Details (etwas Code, die Kompilierungsbefehle, das Benchmark-Protokoll, die eigentliche Hardware und den Compiler) ist Ihre Frage zu weit gefasst. Bitte ** Verbessere deine Frage ** –

Antwort

0

Eine solche Beschleunigung passieren könnte (aber scheint ziemlich groß, für mich, ein Speedup von 7823 sieht verdächtig aber nicht ganz unmöglich, siehe zum Beispiel these slides und that Ein 100x Faktor würde mehr sinnvoll erscheinen.). Kostspielige Grafikkarten werden gemunkelt, um auf mehreren Teraflops laufen zu können. Ein einzelner Kern gibt nur Gigaflops. Einige bestimmte Programme können auf GPGPU sogar langsamer ausgeführt werden als auf der CPU.

Achten Sie beim Benchmarking Ihres CPU-Codes darauf, Optimierungen in Ihrem Compiler zu aktivieren (z. B. mit gcc -O2 mindestens mit GCC kompilieren). Ohne irgendeine Optimierung (z. B. gcc -O0) ist die CPU-Leistung langsam (z. B. ist ein 3x-Faktor zwischen binären, erhalten mit gcc -O0 und gcc -O2 üblich).

BTW, cache Überlegungen sind sehr wichtig für die CPU-Leistung. Wenn Sie Ihren numerischen CPU-Code geschrieben haben, ohne dies zu berücksichtigen, kann es ziemlich langsam sein (im komischen Fall, wenn es schlecht ist locality of reference).

0

Wenn die Kernel-Funktion ein Problem hat und nicht ausgeführt worden ist, werden die Zeit Ergebnisse ungenau sein