Intel Parallel Studio Участники : Царёв Михаил Ахматнуров Динар Калачёв Артём Руководитель : Козинов Евгений.

Презентация:



Advertisements
Похожие презентации
Многопоточное программирование в OpenMP Киреев Сергей ИВМиМГ.
Advertisements

OpenMP. Различие между тредами и процессами ПроцессыТреды.
Параллельное программирование с использованием технологии OpenMP Аксёнов Сергей Владимирович к.т.н., доцент каф.ОСУ ТПУ Лекция 3 Томский политехнический.
Основы OpenMP Nikita Panov
POSIX Threads & OpenMP Общая память Сергей Петрович Нечаев, Сибирский Суперкомпьютерный центр.
Параллельное программирование с использованием технологии OpenMP Аксёнов Сергей Владимирович к.т.н., доцент каф.ОСУ ТПУ Лекция 2 Томский политехнический.
Система автоматизации распараллеливания: отображение на мультипроцессор Выполнил: студент 528 группы Лойко Михаил Юрьевич Научный руководитель: профессор,
ООО «Системы программной верификации» Конференция CEE-SECR 2009 Авторы:Карпов Андрей Рыжков Евгений.
OpenMPOpenMPРазличие между тредами и процессами ПроцессыТреды.
Лекция 8 Область видимости Время жизни. Область видимости Область видимости – характеристика именованного объекта Область видимости - часть текста программы,
Программирование многоядерных архитектур (слайды для лекции 2013/04/20) Киреев С.Е., Маркова В.П., Остапкевич М.Б., Перепелкин В.А. МО ВВС ИВМиМГ СО РАН.
Параллельное программирование с использованием технологии OpenMP Аксёнов Сергей Владимирович к.т.н., доцент каф.ОСУ ТПУ Томский политехнический университет.
Основы информатики Классы Заикин Олег Сергеевич zaikin.all24.org
Разработка параллельных приложений для многоядерных систем С.В. Ковальчук НИИ Наукоемких компьютерных технологий, СПбГУ ИТМО.
Intel® Cilk TM Plus Введение Лекция 2. Многопоточный параллелизм – от OpenMP к Intel® Cilk TM Plus Немнюгин Сергей Андреевич.
Практическое занятие 6. Функции. Большинство языков программирования используют понятия функции и процедуры. C++ формально не поддерживает понятие процедуры,
Нижегородский государственный университет им. Н.И.Лобачевского Факультет Вычислительной математики и кибернетики Кустикова В.Д., Сиднев А.А., Сысоев А.В.
Студент группы МТ Уросов Александр Павлович Научный руководитель Авербух Владимир Лазаревич Доцент КИПУ Кандидат технических наук.
УКАЗАТЕЛИ. Переменная - это именованная область памяти с заданным типом. [=значение]; int a; //Переменная типа integer с именем a int b=2;// Переменная.
Лекция 3. Одномерные массивы, указатели и ссылки Красс Александр СПбГУ ИТМО, 2008.
Транксрипт:

Intel Parallel Studio Участники : Царёв Михаил Ахматнуров Динар Калачёв Артём Руководитель : Козинов Евгений

Происходит рост числа процессоров и ядер – необходимы специальные программы

Отладка параллельных программ Тяжело. Очень.

Intel Parallel Studio Корпорация Intel предлагает разработчикам Microsoft Visual Studio C/C++ универсальный инструмент параллельного программирования – Intel Parallel Studio.

Постановка задачи Целью данной работы является исследование возможностей Intel Parallel Studio. А именно : Предназначение инструментов ; Выявление заявленных возможностей инструмента ; Проведение « нагрузочных » испытаний инструментов. В проекте основной упор был сделан на исследование возможностей Intel® Parallel Inspector.

Intel® Parallel Inspector Средство поиска ошибок памяти и многопоточности

Ход выполнения работы Выделение классов ошибок ; Создание генератора кода ; Автоматизация запуска : Создание генератора входных данных ; Написание скриптов запуска ( запуск генераторов, компилятора, Inspector). Написание скриптов сбора результатов.

Классы ошибок

Все рассматриваемые ошибки можно разбить на 3 класса Ошибки возникающие при работе с технологией OpenMP; Ошибки возникающие при работе с потоками ; Общие ошибки работы с памятью.

OpenMP НазваниеОписаниеПо документации Inspector находит Data race 1(DR1) Одновременное использование общего ресурса Data race 2(DRA) Одновременное использование общего ресурса Absence flush (FLU) Отсутствует необходимая директива flush Uncorrect directive 1 (IOD) директива #pragma omp parallel for ordered состоит из двух частей : 1 часть #pragma omp parallel for ordered, 2 часть #pragma omp ordered. Ошибка заключается в отсутствии 2 части Last private error (LPE) директива lastprivate() после параллельной секции присваивает переменной значение из лексически последней секции, либо из последней итерации цикла. Согласно спецификации, если переменной не присваивается значение в упомянутом фрагменте кода, ее значение после окончания соответствующей параллельной секции является неопределенным. Thread private error (NLV) Эта ошибка описана в спецификации OpenMP. Если изменить значение переменной, объявленной как threadprivate, начальное значение Uninitialized private variable(THP) При входе в поток для переменных, являющиеся параметрами директивы threadprivate, а также выражений private и lastprivate, создаются локальные копии. Эти копии являются неинициализированными по умолчанию. Следовательно, любая попытка работы с ними без предварительной инициализации приведет к ошибке во время выполнения программы. Uncorrect directive 2 (UCD) отсутствует omp Uncorrect directive 3 (UCW) отсутствует parallel

Потоки НазваниеОписаниеПо документации Inspector находит Invalid timetable capture mutexes (MMT) Поток 1 пытается захватить мьютексы A и B, поток 2 - то же самое, но в обратном порядке No release of the captured mutex(NRM) Поток 1 захватывает мьютекс A, не вызывает ReleaseMutex. Затем поток 2 пытается захватить этот мьютекс Creating a mutex in the captured state(MIC) Основной поток создает мьютекс в захваченном состоянии. Затем другой поток пытается этот мьютекс захватить Invalid timetable capture semaphores (MST) Поток 1 пытается захватить семафоры A и B, поток 2 - то же самое, но в обратном порядке Semaphore is released fewer times than is captured(NRS) Поток 1 захватывает семафор дважды, освобождает один раз. Потом этот семафор пытается захватить поток 2 Data race(TDR) Гонка данных - потоки 1 и 2 одновременно пытаются модифицировать одну и ту же переменную

Ошибки работы с памятью НазваниеОписаниеПо документации Inspector находит Memory leak 1 (ML1) Утечка памяти Memory leak 2 (ML2) Освобождение указателя на массив указателей, без предварительного освобождение « внутренних » указателей Mismatched allocation/deallocation (MDL) Несоответствие функций new, new[] и delete, delete [] Uninitialized memory access (UMA) Чтение из неинициализированной переменной Corruption in heap (CIP) Обращение к « чужой » памяти Invalid memory access (IMA) Запись или чтение из уже освобождённого или ещё не выделенного участка памяти Missing allocation (MAL) Повторное освобождение памяти

Генератор ошибок

Генератор кода

Входные данные Общий формат : + + +… CIP1+MDL1+CIP1+MDL1 Тестовая программа CIP Первая часть CIP char temp; char *pStr = new char[2]; pStr[0]='a'; pStr[1]='a'; Первая часть CIP char temp; char *pStr = new char[2]; pStr[0]='a'; pStr[1]='a'; MDL Первая часть MDL char *pStr = new char[25]; Первая часть MDL char *pStr = new char[25]; CIP Вторая часть CIP pStr[2]='a'; delete[] pStr; Вторая часть CIP pStr[2]='a'; delete[] pStr; MDL Вторая часть MDL delete pStr; Вторая часть MDL delete pStr; Builder MDL1 CIP1

Автоматизация запуска

Ход выполнения эксперимента Скрипт запуска Удаление временных файлов Генератор входных данных Сгенерированные входные данные Генератор когда Сгенерированные код Компилятор Исполняемый файл Intel Parallel Studio Inspector Отчёт Inspectora о найденных ошибках Отчёт исполняемого фала Скрипт сбора данных Табличка результатов

Ход выполнения эксперимента Скрипт запуска Удаление временных файлов Генератор входных данных Сгенерированные входные данные Генератор когда Сгенерированные код Компилятор Исполняемый файл Intel Parallel Studio Inspector Отчёт Inspectora о найденных ошибках Отчёт исполняемого фала Скрипт сбора данных Табличка результатов Кол - во и названия ошибок

Ход выполнения эксперимента Скрипт запуска Удаление временных файлов Генератор входных данных Сгенерированные входные данные Генератор когда Сгенерированные код Компилятор Исполняемый файл Intel Parallel Studio Inspector Отчёт Inspectora о найденных ошибках Отчёт исполняемого фала Скрипт сбора данных Табличка результатов Входные Данные

Ход выполнения эксперимента Скрипт запуска Удаление временных файлов Генератор входных данных Сгенерированные входные данные Генератор когда Сгенерированные код Компилятор Исполняемый файл Intel Parallel Studio Inspector Отчёт Inspectora о найденных ошибках Отчёт исполняемого фала Скрипт сбора данных Табличка результатов.cpp и.h файлы

Ход выполнения эксперимента Скрипт запуска Удаление временных файлов Генератор входных данных Сгенерированные входные данные Генератор когда Сгенерированные код Компилятор Исполняемый файл Intel Parallel Studio Inspector Отчёт Inspectora о найденных ошибках Отчёт исполняемого фала Скрипт сбора данных Табличка результатов.cpp и.h файлы

Ход выполнения эксперимента Скрипт запуска Удаление временных файлов Генератор входных данных Сгенерированные входные данные Генератор когда Сгенерированные код Компилятор Исполняемый файл Intel Parallel Studio Inspector Отчёт Inspectora о найденных ошибках Отчёт исполняемого фала Скрипт сбора данных Табличка результатов.exe файл

Ход выполнения эксперимента Скрипт запуска Удаление временных файлов Генератор входных данных Сгенерированные входные данные Генератор когда Сгенерированные код Компилятор Исполняемый файл Intel Parallel Studio Inspector Отчёт Inspectora о найденных ошибках Отчёт исполняемого фала Скрипт сбора данных Табличка результатов log1.txt log2.txt

Ход выполнения эксперимента Скрипт запуска Удаление временных файлов Генератор входных данных Сгенерированные входные данные Генератор когда Сгенерированные код Компилятор Исполняемый файл Intel Parallel Studio Inspector Отчёт Inspectora о найденных ошибках Отчёт исполняемого фала Скрипт сбора данных Табличка результатов.csv с результатами

Эксперименты

Описание экспериментов Проводились следующие эксперементы : 1,10,100,1000,2000 ошибок каждого типа ; Комбинации 1000 ошибок из каждого класса ; Комбинации 500 и 1000 ошибок из всех классов.

Параметры машины на которой проводились эксперименты CPU Arch : 1 CPU - 4 Cores CPU PSN : Intel Core2 Extreme CPU 3.00GHz RAM : 4096 MB DDR2 Dual Channel Intel Parallel Inspector Update 2 (build 75522) Intel(R) C++ Compiler for applications running on IA-32, Version 11.1

Ошибки OpenMP

Ошибки с потоками

Ошибки памяти

Таблица соответствий ОшибкаКоличествоНаходит Inspector Количество Thread private error любое Memory Leak 2 Uncorrect Directive 2 любое Data Race Memory Leak 2222 Uncorrect Directive 1 любое Data Race Memory Leak 1212 Absence flush >1 Data Race Количество - 1 Invalid timetable capture mutexes 1 Memory Leak Uninitialized Memory Access 1111 No release of the captured mutex 1 Memory Leak 1 Creating a mutex in the captured state 1 Memory Leak 1 Invalid timetable capture semaphores 1 Memory Leak Uninitialized Memory Access 1111 Semaphore is released fewer times than is captured 1 Memory Leak Uninitialized Memory Access 1111

Ошибки OpenMP

Ошибки с потоками

1000 ошибок при работе с OpenMP

250 ошибок работы с потоками

1000 ошибок работы с памятью

500 ошибок из всех классов

1000 ошибок из всех классов

Вывод Написана система позволяющая тестировать инструмент Intel Inspector на его способность находить ошибки программ В текущей версии благодаря системе выяснены следующие факты Ошибки работы с памятью, и некоторые ошибки при работе с OpenMP и потоками Inspector успешно находит ; На некоторых примерах инспектор помогает найти ошибку, путём выявления побочные ошибок ; Ряд ошибок инспектор не находит совсем ; При многопоточном исследовании Inspector не справляется с большим числом ошибок ; Если ошибка вызывает аварийное завершение выполнения программы, то инспектор тоже прерывает поиск и не может помочь в нахождении ошибок, так как анализ динамический.

??? Спасибо за внимание !