我有一個漂亮的老ATI HD 3400顯卡,它不支持OpenCL,所以我想知道我是否可以實際使用由ATI催化劑驅動程序提供的OpenGL庫?使用OpenGL程序時,我會使用GPU的強大功能嗎?
如果我的算法運行在glutDisplayFunc (displayFunc)
,那就是displayFun()
,它實際上是在耗費CPU功率還是GPU功耗?
我有一個漂亮的老ATI HD 3400顯卡,它不支持OpenCL,所以我想知道我是否可以實際使用由ATI催化劑驅動程序提供的OpenGL庫?使用OpenGL程序時,我會使用GPU的強大功能嗎?
如果我的算法運行在glutDisplayFunc (displayFunc)
,那就是displayFun()
,它實際上是在耗費CPU功率還是GPU功耗?
GLUT只是一個管理特定於平臺的窗口和GL上下文創建的庫。您傳遞給glutDisplayFunc
的功能僅由GLUT在您所運行平臺的適當時間和上下文中調用;它不在GPU上執行。
無法將正常編譯的代碼作爲GPU上運行的較大程序的一部分進行編譯。
但是,單獨的圖形操作在你的顯示器裏面運行func當然要在GPU上執行渲染; CPU仍然在計算要執行的圖形操作,但實際上並沒有渲染結果。每個gl
函數都是一個正常的CPU函數,但它的功能是通過系統總線發送命令到您的圖形卡,然後進行實際渲染。
此外,這些操作是異步的; gl
函數不會讓您的GPU在繼續執行程序之前完成操作。這很有用,因爲您的CPU和GPU都可以同時工作 - GPU繪製圖形,而CPU會計算出要繪製的圖形。另一方面,如果你確實需要另一個方向的通信 - 例如glReadPixels
- 那麼CPU必須等待GPU趕上。這也是glFlush
和glFinish
之間的差異。
你的意思是隻有圖形庫函數實際上是使用GPU,其他用戶提供的代碼是運行在CPU上,對嗎? – daisy
是的,確切地說。 'gl *'函數本身仍然是C函數,但它們會將系統總線上的命令發送到您的圖形卡,然後再進行渲染。 –
現在我明白爲什麼OpenCL是必要的,謝謝你的細節! – daisy