Скажите GCC: "Я хочу использовать SSE4.1, но ТОЛЬКО в тех местах, где я хочу!"

Как говорит субъект... как я могу сказать GCC разрешить мне использовать встроенные функции SSE4.1, но НЕ оптимизировать с помощью SSE4.1 (например, путем сравнения строк SSE4.1) во всем остальном коде в том же модуле перевода?

2 ответа

Решение

Вы можете использовать Атрибуты функций, чтобы изменить параметры цели компиляции для каждой функции. Руководство GCC дает следующие примеры:

int core2_func (void) __attribute__ ((__target__ ("arch=core2")));
int sse3_func (void) __attribute__ ((__target__ ("sse3")));

Вы также можете отключить для каждой функции, например:

int no_sse3_func (void) __attribute__ ((__target__ ("no-sse3")));

В дополнение к предложению @PeterCorlett, которое дает вам контроль за каждой функцией, если это возможно, вы можете просто реорганизовать свой код, чтобы части, в которых вы хотите включить SSE4, находились в одной единице перевода, а затем указывать разные gcc параметры для этого одного файла.

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

Другие вопросы по тегам