為什麼使用了SSE2的Matrix乘法速度比沒有使用SSE2的代碼慢?

代碼在自學DX12記錄(1),直接放這裡好像會超出字數......為什麼手機上看代碼全亂了,只能電腦看或放大最後的截圖……

在VS2017編譯測試,很久沒有寫代碼了,是不是什麼低級錯誤......數值精度略有差異......

這是Release版本運行截圖:

這是主要配置,修改/fp:fast效果一樣......


有可能因為運算結果沒有被使用,而令運算過程被優化消除了。可試列印結果。

另外,分析這類問題時,最簡單是斷點調試(但要用 optimized 版本),看反彙編是否合乎預期。習慣後,寫 C++ 時其實也只是想讓編譯器生成所期望的機器碼而已。



數值精度很正常,浮點運算不符合交換律,無論GPU還是向量化都會和串列結果產生偏差,這個偏差可不是錯了。他就該是這樣。

性能的話我沒有仔細看過也不好說。。也許是隱式轉換帶來的overhead?你試試轉換後再循環乘怎麼樣?


說不定你手寫的演算法被優化成了更高級的指令集,AVX2之類的,而DX被寫死了只能用SSE2.

看編譯出來的彙編是什麼樣吧。


推薦閱讀:

有哪些好用的輕量級3D遊戲引擎?
Windows 支持 DirectX 和 OpenGL,為什麼大多數 PC 遊戲還是 DirectX 開發?
遊戲的漢化過程是怎樣的?
如何評價虛擬搖桿在手游中的廣泛運用?
獨立遊戲在國內有戲嗎?

TAG:遊戲開發 | C | 計算機圖形學 | DirectX12 |