Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
Форум программистов > C/C++: Для новичков > Учебник по параллельному программированию и OpenMP |
Автор: Rasool 7.7.2011, 17:22 |
Сейчас озаботился написанием программы распараллеливания кое-каких алгоритмов (нужно для диссера) для настольных многоядерных компьютеров. Ищу хороший учебник по С++ с описанием OpenMP для Visual C++, желательно с описанием техники параллельного программирования, на русском языке. Есть опыт программирования под Borland C++ 3.1. У меня есть следующие книги: Г.Эндрюс. Основы многопоточного, параллельного и распределенного программирования. 2003. А.Хортон, Visual C++ 2005. Базовый курс. 2007. Шилдт Г. Искусство программирования на C++. 2005. Брюс Эккель, Чак Эллисон - Философия C++. Практическое программирование. 2005. Что порекомендуете еще из нового? |
Автор: bsa 7.7.2011, 17:26 |
Rasool, зайди в ответы на часто задаваемые вопросы (закреплена), там есть раздел про литературу (с чего начать). Думаю, для начала нужно изучить С++, а уж затем браться за оптимизацию через OpenMP. Borland C++ 3.1 от современного С++ отличается также, как жигуль от танка. |
Автор: Rasool 8.7.2011, 14:35 |
Спасибо, книги почитаю, но они - по общему языку C++. В дальнейшем мне нужно будет изучить связку Visual C++ и OpenMP. Для изучения Visual C++ есть книга Айвора Хортона Visual C++ 2005. Базовый курс, а вот использование Visual C++ в параллельном программировании - где можно почитать? У меня сейчас на компьютере стоит Visual C++ 2008 Express Edition. |
Автор: bsa 8.7.2011, 16:33 |
Rasool, вообще-то, С++ от Microsoft не сильно хуже стандартного. Если тебя интересуют кнопочки и рюшечки, то это в любом случае к С++ отношения не имеет. Подозреваю, что связка Visual C++ + OpenMP не сильно отличается от других xxx C++ + OpenMP. http://www.microsoft.com/Rus/Msdn/Magazine/2005/10/OpenMP.mspx |
Автор: Rasool 8.7.2011, 17:01 | ||
О, спасибо большое! |
Автор: Rasool 8.7.2011, 18:03 |
На сайте http://openmp.org/wp/openmp-compilers/ сказано, что OpenMP включено только для Standard, Professional и Team System Editions. Значит, придется покупать. На сайте http://allsoft.ru/software/vendors/microsoft/visual-studio-2008-standard/#purchase_options нашел версию Visual Studio 2008 Standard за 4802,11 руб. Насколько я понял, туда входит OpenMP? И нет ли подешевле вариантов с OpenMP? |
Автор: boostcoder 8.7.2011, 18:06 |
вот бесплатный компилятор с поддержкой OpenMP: http://try-catch.ru/library/compilers/i686-pc-mingw32-bin-4.7.0-snapshop-20110617-rev-0.tar.lzma |
Автор: Rasool 9.7.2011, 12:01 | ||
Спасибо. А среда разработки для него - Eclipse? (Нашел ссылку: http://bsdwarrior.serveblog.net/wiki/index.php/%D0%91%D0%B5%D1%81%D0%BF%D0%BB%D0%B0%D1%82%D0%BD%D0%B0%D1%8F_%D1%81%D1%80%D0%B5%D0%B4%D0%B0_%D1%80%D0%B0%D0%B7%D1%80%D0%B0%D0%B1%D0%BE%D1%82%D0%BA%D0%B8_%D0%BF%D0%BE%D0%B4_Win32_%3D_MinGW_%2B_MSYS_%2B_Eclipse_%2B_FLTK) |
Автор: boostcoder 9.7.2011, 12:02 |
Code::Blocks Eclipse QtCreator SlickEdit это те что я когда-либо использовал совместно с MinGW. а вообще их огромное множество. |
Автор: Rasool 9.7.2011, 19:04 | ||
А NetBeans для него подходит? |
Автор: bsa 10.7.2011, 17:16 |
подходит. Но секса у тебя с настройкой будет очень много. Рекомендую просто скачать http://qt.nokia.com и не заморачиваться (там все необходимое в комплекте, только в инсталляторе надо отключить все, кроме mingw). |
Автор: Rasool 11.7.2011, 15:44 |
Спасибо, посмотрим. |
Автор: ValeryLaptev 12.7.2011, 07:29 | ||
Эндрюс - хорошая книжка. Еще хорошая книжка: Богатырев К.Ю. Основы параллельного программирования. Еще хорошая книжка: Эхтер Ш., Робертс Дж. Многоядерное программирование. Вот еще очень хорошая книжка: http://www.ozon.ru/context/detail/id/2512096/ Анатомия параллелизма. |
Автор: Silent 12.7.2011, 07:34 |
Уважаемый Rasool, покупать эту буржуйскую лицензионную студию не стоит, есть способ поработать и на экспрессе - http://iproc.ru/programming/openmp-visual-studio/. И если уж собрался "жечь" быстрый код, и при условии, что пишешь под процы-интелы, то взять интеловский компилятор (триал, 30 дней бесплатно), по сравнению со студийным его выходной код на 5-15% быстрее. |
Автор: Rasool 13.7.2011, 17:06 | ||
О, спасибо, а то я уже запутался в Qt. ![]() |
Автор: bsa 14.7.2011, 10:39 |
![]() Имхо, Qt - самый удобный, простой и понятный инструментарий для создания гуишных программ на С++. |
Автор: borisbn 14.7.2011, 13:27 | ||
Почему только гуишных ? А сеть, БД, XML, параллельные вычисления, скрипты... Вроде тоже всё предельно просто и понятно. |
Автор: asmdzen 16.7.2011, 13:21 |
тогда в чем загвоздка? разве там нет чего-то с лицензией, типа можно писать только фривары или что-то такое? |
Автор: bsa 17.7.2011, 15:50 | ||
нет. уже давно обсуждалось. |
Автор: boostcoder 17.7.2011, 16:03 |
bsa, а разве тот mingw что поставляется с Qt поддерживает OpenMP? что-то я помню что нет. |
Автор: bsa 17.7.2011, 17:20 |
http://www.prog.org.ru/topic_12082_0.html |
Автор: boostcoder 17.7.2011, 17:30 |
в общем понятно. но нужно проверить, а венды нет. |
Автор: Rasool 2.9.2011, 15:08 | ||
Заодно я озаботился покупкой новой материнской платы с микропроцессором, поскольку сейчас у меня стоит одноядерный Celeron. Думаю, что иметь четырехядерный Intel Core i5 достаточно или же нужно замахиваться на Core i7? И как правильно выбрать материнскую плату и память, исходя из требований максимальной производительности для работы программ на Visual C++ с OpenMP? |
Автор: bsa 5.9.2011, 17:29 | ||
![]() |
Автор: Silent 6.9.2011, 09:40 |
А чем обусловлена необходимость распараллеливания именно под настольные многоядерные процессоры? Конечно, i5 или i7 дома - хорошо, но может быть проще арендовать облачный кластер на время счета задачи? К тому же такая платформа, по моему мнению, не может считаться идеальной - одноядерная же |
Автор: Rasool 22.9.2011, 18:32 | ||
А где можно узнать про облачные кластеры, цены на них? И где можно почитать про особенности работы параллельных алгоритмов на них? Мне для диссертации нужно, мне научный руководитель предложил распараллелить с целью ускорения несколько алгоритмов. |
Автор: bsa 23.9.2011, 13:49 | ||
думаю, тебе они все-таки не нужны
|
Автор: Rasool 24.9.2011, 12:34 | ||
Сначала мне нужно определиться, на чем я буду работать: на многоядерных настольных машинах или на облачном кластере. |
Автор: W4FhLF 24.9.2011, 18:50 |
Компьютер -- это средство решения задачи. А средство должно выбираться прежде всего исходя из потребностей при решении задачи, а не крутизной звучания формулировки. Конечно, тема диссертации "решение квадратного уравнения с использованием инновационных технологий облачных вычислений" звучит очень круто, особенно в современных реалиях российской науки, но смысл данного исследования сомнительный. Вот и по вашим сообщениям возникает ощущение, что вы распараллеливаете программу просто ради того, чтобы написать об этом, для галочки. Если так, то берите то, что круче звучит. Если же нет и необходимость использования параллельных вычислений действительно продиктована задачей, то для получения толковых советов вам нужно описать кратко задачу, ваши способы решения и то, что вы хотите получить от распараллеливания. |
Автор: Rasool 25.9.2011, 18:27 |
Один из алгоритмов, который предлагается распараллелить - это генетический алгоритм, с помощью которого ищутся траектории (пути) движения редундантного манипулятора в пространстве с препятствиями. Ожидается, что в результате распараллеливания он будет работать быстрее и быстрее находить нужные пути. |
Автор: W4FhLF 25.9.2011, 21:22 |
Генетические алгоритмы не всегда можно эффективно распараллелить. я бы даже сказал, что распараллеливание не самый эффективный способ оптимизации ГА по скорости. Тем не менее... Сколько алгоритм сейчас работает по времени на вашей машине? Какое время вы бы хотели получить? Сколько, в относительных единицах (%), времени тратится на данный алгоритм в рамках программы целиком? Что представляет собой ваша функция цели? |
Автор: Rasool 26.9.2011, 12:41 |
Что касается времени работы алгоритма, то она зависит от сложности пространства препятствий. Чем сложнее пространство с препятствиями, тем больше будет работать ГА, ищущий пути для редундантного манипулятора. Следовательно, если распараллеливание даст нужный эффект, то с его помощью можно будет в приемлимое время прокладывать траектории путей манипулятора в более сложном пространстве. Функция цели определяется следующими параметрами: 1) Пригодность по достижению цели; 2) Пригодность по достаточности длины манипулятора; 3) Пригодность по укладываемости и достаточности звеньев манипулятора; 4) Пригодность по допустимости углов поворота; 5) Пригодность по пересечению с препятствиями; 6) Пригодность по толщине манипулятора. |
Автор: bsa 26.9.2011, 16:23 |
Rasool, случаем это не похоже на обход дерева снизу вверх? Если похоже, то довольно легко параллелится (n потоков, каждый берет из очереди ветку маршрута и проверяет ее до разветвления, все разветвления добавляет в очередь). |
Автор: Rasool 26.9.2011, 21:14 | ||
Да, есть алгоритм метода ветвей и границ, который ищет пути для редундантного манипулятора, который тоже можно успешно распараллелить. Мне сейчас нужно определиться в "железе" - на чем лучше делать: на настольной многоядерной системе или же арендуя облачный кластер. |
Автор: bsa 27.9.2011, 11:07 |
Rasool, для дисертации, думаю, достаточно и настольного компьютера. А кластер уже лучше использовать для решения практических задач. |
Автор: phprus 27.9.2011, 19:33 | ||||
Достаточно для тестирования, но к сожалению не всегда.
Надо определиться не в железе, а в целесообразности распараллеливания в системе с общей памятью (многоядерные процессоры), в системах с распределенной памятью (кластера) или на GPU. (Комбинации также возможны). Так как методы распараллеливания могут кардинально отличаться в зависимости от архитектуры планируемой системы. Если к вопросу подходить с наивной точки зрения, то после портирования задачи, которая успешно масштабиравалась на SMP, на суперкомпьютер, можно и уменьшение производительности получить раз так в 100 (например, забыв что резко подорожали синхронизации и обмены данными). |