我想弄清楚如何最好地預先計算一些正弦和餘弦值,將它們存儲在對齊的塊中,然後稍後用它們進行SSE計算:爲什麼我的數據似乎沒有對齊?
在我的程序開始時,我創建了一個與成員對象:
static __m128 *m_sincos;
然後我初始化該成員在構造函數:
m_sincos = (__m128*) _aligned_malloc(Bins*sizeof(__m128), 16);
for (int t=0; t<Bins; t++)
m_sincos[t] = _mm_set_ps(cos(t), sin(t), sin(t), cos(t));
當我去使用m_sincos,我遇到三個問題:
-The數據似乎不對齊
movaps xmm0, m_sincos[t] //crashes
movups xmm0, m_sincos[t] //does not crash
-The變量似乎並不正確
movaps result, xmm0 // returns values that are not what is in m_sincos[t]
//Although, putting a watch on m_sincos[t] displays the correct values
- 什麼真的讓我困惑的是,這使得一切工作(但速度太慢):
__m128 _sincos = m_sincos[t];
movaps xmm0, _sincos
movaps result, xmm0
我只是做了一個sizeof(__ m128),sizeof(m_sincos [t])和sizeof(result),並且它們都返回了「16」 – Brett 2010-06-04 15:30:31
而不是_aligned_malloc,看起來功能完全相同,地址,當我初始化m_sincos時,地址是:0x260e2720,然後當我去使用它時,地址仍然是0x260e2720 ...那有幫助嗎? – Brett 2010-06-04 15:45:15
hmm,試着在每次加載之前放置assert語句來檢查對齊,而不是彙編,你可以嘗試_mm_load_ps內在? – Anycorn 2010-06-04 15:49:35