《3D.Game.Engine.Programming》第4章主要講的就是數學計算,一直在扯一個SIMD概念,SIMD全稱Single Instruction Multiple Data,單指令多資料流。還有介紹Intel公司的MMX和AMD公司的3DNow的曆史,以及SSE,SSE2指令,這些都需要自己去百度Google了解,因為作者都是簡單介紹下。
舉個對比的例子,假設有2個4維的向量,求這2個4維向量相加後的新向量。如果不采用SIMD的話,就需要執行4次相加的指令,采用的話隻需要執行1次相加的指令。
先來看下C++代碼:
一個簡單的結構體:
C++加法
C++代碼轉換成彙編
彙編代碼
對比下,不說其他的,就加法操作來說,C++執行了4次加法(addss指令),而彙編代碼就執行了1次加法(addps指令)。性能優化了4倍。在遊戲開發中,矩陣,向量中包含大量的加法運算,而且資料量很大,如果采用SIMD的話,性能上就優化了很多。
運作代碼和結果如下圖: