3
當我嘗試展開與AVX簡單的循環,我得到運行時錯誤 - 段錯誤:奇怪的錯誤
const int sz = 9;
float *src = (float *)_mm_malloc(sz*sizeof(float), 16);
float *dest = (float *)_mm_malloc(sz*sizeof(float), 16);
for(int i=0; i<8; i+=8)
{
__m256 buffer = _mm256_load_ps(src+i);
_mm256_store_ps(dest+i, buffer);
}
_mm_free(src);
_mm_free(dest);
有趣:如果SZ = 8,或> = 13,運行時不會壓碎。否則發生分段錯誤。
怎麼了?
編譯器 - gcc 4.7。
什麼編譯器是這個(猜測英特爾),是我不會感到驚訝,有一個[SSCCE](http://meta.stackexchange.com/questions/22754/sscce-how-to-provide-examples-for-programming-questions/22762#22762)? – sehe
編譯器 - gcc 4.7。 – gorill
您的AVX寄存器包含256位。而256/8 = 32,這就是使用內在函數時需要32字節對齊的原因。 – cdiggins