2011-04-13 118 views
6

我想用OpenCL多個設備在GPU和CPU上運行並行任務。 AMD SDK的標準示例在這個主題上並不十分清晰。你能建議關於這個主題的其他教程或例子嗎?任何建議都可以。OpenCL:運行CPU/GPU多個設備

謝謝。

+0

我的論文[CPU-GPU異構計算技術綜述](https://goo.gl/hBK9nw)討論了使用CPU和GPU進行計算的許多運行時系統和編程語言。 – user984260 2015-07-17 17:52:04

回答

1

沒有什麼能阻止你這樣做。您需要提供您想要使用的所有設備到clCreateContext()的呼叫,然後爲其中的每個創建至少一個命令隊列。根據您要做什麼,您可能需要查看更高級的任務調度技術,例如,使用亂序命令隊列和事件來安排跨設備的任務。

1

使用clGetPlatforms,您將瞭解您是否擁有多個平臺。如果你運行nVidia GPU板和AMD CPU,你會發現平臺。一個用於AMD SDK的平臺和一個用於nVidia CUDA OpenCL實現的平臺。使用clGetDevices,您可以爲每個平臺找到可用的設備。它可能是每個平臺像1xGPU和1xCPU。

對於每個設備使用clCreateContext創建一個上下文,然後可以並行運行。

+0

不幸的是,在這種情況下你不會找到gpu和cpu。要在Nvidia硬件上運行OpenCL,您需要Nvidia的運行時庫。它只會看到Nvidia設備。如果你有AMD gpu,你可以一次看到cpu和gpu,因爲它們共享一個運行庫。 AMD創造了更多真正的異構平臺。 – MiKom 2012-08-19 14:20:46

+0

您可以使用例如AMD OpenCL,並註冊NVida的實施。我做了一次,據我所知,它工作。您必須在Linux的/ etc/OpenCL/vendors中輸入供應商。對於Windows,我不知道位置,但應該有類似的東西。 – 2012-08-27 16:29:23

+0

事情從上次改變了一下。 Khronos引入了Installable Client Driver,即Shim OpenCL庫,用於查找實際的實現並展示其API。 (http://www.khronos.org/registry/cl/sdk/2.0/docs/man/xhtml/cl_khr_icd.html)。 – MiKom 2013-08-22 20:01:51

5

運行並行任務4.12節需要良好的效益分析動態調度,因爲你永遠不知道任何設備的準確性能 - 它取決於當前的負載(不僅僅是你的程序,而是所有其他的),當前時鐘(根據當前的節能模式或負載,它可能會在大多數CPU和GPU上顯着變化)。另外,真實世界的性能可能取決於您的輸入數據。

當然,您可以自己編寫所有必要的代碼,就像所有其他答案一樣,但在我看來這是浪費時間,使用現有解決方案更好。我建議使用StarPU。我在我的OpenCL項目中使用過StarPU,它工作得很好。 StarPU提供瞭如何編寫能夠有效使用多個GPU和CPU的代碼的示例。

StarPU

傳統處理器已經達到其異構多核設計和硬件專業化(例如協處理器,加速器,...)打算處理體系結構限制。但是,利用這些機器在各個層面上引入了許多具有挑戰性的問題,從編程模型和編譯器到可擴展硬件解決方案的設計。這些架構的高效運行時系統的設計是一個關鍵問題。 StarPU通常使高性能庫或編譯器環境更容易利用可能配備GPGPU或Cell處理器的異構多核機器:與其處理低級別問題,程序員可能會專注於算法問題。

還有另外一個項目,SkePU,但我沒有嘗試自己:

SkePU

SkePU是這樣的多核CPU和多GPU系統的骨架編程框架。它是一個C++模板庫,包含六個數據並行和一個任務並行框架,兩種容器類型,並支持在使用CUDA和OpenCL的多GPU系統上執行。最近,通過爲StarPU運行時系統實現後端,在SkePU中開發了對混合執行,性能感知動態調度和負載平衡的支持。

如果你是谷歌的「動態調度gpu cpu opencl」,你可以找到更有用的免費或商業項目和文檔。

0

Aftab Munshi的OpenCL編程指南&別人會給你更多的細節。