2010-05-19 8 views
6

Vorweg:Welche Art von Arbeit benifits von OpenCL

  • ich bewusst bin, dass OpenCL magisch nicht alles schneller
  • Ich bin machen sich bewusst, dass OpenCL So Einschränkungen

hat jetzt zu meiner Frage, ich bin es gewohnt, verschiedene wissenschaftliche Berechnungen mit Programmierung zu tun. Einige der Dinge, mit denen ich arbeite, sind ziemlich intensiv in Bezug auf die Komplexität und Anzahl der Berechnungen. SO fragte ich mich, vielleicht könnte ich Dinge beschleunigen mit OpenCL.

Also, was ich würde lieben, von Ihnen zu hören alle ist es, Antworten auf einige der folgenden [Bonus für Links]:

* Welche Art von Berechnungen/Algorithmen/allgemeine Probleme für OpenCL geeignet ist

* Was sind die allgemeinen Richtlinien für die Bestimmung, ob ein bestimmter Code von einer Migration auf OpenCL profitieren würde?

Grüße

Antwort

9

Ich denke, das ist eine gute Frage, und es ist etwas, das ich auch für meine eigene Forschung ausarbeiten möchte.

Im Moment gibt es starke Einschränkungen in Bezug auf was GPUs tun können, da sie einzelne Threads benötigen, um genau denselben Code auf verschiedenen Datensätzen auszuführen, d.h. das Problem/der Algorithmus muss "Datenparallel" sein. Zu den datenparallelen Problemen gehören offensichtlich Monte-Carlo-Simulationen (wo viele MC-Simulationen parallel ausgeführt werden), Bildverarbeitung und weniger offensichtlich Moleküldynamiksimulationen. Die numerische Integration (Monte Carlo oder anders) ist eine weitere wissenschaftliche Anwendung, die leicht auf eine GPU übertragen werden kann. Die andere Haupteinschränkung ist, dass der Speicher pro Thread sehr begrenzt ist, und um effizient auf einer GPU ausgeführt zu werden, muss der Algorithmus eine hohe arithmetische Intensität haben. Eine notwendige, aber nicht hinreichende Bedingung für einen Algorithmus, ein Kandidat zum Ausführen auf einer GPU zu sein, ist, dass der Algorithmus auf der CPU stark CPU-gebunden sein muss und nicht an den Speicher gebunden sein muss.

Ich bin der Ansicht, dass mit der Zeit immer mehr Probleme behoben werden, so dass sie mit diesem Paradigma gelöst werden können, nur weil es einen so großen Leistungsgewinn gibt, aber die tief hängenden Früchte sind offensichtlich Daten parallele Probleme. Die massive Multicore-Programmierung wird meines Erachtens in den nächsten zehn Jahren in wissenschaftlichen Kreisen immer wichtiger und präsenter werden.

Ich habe damit ein bisschen herumgespielt, und schaffte es, ein Backtracking-Problem in ein geeignetes Format für die Ausführung auf einer GPU (mit CUDA) Shoahorn. FYI, ich beschreibe dies in einem Vortrag: http://lattice.complex.unimelb.edu.au/home/sites/default/files/mydocuments/clisby_cuda0509.pdf

3

Es ist gut für Aufgaben geeignet, die als ein etwas kleines Programm, die parallel arbeiten über große Teile von einfachen Datenstrukturen ausgedrückt werden kann.

Wenn Sie den Unterschied zwischen zwei Bildern berechnen möchten, ist OpenCL für Sie. Wenn Sie eine Szene nachverfolgen möchten, ist das etwas schwierig, aber immer noch machbar. Wenn Sie große Mengen von Web-Service-Anfragen beantwortet haben, ist OpenCL nicht die Lösung.

2

Soweit es Algorithmen betrifft, müssen sie Daten parallel sein. Das ist ein Satz Daten sollten keine Abhängigkeiten von vorherigen Mengen haben. Um eine Analogie zu ziehen, betrachten Sie die Einfügesortierung, bei der ein Element mit anderen Elementen verglichen wird, um den richtigen Platz zu finden.Dies ist "nicht" datenparallel, da jeder Schritt auf die N-1 Elemente zugreifen muss. Wenn Sie jetzt mit openCL sortieren müssen, müssen Sie eine bitonische Sortierung implementieren, die eine Art Sortiernetzwerk ist.

Auch wenn sie Daten parallel sind, gibt es die Frage der Abwägung zwischen FLOPS und Speicher Latenzen. Wenn alle Daten aus dem globalen Speicher abgerufen werden müssen, ist die Leistungsverbesserung möglicherweise nicht signifikant. Die Speicherwartezeiten der GPU sind viel höher als die der CPUs. Um dem entgegenzuwirken, gibt es lokale Speicher in der GPU, die verwendet werden können.