Как включить -mavx2 только для определенной части исходного кода? - PullRequest
2 голосов
/ 05 июня 2019

Могу ли я заставить компилятор компилировать некоторые встроенные функции вне установки -march в какой-то определенной части кода?

Конечно, остальное останется в пределах -march.

Возможно ли включить -mavx2 только для определенной части исходного кода?

Или это единственный способ, которым я должен компилировать -mavx2 раздел отдельно?

1 Ответ

3 голосов
/ 05 июня 2019

Попробуйте __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);
}

Однако, вероятно, лучше поместить функции, которые требуют встроенных функций, в отдельный файл, на случай, если вам когда-нибудь понадобится использовать компилятор, у которого нет этой функции.

...