Содержание
- 2. Параллельность – новая эра в программировании Рост вычислительной мощности в ближайшее десятилетие будет осуществляться за счет
- 3. Одна из основных сложностей параллельного программирования – выявление ошибок и отладка Гейзенбаг - термин, используемый в
- 4. Статический анализ кода Преимущества: Раннее выявление ошибок Независимость от среды исполнения Анализ кода редко получающего управление
- 5. Инструменты статического анализа для выявления ошибок параллельности Не следует путать возможность выявления ошибок в параллельном коде
- 6. Разные инструменты для разных технологий параллельного программирования POSIX threads (Pthreads); MPI; OpenMP; Intel Threading Building Blocks
- 7. PC-Lint PC-Lint – продукт компании Gimpel Software. Не имеет GUI, но его можно самостоятельно интегрировать в
- 8. Принцип работы PC-Lint Каждый файл обрабатывается отдельно Необходимо расставить «подсказки» Пример: //lint -sem(f, thread) void Foo(float
- 9. PC-Lint. Демонстрационный пример (PC-lint/FlexeLint 9.0 Manual Excerpts) 454 – Возврат управления при захваченном мьютекс 455 –
- 10. Intel C++ “Parallel Lint” Начиная с версии 11.1 в состав Intel C++ Compiler входит подсистема статического
- 11. Принцип работы Intel C++ (“Parallel Lint”)
- 12. Intel C++. Демонстрационный пример (проект parallel_lint из дистрибутива Intel C++) int main(int argc, char *argv[]) {
- 13. PVS-Studio (VivaMP) VivaMP – статический анализатор кода для проверки OpenMP программ. Входит в состав PVS-Studio. Интегрируется
- 14. Принцип работы PVS-Studio (VivaMP) Технология OpenMP способствует возникновению локальных распараллеленных участков кода. В результате большую часть
- 15. PVS-Studio. Демонстрационный пример #pragma omp parallel for for (size_t i = 0; i != n; ++i)
- 16. Сравнение Intel C++ (“Parallel Lint”) и PVS-Studio (VivaMP) primes_omp1.cpp(70): warning #12246: flow data dependence from (file:primes_omp1.cpp
- 17. Некорректная таблица сравнения Intel C++ (“Parallel Lint”) и PVS-Studio (VivaMP) Вывод: Parallel Lint удобен тем, кто
- 18. Преимущества от ранней диагностики ошибок Средняя стоимость исправления дефектов в зависимости от времени их внесения и
- 19. Приложение. Дополнительные примеры
- 20. Приложение. Дополнительные примеры
- 22. Скачать презентацию
Слайд 2Параллельность – новая эра в программировании
Рост вычислительной мощности в ближайшее десятилетие будет
Параллельность – новая эра в программировании
Рост вычислительной мощности в ближайшее десятилетие будет
Лидеры рынка активно продвигают решения в области параллельности.
Переход к параллельному программированию неизбежен для рядовых программистов.
Слайд 3Одна из основных сложностей параллельного программирования – выявление ошибок и отладка
Гейзенбаг -
Одна из основных сложностей параллельного программирования – выявление ошибок и отладка
Гейзенбаг -
Слайд 4Статический анализ кода
Преимущества:
Раннее выявление ошибок
Независимость от среды исполнения
Анализ кода редко получающего управление
Хорошая
Статический анализ кода
Преимущества:
Раннее выявление ошибок
Независимость от среды исполнения
Анализ кода редко получающего управление
Хорошая
Функция обучения
Недостатки:
Невозможность выявления ряда ошибок
Ложные срабатывания
Высокий уровень самодисциплины
Статический анализ кода (англ. static code analysis) — анализ программного обеспечения, производимый без реального выполнения исследуемых программ. Является альтернативой методологии обзора кода (англ. code review).
Слайд 5Инструменты статического анализа для выявления ошибок параллельности
Не следует путать возможность выявления ошибок
Инструменты статического анализа для выявления ошибок параллельности
Не следует путать возможность выявления ошибок
Инструменты статического анализа для выявления ошибок параллельности в начале пути развития.
Рассмотрим три инструмента: PC-Lint, Intel C++ (“Parallel Lint”), PVS-Studio (VivaMP).
Слайд 6Разные инструменты для разных технологий параллельного программирования
POSIX threads (Pthreads);
MPI;
OpenMP;
Intel Threading Building Blocks
Разные инструменты для разных технологий параллельного программирования
POSIX threads (Pthreads);
MPI;
OpenMP;
Intel Threading Building Blocks
Windows Threads.
Слайд 7PC-Lint
PC-Lint – продукт компании Gimpel Software. Не имеет GUI, но его можно
PC-Lint
PC-Lint – продукт компании Gimpel Software. Не имеет GUI, но его можно
В девятой версии Gimpel Software PC-lint реализована диагностика ошибок в параллельных программах, построенных на основе технологии POSIX threads или схожих с ней.
Слайд 8Принцип работы PC-Lint
Каждый файл обрабатывается отдельно
Необходимо расставить «подсказки» Пример:
//lint -sem(f, thread)
void Foo(float
Принцип работы PC-Lint
Каждый файл обрабатывается отдельно
Необходимо расставить «подсказки» Пример:
//lint -sem(f, thread)
void Foo(float
Поддержка POSIX threads
Слайд 9PC-Lint. Демонстрационный пример
(PC-lint/FlexeLint 9.0 Manual Excerpts)
454 – Возврат управления при захваченном мьютекс
455
PC-Lint. Демонстрационный пример
(PC-lint/FlexeLint 9.0 Manual Excerpts)
454 – Возврат управления при захваченном мьютекс
455
456 – Возможна ошибка синхронизации, так как работа с мьютексом зависит от условия
//lint -sem( lock, thread_lock )
//lint -sem( unlock, thread_unlock )
extern int g();
void lock(void), unlock(void);
void f()
{
lock();
unlock(); // great
//-------------
lock();
if( g() )
{
unlock();
return; // ok
}
unlock(); // still ok
//-------------
lock();
if( g() )
return; // Warning 454
unlock();
if( g() )
{
lock();
unlock();
unlock(); // Warning 455
return;
}
//-------------
if( g() )
lock();
{ // Warning 456
// do something interesting
}
if( g() )
unlock();
} // Warning 454 and 456
Слайд 10Intel C++ “Parallel Lint”
Начиная с версии 11.1 в состав Intel C++ Compiler
Intel C++ “Parallel Lint”
Начиная с версии 11.1 в состав Intel C++ Compiler
Компилятор Intel C++ может интегрироваться в среду Visual Studio.
Слайд 11Принцип работы Intel C++ (“Parallel Lint”)
Принцип работы Intel C++ (“Parallel Lint”)
Слайд 12Intel C++. Демонстрационный пример
(проект parallel_lint из дистрибутива Intel C++)
int main(int argc, char
Intel C++. Демонстрационный пример
(проект parallel_lint из дистрибутива Intel C++)
int main(int argc, char
{
int i, j, limit;
int start, end;
int number_of_primes=0;
int number_of_41primes=0;
int number_of_43primes=0;
start = 1;
end = 1000000;
#pragma omp parallel for
for(i = start; i <= end; i += 2) {
limit = (int) sqrt((float)i) + 1;
int prime = 1; /* assume number is prime */
j = 3;
while (prime && (j <= limit)) {
if (i%j == 0) prime = 0;
j += 2;
}
if (prime) {
number_of_primes++;
if (i%4 == 1) number_of_41primes++;
if (i%4 == 3) number_of_43primes++;
}
}
printf("\nProgram Done.\n %d primes found\n",number_of_primes);
printf("\nNumber of 4n+1 primes found: %d\n",number_of_41primes);
printf("\nNumber of 4n-1 primes found: %d\n",number_of_43primes);
return 0;
}
primes_omp1.cpp(70): warning #12246: flow data dependence from (file:primes_omp1.cpp line:70) to
(file:primes_omp1.cpp line:73), due to "limit" may lead to incorrect program execution in parallel mode
primes_omp1.cpp(70): warning #12248: output data dependence from (file:primes_omp1.cpp line:70) to
(file:primes_omp1.cpp line:70), due to "limit" may lead to incorrect program execution in parallel mode
primes_omp1.cpp(75): warning #12246: flow data dependence from (file:primes_omp1.cpp line:75) to
(file:primes_omp1.cpp line:73), due to "j" may lead to incorrect program execution in parallel mode
primes_omp1.cpp(75): warning #12246: flow data dependence from (file:primes_omp1.cpp line:75) to
(file:primes_omp1.cpp line:74), due to "j" may lead to incorrect program execution in parallel mode
primes_omp1.cpp(75): warning #12246: flow data dependence from (file:primes_omp1.cpp line:75) to
(file:primes_omp1.cpp line:75), due to "j" may lead to incorrect program execution in parallel mode
primes_omp1.cpp(75): warning #12248: output data dependence from (file:primes_omp1.cpp line:75) to
(file:primes_omp1.cpp line:72), due to "j" may lead to incorrect program execution in parallel mode
primes_omp1.cpp(75): warning #12248: output data dependence from (file:primes_omp1.cpp line:75) to
(file:primes_omp1.cpp line:75), due to "j" may lead to incorrect program execution in parallel mode
primes_omp1.cpp(79): warning #12246: flow data dependence from (file:primes_omp1.cpp line:79) to
(file:primes_omp1.cpp line:79), due to "number_of_primes" may lead to incorrect program execution in parallel mode
primes_omp1.cpp(79): warning #12248: output data dependence from (file:primes_omp1.cpp line:79) to
(file:primes_omp1.cpp line:79), due to "number_of_primes" may lead to incorrect program execution in parallel mode
primes_omp1.cpp(80): warning #12246: flow data dependence from (file:primes_omp1.cpp line:80) to
(file:primes_omp1.cpp line: 80), due to "number_of_41primes" may lead to incorrect program execution in parallel mode
primes_omp1.cpp(80): warning #12248: output data dependence from (file:primes_omp1.cpp line:80) to
(file:primes_omp1.cpp line:80), due to "number_of_41primes" may lead to incorrect program execution in parallel mode
primes_omp1.cpp(81): warning #12246: flow data dependence from (file:primes_omp1.cpp line:81) to
(file:primes_omp1.cpp line:81), due to "number_of_43primes" may lead to incorrect program execution in parallel mode
primes_omp1.cpp(81): warning #12248: output data dependence from (file:primes_omp1.cpp line:81) to
(file:primes_omp1.cpp line:81), due to "number_of_43primes" may lead to incorrect program execution in parallel mode
Теоретически:
Практически:
Слайд 13PVS-Studio (VivaMP)
VivaMP – статический анализатор кода для проверки OpenMP программ. Входит в
PVS-Studio (VivaMP)
VivaMP – статический анализатор кода для проверки OpenMP программ. Входит в
Интегрируется в Visual Studio 2005/2008. Справочная система интегрируется в MSDN.
Слайд 14Принцип работы PVS-Studio (VivaMP)
Технология OpenMP способствует возникновению локальных распараллеленных участков кода. В
Принцип работы PVS-Studio (VivaMP)
Технология OpenMP способствует возникновению локальных распараллеленных участков кода. В
Не требуется какой либо адаптации проекта или специальных настроек.
Фильтрация сообщений в режиме on-the-fly. Сохранение и загрузка списка предупреждений.
Слайд 15PVS-Studio. Демонстрационный пример
#pragma omp parallel for
for (size_t i = 0; i !=
PVS-Studio. Демонстрационный пример
#pragma omp parallel for
for (size_t i = 0; i !=
float *array =
new float[10000];
delete [] array;
}
Анализатор VivaMP диагностирует в данном коде ошибку: “V1302. The ‘new’ operator cannot be used outside of a try..catch block in a parallel section.” Ошибка связана с бросанием исключения из параллельного блока.
pragma omp parallel
{
static int st = SlowFoo();
...
}
Статическая переменная начнет процесс инициализации сразу в нескольких потоках, что может привести к неопределенному результату. В отличии от распараллеливания с использованием POSIX Threads, здесь анализатор легко может понять, что код находится в параллельной секции.
Слайд 16Сравнение Intel C++ (“Parallel Lint”) и PVS-Studio (VivaMP)
primes_omp1.cpp(70): warning #12246: flow data
Сравнение Intel C++ (“Parallel Lint”) и PVS-Studio (VivaMP)
primes_omp1.cpp(70): warning #12246: flow data
(file:primes_omp1.cpp line:73), due to "limit" may lead to incorrect program execution in parallel mode
primes_omp1.cpp(70): warning #12248: output data dependence from (file:primes_omp1.cpp line:70) to
(file:primes_omp1.cpp line:70), due to "limit" may lead to incorrect program execution in parallel mode
primes_omp1.cpp(75): warning #12246: flow data dependence from (file:primes_omp1.cpp line:75) to
(file:primes_omp1.cpp line:73), due to "j" may lead to incorrect program execution in parallel mode
primes_omp1.cpp(75): warning #12246: flow data dependence from (file:primes_omp1.cpp line:75) to
(file:primes_omp1.cpp line:74), due to "j" may lead to incorrect program execution in parallel mode
primes_omp1.cpp(75): warning #12246: flow data dependence from (file:primes_omp1.cpp line:75) to
(file:primes_omp1.cpp line:75), due to "j" may lead to incorrect program execution in parallel mode
primes_omp1.cpp(75): warning #12248: output data dependence from (file:primes_omp1.cpp line:75) to
(file:primes_omp1.cpp line:72), due to "j" may lead to incorrect program execution in parallel mode
primes_omp1.cpp(75): warning #12248: output data dependence from (file:primes_omp1.cpp line:75) to
(file:primes_omp1.cpp line:75), due to "j" may lead to incorrect program execution in parallel mode
primes_omp1.cpp(79): warning #12246: flow data dependence from (file:primes_omp1.cpp line:79) to
(file:primes_omp1.cpp line:79), due to "number_of_primes" may lead to incorrect program execution in parallel mode
primes_omp1.cpp(79): warning #12248: output data dependence from (file:primes_omp1.cpp line:79) to
(file:primes_omp1.cpp line:79), due to "number_of_primes" may lead to incorrect program execution in parallel mode
primes_omp1.cpp(80): warning #12246: flow data dependence from (file:primes_omp1.cpp line:80) to
(file:primes_omp1.cpp line: 80), due to "number_of_41primes" may lead to incorrect program execution in parallel mode
primes_omp1.cpp(80): warning #12248: output data dependence from (file:primes_omp1.cpp line:80) to
(file:primes_omp1.cpp line:80), due to "number_of_41primes" may lead to incorrect program execution in parallel mode
primes_omp1.cpp(81): warning #12246: flow data dependence from (file:primes_omp1.cpp line:81) to
(file:primes_omp1.cpp line:81), due to "number_of_43primes" may lead to incorrect program execution in parallel mode
primes_omp1.cpp(81): warning #12248: output data dependence from (file:primes_omp1.cpp line:81) to
(file:primes_omp1.cpp line:81), due to "number_of_43primes" may lead to incorrect program execution in parallel mode
Сравнение на базе parallel_lint из дистрибутива Intel C++ (всего 6 ошибок):
Warning 1 error V1205: Data race risk. Unprotected concurrent operation with the 'limit' variable. r:\primes\primes_omp1\primes_omp1.cpp 69
Warning 2 error V1205: Data race risk. Unprotected concurrent operation with the 'j' variable. r:\primes\primes_omp1\primes_omp1.cpp 71
Warning 3 error V1205: Data race risk. Unprotected concurrent operation with the 'j' variable. r:\primes\primes_omp1\primes_omp1.cpp 74
Warning 4 error V1205: Data race risk. Unprotected concurrent operation with the 'number_of_primes' variable. r:\primes\primes_omp1\primes_omp1.cpp 78
Warning 5 error V1205: Data race risk. Unprotected concurrent operation with the 'number_of_41primes' variable. r:\primes\primes_omp1\primes_omp1.cpp 79
Warning 6 error V1205: Data race risk. Unprotected concurrent operation with the 'number_of_43primes' variable. r:\primes\primes_omp1\primes_omp1.cpp 80
Parallel Lint (Найдено 6 ошибок из 6. Количество предупреждений: 13)
VivaMP (Найдено 6 ошибок из 6. Количество предупреждений: 6)
Слайд 17Некорректная таблица сравнения Intel C++ (“Parallel Lint”) и PVS-Studio (VivaMP)
Вывод:
Parallel Lint удобен
Некорректная таблица сравнения Intel C++ (“Parallel Lint”) и PVS-Studio (VivaMP)
Вывод:
Parallel Lint удобен
PVS-Studio (VivaMP) подходит для разработчиков, использующих Visual C++
Слайд 18Преимущества от ранней диагностики ошибок
Средняя стоимость исправления дефектов в зависимости от времени
Преимущества от ранней диагностики ошибок
Средняя стоимость исправления дефектов в зависимости от времени
Слайд 19Приложение. Дополнительные примеры
Приложение. Дополнительные примеры
Слайд 20Приложение. Дополнительные примеры
Приложение. Дополнительные примеры