Очередная статья к 20-летию Центра разработки Intel в Нижнем Новгороде рассказывает об Intel VTune Profiler – далеко известном и высоко полезном средстве анализа производительности кода программного обеспечения. История VTune отражает все этапы развития Intel в России и даже чуть больше – ведь этот продукт старше нижегородского офиса. Сергей Папков, один из первых руководителей разработки продукта с российской стороны, рассказал нам обо всех перипетиях становления и развития VTune. Ну, и конечно, не забыли мы и о сегодняшнем дне проекта.

Рождение и первые шаги на российской земле


Итак, по отношению к нижегородскому офису Intel профилировщик производительности VTune является не родным ребенком, а приёмным. Но это – как раз тот случай, когда не важно, кто родил, а важно, кто воспитал и вырастил.

Установить происхождение названия VTune сейчас, за давностью лет, уже нереально, но самая правдоподобная версия — это “V”, означающее победу (victory) и tune, означающее не только «настройку», но и мелодию, гармонию. VTune зародился в американских лабораториях Intel в первой половине 90-х годов. Первоначально из всех средств анализа в нем был только самплинг (sampling). Как известно, в процессорах x86 есть встроенный блок слежения за производительностью — Performance Monitoring Unit (PMU); с его помощью можно задать определенные счетчики микроархитектурных событий – выполненных процессором инструкций, промахов кэша, данных о предсказателе ветвлений и т.п. Далее, сопоставив эти снимаемые с PMU метрики с выполняемым кодом, можно получить данные о том, насколько эффективно работает конкретная программа, какие в ней есть «горячие точки» (hotspots). Таков был самый первый функционал VTune Performance Analyzer for Windows (как тогда назывался продукт). Как говорится, строго, сурово и ничего лишнего. Но зато многого не хватало.


Чудом сохранившаяся в Нижегородском офисе коробочная версия VTune 2.1, прямиком из 90-х. Японская локализованная версия, что еще интереснее

В ходе дальнейшего развития и выхода новых версий у профилировщика появился графический интерфейс, который со временем становился функциональнее и удобнее. Сначала участки программ визуализировались в отчёте VTune в виде таблицы названий функций, потом появился Source View, то есть отслеженные метрики можно было не просто ассоциировать с функцией, а найти участок кода этой функции, который является хот-спотом. Далее к процессу разработки продукта присоединилась израильская команда, занимавшаяся в том числе инструментацией (вставкой внешних анализирующих функций непосредственно в исходный код программы) и обработкой данных.

В результате к началу двухтысячных VTune представлял из себя полноценный коммерческий продукт, поддерживающий уже несколько языков: C++, Fortran и даже Java. С точки зрения представления собираемых данных VTune также имел средство графического представления последовательностей вызовов функций (Call Graph), а также инструмент визуализации программных счетчиков операционной системы (Counter Monitor), базировавшийся на утилите Windows PerfMon. К тому времени версия VTune уже достигла 4.х, а количество пользователей по всему миру трудно поддавалось подсчету.


Нижегородская команда NSTL за три месяца до присоединения к Intel, но уже работающая над VTune

Именно в этот момент в работу включилась российская команда разработчиков, первоначально в лаборатории NSTL, впоследствии ставшей основой нижегородского офиса Intel. С нашей стороны проект вела Юлия Федорова, ее команда изначально составляла человек 15, а через два года выросла в 2 раза.

Развитие и метаморфозы


8 апреля 2002 года вышел Intel VTune 6.0 для Windows – в эту версию вошли наработки, сделанные в Нижнем Новгороде: сильно обновлённый графический интерфейс, который, например, сделал Call Graph информативнее, а работу с ним удобнее, а также дополнительные средства анализа собираемой информации. Через несколько месяцев вышла первая версия для Linux, пока без графического интерфейса. В таком виде VTune выпускался еще лет 7-8 и стал незаменимым помощником для тех, кто бьется за каждую миллисекунду выполнения кода.


Нижегородские команды VTune и Intel Debugger во время визита коллег из США и Израиля

Примерно в 2004 году с появлением массовой многоядерности в процессорах, потребовавшей быстрого развития технологий параллельного программирования, от команды VTune отделились группы разработчиков, которые стали заниматься другими инструментами профилировки с говорящими названиями: Intel Thread Checker (Поиск ошибок в параллельных программах) и Intel Thread Profiler (Профилировщик производительности многопоточных программ).

У этих продуктов тоже была своя предыстория. В марте 2000 года Intel купила американскую компанию KAI (Kuck and Associates), созданную в далеком 1977 известным программистом и ученым Дэвидом Куком (David J. Kuck) – он до сих пор работает в Intel и имеет звание Intel Fellow. KAI разрабатывала два продукта: Assure и Guide View, на их основе были созданы Thread Checker и Thread Profiler.

Так продолжалось до 2006 года, когда в результате программы реорганизации Thread Profiler вошел в состав VTune, а Thread Checker вместе с Memory Checker образовали Intel Inspector. А в 2007 многочисленные и разнородные инструменты разработки объединили в один набор, названный Intel Parallel Studio. Его первая версия вышла в 2009 году. В ней VTune Performance Analyzer поменял своё полное название на Intel VTune Amplifier.


Одна из первых инженерных face-to-face встреч в Санта-Кларе, где детально обсуждали новый пользовательский интерфейс — тот самый, что увидел свет в апреле 2002

В процессе работы команда VTune активно экспериментировала с процессом разработки продукта. Например, в ранние годы схема выпуска VTune представляла собой классический «водопад», когда каждый релиз занимал много времени. В 2008-2009 году разработчики перешли на Agile. Конечно, с нынешней точки зрения и согласно последним научным достижениям, это был не совсем Agile, тем не менее, команда занималась оперативным планированием внедрения функционала – не через год или квартал. В таком режиме она работает уже более 10 лет – это одна из самых ранних реализаций Agile в Intel.

От вчера до завтра


В конце нулевых появилась идея переделать VTune полностью. Как это часто случается после долгих лет разработки, продукт стал громоздким, оброс «костылями» и невостребованным функционалом. Для нового воплощения даже придумали рабочее название – VTune New Architecture (VNA). Однако VNA еще находился на стадии внутренних прототипов, когда стартовал проект Parallel Studio, и переделки пришлось отложить, впрочем, буквально через несколько лет дело было доведено до конца, хотя уже несколько в ином виде.


Рабочий процесс Intel VTune

Вообще, задача измерения производительности имеет прямую аналогию с квантовой механикой – чем точнее мы хотим измерить производительность, тем большую погрешность (а значит и неопределенность) в полученные результаты мы вносим самим фактом измерения. Преодолеть это ограничение крайне непросто, но нижегородские инженеры Intel над этим работают, постоянно повышая объективную точность измерений.

В последние десятилетия резко возросло количество задач, связанных с высокопроизводительными вычислениями – high performance computing, HPC, в том числе, выполняемых на кластерах или в облачных инфраструктурах. Для таких сценариев в VTune предусмотрели «облегчённый» вариант работы, без установки всей оболочки. Через интерфейс командной строки можно собирать данные на узлах кластера, а с помощью специально реализованного на базе HTML легкого графического интерфейса – просматривать данные в браузере.

Команда VTune активно сотрудничает со многими научными учреждениями и промышленными предприятиями по всему миру, помогая исследователям и инженерам выжать максимум из имеющихся в их распоряжении вычислительных мощностей. Круг задач, решению которых помогает VTune, предельно широк: это построение атмосферных и геологических моделей, аэродинамика, генетика, молекулярная физика, промышленное моделирование, краш-тесты и так далее. Приведем только один пример подобного сотрудничества.


Intel VTune — функционал Source View

Компания, производящая авиационные двигатели, готовила к выпуску новую модель. Для начала производства модель должна пройти сертификацию, что, в свою очередь, порождает необходимость в испытаниях на прочность. Требуется проверить, что при отрыве одной или двух лопаток турбины гондола двигателя останется невредимой. Каждое испытание стоит чрезвычайно дорого – десятки миллионов долларов, при этом не факт, что с первого раза все получится. Выход – построить математическую модель процесса, которая и была настроена и оптимизирована в том числе с помощью инструментов Intel. Результат – с первого раза получилось построить двигатель, который успешно прошел испытания.

Также, еще до эпохи бурного развития гетерогенных вычислений стало понятно, что профилировки исключительно CPU недостаточно для общего понимания производительности приложения – нужна информация обо всей системе. Именно поэтому в VTune появилась возможность получить данные обо всей платформе исполнения, а именно – о метриках GPU (производства Intel), пропускной способности сети, использовании памяти и диска (компонент Platform Analyzer). А с 2019 года компонент System Analyzer показывает эти данные почти в реальном времени.

Сегодняшний день


По состоянию на текущий момент Intel VTune является частью основного пакета инструментов разработчика ПО Intel oneAPI Toolkit, специализированного набора для создателей аппаратных и программных систем Intel System Bring-up Toolkit (доступен при заключении с Intel договора о конфиденциальности CNDA), кроме того, доступен к загрузке и отдельно – Intel VTune Profiler.


Серверная реализация Intel VTune

Использовать VTune можно как в его собственной графической оболочке (Windows, Linux, macOS), так и в командной строке, а также в интеграции с Microsoft Visual Studio и Eclipse.
VTune собирает данные с удаленных машин, работающих под управлением Windows, Linux (включая Wind River и Yocto), FreeBSD и Android; корректно работает и с виртуальными машинами; поддерживает профилировку кода, написанного не только на C/C++ и Fortran, но и на C#, OpenCL, Data Parallel C++, Python, Google Go, Java, ассемблере и всех возможных комбинациях этих языков.

VTune также показывает эффективность распараллеливания кода с помощью нативных потоков, OpenMP, Intel Threading Building Blocks, MPI.

В конце прошлого года вышла новая версия Intel VTune Profiler 2021, вобравшая в себя большое количество обновлений. Перечислим главные из них:

  • Профилирование издержек выгрузки данных на GPU (GPU offload) для определения целесообразности перемещения данных.
  • Поддержка профилировки приложений на новых дискретных графических картах Intel (Iris Xe MAX).
  • В анализ GPU добавлена поддержка DPC++ и multi-GPU, метрик SIMD, сделана новая диаграмма использования памяти и упрощенный драйвер.
  • Появился новый тип анализа производительности Performance Snapshot (Краткий Анализ), с которого очень удобно начинать анализ проблем с производительностью приложений.
  • Новый тип анализа производительности Anomaly Detection (Обнаружение Аномалий), позволяющий разобраться с причинами отклонений в производительности в часто повторяющихся сходных участках кода – например, итерациях одного цикла
  • В анализ FPGA добавлены новые метрики и их ассоциация с исходным кодом.
  • Поддержка контейнеризации — LXC, Docker, Mesos, Singularity, причём, возможны варианты нахождения профилировщика и профилируемого приложения как в одном контейнере, так и «по разные стороны его границ».
  • Дополнительные возможности исследования энергопотребления приложений на CPU и GPU.

И так далее! Развитие VTune продолжается. Сегодня Intel VTune используется огромным количеством разработчиков для профилировки производительности одно- и многопоточных приложений, работающих на разнообразных хост-платформах: CPU, GPU, FPGA. Это удобно и эффективно. Не говоря уж о том, что бесплатно, включая коммерческое использование. А еще – сделано в Центре разработки Intel в Нижнем Новгороде.

Полезные ссылки (на английском):


Пользуясь случаем, приглашаем вас на обзорный вебинар по Intel VTune Profiler, который состоится 1 апреля в 11:00 — и это не шутка. Зарегистрироваться на вебинар.