gpt4 book ai didi

c++ - AVX 循环矢量化中的奇怪错误

转载 作者:太空狗 更新时间:2023-10-29 21:45:07 24 4
gpt4 key购买 nike

当我尝试使用 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。

最佳答案

将对齐提高到 32 会使症状消失。

我不太熟悉这些内在函数,但如果在 64 位 CPU 上需要 32 字节对齐,我不会感到惊讶

#include <mm_malloc.h>
#include <immintrin.h>

int main()
{
const int sz = 9;
float *src = (float *)_mm_malloc(sz*sizeof(float), 32);
float *dest = (float *)_mm_malloc(sz*sizeof(float), 32);

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);
}

关于c++ - AVX 循环矢量化中的奇怪错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18322202/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com