開始使用 opencl

本節概述了 opencl 是什麼,以及開發人員可能想要使用它的原因。

它還應該提到 opencl 中的任何大型主題,並連結到相關主題。由於 opencl 的文件是新的,你可能需要建立這些相關主題的初始版本。

Opencl 是一個 api,可以將 gpus,cpus 和其他一些加速器(如 pcie-fpga)充分利用類似 C99 的計算,但具有非常廣泛的併發優勢。一旦安裝和基本實現完成,只有核心字串(或其檔案)中的簡單更改會自動將演算法應用於 N 個硬體執行緒。

開發人員可能希望使用它,因為優化記憶體空間或速度比在 opengl 或 direct-x 上執行相同操作要容易得多。它也是免版稅的。裝置內的併發是隱式的,因此不需要為每個裝置進行顯式多執行緒。但對於多裝置配置,仍然需要 cpu 多執行緒。例如,當 1000 個執行緒作業傳送到 cpu 時,執行緒同步由驅動程式處理。你只需告訴它工作組應該有多大(例如 256 個與虛擬本地記憶體​​連線)和同步點(僅在需要時)。

使用 gpu 進行通用操作幾乎總是比 cpu 快。你可以更快地對事物進行排序,將矩陣乘以 10 倍的速度,並在 no 時間內連線記憶體中的 sql 表。任何 200 美元的桌面級 gpu 將在物理(有限元方法流體)工作負載上比任何 200 $ cpu 更快完成。Opencl 使其更容易和便攜。當你使用 C#完成工作時,你可以使用相同的核心和 C++專案(使用 JNI 和額外的 C++編譯)輕鬆轉移到 java-opencl 實現。

對於圖形部分,你並不總是需要在 cpu 和 gpu 之間傳送緩衝區。你可以在上下文建立部分使用 interop 選項純粹在 gpu 上工作。使用 interop,你可以在 gpu 的極限效能下準備幾何。任何頂點資料都不需要 pci-e。只傳送一個命令,只在圖形卡內部完成工作。這意味著沒有資料的 cpu 開銷。Opencl 準備幾何資料,opengl 渲染它。CPU 被釋放。例如,如果 cpu 的單個執行緒可以在 10000 個週期內構建 32x32 的頂點球體,那麼具有 opencl 的 gpu 可以在 1000 個週期內構建 20 個球體。