請我試着對一些int64算術做一些優化。我需要做右側和左側移位,除法,餘數等所有的運算,我搜索了所有SSE內在函數,並且什麼也沒找到。左移不適用於負值。請問你能指導我嗎?SSE int64內在函數
代碼的一部分顯示(英特爾酷睿i7):
u_a2b2=(MatrixAiB1[0]>>2*z_bits);
res_ri=(MatrixAiB1[0] % (__int64(1)<<2*z_bits));
if (MatrixAiB1[0] >= 0)
{
if (abs(res_ri) > (__int64(1)<<41))
{
u_a2b2=u_a2b2+1;
}
}
else
{
if (abs(res_ri) < (__int64(1)<<41))
{
if (u_a2b2>=0)
{
u_a2b2=u_a2b2-1;
}
else
{
u_a2b2=u_a2b2+1;
}
}
}
一切INT64
感謝
歡迎來到SO。你寫的問題有點漫無邊際。如果你可以發佈一個完整的,但最小的程序,試圖做一件你想要的事情,並指出它到底是什麼錯誤,這將有所幫助。 – 2013-05-01 08:11:25
你想要達到的目標以及你想要改進的東西還遠遠不清楚。代碼本身似乎不適用於數組或類似的東西,因此對於64位版本的代碼,SSE指令絕對沒有幫助(最有可能的是,它會使速度變慢)。對於一個32位版本,SSE指令可能會稍微快一些(換句話說,除法或模數是相同的速度,因爲困難的部分是實際的除法,它發生在相同的除法單元中,無論它是作爲SSE或「常規」指令)。 – 2013-05-01 08:23:00
無論如何,SSE中沒有整數餘數(甚至整數除法)。 – harold 2013-05-01 08:26:16