Install openmp on windows

OpenMP и Visual Studio

OpenMP позволяет легко создавать параллельные программы для систем с общей памятью (много­ядерных и многопроцессорных). В этой статье я расскажу о том, как включить OpenMP в самой рас­пространённой среде программирования – Visual Studio. Согласно официальной версии Micro­soft, OpenMP поддерживается только в версиях Professional среды разработки Visual Studio 2005/2008/2010. Однако бесплатная Visual Studio Express обладает тем же компилятором, что и версия Professional. Поэтому после небольшой «доработки напильником» параллельные OpenMP-программы будут компилироваться и, главное, работать даже в Visual Studio Express.

OpenMP от Microsoft реализован посредством следующих компонентов:

  1. компилятор C++, входящий в состав Visual Studio;
  2. заголовочный файл omp.h;
  3. библиотеки стадии компиляции: vcomp.lib и vcompd.lib (последняя используется для отлад­ки);
  4. библиотеки времени выполнения: vcomp90.dll и vcomp90d.dll. Цифры в названии могут разли­чаться: в Visual Studio 2005 вместо 90 стоят цифры 80.

В бесплатной Visual Studio Express перечисленные библиотеки отсутствуют.

OpenMP и Visual Studio Express

Если вы хотите создавать параллельные OpenMP-программы под Windows, то самый удобный спо­соб – это воспользоваться Visual Studio 2005/2008/2010 Professional. Напоминаю, что она бес­платна для студентов и аспирантов. Кроме того, вы можете купить Visual Studio Professional за $600 (конечно, существует ещё и третий вариант, но мы о нём не будем говорить).

Если на вашем компьютере установлена версия Professional – переходите к следующему разделу статьи. В этом разделе рассмотрим случай, когда по каким-либо причинам вы вынуждены использо­вать Visual Studio Express.

Visual Studio Express – это бесплатная урезанная версия Visual Studio. Нас будет интересовать вер­сия 2008 года. Скачать её можно отсюда: http://www.microsoft.com/exPress/download/. Естествен­но, программировать будем на C++, поэтому выби­райте Visual C++ 2008.

Программа установки будет загружать данные из Интернета (примерно 100 мегабайт), поэтому вы можете сэкономить немного трафика, отключив установку Microsoft Silverlight и Microsoft SQL Server, если они вам не требуются.

После установки Visual Studio Express нам понадо­бится добавить в неё OpenMP-компоненты. Легаль­ный бесплатный способ сделать это – установить Windows SDK for Windows Server 2008 and .NET Framework 3.5. Во время установки этого пакета программ будет произведено обновление Visual Studio. Процесс обновления не смотрит, какая именно версия Visual Studio у вас установлена (Express или Professional), поэтому во время установ­ки будут «случайно» добавлены недостающие компоненты.

Так как мы ставим Windows SDK только ради OpenMP, то нам не нужен тот гигабайт документации, который идёт в комплекте. Рекомендую оставить только следующие элементы:

Рисунок 1. Необходимые нам компоненты SDK

К сожалению, в состав SDK не входит библиотека vcomp90d.dll, поэтому на данный момент в Visual Studio Express вы сможете запускать только OpenMP-программы, откомпилированные в ре­жиме Release. Я нашёл способ обойти и это ограничение, об этом читайте далее (раздел «Отладка OpenMP-программы в Visual Studio Express»).

Использование OpenMP в Visual Studio

После того, как вы выполнили шаги, описанные в предыдущем разделе, уже не важно, какой верси­ей Visual Studio вы пользуетесь. Покажу шаг за шагом, как создать проект с поддержкой OpenMP в этой среде разработки. Прежде всего, нужно запустить Visual Studio, и выбрать File→New→Project. Появится окно создания проекта. Выберите тип проекта «Win32», шаблон – «Win32 Console Application». Введите осмысленное имя проекта, выберите папку для хранения проекта, уберите галочку «Create directory for solution»:

Рисунок 2. Окно создания проекта

Нажмите кнопку «OK», появится окно настройки будущего проекта. Выберите вкладку «Application Settings», и включите галку «Empty project»:

Рисунок 3. Окно настройки будущего проекта

По нажатию кнопки «Finish» проект будет создан. Никаких видимых изменений в главном окне Visual Studio не произойдёт. Только имя проекта в заголовке окна как бы говорит нам о том, что мы ра­ботаем с проектом.

Теперь нажмите Project→Add New Item, появится окно добавления элементов в проект. Добавьте .cpp-файл в проект:

Читайте также:  Как загрузить windows с virtualbox

Рисунок 4. Окно добавления элементов в проект

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

Листинг 1. Простейшая программа, использующая OpenMP

Запустите программу, нажав Debug→Start Without Debugging. Если всё было сделано правильно, программа откомпилируется (если спросит вас, компилировать ли, нажмите «Yes»), затем запу­стится и выведет test = 999:

Рисунок 5. Результат работы программы из листинга 1

«Как же так?! – скажете вы – Ведь программа должна была вывести ноль, причём дважды!». Дело в том, что OpenMP ещё не включен, и поэтому соответствующие директивы были проигнорированы компилятором.

Для включения OpenMP нажмите Project→OMP Properties (OMP – имя проекта из моих примеров). Слева вверху появившегося окна выберите «All Configurations» и в разделе Configuration Properties→C/C++→Language включите «OpenMP Support»:

Рисунок 6. Включаем OpenMP в свойствах проекта

После этого снова запустите программу, нажав Debug→Start Without Debugging. На этот раз про­грамма выведет test = 0 дважды:

Рисунок 7. Результат работы программы из листинга 1 с включённым OpenMP

Ура! OpenMP работает.

Примечание. Если вы используете Visual Studio Express, то выберите текущую конфигурацию «Release», иначе работать не будет (читайте далее):

Рисунок 8. Выбор текущей конфигурации

Отладка OpenMP-программы в Visual Studio Express

Как было сказано ранее, даже после установки Windows SDK у нас не будет в наличии необходимой для отладки библиотеки vcomp90d.dll, поэтому мы пока не можем отлаживать OpenMP програм­му в Visual Studio Express. Простое копирование имеющейся библиотеки vcomp90.dll и переимено­вание её в vcomp90d.dll не сработает, ибо не совпадёт контрольная сумма и версия, указанные во встраиваемом в exe-файл манифесте. Поэтому будем «копать» с противоположной стороны.

При компиляции в конфигурации «Debug» («Отладка»), заголовочный файл omp.h требует библио­теку vcompd.lib (она у нас имеется), которая, в свою очередь, требует vcomp90d.dll (отсутству­ет). Лицензия не позволяет нам использовать в приложениях модифицированные заголовочные файлы от Microsoft, поэтому вместо модификации omp.h включим его в нашу программу следую­щим образом, чтобы он не догадался о включённом режиме отладки:

Листинг 2. Включаем omp.h «хитрым» способом

Приведённого действия не достаточно для того, чтобы всё работало (пока мы исправили лишь ма­нифест, встраиваемый в программу). Дело в том, что Visual Studio в режиме отладки по прежнему автоматически (из-за включённого OpenMP) прилинковывает vcompd.lib, требующую vcomp90d.dll. Чтобы это исправить, снова зайдите в настройки проекта (Project→OMP Properties), выберите на этот раз Configuration: «Debug». В разделе Configuration Properties→Linker→Input укажите, что vcompd.lib прилинковывать не нужно, а vcompd.lib – нужно:

Рисунок 9. Заменяем библиотеку в свойствах проекта

Проверим теперь, работает ли отладка, и действительно ли программа работает параллельно. По­ставьте точку останова на строке с выводом значения переменной. Для этого нажмите левой кноп­кой мыши не серую полоску слева от исходного кода:

Рисунок 10. Точка останова

После этого запустите программу в режиме отладки: Debug→Start Debugging (не забудьте вер­нуть текущую конфигурацию «Debug», см. рисунок 8). Программа запустится – и сразу же остано­вится на точке останова. Во вкладке «Threads» мы видим, что программа действительно работает, используя два потока:

Рисунок 11. Отладка OpenMP-программы в Visual Studio Express

Настройка OpenMP в CLion и пример программы

Доброго времени суток! Продолжаем рассматривать варианты параллельного исполнения программ. Я уже рассказывал про библиотеку MPI, которая позволяет создавать несколько параллельно исполняемых процессов в системе. Рассказал о базовой установке MPI, интеграции его в CLion и даже поделился своей реализацией алгоритма Флойда-Уоршелла.

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

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

Что такое OpenMP

Признанным открытым стандартном параллельного программирования на языках C/C++ и Fortran является OpenMP. Он включает в себя множество директив препроцессора, библиотечных функций и переменных окружения для реализации многопоточных программ. Более подробную информацию вы сможете найти на вики и прочих источниках, а я перейду непосредственно к настройке.

Читайте также:  Moon pro reader windows

Настройка OpenMP в CLion

По аналогии с настройкой MPI, дело решается всего одной строкой в CMakeLists.txt . Дело в том, что специально устанавливать OpenMP не нужно, он по умолчанию поддерживается очень многими компиляторами, в том числе и gcc версии 4.7 и выше. На моей Ubuntu 16.04 из коробки установлен gcc версии 5.4.0, поэтому никакой головной боли я не испытал. Поэтому смело обновляйте gcc и в бой. Гордым обладателям Visual Studio стоит покопаться в настройках проекта и включить поддержку OpenMP.

Дать компилятору понять, что нужно работать с потоками можно флагом -fopenmp. Именно это мы и пропишем в CMakeLists.txt

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

Пример программы с MPI + OpenMP

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

Заключение

Поздравляю друзья, нам удалось распараллелить еще один «Hello world». Вообще по ощущениям, писать с помощью OpenMP гораздо приятнее. Не нужно париться над пересылками данных, синхронизациями и прочим. Но максимально эффективной все таки является связка MPI+OpenMP. А на сегодня у меня все, спасибо за внимание!

Getting started with openMP. install on windows

Posted by: admin February 27, 2018 Leave a comment

I want to write parallel program in C++ using OpenMP, so I am getting started with OpenMP.
On the other words I am a beginner and I need good OpenMP guide telling how to install it.
Does someone know how to install OpenMP on Windows, then compile and run the program?

OpenMP is not something that you install. It comes with your compiler. You just need a decent compiler that supports OpenMP and you need to know how to enable OpenMP support since it is usually disabled by default.

The standard compiler for Windows comes from Microsoft and it is the Microsoft Visual C/C++ compiler from Visual Studio. Unfortunately its OpenMP support is a bit outdated – even the latest and greatest Visual Studio only supports OpenMP 2.0 (an outdated standard version from 2002). See here for more information on how to use OpenMP in Visual Studio. There are other compilers available as well – both Intel C/C++ Compiler (commercial license required) and GCC (freely available) support newer OpenMP versions and other compilers are available too.

You can start learning OpenMP by visiting the OpenMP web site here. Also there is a great tutorial on OpenMP from Lawrence Livermore National Laboratory available here.

So here is what I did to finally get OpenMP working on my Windows 10 PC:

  1. Get MinGW – Download and grab what you need to get the basic gcc compiler and the g++ pakage (its really easy to do). You can always run g++ -v to make sure it is up and running
  2. Run mingw-get upgrade —recursive «gcc This is the “Fun” part. Because at this time there was no libgomp library supported in their 4.9.* version my gcc wasn’t able to recognize the last support version was 4.7.2 so with this I finally was able to run my openMP

Instructions on how to run MPI, OpenMP and CUDA programs

Sachin Kumawat and Norm Matloff

This is a quick overview on running parallel applications with MPI, OpenMP and CUDA. The recommended platform is Unix (includes Linux and Mac OS X) and useful (but untested!) links are accordingly provided for Windows Tools as well. These instruction should be followed to gain familiarity with the tools before starting with actual assignments and taking quizzes.

CRUCIAL NOTE: When you take the quizzes, the various executables, gcc, mpicc, mpiexec, R an python must be in your search path, as the OMSI script will invoke them. A similar statement holds for library paths. Thus it is absolutely essentially that you do a dry run of OMSI before the first quiz.

Читайте также:  Aomei partition assistant для mac os

Both MPI (mpicc, mpiexec) and CUDA (nvcc) toolchains are installed on CSIF machines.

Your Laptop

For our quizzes, you will need gcc, MPI and R for running code, and Python for running our OMSI quiz tool. CUDA for quizzes will just be «pencil and paper» style, no actual compiling/running.

As noted, your version of gcc must be OpenMP-capable. To test that, download omp_hello.c, compile and run:

This will probably fail on a Mac; see below for the remedy.

For the programming assignments, you will also need gcc, MPI and R.

If you have a CUDA-compatible video card, you may install CUDA but be prepared for some obstacles to resolve. Installation can be performed by following instructions from CUDA Toolkit’s homepage. The setup is rather involved but majority of the issues are discussed here.

Installation of OpenMP capable C/C++ compiler and MPI tools

Details

Unix-family systems

Windows

On windows, a version of MPICH called MSMPI can be used along with Visual Studio. Download directly from Microsoft’s Website. Compilation and launch instructions are provided here.

Set Up Remote Authentication:

MPI implementations work by invoking programs on other nodes via ssh or equivalent daemon. Therefore before you can run MPI programs, it is required to once setup passwordless login from one MPI machine to another. To set up passwordless login on CSIF (or any) systems, check FAQ 7.9 and 7.10 of csif-general-faq.

Compiling MPICH2 Program:

To compile a MPI program written in C, type:

For example, for a program PrimePipe.c, make an executable prp this way:

(You may need to specify the full path to prp.)

(If you wish to use C++, use mpicxx instead of mpicc.)

Running MPICH2 application:

Set up a hosts file, listing which machines you wish your MPI app to run on, e.g. hosts3:

Run, say for the above executable named prp on the above hosts file, by typing

where 100 and 0 are the command-line arguments to prp.

The GNU gcc/g++ compilers are capable of running programs with OpenMP directives right out of the box. Therefore no installation/configuration is required for Linux systems (except for OS X, see below). To enable OpenMP support for a program hello_openmp.c, simply compile with the flag -fopenmp as:

OpenMP for Windows:

Visual Studio support for OpenMP is outdated, hence it is recommended to utilize GCC functionality on Windows by installing either Cygwin or MinGW. For Visual Studio, instructions to enable OpenMP support are provided here.

OpenMP for Mac OS X:

The default clang compiler on OS X does not support OpenMP. Since gcc on OS X is just a symbolic link to clang, using the default gcc/g++ will not work either. We need to install the latest homebrew version of gcc (e.g. v6.x) and add its location to the PATH environment variable: The OpenMP program can then be compiled with:

Note that you will need to alias gcc to gcc-6.

The install took 85 minutes when I tried it. Note that it will install in /usr/local/Cellar. Also, I found that I also needed to make sure that /usr/bin/as is ahead of /opt/local/bin in PATH.

(Use g++/g++-6 for C++ applications.)

To run an OpenMP application, first specify the number of threads using OMP_NUM_THREADS enviroment variable. For example, to launch 8 threads, type: under tcsh, similarly for bash. If OMP_NUM_THREADS is not set, by default as many threads as available cores are launched. Now simply run the executable to run the application:

CUDA is installed on CSIF systems at /usr/local/cuda-8.0 and you can obtain details about the installed GPU card on a particular system by typing nvidia-smi on terminal. CUDA is compiled by invoking nvcc compiler. It links with all CUDA libraries and also calls gcc to link with the C/C++ runtime libraries. A CUDA program hello_cuda.cu, which contains both host and device code, can simply be compilled and run as:

CUDA for Windows:

Visial Studio provides support to directly compile and run CUDA applications. Instructions for installation and sample program execution can be found here.

Оцените статью