Skip to Content

OpenMP: Intel vs Visual Studio

Непонятки с производительностью OpenMP в случае VisualStudio (см. еще обсуждение в каментах) заставило разобраться.

Выяснилось, что две переменные, которые read-only и вообще объявлены как const - считаются разделяемыми. Как следствие - локи при обращении и прочие удовольствия.

После устранения этого недоразумения (#pragma omp ... private(...)) и замены _mm_store_ps() на _mm_stream_ps(), чтобы в обеих компиляторах выходной массив писался через movntps, все встало на свои места: С-шный код с powf() остается сильно быстрее у Интела т.к. он векторизует powf в _svml_powf4, а SSE-код работает с практически одинаковой скоростью.

Его пример другим наука:

  1. #pragma omp parallel for default(none)
и явное прописывание shared/private/whatever для всех переменных.

Comments

похоже это косяк VS. если переменная read only то никаких ло

похоже это косяк VS. если переменная read only то никаких локов быть не должно. каждое ядро сделает копию в свой L2(L1) и будет её спокойно читать. возможен конфликт за доступ к общей линии L3, но это случится 1 раз, после этого каждый сделает копию себе (в случае private аналогично).
вот если read after write, тогда да, попа.
я стараюсь вообще не пользоваться private, вместо этого просто определяю локальные переменные внутри параллельного блока.

Не, ну я OpenMP не то, чтобы первый раз увидел, но почти не

Не, ну я OpenMP не то, чтобы первый раз увидел, но почти не пользовался, в реальных программах *было* проще распараллелить более крупными кусками.

Вот, походил по грабелькам, стал опытнее.

Post new comment

The content of this field is kept private and will not be shown publicly.
  • Web page addresses and e-mail addresses turn into links automatically.
  • Allowed HTML tags: <a> <em> <strong> <cite> <code> <ul> <ol> <li> <dl> <dt> <dd> <s> <i> <b> <blockquote>
  • Lines and paragraphs break automatically.
  • You can enable syntax highlighting of source code with the following tags: <code>, <blockcode>, <c>, <cpp>, <drupal5>, <drupal6>, <java>, <javascript>, <php>, <ruby>. The supported tag styles are: <foo>, [foo].
  • Images can be added to this post.

More information about formatting options



.