22 сентября 2011 года в московском отеле «Бородино» состоялась первая в истории России Intel Software Conference. Одна из главных тем конференции – комплект средств Intel® Parallel Studio (в том числе и XE – Extreme Edition!) 2011, разработанный в российских подразделениях Intel и позволяющих программистам создавать высокоэффективные приложения для многопоточных систем.
Напомню, что на IDF-2011 об этом продукте в своём ключевом докладе «The Future: Accelerate» говорил вице-президент, директор лаборатории и руководитель стратегических разработок Intel Джастин Ратнер (Vice Presiden, Director, Intel Labs and Intel Chief Technology Officer, Intel Senior Fellow, Intel Corporation Justin Rattner).
Приглашён я был только на пресс-конференцию, но интерес к теме был так велик, что я приехал пораньше и «просочился» в зал, где проходили доклады. Честно говоря, я хотел послушать и доклад генерального директора по исследованиям и разработкам Intel в России Камиля Исаева «Вычислительный континуум и роль программного обеспечения», и главного ведущего (так по-русски не говорят, но это официальный перевод) инженера Intel SSG Роберта Геву (Robert Geva) «Высокопроизводительные вычисления (обзор технологии XE)», но мой самолёт сначала кружил над туманным Домодедово, потом полетел в Шереметьево… ну, ладно, хоть сели благополучно.
Руководитель группы разработчиков Intel Compiler Михаил Лоенко начал свой доклад с демонстрации слайда «Уведомление об оптимизации», в котором, в частности, содержались такие слова «Хотя корпорация Intel считает, что наши компиляторы и библиотеки отлично подходят для обеспечения оптимальной производительности процессоров Intel и процессоров других производителей, корпорация Intel рекомендует ознакомиться с другими компиляторами и библиотеками, чтобы определить, какое решение лучше всего соответствует вашим требованиям». Примерно как после рекламы лекарств – «посоветуйтесь с врачом».
Затем прозвучала, на мой взгляд, главная мысль всей конференции: эпоха роста гигагерц, когда повышение производительности системы могло происходить без участия программистов, закончилась. Сегодня программа должна быть не только оптимизирована внутри самой себя, но и максимально использовать возможности и особенности процессоров: Intel Smart Cache, Intel Advanced Vector Extensions, и подобные им фичи. Но главное – уметь распараллеливать себя, чтобы максимально задействовать все ядра и потоки.
Михаил отметил также, что в последнее время наблюдается устойчивый спрос на разработчиков ПО, в соответствии со спросом происходит и рост количества программистов. Ещё одной тенденцией является отставание от этого роста качество образования. Отсюда в процентном отношении людей, умеющих писать на низкоуровневых языках и вручную оптимизировать код под особенности процессоров становится всё меньше. Соответственно, более востребованными являются мощные средства разработки, позволяющие не самым продвинутым программистам использовать самые современные технологии. То есть, возникает потребность в интеллектуальных компиляторах, умеющих самостоятельно оптимизировать машинный код для выполнения его современными процессорами, такими, как Intel Sandy Bridge. Что касается крупных производителей системного и прикладного ПО, то все они по выходу нового поколения процессоров выпускают апдейты, позволяющие их продуктам оптимальным образом работать на этих процессорах – вот ещё один повод покупать легальный продукт и устанавливать все выходящие обновления.
Компилятор производства Intel для языков Fortran (начиная с версии «77», то есть не поддерживается только совсем уж старый Fortran IV) и C/C++ продаётся как отдельно, так и в составе комплексов Intel® Parallel Studio (XE). Версия XE выпущена для тех, кто хочет выжать из компьютера максимум, и предназначена для работы с ОС Windows, Linux и MacOS. В неё входит набор инструментов для анализа производительности и корректности выполнения программ. Более простой комплекс (не XE) нацелен на «массовое потребление» и поддерживает только Windows.
Принципиальное отличие этого компилятора от того, чем мне самому приходилось работать, заключается в том, что оптимизация происходит не только на этапе собственно компиляции, но также и при линковке объектных модулей – они не склеиваются «тупо» в экзешники и длл-ки, а рассматриваются как единое целое. Таким образом, компиляция и линковка представляют собой две фазы единого процесса.
Также существуют различные жизненные ситуации. Например, миллион строк кода уже написан, продукт работает и сопровождается, но хочется, чтобы всё это работало быстрее. Или другой вариант: программа написана давно, разработчик уже на пенсии, никто не представляет, что этот код делает, а эту программу нужно поставить на новую машину. Есть разработчики, пишущие на ассемблере, а есть те, кто не хочет постоянно учиться новому. И для каждой категории существует свои инструменты, которые разрабатывает Intel.
Следует отметить, что паралеллизм имеет несколько уровней, это:
- Паралеллизм на уровне инструкций, использующий возможности микроархитектуры:
- Конвейеризация.
- Внеочередное исполнение.
- Суперскалярность.
- Предсказание переходов.
- Параллелизм данных:
- Векторные инструкции SSE, AVX.
- Поддержка вектора данных для одной инструкции (SIMD).
- Рост длины вектора 64 bit ->128 bit -> 256 bit.
- Многопоточность:
- Многоядерные и многопоточные архитектуры.
- Системы с общей памятью и когерентным кешем.
- Многопроцесороность (распределённые вычисления):
- Набор систем, объединённых в кластеры и сети.
Здесь важно понять, что паралеллизм многолик, программа может работать в различных условиях, и оптимизация означает не оптимизацию вообще, а именно поиск наилучшего решения для каждой конкретной ситуации – процесс очень и очень творческий. Если программа может исполняться в разных условиях, то она должна содержать варианты фрагментов кода, оптимальные для различных условий выполнения: это увеличивает объём файлов, но повышает производительность системы. Если же достоверно известны условия, в которых эта программа будет работать, задача несколько упрощается, и в этих вариантах нет нужды.
Кроме самого процесса оптимизации, компилятор выдаёт подробные отчёты и рекомендации по корректировке исходных текстов. В идеале программист сам должен помогать компилятору, подсказывая поведение программы и, возможно, давая вероятностные оценки (выбираем же мы на вероятностном уровне стратегию игры в преферансе, не зная прикупа и расклада), но так бывает далеко не всегда. И ещё одна важная вещь, о которой иногда забывают: программа делает не то, что от неё хочет программист, а то, что он написал.
Вопросы к докладу превратились в горячее обсуждение. Главная тема дискуссии: что может взять на себя компилятор, и что способен сделать только программист. Например, на вопрос о безопасности автоматической векторизации программ, Михаил ответил так: «Если программа написана корректно, все переменные инициализированы, то векторизация тоже будет корректной; если же программа изначально недетерминирована, то векторизация тут ничего сама не поправит». Вспомнилась старая мудрость: если автоматизировать бардак, то получится автоматизированный бардак.
После того как компилятор оптимизировал преобразование исходного текста в машинные коды, работа не заканчивается. Теперь, имея действующее ПО, можно проанализировать его работу, выявить узкие места. В этом программистам помогут другие продукты пакета Intel® Parallel Studio. Ведущий инженер по технической поддержке пользователей программного обеспечения SSG Intel Владимир Цымбал рассказал о таких продуктах, обеспечивающих максимальную эффективность и стабильность приложения: Intel Amplifier XE и Inspector XE. Конечно, в идеальном мире компилятора было бы вполне достаточно, но поскольку и наш мир, и компилятор не являются таковыми, приходится работать дальше. Одна из причин этих трудностей состоит в том, что существующие ныне языки изначально не были предназначены для параллельного программирования.
Свой доклад Владимир начал с пункта «мотивация», где сказал о том, что идеальных программ не бывает, тем более программ с параллельным выполнением. Первый рассматриваемый вопрос – масштабируемость программ, способность корректно и производительно работать на различных устройствах.
Inspector создан для анализа корректности выполнения программы и предоставления отчёта разработчику. Он умеет провести динамический анализ памяти и многопоточности, обнаружить утечки памяти, указать на имеющиеся и потенциальные ошибки («гонки» и блокировки), визуализирует ошибки на временной шкале и производит их детальный анализ.
Профилировщик производительности Intel Amplifier является наследником Intel VTune и занимается более тонкими вещами – находит узкие места в корректно работающей программе и подсказывает методы их устранения. В частности, он находит промахи (cache misses), когда программа пытается найти нужные данные в процессорном кеше, не находит их там и вынуждена обращаться к более медленной оперативной памяти. Далее Intel Amplifier сортирует функции по количеству промахов и таким образом предоставляет разработчику «информацию к размышлению». Важно, что для запуска анализа не требуется перекомпиляция программы: Intel Amplifier сам расставляет в программе динамические метки, при это замедление работы программы составляет не более 3 %.
Таким образом, для разработки максимально эффективной программы нужны все три инструмента, входящие в Intel® Parallel Studio – компилятор, анализатор корректности и профилировщик.
Перехожу к пресс-конференции. Её проводили Роберт Гева, Камиль Исаев, а также руководитель направления стратегического развития бизнеса Intel Вадим Сухомлинов.
Камиль Исаев отметил, что хотя по своему масштабу Intel Software Conference является не самым крупным мероприятием из тех, которые проводит Intel, но если брать именно софтверное направление, то это крупнейшее мероприятие за всю историю работы Intel в России. Несмотря на то, что Intel обычно воспринимается как производитель аппаратных средств, софтверная часть корпорации, насчитывающая десятки тысяч человек, могла бы войти в десятку крупнейших производителей ПО.
Слайд о видении компьютерного континуума к 2015 году интересен тем, что на долю классических платформ приходится лишь две категории устройств, остальные пять (плюс неупомянутый здесь NAS, а также зарождающийся класс «беспилотников» для работы с M2M) используют платформу Intel Atom. Все эти устройства должны надёжно и безопасно работать как в автономном режиме, так и (что на сегодня ещё более важно) взаимодействовать между собой. Поэтому корпорация Intel вкладывает существенные ресурсы в разработку наиболее фундаментального софта, напрямую взаимодействующего с аппаратными платформами. В последнее время спектр интересов Intel значительно расширился, и теперь сюда входят операционные системы, и даже пользовательские приложения. Отметил г-н Исаев и покупку компании McAfee, что позволило более активно работать в области безопасности. Также было сказано о компании Wind River, работающей на рынке софта для встроенных систем. Вместе эти два подразделения Intel реализуют продуктов на 2,5 миллиарда долларов в год. Недавно заработал магазин приложений Intel AppUp center. В дальнейшем планируется создание магазинов на этой платформе партнёрами Intel, чтобы пользователь, купивший устройство, мог в одном месте получить безопасные и надёжные приложения для него.
Intel активно строит отношения со сторонними разработчиками (в России в число участников таких программ входят около тысячи компаний), и сегодняшняя конференция тому пример. Всего в мире пользователями продуктов Intel, разработанными российскими сотрудниками, являются около 300 тысяч программистов, в том числе из таких компаний, как Microsoft, Oracle, Boeing.
Доклад Вадима Сухомлинова назывался «Представляем Intel® Parallel Studio XE 2011 Service Pack 1». Поскольку он частично повторял изложенное Михаилом Лоенко и Владимиром Цымбалом, параллельные места я опущу. Первое, на что обратил внимание Вадим – что новая версия Parallel Studio качественно иная, чем всё. Что было до неё. Применение SP1 повышает до 47 % производительность программ, написанных на C/C++, и до 24%, написанных на языке Fortran. Впервые нативно решена проблема округления чисел в десятичной системе счисления с плавающей точкой. Улучшена совместимость с Visual Studio* 2010 Shell для Visual Fortran. Гарантировано, что средства разработки в скором времени будут легко расширены на Intel® Many Integrated Core (Intel® MIC) architecture – мультиядерную архитектуру Intel, и это очень важно. Дело в том, что программирование для MIC принципиально отличается от программирования для «обычных» многоядерных систем, поскольку архитектура MIC качественно иная. А переход на MIC – это следующая революция в высокопроизводительных вычислениях. Кроме того, новые компиляторы поддерживают гетерогеные архитектуры, включающие как основной процессор, так и различные акселераторы.
Библиотека Intel® Threading Building Blocks (TBB) 4.0 с коммерческой поддержкой идеально масштабирует код на любое число ядер. На мой вопрос о том, не нарушается ли при этом закон Амдала, Вадим ответил, что ресурсы на взаимодействие ядер и процессоров, безусловно, расходуются, однако существуют и противоположные тенденции. Например, если положить в общий процессорный кеш данные, которые будут использоваться несколькими ядрами, возможно даже получение прироста производительности, превышающего количество ядер. Таким образом, интеллектуальное распараллеливание задачи, максимально учитывающее архитектуру системы, компенсирует затраты на взаимодействие получаемыми при этом выгодами.
Роберт Гева сказал, что как в своё время был достигнут предел роста тактовой частоты, так и увеличение количества ядер тоже имеет свои разумные пределы. Поэтому Intel решает вопросы повышения производительности систем самыми разными способами, например, созданием систем на чипе (System-on-a-Chip, SoC), тем самым снижая время задержек при взаимодействии компонентов устройства. Соответственно, каждая архитектура устройства требует своих подходов к оптимизации ПО. Поэтому предлагаемые корпорацией Intel инструменты должны поддерживать все типы архитектур и помогать оптимизировать ПО для каждой из них. Тогда и конечный пользователь, запуская приложение, оптимизированное под архитектуру его устройства, сможет почувствовать, что его работа стала более продуктивной и комфортной.
Так уж вышло, что на момент моей поездки в штаб-квартиру компании McAfee информация о новом продукте DeepSafe была ещё под «замком». Когда двумя днями позже о DeepSafe объявил президент Intel Пол Отеллини, моим первым желанием было разобраться в этом принципиально новом направлении систем безопасности: опыт подсказывает, что попытка изложить информацию пресс-релиза без понимания сути часто ведёт к грубым ошибкам, а скопипастить пресс-релиз тоже как-то неправильно. На IDF-2011 разобраться с DeepSafe не получилось, но я помнил, что вскоре увижусь с российскими специалистами, тогда-то всё и узнаю. Вот что ответил на мой вопрос о DeepSafe Вадим Сухомлинов.
Эта концепция развивалась довольно давно, аппаратные компоненты решения появились уже в первых версиях vPro, то есть года 3-4 назад. vPro изначально содержал несколько технологий, которые вначале были задействованы лишь частично. Это технология виртуализации Intel VT, технология удалённого управления Intel AMT и, интересующая нас в данный момент, технология доверенного исполнения Intel TXT. Из трёх технологий, входящих в Intel vPro, у Intel TXT оказалась самая несчастливая судьба – она практически нигде не использовалась. Известно, что менеджер виртуальных машин находится ниже уровня операционных систем и в этом смысле он главней, чем запущенная на нём операционная система. И если руткиты попадают на этот уровень, то операционная система их видеть не может, в то время как они способны её атаковать. Технология TXT может создать цифровую подпись кода, который должен запускаться на любом уровне, и эта подпись попадает в белые списки. Таким образом, вирусы и трояны, не входящие в этот белый список, не могут запуститься на аппаратном уровне. Сами белые списки хранятся внутри платформы, в энергонезависимой памяти чипсета. Софт имеет возможность записи в эту память и последующее сравнение подписи запускаемого кода с подписью из белого списка, при этом прочитать белый список никакая программа не имеет права (такой вот парадокс – софт отдаёт платформе код для сравнения и получает в ответ одно из двух значений логической переменной: True или False). Таким образом, DeepSafe даёт возможность запуска антивируса ниже операционной системы и отлавливает руткиты в любом слое. DeepSafe доступен на всех платформах, включающих vPro, а McAfee является первой среди антивирусных компанией, активно использовавшей возможности технологии виртуализации для защиты от руткитов и осуществившей полноценную программную поддержку технологии TXT. При этом надо сказать, что работа здесь ведётся давно, и реализации этой технологии компаниями Xen, VMWare и Parallels для менеджеров виртуальных машин были известны несколько лет назад. DeepSafe позиционируется как продукт для клиентских машин, официально заявлено только о поддержке «клиентских» процессоров Core i3, i5, i7 (разумеется, при наличии платформы vPro). Вся информация об Intel TXT (как и всей vPro), является открытой, поэтому решение подобное DeepSafe может реализовать любая софтверная компания. Надо помнить, что для хранения ключей Intel TXT требует TPM модуль, который не является обязательным элементом vPro, и в Россию не ввозится из-за сложностей с получением разрешений. Потому базовый функционал Deepsafe будет работать везде, где есть виртуализация (перенос антивируса в ядро виртуальной машины делает систему в целом существенно менее уязвимой для руткитов), но в полной мере проявить себя этот продукт может только при наличии в аппаратной части технологии TXT и TPM-модуля. Вот так закончилась интрига с McAfee DeepSafe.
Гигагерцы, нанометры, ядра – это то, что легко можно объяснить «обычному потребителю». Это то, что продаётся. Однако за этим фасадом скрываются интереснейшие вещи, которые важны не меньше, чем гигагерцы, тем более что гонка гигагерц закончилась и, похоже, не возобновится. Так не будем забывать, что платформа – это очень сложная вещь, и никакие бенчмарки не скажут нам, как конкретный софт будет работать на конкретном железе. И главное: сегодняшнее совершенствование процессорных технологий в отрыве от использующего их софта просто бессмысленно. Нельзя вдруг изобрести процессор «превосходящий зарубежные образцы» – можно только вырастить всю экосистему в целом. Чем и занимается корпорация Intel, в том числе и на проходившей в Москве Intel Software Conference.