Pull to refresh

Comments 9

Да, сравнение с OpenCL посмотреть было-бы интересно. Насколько я помню, opencl изначально был с пристрелом под gpu, а openmp под cpu, но они уже забрались на территории друг друга. Чем они сейчас вообще отличаются?
С позиции написания кода — OpenCL гораздо сложнее. Сомневаюсь однако что OpenMP будет работать сколь-либо близко по скорости для более-менее оптимизированного CL-кода.

С позиции пользователя — OpenCL драйвера есть для практически любых ускорителей, тогда как кто будет поддерживать OpenMP — еще большой вопрос. Впрочем MP возможно будет работать с CL-ными драйверами, просто вынося эту часть из программы в MP-библиотеку.
У меня где то был пример написания программы на OpenMP и OpenCL, так вот версия OpenCL раза в 3-4 больше. Собственно, то о чем уже написал 0serg. По поводу скорости, равно как и поддержки устройств, я думаю это вопрос времени. Много заинтереcованных сторон в OpenMP.
Спасибо за новость!

Как раз сегодня удивлялся, что Intel не объявляет о поддержке нового стандарта. Помогли Clang со стандартом 3.1, GCC уже с версии 4.9 будет поддерживать OpenMP 4.0.

Вкусных новшеств действительно много, ждём полной реализации стандарта.

Небольшой вопрос. Поддерживает ли недавно доступная версия компилятора (icc (ICC) 14.0.1 20131008) новый стандарт? Или composer обновился и нужно качать новую? Не нашёл сходу ответа на официальном сайте.
В последней версии Composer XE 2013 SP1 Update 1 (он же 14.0.1) уже ряд «фич», в частности pragma simd и поддержка директив для ускорителей. Но ещё не всё, над этим идёт работа. Есть интересная статья, которая ответит на то, что уже поддерживаем, причем относительно давно (с версии компилятора 13.1)

http://software.intel.com/en-us/articles/openmp-40-features-in-intel-fortran-composer-xe-2013

Сейчас поддержка только увеличилась.
Правда, GCC 4.9 будет без pragma omp target.
А нельзя было просто restrict ко всем указателям дописать?
Ждал этого вопроса. Можно, в этом случае бы помогло. Но есть другие примеры, где этого уже будет недостаточно. Вот скажем такой:

void foo(float *restrict a, float *restrict b, int offmax, int n, int off[n])
{
  for(int k = 0; k < n - offmax; k++) a[k + off[k]] = a[k] * b[k];
}


Sign up to leave a comment.