Модераторы: Daevaorn
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> 32 подводных камня OpenMP при программировании на Си++, Статья 
:(
    Опции темы
Thunderbolt
Дата 27.6.2008, 09:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


DevRel
*


Профиль
Группа: Участник
Сообщений: 122
Регистрация: 7.11.2007
Где: Тула

Репутация: 10
Всего: 16



32 подводных камня OpenMP при программировании на Си++

    Аннотация. С распространением многоядерных систем задача параллельного программирования становится все более и более актуальной. Данная область, однако, является новой даже для большинства опытных программистов. Существующие компиляторы и анализаторы кода позволяют находить некоторые ошибки, возникающие при разработке параллельного кода. Многие ошибки никак не диагностируются. В данной статье приводится описание ряда ошибок, приводящих к некорректному поведению параллельных программ, созданных на основе технологии OpenMP.

--------------------
Карпов Андрей, DevRel в PVS-Studio.
PM MAIL WWW   Вверх
marcusmae
Дата 29.6.2008, 13:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


stravaganza
**


Профиль
Группа: Участник
Сообщений: 874
Регистрация: 26.3.2006

Репутация: 5
Всего: 39



Thunderbolt, спасибо за хорошую статью. Очень качественный обзор.

Для меня оказалось новым следующее :

Цитата

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


Означает ли это, что на выходе из parallel, for или section в случаях когда синхронизировать по сути нечего (все данные - shared), синхронизация всё-равно будет производиться? Если да, то можно ли её избежать, указав в качестве параметра какую-нибудь одну "фиктивную" переменную?



--------------------
ἀπὸ μηχανῆς θεός
PM MAIL ICQ GTalk   Вверх
Thunderbolt
Дата 29.6.2008, 18:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


DevRel
*


Профиль
Группа: Участник
Сообщений: 122
Регистрация: 7.11.2007
Где: Тула

Репутация: 10
Всего: 16



Цитата(marcusmae @ 29.6.2008,  13:02)
Означает ли это, что на выходе из parallel, for или section в случаях когда синхронизировать по сути нечего (все данные - shared), синхронизация всё-равно будет производиться? Если да, то можно ли её избежать, указав в качестве параметра какую-нибудь одну "фиктивную" переменную?

Согласно спецификации OpenMP, flush неявно выполняется во всех 
перечисленных Вами случаях. Избежать этой встроенной задержки можно в
директивах for и sections, используя выражение nowait, которое именно
для этого и предназначено (см. описание flush и nowait в спецификации).
Однако, отменить синхронизацию на выходе из parallel нельзя. Более
того, это именно тот случай, когда ее отменять не следует, поскольку
это (если бы было возможно) могло бы привести к неожиданным результатам.

И напоследок замечание по поводу предложенного обходного пути (использование flush с
другой переменной). Это ничего не даст, потому что дополнительная
директива flush не отменит неявной синхронизации, встроенной в другие
директивы. Эта ошибка, собственно, описана в статье, она называется
"Ненужная директива flush".
--------------------
Карпов Андрей, DevRel в PVS-Studio.
PM MAIL WWW   Вверх
marcusmae
Дата 29.6.2008, 22:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


stravaganza
**


Профиль
Группа: Участник
Сообщений: 874
Регистрация: 26.3.2006

Репутация: 5
Всего: 39



Да, nowait, точно! Спасибо!


--------------------
ἀπὸ μηχανῆς θεός
PM MAIL ICQ GTalk   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++:Общие вопросы"
Earnest Daevaorn

Добро пожаловать!

  • Черновик стандарта C++ (за октябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика(4.4мб).
  • Черновик стандарта C (за сентябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика (3.4мб).
  • Прежде чем задать вопрос, прочтите это и/или это!
  • Здесь хранится весь мировой запас ссылок на документы, связанные с C++ :)
  • Не брезгуйте пользоваться тегами [code=cpp][/code].
  • Пожалуйста, не просите написать за вас программы в этом разделе - для этого существует "Центр Помощи".
  • C++ FAQ

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0445 ]   [ Использовано запросов: 23 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.