![]() |
Модераторы: Daevaorn |
![]() ![]() ![]() |
|
boostcoder |
|
|||
![]() pattern`щик ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 5458 Регистрация: 1.4.2010 Репутация: 49 Всего: 110 |
всем снова драске
![]() буквально второй день увлечен OpenMP. и вопрос: почему все до сих пор пишут многопоточный код руками? ведь в 90% случаев OpenMP сделает то же самое, но только лучше! а главное - никакого рукоблудства! спасибо. Это сообщение отредактировал(а) boostcoder - 20.6.2011, 05:41 |
|||
|
||||
Фантом |
|
|||
![]() Вы это прекратите! ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 1516 Регистрация: 23.3.2008 Репутация: нет Всего: 49 |
Не все пишут, не всегда лучше (скорее уж так же), и, как всякий простой инструмент, OpenMP годится в основном для простых случаев. |
|||
|
||||
boostcoder |
|
|||
![]() pattern`щик ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 5458 Регистрация: 1.4.2010 Репутация: 49 Всего: 110 |
пример сложного случая пожалуйста. зы нет. понятно, что нельзя в начале основной программы написать "#pragma parallel" и надеяться что вся программа распараллелится. |
|||
|
||||
kemiisto |
|
|||
![]() Дикий Кот. =^.^= ![]() ![]() ![]() ![]() Награды: 1 Профиль Группа: Участник Клуба Сообщений: 3292 Регистрация: 29.7.2007 Репутация: 2 Всего: 160 |
Аргумент один - shared memory нинужен. ![]() -------------------- |
|||
|
||||
boostcoder |
|
|||
![]() pattern`щик ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 5458 Регистрация: 1.4.2010 Репутация: 49 Всего: 110 |
не у всех дома кластера стоят. Добавлено через 1 минуту и 8 секунд хотя... на сколько я Вас знаю, если бы тема была про MPI, то и тут Вы нашли бы что и как обложить. |
|||
|
||||
kemiisto |
|
|||
![]() Дикий Кот. =^.^= ![]() ![]() ![]() ![]() Награды: 1 Профиль Группа: Участник Клуба Сообщений: 3292 Регистрация: 29.7.2007 Репутация: 2 Всего: 160 |
Да причём тут кластеры?
OpenMP и MPI должны остаться в кровавых 90-х вместе с сишечкой и прочей мерзостью. ![]() -------------------- |
|||
|
||||
boostcoder |
|
|||
![]() pattern`щик ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 5458 Регистрация: 1.4.2010 Репутация: 49 Всего: 110 |
да, попутал. говорю же, второй день в теме. а по сабжу будут аргументы? Добавлено через 39 секунд применительно к с++. |
|||
|
||||
kemiisto |
|
|||
![]() Дикий Кот. =^.^= ![]() ![]() ![]() ![]() Награды: 1 Профиль Группа: Участник Клуба Сообщений: 3292 Регистрация: 29.7.2007 Репутация: 2 Всего: 160 |
Ну, я к тому, что shared memory как модель параллельного программирования даёт очень много возможностей выстрелить себе в ногу. Тебе это, конечно, не испугает... ![]() К тому же, ты правильно заметил, что OpenMP - это только shared memory, а если есть в распоряжении система с распределённой памятью (distributed memory), то придётся скрещивать OpenMP с MPI. Достаточно один раз увидить такой код, чтобы понять, что такой хоккей нам не нужен. Сейчас набирает популярность partitioned global address space. Типо - лучшее из двух миров. Гугли, читай. Вот, например. -------------------- |
|||
|
||||
boostcoder |
|
|||
![]() pattern`щик ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 5458 Регистрация: 1.4.2010 Репутация: 49 Всего: 110 |
спасибо. Добавлено через 12 минут и 1 секунду
но стОит заметить тот факт, что при помощи OpenMP вероятность такого исхода сильно сокращается, чем в сравнении с рукокодным кодом. |
|||
|
||||
VictorTsaregorodtsev |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 274 Регистрация: 28.7.2006 Репутация: 1 Всего: 8 |
Потому что изучил ВинАПИ (в том числе и потоки-процессы - по книжке Рихтера, которую перевели и издали на русском в 1995) задолго до появления документации по ОпенМП ![]() Зачем тратить время на освоение инструмента, дублирующего уже изученный? Ведь есть много возможностей исследовать что-то действительно новое ![]() |
|||
|
||||
boostcoder |
|
|||
![]() pattern`щик ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 5458 Регистрация: 1.4.2010 Репутация: 49 Всего: 110 |
||||
|
||||
Earnest |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 5962 Регистрация: 17.6.2005 Где: Рязань Репутация: 53 Всего: 183 |
Просто обеими руками ЗА. Невозможно вечно точить лопаты, надо и делать уже что-нибудь полезное. Если что-то хорошо знаешь, то руками делаешь быстрее, да и лучше... Это же не самоцель а просто инструмент (параллельное программирование в данном случае) -------------------- ... |
|||
|
||||
asmdzen |
|
|||
![]() ![]() ![]() Профиль Группа: Участник Сообщений: 345 Регистрация: 28.11.2010 Репутация: нет Всего: 5 |
что стоит почитать по этой теме чтоб не писать код уровня 90х? |
|||
|
||||
fish9370 |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 663 Регистрация: 15.4.2007 Где: Москва Репутация: -1 Всего: 1 |
тем более, если это уже оформленно в виде библиотек, готовых модулей и т.д. мало кто лепит новый проект с нуля.. -------------------- undefined |
|||
|
||||
boostcoder |
|
|||
![]() pattern`щик ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 5458 Регистрация: 1.4.2010 Репутация: 49 Всего: 110 |
OpenMP это не просто библиотека. это еще и поддержка со стороны компилятора. что и позволяет ему(OpenMP) быть таким простым и мощным, и избавляет от рукоблудства и человеческого фактора. |
|||
|
||||
fish9370 |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 663 Регистрация: 15.4.2007 Где: Москва Репутация: -1 Всего: 1 |
а как эта библиотека включается в проект?
-------------------- undefined |
|||
|
||||
boostcoder |
|
|||
![]() pattern`щик ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 5458 Регистрация: 1.4.2010 Репутация: 49 Всего: 110 |
при использовании gcc, ничего в проект включать не нужно. просто добавляешь опцию -fopenmp
если будешь напрямую использовать функции из нее в своем коде, заинклудь omp.h кстати, вот snapshot gcc-4.7.0, собрал на днях: i686-pc-mingw32-bin-4.7.0-snapshop-20110617. LTO+OpenMP+Graphite искаропки ![]() Добавлено @ 10:18 [оффтоп] особенно порадовал LTO. ну и c++0x: thread, mutex, atomic, condition и все что там есть ![]() [/оффтоп] Это сообщение отредактировал(а) boostcoder - 20.6.2011, 10:21 |
|||
|
||||
fish9370 |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 663 Регистрация: 15.4.2007 Где: Москва Репутация: -1 Всего: 1 |
а в каких известных проектах используют?
-------------------- undefined |
|||
|
||||
kemiisto |
|
|||
![]() Дикий Кот. =^.^= ![]() ![]() ![]() ![]() Награды: 1 Профиль Группа: Участник Клуба Сообщений: 3292 Регистрация: 29.7.2007 Репутация: 2 Всего: 160 |
Во многих HPC (High Performance Computing) проектах. На кластерах всяких. Для распределения задачи по кластерным нодам используют MPI, а уже в рамках одной кластерной ноды - shared memory посредством OpenMP. -------------------- |
|||
|
||||
REZiaMIX |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 346 Регистрация: 3.11.2007 Репутация: нет Всего: 4 |
+ никакого рукоблудства
- так и не поймешь принципа работы многопоточности , если начинать сразу с openmp -------------------- ![]() |
|||
|
||||
kshubin |
|
|||
Новичок Профиль Группа: Участник Сообщений: 13 Регистрация: 11.10.2010 Репутация: нет Всего: нет |
простите что влазию в тему но очень стало интересно... появился ряд вопросов...
1. а чем openMP лучше или хуже того жу intel c++ который может сам оптимизировать код под многоядерный проц (ну кроме того, что под проц интел и он платный...) 2. если есть задача, которая уже написана на с++ для сложных ресурсоемких вычислений. предлагается сделать вычислительный кластер, который к примеру будет иметь одну управляющую ноду и 4 вычислительные. как и с помощью чего переписывать код? как это должно потом работать? подскажите что почитать плиз... |
|||
|
||||
xvr |
|
|||
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 7046 Регистрация: 28.8.2007 Где: Дублин, Ирландия Репутация: 60 Всего: 223 |
Вы же сами и написали - сам оптимизировать. В OpenMP это отдается в руки программиста. Кроме того, когда это делаешь сам руками, можно увидеть узкие места и переделать алгоритмы и структуры данных. В случае автомата, эти места увидит компилятор, но не факт, что он вам об этом скажет. И уж точно он не станет за вас переделывать алгоритмы и структуры данных (хотя может и попытается) MPI |
|||
|
||||
FCM |
|
||||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 461 Регистрация: 30.3.2009 Репутация: нет Всего: 9 |
Скажет, если включить соотв. report-опции c соотв. уровнем подробности. Даже может столько сказать, что тошно читать будет. Но все равно OpenMP круче, т.к. переносимее, разнообразнее и может сработать там, где автоматика откажется.
Наверное, все же нужно явно линковать библиотечный файл libomp - по крайней мере в mingw-g++ (win). Это сообщение отредактировал(а) FCM - 3.7.2011, 17:02 |
||||
|
|||||
boostcoder |
|
||||
![]() pattern`щик ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 5458 Регистрация: 1.4.2010 Репутация: 49 Всего: 110 |
вот вы мне их и подскажете. я их долго искал.
ну хз.. в моей сборке mingw этого делать не нужно. можно просто сам mingw собрать так, что он линковал эту либу при использовании "-fopenmp" ![]() |
||||
|
|||||
xvr |
|
|||
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 7046 Регистрация: 28.8.2007 Где: Дублин, Ирландия Репутация: 60 Всего: 223 |
Есть 2 но - они не документированы, и они вообще могут отсутствовать в релизной версии компилятора. А тут есть 3е но - полностью разобраться в них может только человек, достаточно хорошо знакомый с устройством компиляторов ![]() Хотя у Intel есть продукт как раз для 'разобраться' - Parallel Studio |
|||
|
||||
boostcoder |
|
|||
![]() pattern`щик ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 5458 Регистрация: 1.4.2010 Репутация: 49 Всего: 110 |
для линукс использую Hellgrind ;) Добавлено через 1 минуту и 54 секунды но и у libstdc++ есть встроенная миниподдержка обнаружения подобных ошибок: http://gcc.gnu.org/onlinedocs/libstdc++/ma...tml#debug.races правда, я еще не разбирался с ней. |
|||
|
||||
FCM |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 461 Регистрация: 30.3.2009 Репутация: нет Всего: 9 |
Насколько помню в Intel C++/ Intel Fortran 12 win /Qpar-reportn - где возможные значения n: 0,1,2,3 Это сообщение отредактировал(а) FCM - 5.7.2011, 10:48 |
|||
|
||||
boostcoder |
|
|||
![]() pattern`щик ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 5458 Регистрация: 1.4.2010 Репутация: 49 Всего: 110 |
FCM, скажите, вы где-то в теме смогли обнаружить упоминание какого-либо компилятора кроме gcc? ;)
|
|||
|
||||
FCM |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 461 Регистрация: 30.3.2009 Репутация: нет Всего: 9 |
||||
|
||||
boostcoder |
|
|||
![]() pattern`щик ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 5458 Регистрация: 1.4.2010 Репутация: 49 Всего: 110 |
FCM, ааа, понял. сорри.
|
|||
|
||||
xvr |
|
|||
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 7046 Регистрация: 28.8.2007 Где: Дублин, Ирландия Репутация: 60 Всего: 223 |
Кстати, на Linux у icc компилятора есть масса недокументированных ручек для настройки оптимизаций. Список ручек доступен по опциям -mIPOPT -mP1OPT -mP2OPT -mP3OPT -mPGOPTI и -mPAROPT (только не забудьте подать какой нибудь файл на компиляцию, можно даже не существующий)
Под Win эти списки тоже доступны, но будут называться немного по другому (не помню точно, как именно) Добавлено через 1 минуту и 29 секунд Это не совсем то. Parallel Studio умеет не только ошибки искать, но и давать советы по тому, как можно запаралелить программу |
|||
|
||||
boostcoder |
|
|||
![]() pattern`щик ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 5458 Регистрация: 1.4.2010 Репутация: 49 Всего: 110 |
||||
|
||||
xvr |
|
|||
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 7046 Регистрация: 28.8.2007 Где: Дублин, Ирландия Репутация: 60 Всего: 223 |
||||
|
||||
boostcoder |
|
|||
![]() pattern`щик ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 5458 Регистрация: 1.4.2010 Репутация: 49 Всего: 110 |
нужно попробовать... а у нее и GUI есть? оО или в каком виде она предлагает оптимизации/изменения? Добавлено через 2 минуты и 59 секунд гугл не показывает ни одного скриншота по запросу "intel parallel studio xe linux screenshots"... |
|||
|
||||
![]() ![]() ![]() |
Правила форума "С++:Общие вопросы" | |
|
Добро пожаловать!
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn |
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | C/C++: Общие вопросы | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |