2014-04-29 56 views
0

我正在尋找Python包裝與OpenCL和Pure C OpenCL之間的性能度量。性能測量可以隨時間,內存等而變化。 - 是否有任何基準測試可用? - 對時間性能差異的期望是什麼? - 什麼樣的任務(當然平行)應該有所作爲?Pure C OpenCL與Python OpenCL性能

回答

3

PyOpenCL很可能是您的最佳選擇。我會選擇僅在非常特定的情況下使用C(對主機的速度/低延遲的超級關鍵需求)。對於大多數休閒並行程序來說,主機方有很大的餘量,因爲所有的實際工作都是在設備上完成的。

您可以考慮PyOpenCL和OpenCL在設備上具有相同的性能。

也許使用C,如果你是,比如......設計一輛自動駕駛汽車,並且每毫秒/放大器都很重要。但即使在這種情況下,Python有可能被有效利用。

找出您的特定程序是否放慢速度的最佳方法是計時您的代碼。對於PyOpenCL這意味着:

import time 

cl.command_queue_properties.PROFILING_ENABLE 

很多聰明的企業和個人選擇Python中第一個代碼,因爲他們可以很快構建一個靈活,工作原型。如果他們最終需要更多主機性能,則將Python移植到C是相對容易的。

希望有所幫助!

+0

確實有幫助,而且合理。但是,真正的測量是必須支持這一假設的。如果是這樣,結論是,在價值成本方面python是GPGPU編程的平臺 – chook

2

OpenCL使用預編譯的程序,稍後發送到設備執行。他們是所謂的「內核」。這些內核被部署爲在終端設備上執行。這意味着必須測量的主要成本是OpenCL實施API I/O。因此,您不能依賴內存/ CPU測量,因爲真正的OpenCL部件將使用它們。 AFAIK,沒有可用的基準測試,但如果你需要的話,並不難,但總體來說,矩陣乘法就是你好世界的例子。

OpenCL並不是那種類型,它在每個CPU週期都使用I/O。使用領域 - 真正的大數據處理,它使用一個大的輸入,大量的處理操作和一個輸出(不管小或大)。沒有人說OpenCL不能用於許多I/O和最小的計算變化,但實現API開銷不值得。

期望值必須是I/O與整體應用程序性能近似相同。

+0

當我有多個輸出和大量計算時,以及另一個處理輕量級的情況(例如中值濾波器)是什麼情況? – chook

+1

@ hellfire769 PyOpenCL實現並不缺少性能,AFAIK,因爲它簡單的封裝了OpenCL API。非常好的一個。對於你的情況,它會做好工作。它只是必須的。 – Anthony

1

這裏有一個基準:https://github.com/bennylp/saxpy-benchmark,比較PyOpenCL對OpenCL的以及其他框架/方法,如CUDA,純C++,numpy的,R,八度,甚至TensorFlow(聲明:我的作者)

根據基準測試結果,OpenCL和PyOpenCL之間的性能差異變化太大。 PyOpenCL GPU目標比OpenCL慢7倍,但對於CPU目標,PyOpenCL實際上比OpenCL快2倍以上!