如何仅为源代码的特定部分打开 -mavx2

How to turn on -mavx2 for only particular part of source code?

本文关键字:-mavx2 定部 何仅 源代码      更新时间:2023-10-16

我可以强制编译器在代码的某个特定部分-march设置之外编译一些内部函数吗?

当然,其余的将保留在-march设置范围内。

是否可以仅在源代码的特定部分启用-mavx2

还是我必须单独编译-mavx2部分的唯一方法?

试试__attribute__((target("avx2"))) .GCC和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);
}
但是,最好将需要内部函数的

函数放在单独的文件中,以防需要使用没有此功能的编译器。