войти зарегистрироваться

Intel

Intel
хабраиндекс
113,74

Параллельные заметки №2 – инструментарий для OpenMP

image
Прежде чем приступить к изучению методики распараллеливания программ с помощью технологии OpenMP рассмотрим инструментарий, который нам потребуется. А потребуется нам в первую очередь Visual Studio 2005/2008 и Intel® Parallel Studio.

Преимущество технологии OpenMP заключается в том, что взяв код последовательной программы, можно распараллелить его без существенной модификации. Это достигается расстановкой специальных директив. Конечно, на практике придется не только вставлять директивы, но и править сам код приложения, но этих изменений будет гораздо меньше, чем если использовать альтернативные технологии, такие как MPI.

Вышесказанное означает, что мы можем взять обыкновенный последовательный код на языке Си/Си++ и начать его постепенно распараллеливать. Для этого нам достаточно включить в проекте поддержку OpenMP. В среде Visual Studio 2005/2008 зайдите в свойства проекта и выберете вкладку C/C++ / Language, как показано на рисунке 1.
Visual Studio settings
Рисунок 1 — Вкладка Visual Studio с настройками проекта, где можно включить поддержку OpenMP

Не забудьте также выбрать платформы и конфигурации, в которых вы планируете использовать OpenMP. Как показано на рисунке 2, мы выбрали все конфигурации (debug, release) и все платформы (Win32, x64).
Select platform
Рисунок 2 — Выбор конфигураций и платформ, для которых мы устанавливаем параметры

Поддержка OpenMP включается опцией «OpenMP Support» как показано на рисунке 3.
OpenMP ON
Рисунок 3 — Поддержка OpenMP включена

Следующим шагом является подключение заголовочного файла «omp.h». Часто рационально поместить "#include <omp.h>" в stdafx.h, чтобы он был виден во всем проекте.

Вот и все подготовительные шаги, которые необходимы, чтобы начать осваивать технологию OpenMP и распараллеливать программный код. Знакомство с OpenMP мы начнем со следующей заметки. Сейчас мы продолжим знакомство с инструментами. Дело в том, что хотя возможностей Visual Studio 2005/2008 достаточно чтобы разрабатывать параллельные OpenMP программы, это слишком спартанские условия. Для полноценной работы разумно воспользоваться Intel® Parallel Studio. Я не сотрудник Intel и за рекламу инструментов мне никто не платит. Parallel Studio действительно удобный и крайне полезный инструмент для разработки параллельных приложений. Рекомендую на основании собственного опыта.

Дистрибутив Intel® Parallel Studio занимает порядка 460 Мбайт и доступен для скачивания с сайта Intel. При этом полная функциональность Parallel Studio будет доступна в течении одного пробного месяца, что вполне достаточно, чтобы познакомиться с принципами работы и поэкспериментировать с параллельным кодом. Parallel Studio интегрируется внутрь Visual Studio 2005/2008, добавляя дополнительные пункты меню и в панель инструментов (смотри рисунок 4).
Parallel Studio Toolbars
Рисунок 4 — Панели инструментов, добавляемые Intel® Parallel Studio в Visual Studio

В следующих параллельных заметках мы будем использовать инструмент Intel®Parallel Inspector из комплекта Intel® Parallel Studio для проверки создаваемого параллельного кода на наличие параллельных ошибок. А также Intel® Parallel Amplifier для оптимизации. Компилятор Intel® Parallel Composer нам не обязателен, но мы будем компилировать OpenMP приложения им. В качестве преимущества можно назвать поддержку Intel® Parallel Composer версии стандарта OpenMP 3.0, в то время как компилятор из Visual Studio 2005/2008 поддерживает только OpenMP 2.0. Также Intel C++ дает некоторые дополнительные возможности по статическому анализу параллельного кода, о чем можно прочитать в статье.

Для компиляции приложения с использованием Parallel Composer следует сделать активным компилятором Intel C++. Это можно осуществить используя кнопку «Use Intel C++» на панели инструментов, как показано на рисунке 5.
Select Intel C++
Рисунок 5 — Выбор компилятора Intel C++

Теперь для сборки приложения будет использоваться компилятор Intel C++. Да, если после компиляции и запуска приложения вы увидите сообщение, подобное тому что показано на рисунке 6, то не расстраивайтесь.
Error
Рисунок 6 — Ошибка запуска тестового приложения после перекомпиляции с использованием Intel C++

Попробуйте просто перезапустить Visual Studio, чтобы в силу вступили изменения которые прописывает Parallel Studio в среду окружения. Если и это не поможет, воспользуйтесь ручной установкой окружения, запустив соответствующие командные фалы. Они доступны из меню пуск, как показано на рисунке 7.
Set Environment
Рисунок 7 — Установка настроек среды

Закончим пока на этом первое знакомство с инструментами. Скачивайте и устанавливайте Intel® Parallel Studio. Попробуйте собрать какую-нибудь свою простую программу с использованием Intel C++.

комментарии (35)

  • Надеюсь, статьи про OpenMP уложатся в один месяц?)
    • Нет. Пока скачайте, но потерпите и не устанавливайте. :) Когда будет следующие уроки, тогда сразу все и попробуете. :)
  • $799 за Intel Parallel Studio
    в дополнение к
    $1500 за MSVS 2008 Professional
    что-то крутовато (или IPS работает с Express Edition? Что-то сомневаюсь...).
    Пожалуй, я останусь с ParallelToolsPlatform и Eclipse за $0.
    • Совсем не хочется дискутировать на эту тему. Просто замечу, что эта аргументация мне не понятна. Эта месячная зарплата одного нормального программиста. А если такие вложения не окупаются, то что-то не то с проектом, а не с ценой инструментария.
      • Для любых вложений хорошо бы найти обоснования.
        Поэтому я (в несколько провокационной форме, согласен) хотел бы услышать аргументы, способные меня сподвигнуть к переходу со знакомого и бесплатного инструментария на незнакомый и платный.
        • А возможно он вам и не нужен. В хорошем смысле. Должна чувствоваться потребность в инструменте. Вот тогда есть смысл принимать решение, внедрять его в процесс разработки или нет. Однако разумно быть в курсе возможностей различного инструментария, чтобы знать каким потребностям соответствуют какие решения. Я не предлагаю переходить на какие то инструменты. Я рассказываю о них и предлагаю попробовать.
        • Мне нравится такая постановка вопроса — «переход со знакомого и бесплатного инструментария на незнакомый и платный» (серьезно). При такой постановке любой программист не станет ничего менять.

          Если у вас уже есть инструмент, который отлично подходит для решения ваших задачь, пусть будет! Если же у вас есть задачи, которые хотелось бы решить более эффективно… То надо подбирать новый инструмент. И тут вы вдруг вспоминаете Хабр, Андрея Карпова, и параллельную студию ;)
        • Поэтому я (в несколько провокационной форме, согласен) хотел бы услышать аргументы, способные меня сподвигнуть к переходу со знакомого и бесплатного инструментария на незнакомый и платный.

          Я считаю такую постановку вопроса вполне справедливой. Разработчик должен знать, что именно он получит, если потратит время и силы на изучение нового инструмента (про цену не буду тут рассуждать, обычно разработчики не занимаются покупкой софта).
          Просто в комментах довольно трудно выложить все обоснования, т.к. они могу занять места больше, чем сама статья, которая вообще несколько о другом.
          Но если кратко, то, думаю, будет достаточно «маркетингового» описания уомпонентов Parallel Studio, которые изложены тут: Composer, Inspector и Amplifier.

          Если длинно, то предлагаю почитать мои статьи, в которых я постарался максимально подробно раскрыть особенности компонентов Параллельной студии:
          Intel® Parallel Studio – инструмент для создания параллельных приложений
          Intel® Parallel Inspector – поиск ошибок доступа к памяти
          Intel® Parallel Amplifier – профилировщик многопоточных приложений
          Секреты использования Intel® Parallel Inspector для поиска ошибок многопоточности
          Intel® Parallel Composer – расширение для отладки параллельных программ

          К сожалению, я не могу выкладывать сравнительный анализ с другими инструментами, сдаланный нами, так как мы являемся заинтересованной стороной. Поэтому мы ждем, что кто-либо из пользователей его сделает и поделится с сообществом.
          • А я в свою очередь замечу, что задача сравнения инструментов — не такая уж и простая как кажется на первый взгляд. Ведь очень часто сравнить даже два похожих решения «в лоб» не удается. Поскольку в одном инструменте одной возможности нет, в другом — другой. А нужно пользователю вообще третье. Так что «сравнить» инструменты можно только на каких-то конкретных задачах при этом с кучей пометок типа что сравнение разумно только если учитывается то-то и то-то.
            • Ведь очень часто сравнить даже два похожих решения «в лоб» не удается.

              А в лоб может и не нужно. Достаточно просто составить табличку с фичами и отмечать построчно "-" и "+" для каждого инструмента.
              • В наших сравнениях часто получалось так:
                            продукт1        продукт2
                фича1        +                -
                фича2        +                -
                фича3        -                +
                фича4        -                +
                


                И какой вывод можно сделать на основе такого сравнения? Только такой: «Выбирайте продукт1, если нужны фича1 и фича2», что к сожалению не позволяет выбрать что-то одно.
                • Если фичи равнозначные, но да, только такой. А если взять на себя труд по обоснованию важности фич и приоритезировать их, то полезность сравнения резко вырастет.
    • Ого, Вас работодатель заставляет самостоятельно покупать необходимый в работе софт? Со стулом тоже своим ходите на работу?
      • Боюсь, я сам себе работодатель.
        Так что и стул тоже мне никто посторонний не купил.
        • В этом случае все намного лучше! Вы оцениваете пользу от новых инструментов и принимаете решение о необходимости. Собственно Вы его уже приняли в первом комментарии, так что извините за навязывание :-)
    • $799 за Intel Parallel Studio

      Кстати, если весь функционал Parallel Studio кажется избыточным, то можно выбрать из нее компоненты и купить/установить их отдельно. И ценник будет пониже.
  • Скачивайте и устанавливайте Intel® Parallel Studio.

    Это предложение перейти к торрентам? :)
    • Дистрибутив хорошо скачивается с родного сайта. :)
      • Он там неправильный. Какой-то платный
  • Самое сложное в OpenMP — это найти где его использовать в своих программах.
    • А какие у Вас программы? Может им действительно и не очень это все нужно?
  • А под AMD он работает? ;)
    • Да, в icc поддерживаются даже специальные оптимизационные инструкции из набора crippleAMD()
      ;-)
      • Почемуе-то все думают, что «конкурирующя контора» делает плохо конкуренту. Чаще она делает хорошо себе (и людям).
      • можно чуть поподробнее про AMD и icc, не так давно слышал, что AMD жаловались на Intel из-за того, что icc плохой код запускал под AMD процессорами.
        • Комментарием выше (http://habrahabr.ru/company/intel/blog/83504/#comment_2490982) ссылка на достаточно литературно пересказанную новость.
          Собственно исследование лежит по адресу www.agner.org/optimize/blog/read.php?i=49
    • А под AMD он работает? ;)

      Все компоненты Intel Parallel Studio работают на любой х86-совместимой платформе, в том числе и AMD.

      Да к компилятору есть вопросы, но это совсем другая тема. И эти вопросы лежат больше в маркетиного-рекламной плоскости, нежели технической.
      • … маркетинго-рекламной
  • А OpenMP отдельно качать и устанавливать? У меня нет такой опции «OpenMPI Suppor»
    • Ага, в 2005 среде есть. В 2008 нет.
      • Microsoft Visual Studio 2008 Express?
        • Microsoft Visual Studio 2008
          Version 9.0.30729.1 SP
          Microsoft .NET Framework
          Version 3.5 SP1

          Installed Edition: Professional
          • Тогда не знаю, как опция спряталась. :)
            • А вот как. Я ткнул для проверки первый проект в списке. И… только сейчас заметил неприметную строку платформы «Windows Mobile 5.0 Pocket PC SDK (ARMV4I)».
              Andrey2008, я извиняюсь :)
Только авторизованные пользователи могут оставлять комментарии. Авторизуйтесь, пожалуйста.