Тема беседы: «Новые тенденции и технологии в оптимизации программного обеспечения (ПО)»
Представляем Вашему вниманию ответы на наиболее интересные вопросы по теме конференции «новые тенденции и технологии в оптимизации программного обеспечения (ПО)», которую мы провели совместно с корпорацией Intel.
Не секрет, что корпорация Intel не только производит процессоры, но также разрабатывает специализированный программный инструментарий, который помогает разработчикам ПО оптимизировать их продукты сообразно новейшим тенденциям в вычислительной технике. Инженеры компании Intel активно вовлечены в процесс оптимизации приложений, с использованием всех тонкостей таких инновационных технологий, как многоядерность, мобильность, виртуализация и улучшенная управляемость.
На ваши вопросы отвечали:
Вадим Сухомлинов — ведущий инженер Intel по технологиям. Тематика: управляемость и виртуализация.
Виктория Жислина — ведущий инженер подразделения Intel по оптимизации ПО для конечных потребителей. Тематика: мобильность.
Василий Маланин — ведущий инженер Intel по продвижению инструментов разработки ПО. Тематика: многоядерность.
Чтобы задать вопрос, необходимо было сформулировать его и оставить в виде одной из тем в специальном форуме нашей конференции.
В силу того, что основной тематикой конференции было освещение вопросов по программному обеспечению, а самих вопросов было много, мы сосредоточились и постарались покрыть вопросы касательно ПО и оптимизации. Мы так же понимаем, что много вопросов остались без ответа, поэтому сотрудники компании Intel приглашают участников форума в блогосферу Intel http://softwareblogs-rus.intel.com/, где также можно пообщаться непосредственно с инженерами Intel.
Виктория Жислина: В настоящее время для эффективной работы с многядерностью Intel предлагает прежде всего, компиляторы для языков CC++ и FORTRAN с поддержкой распараллеливания OpenMP. Выбор этих языков для компиляторов обусловлен тем, что абсолютное большинство коммерческого широко используемого софта написано именно на CC++, а большинство научных программ исторически унаследовали FORTRAN. Кстати, спецификация OpenMP не предусматривает интерфейса к языку Паскаль. При помощи профилировшика Intel VTune и наличии сгенерированной отладочной информации возможно профилировать приложения на Паскале, находя узкие места в производительности. То же самое относится и к Intel Thread Profiler — инструменту, позволяющему отследить работу потоков приложения. Другое дело, что поскольку Паскаль для работы с многопоточностью использует некоторую оболочку над API операционной системы, а значительная часть функциональности программ содержится в фиксированных сторонних компонентах, то обеспечить оптимальную производительность при распараллеливании в программе на Паскале гораздо труднее, чем на CC++.
amalkin: оптимизированные под игры процессоры
Виктория Жислина: Для ответа на Ваш вопрос давайте посмотрим, что такое «игра» с программной точки зрения. Абсолютно во всех 3D играх можно выделить следующие компоненты: Логика Игры («Искусственный Intelект»), Анимация Персонажей, Расчет Физики и Отрисовка Сцены. При этом, к счастью геймеров, все игры разные, соответственно отличаются и их компоненты — по алгоритмам, сложности, относительному вкладу в игру, а значит, и нагрузке на процессор и видеокарту. Во многих играх «узким местом» производительности является именно GPU, не справляющийся с отрисовкой сложной сцены, но есть и игры, где производительность упирается в CPU, то есть, в недостаточную скорость расчета логики и физики игр.
Поэтому создать процессор, «оптимизированный для 3D игр» просто не представляется возможным. Другое дело, что можно и обязательно нужно ускорить все компоненты игр, выполняемые на CPU, а также обеспечить максимально быстрое взаимодействие между CPU-GPU.
Для этого Intel во-первых, активно сотрудничает с производителями графических драйверов (DirectX, OpenGL) видеокарт с целью оптимизации программно выполняемых частей драйверов под новые процессоры Intel. Это очень важно, и приводит к тому, что многие графические приложения на полностью идентичных компьютерах, отличающихся только своими CPU, будут показывать разную производительность.
Во-вторых, Intel столь же активно взаимодействует с производителями игр, помогая им наиболее эффективно и полно использовать потенциал процессоров Intel для достижения максимальной производительности их продуктов. С учетом современной архитектуры CPU и, прежде всего, многоядерности, основной прирост производительности достигается за счет распараллеливания кода, а также использования векторных (SIMD) инструкций и правильной организации данных — минимизации их передачи и эффективному использованию кэш памяти. Если Вы — разработчик игр, то много полезной информации на эту тему можно найти на нашем сайте www.intel.com/software/ru в разделе мобильность и многоядерность.
Rats: Будет ли процессоры оператся на оптимизацию DirectX?
Виктория Жислина: DirectX10 — это самая современная версия DirectX — т. е. API для программирования графики, игр, аудио и видео под семейство операционных систем Microsoft Windows. Производители драйверов DirectX для видеокарт реализуют данный API, причем, в зависимости от конкретного «железа» часть функций выполняется аппаратно, а часть — программно. Как уже было сказано, Intel активно сотрудничает с производителями графических драйверов с целью оптимизации программно выполняемых частей драйверов под новые процессоры Intel. В драйверах DirectX для повышения производительности используются и параллелизация кода и SIMD инструкции. Кроме того, сам дизайн DirectX10 предусматривает снижение нагрузки на CPU. Однако делать обоснованные репрезентативные выводы о повышениипонижении нагрузки на CPU при использовании именно DirectX10 еще рано — пока не накоплено достаточного количества приложений, написанных на DirectX10.
nexERR: Intel и ускорение физической модели
Виктория Жислина: Так называемых «физических движков», то есть библиотек, выполняющих расчет физических моделей — столкновений, разрушений, систем частиц и т. д., существует немало. Они активно используются производителями игр, информация о них доступна в Интернет. Наряду с коммерческим продуктом, упомянутым Вами, есть и некоммерческие, а также бесплатные продукты с открытым кодом. Все они в той или иной мере оптимизированы — в сотрудничестве с инженерами Intel, или самостоятельно их производителями. В программировании физических алгоритмов успешно применяется и распараллеливание и SIMD инструкции. Если вы хотите попробовать свои силы в оптимизации физического движка под процессоры Intel, советуем воспользоваться информацией о технологиях и инструментах Intel с www.intel.com/software/ru.
Voldemar_d: Планируется ли поддержка DSP-алгоритмов прямо в процессоре?
Виктория Жислина: Наличие аппаратной реализации цифровой обработки сигналов (DSP) в процессорах общего назначения нецелесообразно. Процессор- устройство универсальное, предназначенное для эффективного решения большого количества задач, а цифровая обработка сигналов — только одна из них. Поэтому решение — предоставить разработчикам набор «универсальных» низкоуровневых производительных «операций-кирпичиков», из которых они смогут возводить свои «дома»-программы. В данном случае такими «кирпичиками» являются SIMD-инструкции, набор которых постоянно совершенствуется и пополняется Intel — начиная с MMX и до готовящихся к выпуску SSE4.
Кроме того, как вы правильно заметили, Intel предоставляет разработчикам и готовые высокопроизводительные программные решения в области обработки сигналов, максимально оптимизированные с учетом особенностей архитектуры процессоров Intel. Это платформенно независимые библиотеки Intel® Integrated Performance Primitives (Intel® IPP) и Intel® Math Kernel Library (Intel® MKL) для Windows, Linux и Mac OS.
VLev: Мелкозернистый параллелизм/графовые модели
Василий Маланин: Все проблемы, описанные Вами объективно существуют. Действительно, переключение потоков ОС требует тысячи тактов процессора. Сложность этой процедуры определяется большим количеством операций, которые требуется провести ОС для того, чтобы перейти в новое целостное состояние — здесь, в частности, сказывается универсальный характер современных операционных систем. На аппаратном уровне количество операций, требуемых для переключения процессора на новый поток команд очень невелико. Одним из способов увеличения производительности в данном случае мог бы стать перенос некоторых алгоритмов ОС на аппаратный уровень, что значительно бы снизило «свободу действий» при создании ОС. Так что в этом аспекте ничего не изменить, если вы работаете в рамках выбранной ОС и не хотите попробовать написать свою собственную специализированную ОС или хотя бы переписать планировщик. То же самое можно сказать относительно создания/уничтожения потоков.
На сколько мне известно, никаких радикальных изменений, которые бы смогли решить описанные проблемы, не планируется в ближайшем будущем в процессорах Intel. То же самое можно сказать и про синхронизацию через некэшируемую память.
Однако это не означает, что мелкозернистый параллелизм нельзя эффективно использовать уже сейчас :-) Практически для всех приведенных проблем можно предложить приемлемые решения. Во первых, нужно осознавать тот набор инструментов, который предоставлен программисту для реализации параллелизма. Если речь идет о параллелизме арифметических операций, то целесообразно применять блоки векторных вычислений SIMD. Если речь идет о более крупном делении, и соответственно многопоточной модели, можно динамически менять глубину фактического распараллеливания (количества созданных потоков ОС), например, используя технику пулов потоков многопоточных API или workqueuing — специального расширения OpenMP от Intel. Во-вторых, нужно знать и применять наиболее эффективные методы синхронизации, присущие тем или иным технологиям параллельного программирования, например, в WinAPI для синхронизации потоков в одном процессе предпочтительно использовать механизм CRITICAL_SECTION, который не требует обращения к kernel mode. То же самое можно сказать и про локализацию мелкозернистых данных, ведь существует множество простых приемов, которые позволяют ее повысить.
Конечно же, применение этих приемов — достаточно сложное дело, которое требует от разработчика высокой квалификации. Intel всегда стремился помогать программистам создавать более быстрые и качественные программы. В частности, существует коммьюнити (ISN www.intel.com/software/ru), в веб-форумах которого изложено много важных советов для создания быстрых многопоточных приложений. Кроме того, Intel выпускает специальные программные инструменты, позволяющие оптимизировать работу многопоточных программ, в частности решая проблемы, присущие мелкозернистому параллелизму — это Intel VTune и Intel Threading Tools.
Vogt: Параллелизм явный и неявный
Василий Маланин: Качество средства программирования определяется описательными возможностями языка программирования, лежащего в его основе, удобством использования (близостью проблемной области и средств абстракции, им предоставляемых) для решения конкретной задачи, а также эффективностью выполнения вычислений. Одним из стремлений компании Intel является стремление обеспечить эффективное решение пользовательских задач на своих платформах. Поэтому Intel приветствует все средства программирования, которые позволяют быстро и удобно решать задачи. То же самое можно сказать про средства параллельного программирования.
В продуктах компании для разработчиков представлены оба подхода: компилятор Intel поддерживает автоматическое распараллеливание (ключ — parallel) и технологию полуавтоматического распараллеливания OpenMP, продукт TBB — Threading Building Blocks — инструмент, требующий изначально при проектировании архитектуры приложения думать «параллельно» и использовать параллельные конструкции. Вообще компания очень внимательно относится к различным разработкам в области параллельного программирования, например, к языкам функционального или логического параллельного программирования. Достаточно часто среди инженеров проводятся семинары, на которых такие средства рассматриваются и обсуждаются. К примеру, недавно мы как раз обсуждали возможности языка Erlang, а весной в Московский офис Intel приезжал Бертран Мейер — создатель языка Eiffel, с рассказом о поддержке многопоточности в Eiffel. Подразделение Intel Higher Education, занимающееся развитием связей компании с университетами в 2006 году провело конкурс Multi-Core Research среди Российских университетов на лучшие разработки в области параллельного программирования — в составе победителей присутствуют создатели оригинальных средств параллельного программирования, использующих как явное так и неявное описание параллелизма.
sergen: Сравнение OMP и TBB?
Василий Маланин: Попробую коротко перечислить основные различия TBB и OpenMP:
Как вы уже сказали, TBB заточен под С++, с применением классов и шаблонов. Поэтому если Ваш код написан на С или Fortran, то TBB применить сложно, хотя и возможно.
Так как TBB изначально объектно-ориентированная технология, то применение его в объектно-ориентированных приложениях, зачастую более удобно и понятно чем применение Native Threads — поточных API операционной системы.
TBB это библиотека и поэтому, в отличие от OpenMP, не требует специального компилятора для использования в Вашем проекте.
TBB более гибкое средство для выражения параллелизма нежели OpenMP и включает средства для распараллеливания конструкций типа циклы for и while, конвейеры и т. д.
OpenMP позволяет использовать вложенный параллелизм, однако это может привести к потери производительности в следствие неограниченного роста порожденных вложенных потоков. В TBB можно ограничить количество потоков, которые используются при выполнении параллельной программы. OpenMP (без расширения Intel OpenMP) не позволяет распараллелить рекурсивную программу, в то время как TBB поддерживает и такой вариант.
Много информации о TBB можно найти на сайте http://threadingbuildingblocks.org/
TroFF, Konstantin Mironovich: Intel vPro
Вадим Сухомлинов: Для доступа к функциям АМТ необходимо как минимум знать имя пользователя и пароль. Функциональность АМТ конфигурируется либо вручную (через BIOS setup), либо по зашифрованному TLS-PSK каналу, где TLS ключ генерируется уникальным для каждой машины и прописывается либо OEM либо системным администратором в BIOS. В дальнейшем для аутентификации используется HTTP Digest и TLS. TLS сертификат генерируется уникально для каждой машины в начале процесса конфигурирования по защищенному TLS-PSK каналу. Никаких мастер-паролей нет, более того, если пароль забыт, восстановить систему будет довольно непросто. С другой стороны AMT позиционируется для корпоративных пользователей, где сетевая инфраструктура обычно хорошо защищена от доступа извне. Много информации с помощью АМТ незаметно не собрать — в лучшем случае это список оборудования. Таким образом взлом АМТ системы — это только прямой подбор имени пользователя и пароля в HTTP Digest и, если включено, подбор TLS сертификата. Простые пароли поставить не получится, благодаря требованию о проверке сложности пароля. АМТ система будет детектировать случаи подбора пароля и оповещать пользователя или системного администратора.
Сейчас DMTF (www.dmtf.org) стандартизовал DASH 1.0 — механизм удаленного управления на основе WS-MAN. DASH/WS-MAN заменят ASF в очень скором будущем. К концу года выйдет DASH 1.1, который сейчас в черновике. Платформа с поддержкой DASH 1.0 (кодовое имя Weybridge) выйдет на рынок осенью, и будет продвигаться во всех сегментах рынка. В начале 2008 выйдет и мобильная платформа с его поддержкой. Мы ожидаем, что в 2008 году большинство новых систем будет поддерживать этот стандарт, включая не Intel платформы. Относительно поддержки со стороны ПО — такие вендоры как Avocent/LANDesk, Symantec/Altiris, Microsoft, Syam, HP OpenView и другие этот стандарт поддерживают. Для разработки приложений Intel предлагает AMT SDK и многое другое, что можно скачать здесь: www.intel.com/software/manageability (англ) и www.intel.com/software/ru/manageability (рус). Есть также блоги по AMT: http://softwareblogs.intel.com/ (англ) и http://softwareblogs-rus.intel.com/ (рус).
Я не сказал бы что поддержка AMT — сложная задача. Примеры использования и документация входит в SDK, мы предлагаем исходный код приложения-примера AMT Commander и AMT Director — входят в AMT DTK (Developer’s tool kit). Так, если уже есть основа приложения для удаленного администрирования, добавление поддержки AMT займет 2-3 месяца на 2-3х человек вместе с тестированием и отладкой.
Gurman: Технология Intel® VT и прикладной программизм
Вадим Сухомлинов: Технология Intel® VT для прикладного программиста в первую очередь влияет на лицензионную политику. Например ряд приложений лицензируется по количеству используемых процессоров, по количеству рабочих мест. В случае использования виртуализации могут возникать ситуации, когда будет показываться использование большего количества лицензий, чем на самом деле. Это приведет к необходимости детектирования таких окружений используя специальные API от VMWare, Parallels, Xen итп, изменение лицензионных соглашений итп. Вторым аспектом является производительность приложений, там где она важна. Дисковый и сетевой ввод-вывод требует больше ресурсов, чем в native окружении, также как и переключение контекстов. Скорее всего придется подстраивать приложения для этого.
С другой стороны виртуализация способна помочь реализовать сложные сценарии внедрения на одной физической системе — установка Internet Firewall/NAT в один из разделов, сервер приложения в другой, БД — в третий итп, создав тем самым виртуальную инфраструктуру и разработав средства по управлению ей. Одним из интересных моментов может стать разработка интерфейса для взаимодействия приложений работающих в разных разделах. Например антивируса, который работая в другом адресном пространстве проверяет ОС на наличие вирусов, оставаясь для них невидимым и недоступным. В общем, проявляейте фанатазию, господа программисты!
Имена и торговые марки являются собственностью законных владельцев.
Итак, время подводить итоги. Наш собеседник и редакция iXBT.com выделили вопрос Вадима Левченко, участника конференции под ником VLev: о «Мелкозернистый параллелизм/графовые модели». Поздравляем участника нашей конференции. Призом, который был вручён победителю, стал процессор Intel Core 2 Duo E6420.