天天看點

[彙編]彙編學習筆記(3):SIMD了解

        《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++代碼:

        一個簡單的結構體:

[彙編]彙編學習筆記(3):SIMD了解

        C++加法

[彙編]彙編學習筆記(3):SIMD了解

        C++代碼轉換成彙編

[彙編]彙編學習筆記(3):SIMD了解

彙編代碼

[彙編]彙編學習筆記(3):SIMD了解

        對比下,不說其他的,就加法操作來說,C++執行了4次加法(addss指令),而彙編代碼就執行了1次加法(addps指令)。性能優化了4倍。在遊戲開發中,矩陣,向量中包含大量的加法運算,而且資料量很大,如果采用SIMD的話,性能上就優化了很多。

運作代碼和結果如下圖:

[彙編]彙編學習筆記(3):SIMD了解

繼續閱讀