В последние полгода на меня активно валятся предложения «пощупать» Intel Concurrency Checker, как напрямую из партнерской программы Intel, так и косвенно, например, в блоге Сергея Вильянова (здесь). Я довольно долго отказывался от этого заманчивого предложения. И вот недавно я сдался. Под катом — мой опыт использования этого инструмента. Сразу скажу, что меня инструмент оставил в полном недоумении. Почему? Сейчас расскажу. Заранее отвечу на вопрос, что этот пост делает в блоге Интел. Я думаю высказывать замечания к продукции компании лучше здесь, а не в личном блоге.
Итак, официальная страница на сайте Intel гласит:
Средство Intel Concurrency Checker для оценки производительности многоядерных процессоров. Используйте средство Intel Concurrency Checker, чтобы оценить, насколько хорошо масштабируется производительность вашего приложения в системе на базе многоядерного процессора.
Вроде бы звучит заманчиво.
Потом коллега предложил открыть исходный код страницы и уже в нем попробовать найти ссылку на загрузку. К счастью такой полухакерский метод позволил получить мне эту программу. К удивлению, я скачал не дистрибутив, а java-приложение. Пришлось еще самому скачивать и Java. Ладно, скачал, запустил.
«Что бы мне проверить на многозадачность?», — подумал я и запустил Starcraft 2 :-). Нет, не подумайте, что мне сразу захотелось поиграть. Дело в том, что для оценки приложения в Concurrency Checker это приложение необходимо запустить и дать ему поработать 30 секунд. Concurrency Checker в это время считает загрузку процессора, использование ядер и т.п. Так вот по результатам измерения Starcraft 2 я получил следующую картинку.
Хотя из таблички можно догадаться, что Starcraft 2 является многоядерным приложением, инструкция к Concurrency Checker на русском языке все-таки не повредит.
В разработчиках Starcraft 2 никто и не сомневался. Поэтому интересно же оценить свое приложение, например, (ага) статический анализатор кода PVS-Studio. Поскольку PVS-Studio работает как модуль расширения (плагин) для Microsoft Visual Studio, то фактически надо оценивать работу этой среды.
Результат получился ожидаемый.
Как и предполагалось, процент загрузки процессора в среднем составил 1,61%, так как сама среда Visual Studio практически и не работала. Ведь модуль анализа кода PVS-Studio.exe — это отдельное приложение, которое запускается для каждого анализируемого файла (со своим набором параметров).
Может быть, если запустить только сам модуль анализа PVS-Studio.exe (например, на выполнение внутренних тестов) результат будет неожиданным?
Нет, результат опять ожидаемый. Модуль анализа PVS-Studio.exe — это однопоточное приложение без какого-либо параллелизма. Это абсолютно логично и понятно, так как в анализаторе параллелизм достигается за счет анализа нескольких файлов параллельно, то есть за счет параллельного запуска нескольких версий PVS-Studio.exe. И, конечно же, такую конфигурацию Concurrency Checker «не распознает» и показывает, что все плохо.
Ладно, дадим инструменту задачку попроще. Проверим, насколько эффективно используются несколько ядер в архиваторе 7z.
В табличке видно, что 7z очень круто управляется с несколькими ядрами. Но у меня вопрос! Разве из Task Manager не видно того же самого?
Вроде видно… Так что для меня, честно говоря, осталось загадкой, кому нужна программа Intel Concurrency Checker. И вот почему:
- Используется ли несколько ядер или нет, можно всегда посмотреть в Task Manager.
- Команда программистов, разрабатывающая тот или иной проект всегда сама без всяких инструментов знает, как в их коде дела с параллельностью. Если никто никогда «не параллелил» код, то и не откуда взяться поддержке нескольких ядер.
- Для более мощного анализа параллелизма и поиска узких мест нужны более другие инструменты типа Intel VTune — тоже всем понятно.
Кстати программа позволяет сохранить лог измерений в Intel и получить комментарий специалиста. Но и с этим какая-то неясность. В случае с нашим анализатором PVS-Studio если я отошлю лог измерений Visual Studio, то это будет неправильный замер. Если я отошлю лог замеров самого модуля анализа — так я и так знаю, что он однопоточный. Не понятно...
Правда никакой лог отослать мне не удалось, так как в разделе сайта «Отправить отчет» я получал такую же белую картинку, как и на первом рисунке.
Вопросы к этой программе у меня связаны с тем, что текущая версия имеет номер аж 3.5! Что удивительно, так как чего в ней можно развивать не понятно. Более того, я уж думал, что она как появилась, так сразу и 3.5 стала. Но нет, в 2008 году, например, была версия 2.1 этого инструмента. Так что она имеет довольно большой жизненный цикл (к удивлению).
Мое видение этой программы такое. Маркетологи из Intel придумали классную идею — легкая оценка уровня использования нескольких ядер в программе. Пришли к программистам, попросили сделать. Программисты сделали, так как спорить — себе дороже. В итоге продукт есть, работает, но кому он нужен и зачем — не понятно? Может быть маркетологам, чтобы рисовать красивые графики об уровне использования ядер?
P.S. Казалось бы, причем здесь Интел? В отличие от Первого канала, на котором никто никогда не критикует себя, в технологических компаниях полезно получить критику от человека с незамыленным взглядом. И может быть Интел поправит позиционирование этой программы, сказав для чего же она нужна. А может окажется, что не очень-то она и нужна :-).