Компании Intel ПРАГМА Симд против примененных в ПРАГМА ОМП Симд


Компилятор Intel позволяет нам векторизировать циклы через

#pragma simd
for ( ... )

Однако у вас также есть возможность сделать это с помощью директивы OpenMP 4:

#pragma omp simd
for ( ... )
Есть ли какая-то разница между ними?
2 3

2 ответа:

Во всех отношениях они должны быть идентичны. Разница в том, что директива OpenMP 4.0 #pragma omp simd является портативной и должна работать с другими компиляторами, поддерживающими OpenMP 4.0, а также Intel.

Кроме того, в OpenMP версии есть несколько предложений, которые позволяют векторизировать инструкции более надежным способом (safelen(), linear(), aligned(), reduction(), и collapse() приходят на ум).

#pragma simd

- позиционируется как часть расширений Intel C++ Cilk SIMD (наряду с нотацией массива). Такое позиционирование выглядит несколько странным, поскольку Cilk не предназначен для Fortran, в то время как компилятор Fortran поддерживает в основном идентичную директиву simd.

#pragma omp simd 

- это часть стандартаOpenMP , поэтому он, естественно, более переносим для компилятора и платформ.

Обычно Intel выкатываетновые возможности в Cilk first и в OpenMP second. Причина очень проста. естественно: требуется время, чтобы принять что-то как часть стандарта OpenMP. Например, simdlen был добавлен в OpenMP4. 5 только в ноябре 2015 года, в то время как аналогичное предложение (vectorlength) уже было частью Cilk pragma 3 или 4 года назад. simdlen vs. vectorlength выделяет еще одно наблюдение, что синтаксис некоторых предложений pragma может отличаться между simd и omp simd.

Итак, если вам нужна переносимость между компиляторами, используйте OpenMP pragma. Но если для вас важнее получить доступ к новому simd возможности компилятора как можно раньше, затем вы можете предпочесть или опционально использовать Cilk (proprietary) pragma. Все те же аргументы и соображения одинаково применимы к #pragma omp declare simd vs. #pragma declare simd (что должно ответить на ваш потенциальный второй вопрос).

Ссылка на предложения pragma simd" Cilk " доступна здесь: https://software.intel.com/en-us/node/524555 (Я думаю, что это немного устарело; я слышал о новых возможностях pragma simd, не отраженных в этой ссылки пока нет).