請分別舉例說明什麼是物理加速和硬體加速,另外英偉達的PhysX是不是一種噓頭,它到底可不可以用CPU來實現?

望能得到專業的通俗易懂的解答.


遊戲里的一堵牆爆炸了,磚頭亂飛。每一塊磚頭飛行的方向、速度、姿態,是根據實際磚頭的重量、形狀、風速、衝擊力、互相之間的碰撞真實計算出來的呢,還是預先錄好一段動畫,無論這堵牆的哪個位置爆炸,爆炸力多大,看到的都是同一段動畫。前者就叫做物理模擬。

沒有「物理加速」這個術語,正確的術語是「硬體加速物理模擬」,就是用特定的硬體來加速物理模擬的計算過程。

PhysX是一種物理模擬的實現和API。遊戲開發的時候只要使用了PhysX的API,同時遊戲運行的平台上也支持PhysX API,就可以在遊戲中開啟物理模擬效果——更真實的爆炸、水波、織物、桌椅板凳亂飛……

PhysX當然可以用CPU實現。但是物理模擬計算需要大量的數學運算,會消耗CPU的計算能力。物理模擬運算量增加了,CPU用來處理圖形和遊戲邏輯的時間就減少了,遊戲就更有可能不流暢。

所以PhysX有基於CUDA的實現,把大量物理模擬的計算搬到GPU上來「加速」。但是同樣的,物理模擬計算佔用了GPU資源,GPU用於處理圖形的計算能力就減少了。如果GPU足夠強勁,在處理圖形之外能力還有富裕,那麼用來處理PhysX當然是很合算的。但是如果GPU不夠強勁,處理圖形之外再處理PhysX的物理模擬運算,就會拖慢整個遊戲渲染過程。

----------------------------- 吐槽的分割線 -----------------------------------

最後,沒看明白「PhysX是不是噱頭」和「PhysX能不能用CPU實現」二者之間有什麼邏輯聯繫。


PhysX當然可以用CPU實現。所有硬體加速都能用軟體實現。但是那樣的話你就會問為什麼性能差那麼多了。


CPU是為了通用計算而設計的,他的硬體資源比較平均地分給了加減法、乘法、定址、寄存器、微指令等組件。

但有的時候你的計算任務幾乎90%都是加法和乘法,那你就可以專門做一組硬體,它只能狂算加法和乘法,能同時算好幾百個,但是別的功能做不了。遇到需要大量計算加法乘法的時候就扔到硬體上去,其他時候仍然用CPU,這個就叫做硬體加速。平均下來,比起全部做成通用計算組件來說,每次計算的成本降低了。


慚愧,我學會用PhysX做模擬的時候都不知道怎麼開啟GPU加速。。。。

---------------------

正經回答:PhysX是個物理引擎,物理引擎的主要作用是對物體的運動狀態和受力等進行積分計算,這種計算可以在CPU端也可以在GPU端進行,使用GPU進行計算就是題目中所謂「硬體加速」。GPU計算的好處在於物理計算中涉及大量浮點數,GPU的浮點運算能力強於CPU;而且在流體模擬/焰火模擬等特殊物理模擬過程中可能會用到大量粒子來模擬,GPU並行程度高可以並行對多個粒子進行積分計算。我不是做物理模擬的專家,要說硬體加速什麼缺點,我猜可能要求開發者有能力在GPU上正確分配每幀Graphics和物理計算的workload,開發難度較大;如果直接使用CPU計算的話一般就是在CPU上更新完狀態再把數據送到GPU里渲染,比較簡單。


PhysX本來就能用CPU來跑

什麼叫用CPU來實現?API都是人實現的,CPU實現不了


推薦閱讀:

主板供電問題及cpu購買建議?
為何 PC 需要單核高性能,而伺服器不在乎?
c++加法比乘法快嗎?我的實驗為什麼一樣快呢?
為什麼許多電腦都是默認關閉CPU虛擬化?
如何評價龍芯要做獨立於Wintel、AA體系的第三極?

TAG:中央處理器CPU | 圖形處理器GPU | 硬體加速 |