Сухинов антон - openmp і visual studio

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

У безкоштовної Visual Studio Express перераховані бібліотеки відсутні.

OpenMP і Visual Studio Express

Якщо на вашому комп'ютері встановлена ​​версія Professional - переходьте до наступного розділу статті. У цьому розділі розглянемо випадок, коли з яких-небудь причин ви змушені вико-ти Visual Studio Express.

Програма установки буде завантажувати дані з Інтернету (приблизно 100 мегабайт), тому ви можете заощадити трохи трафіку, відключивши установку Microsoft Silverlight і Microsoft SQL Server, якщо вони вам не потрібні.

Так як ми ставимо Windows SDK тільки заради OpenMP, то нам не потрібен той гігабайт документації, який йде в комплекті. Рекомендую залишити тільки такі елементи:

Сухинов антон - openmp і visual studio

Малюнок 1. Необхідні нам компоненти SDK

Використання OpenMP в Visual Studio

Після того, як ви виконали кроки, описані в попередньому розділі, вже не важливо, який верси-їй Visual Studio ви користуєтеся. Покажу крок за кроком, як створити проект з підтримкою OpenMP в цьому середовищі розробки. Перш за все, потрібно запустити Visual Studio, і вибрати File → New → Project. З'явиться вікно створення проекту. Виберіть тип проекту «Win32», шаблон - «Win32 Console Application». Введіть осмислене ім'я проекту, виберіть папку для зберігання проекту, приберіть галочку «Create directory for solution»:

Сухинов антон - openmp і visual studio

Малюнок 2. Вікно створення проекту

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

Сухинов антон - openmp і visual studio

Малюнок 3. Вікно налаштування майбутнього проекту

При натисканні кнопки «Finish» проект буде створений. Ніяких видимих ​​змін в головному вікні Visual Studio не відбудеться. Тільки ім'я проекту в заголовку вікна як би говорить нам про те, що ми ра-бота з проектом.

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

Сухинов антон - openmp і visual studio

Малюнок 4. Вікно додавання елементів в проект

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

Лістинг 1. Найпростіша програма, яка використовує OpenMP

Запустіть програму, натиснувши Debug → Start Without Debugging. Якщо все було зроблено правильно, програма відкомпілюйте (якщо запитає вас, компілювати чи, натисніть «Yes»), потім запу-тіть та виведе test = 999:

Сухинов антон - openmp і visual studio

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

"Як же так. - скажете ви - Адже програма повинна була вивести нуль, причому двічі! ». Справа в тому, що OpenMP ще не включений, і тому відповідні директиви були проігноровані компілятором.

Для включення OpenMP натисніть Project → OMP Properties (OMP - ім'я проекту з моїх прикладів). Зліва вгорі вікна, що з'явилося виберіть «All Configurations» і в розділі Configuration Properties → C / C ++ → Language включите «OpenMP Support»:

Сухинов антон - openmp і visual studio

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

Після цього знову запустіть програму, натиснувши Debug → Start Without Debugging. На цей раз про-грами виведе test = 0 двічі:

Сухинов антон - openmp і visual studio

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

Ура! OpenMP працює.

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

Сухинов антон - openmp і visual studio

Малюнок 8. Вибір поточної конфігурації

Налагодження OpenMP-програми в Visual Studio Express

При компіляції в конфігурації «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 - потрібно:

Сухинов антон - openmp і visual studio

Малюнок 9. Замінюємо бібліотеку у властивостях проекту

Перевіримо тепер, чи працює налагодження, і чи дійсно програма працює паралельно. Як і ставте точку зупину на рядку з висновком значення змінної. Для цього натисніть лівою кноп-мишки НЕ сіру смужку зліва від вихідного коду:

Сухинов антон - openmp і visual studio

Малюнок 10. Точка зупину

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

Сухинов антон - openmp і visual studio

Малюнок 11. Налагодження OpenMP-програми в Visual Studio Express

Схожі статті