OpenCL: CPU - /GPU-mehrere Geräte
Ich möchte die Ausführung paralleler tasks auf die GPU und CPU mit OpenCL mehrere Geräte. Die standard-Beispiele aus der AMD-SDK sind nicht sehr klar zu diesem Thema. Können Sie beraten, zusätzliche Anleitungen oder Beispiele zu diesem Thema? Jede Beratung wird tun.
Danke.
- Mein Papier Eine Umfrage von CPU und GPU Heterogenen Computing-Techniken werden viele runtime-Systeme und Programmiersprachen für die Berechnung über CPU und GPU.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Für tutorial und details über die Verwendung von mehreren Geräten, können Sie wollen, siehe Abschnitt 4.12 der AMD-APP-SDK Programming guide
Parallel ausgeführt werden Aufgaben auf mehreren Geräten erfordert dynamische Planung für guten Wirkungsgrad, weil Sie nie wissen, die genaue Leistung von jedem Gerät - es hängt von der aktuellen Belastung (nicht nur durch Ihr Programm, aber alle anderen auch), aktuelle Uhr (es kann sich ändern, deutlich auf den meisten CPUs und GPUs je nach den aktuellen Energiespar-Profil oder laden). Auch real-world performance hängt von Ihrer input-Daten.
Natürlich, Sie können schreiben, alle nötigen code selbst wie alle anderen Antworten vorschlagen, aber meiner Meinung nach ist es Verschwendung von Zeit und es ist viel bessere Idee zur Verwendung der vorhandenen Lösung. Ich empfehle die Verwendung StarPU. Ich habe verwendet, StarPU in meinem OpenCL-Projekt, und es funktionierte ziemlich gut. StarPU kommt mit Beispielen auf, wie code zu schreiben in der Lage mit mehreren GPUs und CPUs effizient.
StarPU:
Dort ist auch ein weiteres Projekt, SkePU, aber ich wollte nicht versuchen, es selbst:
SkePU:
Wenn Sie bei Google nach "dynamische scheduling-gpu-cpu-opencl" finden Sie noch weitere möglicherweise nützliche Kostenlose oder kommerzielle Projekte und Dokumentation.
Es gibt nichts hält Sie zurück, dies zu tun. Sie müssen liefern alle Geräte, die Sie verwenden möchten, um Ihren Anruf zu
clCreateContext()
und dann erstellen Sie mindestens eine command queue für jeden von Ihnen. Je nachdem, was Sie versuchen zu tun, müssen Sie möglicherweise betrachten die erweiterte task-scheduling-Verfahren, z.B. die Verwendung der out-of-order-Kommando-queues und Veranstaltungen, planen von tasks auf allen Geräten.Mit clGetPlatforms finden Sie heraus, ob Sie mehr als eine Plattform oder nicht. Wenn Sie eine nVidia-GPU board und eine AMD CPU finden Sie auf Plattformen. Eine Plattform für die AMD-SDK und eine für die nVidia-CUDA-OpenCL-Implementierung. Mit clGetDevices finden Sie für jede Plattform, die die Geräte zur Verfügung. Es könnte ein pro-Plattform wie 1xGPU und 1xCPU.
Für jedes Gerät einen Kontext schaffen, mit clCreateContext und dann können Sie laufen beide parallel.
OpenCL Programming Guide von Aftab Munshi & andere geben Ihnen mehr details.