Профилирование как аспект контролируемого выполнения Галатенко В.А., Костюхин К.А., Малиновский А.С. НИИСИ РАН Москва, 2007.

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



Advertisements
Похожие презентации

Advertisements

Многопоточное программирование в OpenMP Киреев Сергей ИВМиМГ.
Учебный курс Объектно-ориентированный анализ и программирование Лекция 4 Трансформация логической модели в программный код Лекции читает кандидат технических.
Разработка параллельных приложений для многоядерных систем С.В. Ковальчук НИИ Наукоемких компьютерных технологий, СПбГУ ИТМО.
Enabling Grids for E-sciencE GILDA Grid Demonstrator Олешко Сергей Петербургский институт ядерной физики РАН.
1 Стандарты и спецификации контролируемого выполнения аппаратно-программных комплексов Галатенко В.А., Костюхин К.А., Шмырёв Н.В., Малиновский А.С. НИИСИ.
Операционная система. Базовые понятия Операционная система – это комплекс программ, обеспечивающий контроль за существованием, распределением и использованием.
Типовые расчёты Растворы
Архитектура операционной системы. Ядро и вспомогательные модули операционной системы При функциональной декомпозиции ОС модули разделяются на две группы:
Учебный курс Объектно-ориентированный анализ и программирование Лекция 7 Методы как средство реализации операций Лекции читает кандидат технических наук.
Вычисление времени запрета обработки внешних прерываний ОС с использованием ячейки МПВ-М Магистерская диссертация Студент: Севастинович Павел, 515 гр.
Название системы - iTest Текущая версия Официальный сайт - Лицензия -GPL v2 Компоненты системы iTestServer серверная.
САОД кафедра ОСУ 1 Основные абстрактные типы данных Схема процесса создания программ для решения прикладных задач ВУ.
Интернет Университет Суперкомпьютерных технологий Система поддержки выполнения OpenMP- программ. Переменные окружения, управляющие выполнением OpenMP-
Ребусы Свириденковой Лизы Ученицы 6 класса «А». 10.
АРХИТЕКТУРА СОВРЕМЕННЫХ ЭВМ Лекция 6: Уровень архитектуры набора команд ВМиК МГУ им. М.В. Ломоносова, Кафедра АСВК Чл.-корр., профессор, д.ф.-м.н. Королёв.
Стадник Е. Г. ФПМИ НГТУ Руководитель: Городничев М.А., м.н.с. ИВМ и МГ СО РАН.
POSIX Threads & OpenMP Общая память Сергей Петрович Нечаев, Сибирский Суперкомпьютерный центр.
Операционные системы Введение (часть 4) 4.Основы архитектуры операционных систем 4.1.Базовые понятия 4.2.Свойства ОС 4.3.Структура ОС 4.4.Логические функции.
Краткий обзор ОСРВ. RTLinux Встраивается в обычный Linux RTLinux kernel находится между ядром Linux и «железом» RTLinux обрабатывет все прерывания независимо.
Транксрипт:

Профилирование как аспект контролируемого выполнения Галатенко В.А., Костюхин К.А., Малиновский А.С. НИИСИ РАН Москва, 2007

2 План доклада Определение контролируемого выполнения Аппаратные возможности современных процессоров по измерению производительности Проект PAPI (Perfomance Application Programming Interface) Архитектура PAPI Высокоуровневый интерфейс PAPI Низкоуровневый интерфейс PAPI Дополнительные возможности PAPI Инструменты, использующие PAPI Организация профилирования в рамках инструментального комплекса СОМ Заключение

3 Контролируемое выполнение

4 Оптимизация кода Оптимизация ключей компилятора Подключение библиотек Профилирование Оптимизация блоков кода и размещение данных для устранения эффекта «бутылочного горлышка»

5 Аппаратные счетчики Набор регистров, хранящих число возникших событий определенного типа Отслеживание этих событий облегчает оптимизацию выполнения программы на данном CPU

6 Примеры событий –Общее число тактов –Общее число команд –Число операций с плавающей точкой –Число тактов простоя функционального устройства –Число промахов при работе с кэш- памятью –Число промахов при работе с виртуальной памятью

7 Цель проекта PAPI Цель проекта PAPI - разработка, стандартизация и реализация переносимого и эффективного API для доступа к аппаратным счетчикам Parallel Tools Consortium project

8 Интерфейсы PAPI PAPI предоставляет следующие интерфейсы для доступа к аппаратным счетчикам: 1.Низкоуровневый интерфейс обеспечивает гибкую работу с группами аппаратных событий (EventSets) 2.Высокоуровневый интерфейс предоставляет возможность запуска, останова и чтения счетчиков, привязанных к определенному списку событий

9 Архитектура PAPI GUI Низкий уровень PAPI Высокий уровень PAPI Аппаратные счетчики Операционная система Расширения ядра Платформо-зависимый уровень PAPI

10 Реализация PAPI Платформы –Linux/x86, Windows 2000 Требуется заплата для ядра Linux, драйвер для Windows –Linux/IA-64 –Sun Solaris/Ultra 2.8 –IBM AIX/Power Требуется pmtoolkit от IBM –SGI IRIX/MIPS –Compaq Tru64/Alpha Ev6 & Ev67 Требуется драйвер от Compaq –Cray T3E/Unicos

11 Реализация PAPI Поддержка языков Си и фортран Обертки для использования в Matlab Официальный сайт:

12 Высокоуровневый интерфейс Простой интерфейс, предназначенный для измерения числа только предопределенных в PAPI событий Использует вызовы низкоуровневого интерфейса Требует меньшей настройки, чем низкоуровневый интерфейс

13 Список функций Си PAPI_start_counters PAPI_read_counters PAPI_stop_counters PAPI_accum_counters PAPI_num_counters PAPI_flops Фортран PAPIF_start_counters PAPIF_read_counters PAPIF_stop_counters PAPIF_accum_counters PAPIF_num_counters PAPIF_flops

14 Использование высокоуровневого интерфейса Int PAPI_num_counters(void) –Инициализирует PAPI (если требуется) –Возвращает число аппаратных счетчиков int PAPI_start_counters(int *events, int len) –Инициализирует PAPI (если требуется) –Связывает множество событий с аппаратными счетчиками –Запускает счетчики int PAPI_library_init(int version) –Функция низкого уровня, вызываемая автоматически

15 Управление счетчиками PAPI _stop_counters(long_long *vals, int alen) –Останавливает счетчики и сохраняет их значения в массив PAPI_accum_counters(long_long *vals, int alen) –Прибавляет значения счетчиков к значениям в массиве и обнуляет счетчики PAPI_read_counters(long_long *vals, int alen) –Считывает значения счетчиков в массив и обнуляет счетчики

16 Пример long long values[NUM_EVENTS]; unsigned int Events[NUM_EVENTS]={PAPI_TOT_INS,PAPI_TOT_CYC}; /* Start the counters */ PAPI_start_counters((int*)Events,NUM_EVENTS); /* What we are monitoring? */ do_work(); /* Stop the counters and store the results in values */ retval = PAPI_stop_counters(values,NUM_EVENTS);

17 Использование низкоуровневого интерфейса Расширенная функциональность и большая эффективность Около 40 функций Получение информации о выполняемом файле и аппаратуре Поддержка мультиплексирования Обработка переполнения счетчика

18 Функциональность Инициализация библиотеки PAPI_library_init, PAPI_thread_init, PAPI_shutdown Функции измерения времени PAPI_get_real_usec, PAPI_get_virt_usec PAPI_get_real_cyc, PAPI_get_virt_cyc Функции получения информации Служебные функции

19 Множества событий Множество событий содержит следующую информацию: –Какие счетчики к каким событиям привязаны –Последние значения счетчиков –Статус множества (запущено/приостановлено) –Параметры множества (область действия, степень детализации и т.п.)

20 Операции над множествами событий Создание/удаление множества событий PAPI_create_eventset, PAPI_add_event[s], PAPI_rem_event[s], PAPI_destroy_eventset Управление профилированием PAPI_start, PAPI_stop, PAPI_read, PAPI_accum Управление состоянием множества событий PAPI_state, PAPI_list_events,...

21 Простой пример #include "papi.h #define NUM_EVENTS 2 int Events[NUM_EVENTS]={PAPI_FP_INS,PAPI_TOT_CYC}, EventSet; long_long values[NUM_EVENTS]; /* Initialize the Library */ retval = PAPI_library_init(PAPI_VER_CURRENT); /* Allocate space for the new eventset and do setup */ retval = PAPI_create_eventset(&EventSet); /* Add Flops and total cycles to the eventset */ retval = PAPI_add_events(&EventSet,Events,NUM_EVENTS); /* Start the counters */ retval = PAPI_start(EventSet); do_work(); /* What we want to monitor*/ /*Stop counters and store results in values */ retval = PAPI_stop(EventSet,values);

22 Области действия счетчиков int PAPI_set_domain(int domain); –PAPI_DOM_USER режим пользователя –PAPI_DOM_KERNEL режим ядра –PAPI_DOM_OTHER обработка исключений –PAPI_DOM_ALL Все, выше перечисленное Наличие конкретной области действия зависит от ОС

23 Степень детализации профилирования int PAPI_set_granularity(int granul); –PAPI_GRN_THR поток управления –PAPI_GRN_PROC процесс –PAPI_GRN_PROCG группа процессов –PAPI_GRN_SYS текущий процессор –PAPI_GRN_SYS_CPU все процессоры –PAPI_GRN_MIN (=PAPI_GRN_THR) –PAPI_GRN_MAX (=PAPI_GRN_SYS_CPU) Требует поддержки со стороны ОС

24 Использование PAPI с потоками управления После вызова PAPI_library_init надо указать функцию, возвращающую идентификатор потока Pthreads retval=PAPI_thread_init(pthread_self, 0); OpenMP retval=PAPI_thread_init(omp_get_thread_num, 0); Каждый поток создает собственные группы событий и их привязку к аппаратным счетчикам

25 Мультиплексирование Мультиплексирование позволяет использовать один аппаратный счетчик для подсчета нескольких событий PAPI_multiplex_init(); инициализирует мультиплексирование PAPI_set_multiplex (int *EventSet); включает мультиплексирование для данного множества

26 Переполнение счетчиков PAPI позволяет вызывать пользовательский обработчик в случае переполнения аппаратного счетчика int PAPI_overflow (int EventSet, int EventCode, int threshold, int flags, PAPI_overflow_handler_t handler); задает пользовательский обработчик

27 Инструменты, использующие PAPI DEEP/PAPI (Pacific Sierra) TAU (Allen Mallony, U of Oregon) SvPablo (Dan Reed, U of Illinois) Cactus (Ed Seidel, Max Plank/U of Illinois) Vprof (Curtis Janssen, Sandia Livermore Lab) Cluster Tools (Al Geist, ORNL) DynaProf (Phil Mucci, UTK)

28 Организация профилирования в рамках инструментального комплекса СОМ

29 Библиотека профилирования Реализует дополненный вариант стандарта PAPI (добавлены функции настройки параметров профилирования и управления сбором событий в среде ППС) Позволяет инструментованному приложению взаимодействовать с другими компонентами комплекса СОМ

30 Вызовы БП void PAPI_set_buffer_size (int size) Устанавливает размер кольцевого буфера в size слов int PAPI_get_buffer_size () Возвращает размер кольцевого буфера void PAPI_set_buffer_addr (int address) Устанавливает адрес кольцевого буфера равным address int PAPI_get_buffer_addr () Возвращает адрес кольцевого буфера int PAPI_event_create (int event_number, int event_data) Сохраняет номер события event_number, время его возникновения (значение счетчика) и ассоциированные с событием данные event_data в кольцевой буфер. Функция использует вызовы PAPI для получения значения счетчика. Возвращает PAPI_OK.

31 if (PAPI_library_init (PAPI_VER_CURRENT) != PAPI_VER_CURRENT) { exit (1); } /*... */ PAPI_event_create (1, 0); /* Событие с номером 1 соответствует времени ожидания данных с ПД */ ge_wait (EV_READY); PAPI_event_create (1, 0); PAPI_event_create (2, 0); /* Событие с номером 2 соответствует времени обработки данных */ do_calcs (); PAPI_event_create (2, 0); ge_set (EV_FINISHED); /*... */

32 Дамп памяти процессора ППС с сохраненной информацией о событиях профилирования Area SP:A y: c y: y: y: y:

33 Графический компонент

34 Группировка по функциям

35 Выводы Стандартизованное, переносимое решение для кросс-платформенной оптимизации Наличие библиотек для основных современных платформ Хорошая документированность и простота использования