VivaMP
VivaMP — це аналізатор вихідного коду паралельних додатків, створених на основі технології OpenMP. Інструмент VivaMP є lint-подібний статичний аналізатор коду на мовах C / С ++, інтегрується в середовище розробки Visual Studio 2005/2008.
Технологія паралельного програмування OpenMP: переваги і недоліки
Сучасний процесор (будь він в настільному комп'ютері або в ноутбуці) має кілька ядер. Найчастіше це два ядра, трохи рідше три або чотири. Однак зовсім скоро і вісім ядер на звичайної домашньої користувальницької машині будуть звичайним явищем. Тому найбільш прогресивні розробники програмних продуктів вже зараз замислюються над тим, як зробити свою програму паралельної. Тобто як забезпечити завантаження всіх доступних ядер процесора. І хоча абсолютно коректним рішенням було б розробкою нової паралельної версії програмного продукту, в реальності ж зазвичай «распараллелівать» наявну послідовну версію. Існує досить багато різних технологій паралельного програмування, проте нас цікавить, перш за все, технологія OpenMP, як найбільш перспективна для систем зі спільною пам'яттю. Тобто найбільш перспективна для розпаралелювання програм призначених для роботи на персональних комп'ютерах. Вона дозволяє зробити існуючу програму паралельної, переписавши окремі її фрагменти. Все це виглядає (і дійсно є) дуже привабливим для розробників, якби не один нюанс. Підтримка технології OpenMP в існуючих засобах розробки реалізована так, що дуже легко допустити помилки, які ніяк не діагностуються. Через що складність розробки OpenMP-рішень значно зростає[1].
Інструмент підтримки розробників OpenMP-рішень
Для зменшення складності розробки OpenMP-рішень компанією ТОВ «СіПроВер», що займається створенням програмних інструментів в галузі аналізу коду, розроблений програмний продукт VivaMP.
Якщо в розроблюваної паралельній програмі є помилки, які не діагностуються компілятором, то інструмент VivaMP знайде їх. Після чого розробник, скориставшись вбудованою в VivaMP довідкової системою, легко ці помилки виправить. Після перевірки окремого файлу, проекту або всього рішення аналізатор виводить в Error List список потенційних помилок, які розробник повинен переглянути. За будь-які виявлені помилку доступна інформація в довідковій системі, що інтегрується в MSDN.
Інструмент VivaMP дозволяє
- знайти старі помилки в існуючих OpenMP-рішеннях;
- виявити помилки в нових розроблюваних OpenMP-рішеннях;
- отримати інформацію щодо виправлення помилок з довідкової системи;
- підвищити продуктивність рішень на базі OpenMP;
- вивчити більшість можливих помилок в OpenMP-рішеннях як по документації, так і на демонстраційній програмі ParallelSample, поставляються разом з дистрибутивом VivaMP[2].
Зазначені способи застосування VivaMP роблять інструмент корисним як початківцям OpenMP-програмістам, так і їх більш досвідченим колегам.
Переваги статичного аналізу над іншими методиками пошуку паралельних помилок
Інструмент VivaMP є статичним аналізатором коду. Це означає, що на відміну від динамічних аналізаторів, не потрібно запуск програми, що перевіряється для виявлення помилок і результат роботи статичного аналізатора не залежить від середовища виконання. Статичний аналіз дозволяє перевірити код, рідко який одержує управління або виконується в разі відпрацювання рідкісних помилкових ситуацій[3].
Вважається, що верифікація паралельних програм методом статичного аналізу скрутна і малоефективна в силу неможливості виявити помилки, що виникають при взаємодії різних частин програм. Але для технології OpenMP статичний аналіз для виявлення помилок в коді можливий і ефективний. Справа в «локальності» технології OpenMP. Паралельний код в програмах, як правило, буває зібраний в одному місці, що дозволяє виконати детальний статичний аналіз для знаходження помилок
Примітки
- Андрей Карпов. Тестирование параллельных программ.
- http://www.viva64.com/ru/a/0031/
- Алексей Колосов, Евгений Рыжков, Андрей Карпов. 32 подводных камня OpenMP при программировании на Си++. http://www.viva64.com/ru/a/0054/
Джерела
- Алексей Колосов, Евгений Рыжков, Андрей Карпов 32 подводных камня OpenMP при программировании на Си++.
- Андрей Карпов Тестирование параллельных программ // pvs-studio