我一直在試圖找出如何在一個非常關鍵的幾行獲得在我的代碼一些改進:幫助組裝/ SSE乘
float x = a*b;
float y = c*d;
float z = e*f;
float w = g*h;
所有A,B,C ...是彩車。
我決定研究使用SSE,但似乎無法找到任何改善,實際上它變慢了兩倍。我SSE代碼:
Vector4 abcd, efgh, result;
abcd = [float a, float b, float c, float d];
efgh = [float e, float f, float g, float h];
_asm {
movups xmm1, abcd
movups xmm2, efgh
mulps xmm1, xmm2
movups result, xmm1
}
我還使用標準的內聯彙編嘗試,但它不會出現,我可以收拾寄存器與4個浮動點像我可以與SSE。
任何意見,或幫助將不勝感激,我主要需要了解爲什麼我使用SSE的計算比串行C++代碼慢?
我正在編譯Visual Studio 2005,在Windows XP上,使用帶有HT的Pentium 4,如果它提供了任何其他信息來幫助。
在此先感謝!
我認爲你需要提供更多的上下文。簡單地乘四對浮標將在任何現代PC上花費幾乎無法衡量的時間。這是在一個循環?你是否將結果存儲在某個地方或將它們用作下一次迭代的中間體? – 2010-06-02 21:04:06
我也明白,從上交所的最大好處是可以做很多重複,裝箱每次註冊,但所有我打算使用此生成的編號做只是要返回到一些加減電話,沒有我想要包含在SSE代碼中,但計算時間的任何改進都會在代碼的整個生命週期中節省大量時間。 – Brett 2010-06-02 21:08:12
這不一定是真的。如果這不是一個循環,那麼在任何給定的代碼中,任何好處都將是完全不明顯的。當然,如果軟件使用了幾千年,節省的總時間可能是有意義的,但這確實是關於它的。不要過度優化,今天的編譯器非常好。如果實際運行速度太慢,首先要進行分析,然後優化瓶頸。 – Donnie 2010-06-02 21:19:59