- 使用OpenMP指令向量化代码。
#pragma omp simd
for (int i = 0; i < num_elements; i++) {
output[i] = input1[i] + input2[i];
}
- 使用GCC的向量扩展选项将代码向量化。
typedef float float8 __attribute__ ((vector_size (32)));
float8 *input1_v = (float8*)input1;
float8 *input2_v = (float8*)input2;
float8 *output_v = (float8*)output;
for (int i = 0; i < num_elements/8; i++) {
output_v[i] = input1_v[i] + input2_v[i];
}
- 使用Intel C++编译器的向量函数进行向量化。
#include
__m256 add_simd(__m256 a, __m256 b) {
return _mm256_add_ps(a, b);
}
__m256 *input1_v = (__m256*)input1;
__m256 *input2_v = (__m256*)input2;
__m256 *output_v = (__m256*)output;
for (int i = 0; i < num_elements/8; i++) {
output_v[i] = add_simd(input1_v[i], input2_v[i]);
}