Intel: инструменты для оптимизации приложений

Данная статья расскажет об основных инструментах для разработки, отладки и профилировки кода под процессоры Intel. Материал носит ознакомительный характер. Более подробно технические вопросы будут разобраны в других статьях.

При разработке приложений под процессоры Intel вам могут понадобиться следующие инструменты:

Intel VTune 7.0 или Intel VTune Enterprise;
Intel Thread Checker;
Intel C++ Compiler или Intel Fortran.

О них нам любезно согласился рассказать Алексей Одиноков, директор Центра Intel по разработке ПО в Нижнем Новгороде.


TanaT: Чем отличаются пакеты VTune 7.0 и VTune Enterprise 2.0 между собой?

Алексей Одиноков: Пакет VTune версии 7.0, совместимый со средой разработки Microsoft Visual Studio .NET, дает разработчикам возможность оптимизировать приложения и драйверы устройств под ОС Windows Server 2003 и платформ под управлением ОС Windows на базе процессоров Intel.
Пакет VTune Enterprise версии 2.0 для Web-приложений, .NET Edition позволяет находить "узкие места" в многоуровневых приложениях, работающих на комплексах систем с процессорами Intel, и предоставляет возможности анализа работы Web-инфраструктуры на уровне транзакций и диагностики на уровне объектов .NET.


TanaT: Можете рассказать о VTune 7.0?

Алексей Одиноков: Анализатор производительности VTune Performance Analyzer собирает, анализирует и отображает данные о производительности программного обеспечения в самом широком диапазоне - от уровня всей системы до уровня отдельной функции, модуля или команды в исходном коде. Этот пакет помогает разработчикам упростить выявление потенциальных "узких мест" и существенно повысить производительность и конкурентоспособность их приложений.
VTune Performance Analyzer позволяет разработчикам, пользующимся Microsoft Visual Studio .NET, более тщательно исследовать исходный код приложений, дабы заранее устранить "узкие места", а затем оптимизировать код так, чтобы скомпилированное приложение работало на платформах Intel с максимально возможной производительностью. Пакет располагает пользовательским интерфейсом и усовершенствованной функциональной схемой, в него включена поддержка многопоточного режима, благодаря которой разработчики могут производить отладку приложений для обеспечения полной совместимости с передовой технологией многопоточной обработки команд Hyper-Threading. Интегрированный компонент Intel Tuning Assistant предоставляет разработчику подробную информацию о системе и исходном коде, основанную на показателях работы операционной системы и процессора.


TanaT: Требуются ли какие-нибудь специальные знания для того, чтобы пользоваться VTune 7.0?

Алексей Одиноков: Если у разработчика нет опыта работы с VTune, имеет смысл начать с тренинга, который доступен на сайте https://shale.intel.com/softwarecollege/CourseCatalog.asp?CatName=Performance%20Analyzers.


TanaT: Какие средства есть для разработки приложений, использующих технологию HyperThreading?

Алексей Одиноков: Вряд ли имеет смысл говорить о "специальных" средствах для разработки кода именно под технологию НТ. С точки зрения программного обеспечения логика работы с этой технологией практически не отличается от классического случая SMP (Symmetric Multi-Processor) системы. Пожалуй, имеет смысл говорить о некоторых различиях лишь на уровне операционной системы, т.к. не все из них в равной степени эффективно работают на обычных многопроцессорных машинах и системах с НТ. Например, Windows XP гораздо эффективней использует возможности НТ, чем предыдущие ОС, построенные на ядре NT (Windows NT 4, Windows 2000), тогда как разница для классического случая SMP гораздо менее существенна.
В остальном же, в грубом приближении с точки зрения средств разработки ПО, технология Hyper-Threading может рассматриваться как частный случай SMP. Поэтому все многочисленные инструментальные средства для разработки, отладки и профилирования многопотоковых приложений от различных производителей могут применяться и для НТ. Включая, разумеется, такие программные продукты Intel как компиляторы С/C++ и Fortran с поддержкой стандарта OpenMP, Intel VTune Performance Analyzer, Intel Threading Tools и Intel Performance Libraries.


TanaT: Расскажите, пожалуйста, о Thread-Checker?

Алексей Одиноков: Инструмент призван помочь программистам в выявлении труднораспознаваемых причин сбоев в работе приложений для систем на базе процессоров Intel Pentium 4 и Intel Xeon с технологией Hyper-Threading. В программном средстве Intel Thread Checker применен усовершенствованный механизм обнаружения ошибок, отслеживающий процесс исполнения программ и способный распознать причины сбоев в обработке потокового кода всего за несколько часов вместо дней или даже недель, которые уходят на подобный поиск с применением традиционных инструментальных способов и средств, когда программист вынужден наугад ставить в исходном коде "ловушки". Устраняя необходимость поиска ошибок вслепую, программное средство Intel Thread Checker распознаёт именно те строки кода, которые служат причиной сбоев в его потоковой обработке, при этом возникшие проблемы классифицируются по категориям - от ошибок до предупреждений, а переменные, строки кода и список последовательности вызовов выводятся на экран для простоты их анализа.


TanaT: Вы не могли бы рассказать о технологии HyperThreading? За счет чего удается добиться такого прироста производительности?

Алексей Одиноков: Благодаря технологии HT один физический процессор воспринимается операционной системой и приложениями как два логических процессора. Приложение, разделенное на <потоки>, способно значительно выиграть в плане производительности благодаря применению технологии HT. К таким приложениям, например, относятся Microsoft Windows XP, Adobe Photoshop, Windows Media Encoder 9-ой версии и NewTek Lightwave. Технология HT также позволяет повысить производительность системы в многозадачных средах при работе с приложениями, не разделенными на потоки. Применение в процессорах для настольных ПК технологии Hyper-Threading позволяет значительно повысить их производительность и не требует серьезной модернизации системы. Отметим, что такие традиционные методы, применяемые в микроархитектуре для повышения производительности, как увеличение объема кэш-памяти или числа исполнительных блоков для выполнения операций с плавающей запятой, увеличивают размер микросхемы на 20-30% и могут обеспечить повышение производительности в среднем на 10%. В случае с технологией HT эти цифры находятся в обратном соотношении. Параллельное исполнение команд в технологии HT обеспечивает повышение производительности до 25% при увеличении размера микросхемы менее чем на 5%.


Технология Hyper-Threading помогает заполнить периоды простоя процессора:

Доступ к памяти (например, обработка/редактирование цифровых фотографий);

Цепи взаимозависимых инструкций с большими задержками (например, видеокодирование/перекодирование);

Ошибки предсказания ветвлений (например, отслеживание лучей в 3D-графике);

Одновременное ведение вычислений с целыми числами и с плавающей запятой.



Картинка иллюстрирует, почему размер микросхемы при использовании НТ увеличивается незначительно. Дело в том, что дублировать нужно лишь Архитектруное Состояние (AS), а не все блоки процессора

TanaT: Востребован ли еще сегодня компилятор языка Fortran?

Алексей Одиноков: Фортран был, есть, и, по всей видимости, еще долго будет оставаться одним из наиболее популярных языков программирования в таких областях, как научные расчеты и высокопроизводительные вычисления (High Performance Computing). Например, большинство прогностических моделей, используемых Гидрометцентром России, реализовано именно на этом языке, включая и новейшие разработки, оптимизируемые под архитектуру Intel Itanium2. Как известно, ГВЦ Росгидромета сегодня располагает кластером из четырех 4-процессорных серверов на базе Intel Itanium 2, подробности - в нашем пресс-релизе.
Иллюстрацией востребованности этого компилятора служит также тот факт, что объем продаж Intel Fortran Compiler лишь немного уступает продажам Intel C/C++ Compiler. Планируемое же объединение Intel Fortran и Compaq Visual Fortran в Intel Visual Fortran 8.0 может существенно увеличить количество пользователей компилятора Intel с этого языка программирования.


TanaT: Как пользоваться Intel C/C++ Compiler?

Алексей Одиноков: Это довольно просто. Давайте рассмотрим пример приложения "Hello World". Предположим, вы создали файл hello.cpp с таким содержанием:

#include <iostream>
using namespace std;
int main()
{
cout << “Hello World!” << endl;
return 0;
}

Теперь вы можете легко откомпилировать приложение, например, в режиме командной строки. Для этого запустите Start->Programs->Intel Software Development Tools->Intel C++ Compiler 7.1->Build Environment for 32-bit applications. Далее откомпилируйте hello.cpp: "icl hello.cpp". Все, hello.exe готов.
Если вы пользуетесь Visual Studio, например, 2002 или 2003, то следует создать консольное Win32-приложение и файл такого же содержания. Далее в меню Tools->Options выбрать Intel C++. Здесь надо выбрать версию компилятора, которую вы используете. Если вы используете Visual Studio 2003, то в Default Compiler Options (в этом же окошке) путь "Qvc7" надо поменять на "Qvc7.1". Далее откройте диалог "hello Property Pages", выберите "Intel Specific". Из выпадающего списка "Compiler name" выберите "Intel C++ Compiler (icl)". Щелкните ОК. Всё, теперь можно построить решение. Как видите, все довольно просто.


TanaT: Сильно ли повышается производительность приложений при использовании Intel C/C++ Compiler?

Алексей Одиноков: Использование компиляторов Intel C++ и Intel Fortran для ОС Windows и Linux позволяет достичь выигрыша в производительности приложений для систем на базе процессоров Intel Itanium 2, Intel Xeon и Intel Pentium 4 до 40% по сравнению с применением существующих компиляторов других производителей (см. рисунок ниже). Конечно, реальные значения производительности могут изменяться в зависимости от конфигурации системы. Более подробную информацию о производительности продукции Intel можно получить по адресу http://www.intel.com/performance/resources/limits.htm.
Пример из практики работы с кодами системы в Росгидромете. Конечная версия, скомпилированная интеловским компилятором, (правда, в отличие от предыдущего примера, фортранным) региональной схемы работает в 12 раз быстрее, чем начальная, скомпилированная тем же компилятором, но сразу после портирования с Cray на Itanium 2. Рост был достигнут при помощи "подсказок" компилятору (например, в виде директив компилятора, добавленных в код) о том, что оптимизационные возможности, которые он не включил, исходя из собственного анализа семантики программы, на самом деле можно безопасно использовать. Интеловский компилятор отличается от остальных, работающих на интеловских архитектурах, широким набором средств для "агрессивной" оптимизации под целевую архитектуру. А найти места, где эти средства не включились "по умолчанию", можно как с помощью диагностики, предоставляемой самим компилятором, так и с помощью VТune. С помощью последнего можно НАЙТИ такие места. А используя диагностику компилятора, можно понять, ПОЧЕМУ не сработала та или иная оптимизация и ЧТО нужно\можно сделать, чтобы она сработала. Так что 40 процентов - это отнюдь не предел...
Также могу привести любопытную цитату доктора Фонса Радемакерса (Fons Rademakers), ведущего научного сотрудника CERN, характеризующую повышение производительности: "Наши приложения активно используются в крупных ресурсоемких системах анализа данных, поэтому для нас очень важно достичь максимально возможного уровня производительности. Мы перенесли 800 тысяч строк исходного кода C++ и 90 тысяч строк кода C на компиляторы Intel всего за один день; раньше такая работа заняла бы неделю".


Картинка иллюстрирует повышение производительности при замене компилятора GNU на Intel -"автоматически" получаемый выигрыш в 41 - 44 процента



Комментарий Алексея Одинокова: "Стоит взглянуть и на эту картинку. Ускорение от использования интеловского компилятора по сравнению с MS (а именно он там скрывается под маской "Стандартный Компилятор") составляет 7 раз. И это без использования поддержки OpenMP, которая есть в интеловском компиляторе, но отсутствует в MS. А с таковой преимущество и вовсе становится 13х. Интеловский компилятор представляет программисту возможности для оптимизации под интеловские архитектуры гораздо более широкие, чем другие компиляторы. И эти возможности выходят за рамки простой перекомпиляции при переходе с некоторого компилятора на интеловский. Чтобы получить больший прирост производительности, иногда нужны изменения кода - для наиболее эффективного использования возможностей, которых нет у других компиляторов (подобные действия не предусматриваются сценарием). При этом интеловский компилятор предоставляет диагностику (в виде отчетов различных фаз оптимизации), позволяющую легче найти места в программе, которые требуют модификации для того, чтобы компилятор преодолел проблему".

TanaT: Спасибо за интервью.