小编Pio*_*icz的帖子

错误的gcc生成的装配顺序,导致性能损失

我有以下代码,它将数据从内存复制到DMA缓冲区:

for (; likely(l > 0); l-=128)
{
    __m256i m0 = _mm256_load_si256( (__m256i*) (src) );
    __m256i m1 = _mm256_load_si256( (__m256i*) (src+32) );
    __m256i m2 = _mm256_load_si256( (__m256i*) (src+64) );
    __m256i m3 = _mm256_load_si256( (__m256i*) (src+96) );

    _mm256_stream_si256( (__m256i *) (dst), m0 );
    _mm256_stream_si256( (__m256i *) (dst+32), m1 );
    _mm256_stream_si256( (__m256i *) (dst+64), m2 );
    _mm256_stream_si256( (__m256i *) (dst+96), m3 );

    src += 128;
    dst += 128;
}
Run Code Online (Sandbox Code Playgroud)

这就是gcc程序集输出的样子:

405280:       c5 fd 6f 50 20          vmovdqa 0x20(%rax),%ymm2
405285:       c5 …
Run Code Online (Sandbox Code Playgroud)

c optimization performance assembly gcc

8
推荐指数
2
解决办法
997
查看次数

标签 统计

assembly ×1

c ×1

gcc ×1

optimization ×1

performance ×1