Скачать презентацию
Идет загрузка презентации. Пожалуйста, подождите
Презентация была опубликована 11 лет назад пользователемМаргарита Телелюева
1 Intel Parallel Studio Участники : Царёв Михаил Ахматнуров Динар Калачёв Артём Руководитель : Козинов Евгений
2 Происходит рост числа процессоров и ядер – необходимы специальные программы
3 Отладка параллельных программ Тяжело. Очень.
4 Intel Parallel Studio Корпорация Intel предлагает разработчикам Microsoft Visual Studio C/C++ универсальный инструмент параллельного программирования – Intel Parallel Studio.
5 Постановка задачи Целью данной работы является исследование возможностей Intel Parallel Studio. А именно : Предназначение инструментов ; Выявление заявленных возможностей инструмента ; Проведение « нагрузочных » испытаний инструментов. В проекте основной упор был сделан на исследование возможностей Intel® Parallel Inspector.
6 Intel® Parallel Inspector Средство поиска ошибок памяти и многопоточности
7 Ход выполнения работы Выделение классов ошибок ; Создание генератора кода ; Автоматизация запуска : Создание генератора входных данных ; Написание скриптов запуска ( запуск генераторов, компилятора, Inspector). Написание скриптов сбора результатов.
8 Классы ошибок
9 Все рассматриваемые ошибки можно разбить на 3 класса Ошибки возникающие при работе с технологией OpenMP; Ошибки возникающие при работе с потоками ; Общие ошибки работы с памятью.
10 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
11 Потоки НазваниеОписаниеПо документации 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 одновременно пытаются модифицировать одну и ту же переменную
12 Ошибки работы с памятью НазваниеОписаниеПо документации 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) Повторное освобождение памяти
13 Генератор ошибок
14 Генератор кода
15 Входные данные Общий формат : + + +… 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
16 Автоматизация запуска
17 Ход выполнения эксперимента Скрипт запуска Удаление временных файлов Генератор входных данных Сгенерированные входные данные Генератор когда Сгенерированные код Компилятор Исполняемый файл Intel Parallel Studio Inspector Отчёт Inspectora о найденных ошибках Отчёт исполняемого фала Скрипт сбора данных Табличка результатов
18 Ход выполнения эксперимента Скрипт запуска Удаление временных файлов Генератор входных данных Сгенерированные входные данные Генератор когда Сгенерированные код Компилятор Исполняемый файл Intel Parallel Studio Inspector Отчёт Inspectora о найденных ошибках Отчёт исполняемого фала Скрипт сбора данных Табличка результатов Кол - во и названия ошибок
19 Ход выполнения эксперимента Скрипт запуска Удаление временных файлов Генератор входных данных Сгенерированные входные данные Генератор когда Сгенерированные код Компилятор Исполняемый файл Intel Parallel Studio Inspector Отчёт Inspectora о найденных ошибках Отчёт исполняемого фала Скрипт сбора данных Табличка результатов Входные Данные
20 Ход выполнения эксперимента Скрипт запуска Удаление временных файлов Генератор входных данных Сгенерированные входные данные Генератор когда Сгенерированные код Компилятор Исполняемый файл Intel Parallel Studio Inspector Отчёт Inspectora о найденных ошибках Отчёт исполняемого фала Скрипт сбора данных Табличка результатов.cpp и.h файлы
21 Ход выполнения эксперимента Скрипт запуска Удаление временных файлов Генератор входных данных Сгенерированные входные данные Генератор когда Сгенерированные код Компилятор Исполняемый файл Intel Parallel Studio Inspector Отчёт Inspectora о найденных ошибках Отчёт исполняемого фала Скрипт сбора данных Табличка результатов.cpp и.h файлы
22 Ход выполнения эксперимента Скрипт запуска Удаление временных файлов Генератор входных данных Сгенерированные входные данные Генератор когда Сгенерированные код Компилятор Исполняемый файл Intel Parallel Studio Inspector Отчёт Inspectora о найденных ошибках Отчёт исполняемого фала Скрипт сбора данных Табличка результатов.exe файл
23 Ход выполнения эксперимента Скрипт запуска Удаление временных файлов Генератор входных данных Сгенерированные входные данные Генератор когда Сгенерированные код Компилятор Исполняемый файл Intel Parallel Studio Inspector Отчёт Inspectora о найденных ошибках Отчёт исполняемого фала Скрипт сбора данных Табличка результатов log1.txt log2.txt
24 Ход выполнения эксперимента Скрипт запуска Удаление временных файлов Генератор входных данных Сгенерированные входные данные Генератор когда Сгенерированные код Компилятор Исполняемый файл Intel Parallel Studio Inspector Отчёт Inspectora о найденных ошибках Отчёт исполняемого фала Скрипт сбора данных Табличка результатов.csv с результатами
25 Эксперименты
26 Описание экспериментов Проводились следующие эксперементы : 1,10,100,1000,2000 ошибок каждого типа ; Комбинации 1000 ошибок из каждого класса ; Комбинации 500 и 1000 ошибок из всех классов.
27 Параметры машины на которой проводились эксперименты 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
28 Ошибки OpenMP
29 Ошибки с потоками
30 Ошибки памяти
31 Таблица соответствий ОшибкаКоличествоНаходит 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
32 Ошибки OpenMP
33 Ошибки с потоками
34 1000 ошибок при работе с OpenMP
35 250 ошибок работы с потоками
36 1000 ошибок работы с памятью
37 500 ошибок из всех классов
38 1000 ошибок из всех классов
39 Вывод Написана система позволяющая тестировать инструмент Intel Inspector на его способность находить ошибки программ В текущей версии благодаря системе выяснены следующие факты Ошибки работы с памятью, и некоторые ошибки при работе с OpenMP и потоками Inspector успешно находит ; На некоторых примерах инспектор помогает найти ошибку, путём выявления побочные ошибок ; Ряд ошибок инспектор не находит совсем ; При многопоточном исследовании Inspector не справляется с большим числом ошибок ; Если ошибка вызывает аварийное завершение выполнения программы, то инспектор тоже прерывает поиск и не может помочь в нахождении ошибок, так как анализ динамический.
40 ??? Спасибо за внимание !
Еще похожие презентации в нашем архиве:
© 2024 MyShared Inc.
All rights reserved.