我使用的是CUDA 6.0和與CUDA SDK捆綁在一起的OpenCL實現。我爲每個平臺有兩個相同的內核(它們在平臺特定的關鍵字中有所不同)。他們只能讀寫全局內存,每個線程都有不同的位置。 CUDA的啓動配置爲200 blocks of 250 threads (1D)
,它直接對應於OpenCL的配置 - 50,000 global work size and 250 local work size
。CUDA vs OpenCL性能對比
OpenCL代碼運行速度更快。這是可能的還是我計時錯了?我的理解是NVIDIA的OpenCL實現基於CUDA的實現。與OpenCL相比,我的性能提高了15%左右。
如果你能提出爲什麼我可能會看到這一點,並且可能與NVIDIA實施的CUDA和OpenCL之間的某些差異,那將是很棒的事情。
結果在問題和案例中不一致。但你的也許是對的。 OpenCL在默認情況下是異步的,因此,如果您使用CUDA(非異步),那麼性能可能會略微低於OpenCL。 – DarkZeros
我已經聽說NVIDIA的OCL實現是基於CUDA的。然而,每次我試圖找到一些消息來源時,我從來沒有找到任何證據。我的結論是,基於CUDA被錯誤地用作語言名稱的事實是錯誤的,而實際上它是根據維基百科的「並行計算平臺和編程模型」(Compute Unified Device Architecture)。因此,當你看到NVIDIA的幻燈片顯示在OCL下有一個稱爲CUDA的GPU,這是一個CUDA芯片。如果你有任何問題,你可以發佈你的來源嗎?我很想知道。 – CaptainObvious
OpenCL和CUDA完全不同。他們最終都使用相同的硬件。但是就像OpenGL和DirectX一樣,其他人也不在其他人之下。要說明這一點,要點是庫不同,編譯器不同,執行模型也不同。有些部分可能很常見,但大多數不是。 – DarkZeros