2010-05-20 58 views
3

背景:我剛剛開始。我還沒有觸及的Direct3D 11 API,而是看着瞭解管道等使用Direct3D時,CPU上的數學計算是多少?

從看文檔和信息的網絡上浮動,這似乎是一些計算正在被應用程序處理。這是,而不是簡單地呈現矩陣乘以GPU,計算由數學庫完成,該數學庫在CPU上運行。我沒有任何特別的資源可以指出,但我想我可以指向XNA Math Library或2月DX SDK中發佈的示例。當您看到類似mViewProj = mView * mProj;的代碼時,該投影正在CPU上計算。或者我錯了?

如果你正在寫一個程序,在那裏你可以在屏幕上,在那裏你可以移動或旋轉立方體,以及角度來看,什麼算盤,你會在CPU上做10個立方體?我想我會存儲單個立方體的幾何體,然後轉換表示實際實例的矩陣。然後,看起來我會使用XNA數學庫或我選擇的另一個庫來轉換模型空間中的每個立方體。然後獲取世界空間中的座標。然後將信息推送到GPU。

這在CPU上的計算相當多。我錯了嗎?

  • 我是基於太少的信息和理解得出結論嗎?
  • 如果答案是STFW,我應該使用什麼條款?
  • 或者如果我是正確的,爲什麼這些計算也不會推到GPU上?

編輯:順便說一句,我沒有使用XNA,但文檔記錄XNA數學庫取代了以前的DX數學庫。 (我將SDK中的XNA庫視爲純粹的模板庫)。

回答

4

「我是基於太少的信息和理解來得出結論嗎?」

並非是一件壞事,大家都這樣做,但在一個字:是的。

什麼是由GPU完成的是,通常,依賴於GPU的驅動程序和您的訪問的方法。大多數時候你真的不在乎或需要知道(除了好奇心和一般理解)。

對於mViewProj = mView * mProj;這很可能發生在CPU上。但它沒有太多的負擔(最多以100個週期計算)。真正的竅門是在「世界」上應用新的視圖矩陣。每個頂點都需要進行變換,或多或少,以及陰影,紋理,光照等。所有這些工作都將在GPU中完成(如果在CPU上完成,事情會非常快地減慢)。

一般來說,你做高層次的改變世界,也許20次CPU綁定的計算,而GPU負責的百萬或數十億需要根據變化來呈現世界的計算。

在你10立方的例子:你提供一個變換每個立方體,任何數學需要爲你打造的變換CPU綁定的(有例外)。您還爲視圖提供了變換,再次創建變換矩陣可能受CPU限制。一旦你有了11個新的矩陣,你就可以應用到世界。從硬件的角度來看,需要將11個矩陣複製到GPU ......這將會非常快速地完成......一旦複製CPU完成並且GPU基於新數據重新計算世界,則將其渲染爲一個緩衝區並將其拖放到屏幕上。所以對於你的10個立方體來說,CPU邊界計算是微不足道的。

看看XNA項目的一些反射代碼,你會看到你的計算結束和XNA開始的地方(XNA將盡一切可能在GPU中)。

+0

「一般來說,你可以對世界進行高層次的改變,也許20個CPU邊界計算」:即使對於更復雜的場景?你會重新設計你的數學庫嗎(比方說,將CPU綁定計算推到GPU上)?或者它只是一個有缺陷的設計,需要大量的CPU邊界計算? (另外,請注意我的編輯,使用C++,而不是C#+ XNA)。 – user346582 2010-05-21 00:00:56

+0

使用CPU並非邪惡:您可以執行並仍然保持60 FPS(具有良好用戶體驗的最低目標FPS,恕我直言)的CPU計算數對於現代雙核CPU以及64位,6核, 12路3.5GHz CPU可用於<$ 1000usd,它只會變得更好。當然,允許的CPU時間百分比完全取決於你。有幾個用於將通用計算推送到GPU的庫,請參閱:http://stackoverflow.com/questions/1249892/c-perform-operations-on-gpu-not-cpu-calculate-pi。使用GPU作爲數學協處理器肯定是在動。 – Rusty 2010-05-21 00:33:56

+0

我不認爲CPU是邪惡的,但我覺得奇怪的是,與渲染圖形相關的計算被留給了CPU,然後將這種計算轉移到加速渲染的設備上有一種先進的趨勢。無論如何,最好在CPU上確認計算結果。感謝您花時間回答我的問題。 – user346582 2010-05-21 00:50:35