1 / 35

Профилирование как аспект контролируемого выполнения

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

kaya
Download Presentation

Профилирование как аспект контролируемого выполнения

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. Профилирование как аспект контролируемого выполнения Галатенко В.А., Костюхин К.А., Малиновский А.С. НИИСИ РАН Москва, 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 http://www.ptools.org/

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

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

  10. Платформы 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 Реализация PAPI

  11. Реализация PAPI • Поддержка языков Си и фортран • Обертки для использования в Matlab • Официальный сайт: http://icl.cs.utk.edu/projects/papi/

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

  13. ФортранPAPIF_start_countersPAPIF_read_countersPAPIF_stop_countersPAPIF_accum_countersPAPIF_num_countersPAPIF_flopsФортранPAPIF_start_countersPAPIF_read_countersPAPIF_stop_countersPAPIF_accum_countersPAPIF_num_countersPAPIF_flops Список функций • СиPAPI_start_countersPAPI_read_countersPAPI_stop_countersPAPI_accum_countersPAPI_num_countersPAPI_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_usecPAPI_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) http://www.psrv.com/deep_papi_top.html • TAU (Allen Mallony, U of Oregon) http://www.cs.uoregon.edu/research/paracomp/tau/ • SvPablo (Dan Reed, U of Illinois) http://vibes.cs.uiuc.edu/Software/SvPablo/svPablo.htm • Cactus (Ed Seidel, Max Plank/U of Illinois) http://www.aei-potsdam.mpg.de • Vprof (Curtis Janssen, Sandia Livermore Lab) http://aros.ca.sandia.gov/~cljanss/perf/vprof/ • Cluster Tools (Al Geist, ORNL) • DynaProf (Phil Mucci, UTK) http://www.cs.utk.edu/~mucci/dynaprof/

  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 ----- 2-SP:A y:10070000..cy:10070000 1 2 0y:10070003 1 34698 0 y:10070006 2 34699 0 y:10070009 2 145045 0

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

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

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

More Related