Написание фрагмента кода C таким образом, чтобы компилятор использовал инструкцию SSE4.1 для генерации ассемблерного кода.

Я хочу написать некоторый код C, чтобы gcc с помощью флага -msse4.1 мог его оптимизировать. В основном я хочу проверить, использует ли компилятор инструкции SSE4.1. Существует множество инструкций SSE4.1 (http://en.wikipedia.org/wiki/SSE4#New_instructions), но я не могу написать фрагмент кода C, который использует любую из этих инструкций в сгенерированном коде сборки.

Заранее спасибо.


person PhantomM    schedule 01.09.2011    source источник


Ответы (2)


Я сомневаюсь, что GCC будет так легко выдавать инструкции SSE4.1. Но вы можете взглянуть на компилятор программ Intel SPMD:

В модели SPMD программист пишет программу, которая в основном выглядит как обычная последовательная программа, хотя модель выполнения на самом деле такова, что несколько экземпляров программы выполняются параллельно на оборудовании. (См. более подробный пример, иллюстрирующий эту концепцию.) ispc компилирует язык программирования SPMD на основе C для работы на блоках SIMD процессоров; он часто обеспечивает 3-кратное или более ускорение на процессорах с 4-мя модулями SSE без каких-либо трудностей с написанием встроенного кода.

person Gregory Pakosz    schedule 01.09.2011

Из того, что я видел, компиляторы редко генерируют инструкции SSE4.1. Я видел несколько случаев, когда он использовал инструкции вставки/извлечения для упаковки данных.

Но по большей части, если вы хотите использовать инструкции SSE4.1, вам нужно делать это явно, используя встроенные функции:

http://software.intel.com/sites/products/documentation/studio/composer/en-us/2011/compiler_c/intref_cls/common/intref_bk_sse41.htm

person Mysticial    schedule 01.09.2011