OpenMP від Microsoft реалізований за допомогою наступних компонентів:
У безкоштовної Visual Studio Express перераховані бібліотеки відсутні.
OpenMP і Visual Studio Express
Якщо на вашому комп'ютері встановлена версія Professional - переходьте до наступного розділу статті. У цьому розділі розглянемо випадок, коли з яких-небудь причин ви змушені вико-ти Visual Studio Express.
Програма установки буде завантажувати дані з Інтернету (приблизно 100 мегабайт), тому ви можете заощадити трохи трафіку, відключивши установку Microsoft Silverlight і Microsoft SQL Server, якщо вони вам не потрібні.
Так як ми ставимо Windows SDK тільки заради OpenMP, то нам не потрібен той гігабайт документації, який йде в комплекті. Рекомендую залишити тільки такі елементи:
Малюнок 1. Необхідні нам компоненти SDK
Використання 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-файл в проект:
Малюнок 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
При компіляції в конфігурації «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