2012-02-16 44 views
0

我是OpenCL的新手,請告訴我主機CPU只能用於爲設備分配內存,或者我們可以使用它作爲openCL設備。 (因爲分配完成後,主機CPU將空閒)。OpenCL-浪費主機計算能力

+1

只需使用Google搜索'OpenCL CPU'即可獲得答案。 – James 2012-02-16 16:09:07

回答

1

您可以使用cpu作爲計算設備。 Opencl甚至允許多核/處理器系統將內核分割成獨立的計算單元。我喜歡使用此功能將我係統上的cpus劃分爲基於NUMA節點的組。有可能將cpu劃分爲全部共享相同級別的高速緩存(L1,L2,L3或L4)的計算設備。

您需要一個支持它的平臺,比如AMD的SDK。我知道可以在同一臺機器上安裝Nvidia和AMD平臺,但我自己從來沒有這樣做過。

此外,opencl事件/回調系統允許您在gpu內核執行時像往常一樣使用您的cpu。這樣,您可以在等待gpu內核完成時使用主機上的openmp或任何其他代碼。

+0

我已初始化並使用CPU和GPU計算上下文同時運行,但從未在生產場景中播放。我預計這兩種計算設備的非常不同的需求和速度將使得在兩者之間進行復雜的計算變得很困難。 – Ani 2012-02-16 15:25:47

+0

這將始終與問題有關。我閱讀了一個BLAS實現,其中CPU處理矩陣的奇怪邊形,而GPU則處理好NxM內部矩陣。本書*有關於如何使用cpu和gpu來計算不均勻大小的粒子碰撞的完整章節。 * HTTP://developer.amd.com/zones/OpenCLZone/universities/OpenCLTextBook/Pages/default.aspx – mfa 2012-02-16 18:25:02

0

沒有理由CPU必須閒置,但它需要一個單獨的工作。一旦你提交了OpenCL的工作,你可以:

  1. 繼續其他事情,比如準備下一組工作,或者對完全不同的東西進行計算。
  2. 將CPU設置爲另一臺計算設備,然後向其提交一項工作。

就我個人而言,我更傾向於發現自己需要第一種情況,因爲它很罕見我發現自己有兩個獨立的任務,並且可以藉助OpenCL方式。訣竅在於保持事物平衡,因此您不需要等很長時間才能完成GPU任務,或者在CPU開始其他工作時讓GPU閒置。

這是OpenGL程序員不得不征服的問題。避免CPU或GPU綁定,並在兩者之間實現最佳性能平衡。