如何仅为源代码的特定部分打开 -mavx2?
How to turn on -mavx2 for only particular part of source code?
我可以强制编译器在代码的某些特定部分中编译 -march
设置之外的某些内部函数吗?
当然,其余的将保持在-march
设置内。
是否可以仅在源代码的特定部分启用 -mavx2
?
或者我必须单独编译 -mavx2
部分的唯一方法是什么?
尝试__attribute__((target("avx2")))
。 GCC and Clang 都支持
示例:
#include <stdlib.h>
#include <stdio.h>
#include <immintrin.h>
__attribute__((target("avx2")))
int add_with_avx2(int a, int b) {
__m256i av = _mm256_set_epi32(a, 0, 0, 0, 0, 0, 0, 0);
__m256i bv = _mm256_set_epi32(b, 0, 0, 0, 0, 0, 0, 0);
__m256i result = _mm256_add_epi32(av, bv);
return ((int*)&result)[7];
}
int main(void) {
return add_with_avx2(5, 6);
}
但是,将需要内部函数的函数放在一个单独的文件中可能是更好的主意,以防您需要使用没有此功能的编译器。
我可以强制编译器在代码的某些特定部分中编译 -march
设置之外的某些内部函数吗?
当然,其余的将保持在-march
设置内。
是否可以仅在源代码的特定部分启用 -mavx2
?
或者我必须单独编译 -mavx2
部分的唯一方法是什么?
尝试__attribute__((target("avx2")))
。 GCC and Clang 都支持
示例:
#include <stdlib.h>
#include <stdio.h>
#include <immintrin.h>
__attribute__((target("avx2")))
int add_with_avx2(int a, int b) {
__m256i av = _mm256_set_epi32(a, 0, 0, 0, 0, 0, 0, 0);
__m256i bv = _mm256_set_epi32(b, 0, 0, 0, 0, 0, 0, 0);
__m256i result = _mm256_add_epi32(av, bv);
return ((int*)&result)[7];
}
int main(void) {
return add_with_avx2(5, 6);
}
但是,将需要内部函数的函数放在一个单独的文件中可能是更好的主意,以防您需要使用没有此功能的编译器。