小编T. *_*ner的帖子

如何使用GCC自动矢量化跨步写入?

当使用-std=c99,-O3和编译GCC 5.2时,-mavx2以下代码示例自动向量化(此处为程序集):

#include <stdint.h>

void test(uint32_t *restrict a,
          uint32_t *restrict b) {
  uint32_t *a_aligned = __builtin_assume_aligned(a, 32);
  uint32_t *b_aligned = __builtin_assume_aligned(b, 32);

  for (int i = 0; i < (1L << 10); i += 2) {
    a_aligned[i] = 42 * b_aligned[i];
    a_aligned[i+1] = 3 * a_aligned[i+1];
  }
}
Run Code Online (Sandbox Code Playgroud)

但是以下代码示例不会自动向量化(此处为程序集):

#include <stdint.h>

void test(uint32_t *restrict a,
          uint32_t *restrict b) {
  uint32_t *a_aligned = __builtin_assume_aligned(a, 32);
  uint32_t *b_aligned = __builtin_assume_aligned(b, 32);

  for …
Run Code Online (Sandbox Code Playgroud)

c performance gcc c99 vectorization

6
推荐指数
1
解决办法
222
查看次数

标签 统计

c ×1

c99 ×1

gcc ×1

performance ×1

vectorization ×1