В первом материале с конференции Intel iStep 2015 мы привели немного занимательной статистики о мире программистов. Здесь же кратко поговорим о том, что предлагает им Intel для облегчения работы. Обо всех технологиях и новинках рассказывать смысла нет. Например, изменения в Fortran-компиляторе, позволяющие не пересобирать весь проект целиком при изменении маленького кусочка кода, конечно, интересны и очень важны для тех, у кого исходники занимают по 3 млн строк – о да, есть и такие, – но для обычного пользователя они ничего не значат. Впрочем, часть продуктов может пригодиться не только профессионалам, но и тем, для кого программирование является всего лишь хобби.

⇡#Intel System Studio 2015 – для самых маленьких… устройств

Начнём с самого «нижнего» слоя, то есть с разработки программ для встраиваемых решений. Впрочем, сюда же входит разработка и отладка ядра ОС и его модулей, низкоуровневых драйверов, модулей UEFI/BIOS. Важное отличие от всех других задач в том, что здесь, во-первых, всегда нужны утилиты для кроссплатформенной разработки и отладки, а во-вторых, крайне важны тонкая настройка, оптимизация и профилирование для достижения максимально корректной работы, высокой производительности и в то же время низкого энергопотребления. Для этих задач у Intel есть особое решение – набор System Studio, который поддерживает интеграцию в IDE Eclipse и WindRiver Workbench, а теперь и в Microsoft Visual Studio.

Intel System Studio состоит из нескольких частей. В базовый для всех ОС (кроме VxWorks) набор входят компилятор Intel C++ Compiler, библиотека Integrated Performance Primitives (IPP) для удобной работы с инструкциями SSE и AVX, библиотека Math Kernel Library (MKL) с набором готовых функций для решения часто встречающихся вычислительных задач, а также библиотека Threading Building Blocks (TBB) для работы с параллельными вычислениями, которая теперь также обзавелась бесплатной утилитой Flow Graph Designer для визуального анализа. Для Linux-систем, включая Android, предлагается дополненная Intel версия отладчика GDB. А вот наборы других утилит для всех платформ разные.

Например, только появившаяся поддержка Windows включает в себя Intel Inspector for Systems для поиска ошибок в исходном коде, Intel Energy Profiler и Intel VTune Amplifier for Systems. Energy Profiler позволяет найти неоптимальный код, который приводит к повышению потребления энергии – например, к слишком частому выводу процессора из режима сна. В последней версии добавлена поддержка новых процессоров Intel Core M, а также анализ работы GPU и оперативной памяти. А вот VTune Amplifier предназначен для удалённого сбора и анализа данных о производительности отлаживаемого приложения и системы в целом. Ещё одно нововведение – поддержка Android Lollipop и 64-битных приложений ART (Android RunTime). Тот же VTune Amplifier умеет собирать данные посредством SSH или ADB с Android.

Работа Intel VTune Amplifier for Systems

Работа Intel VTune Amplifier for Systems

Кроме того, для этой платформы доступны утилиты System Analyzer, Graphics Frame Analyzer (естественно, для OpenGL ES) и Platform Analyzer, позволяющие в режиме реального времени отлаживать приложения, активно использующие и CPU, и GPU. И это касается не только графических приложений, так как в System Studio доступна работа с кросс-платформенным расширением Intel Cilk, которое позволяет легко перенести обработку ряда ресурсоёмких задач с CPU на GPU Intel HD или Iris Pro. Естественно, это подходит в большей степени для функций, которые можно распараллелить, а нужно всё это для экономии энергии. Всё-таки GPU, да и прочие узкоспециализированные компоненты, более энергоэффективны при обработке надлежащих задач, нежели процессоры общего назначения.

Текущий уровень поддержки различных платформ

Текущий уровень поддержки различных платформ

Наконец, последнее нововведение касается отладки устройств при помощи прямого подключения по интерфейсу JTAG. В частности, улучшена работа с UEFI, что позволяет отловить труднообнаруживаемые обычными методами ошибки. Также появилась поддержка отладки устройств с новыми процессорами Intel Quark. Разработчики особо упирают на то, что необходимости в дорогом оборудовании для подключения прототипа к ПК нет, так как можно использоваться доступные OpenOCD-совместимые JTAG-устройства. Ну и самое приятное – это новые возможности отладки софта на процессорах Intel Core M, в которых появилась поддержка функции Intel Processor Tracing. Она позволяет точно отследить, что именно, когда и как исполнялось на CPU. При этом создание дампов требует минимальных накладных расходов.

⇡#Intel INDE 2015 и Context Sensing SDK – «седьмое» чувство в твоём смартфоне

Теперь поднимаемся на уровень выше, где нас ждут приложения для конечных пользователей. Здесь разработчики сталкиваются с тем, что софт нынче приходится писать сразу для несколько платформ – для iOS, многоликой Windows, не менее многоликой Android и Mac OS X. Причём для каждой из них существует свой инструментарий разработки, анализа и отладки. С кросс-платформенными играми всё ещё «веселее», так как для них оптимизация быстродействия стоит на первом месте. А ведь это очень и очень перспективный рынок: согласно прогнозам, в 2015 году на планшеты, смартфоны и фаблеты будет загружено порядка 44 млрд игровых приложений, а в следующем году их число вырастет до 50 млрд. Для упрощения разработки таких приложений Intel предлагает набор утилит под названием Integrated Native Developer Experience (INDE).

Первая версия INDE поддерживает установку на Windows 7-8 и Mac OS X версии 10.9 и выше, при этом она умеет интегрироваться в IDE Eclipse, Android Studio и Microsoft Visual Studio, так что теперь можно легко отлаживать Android-приложения в Visual Studio. Пока заявлена поддержка создания и отладки приложений на C++/Java для Android 4.3 и выше на устройствах с процессорами ARM и Intel, а также устройств под управлением Windows 7/8.1 и с CPU Intel. Родной поддержки iOS пока нет, но у Apple и так «своя атмосфера». Intel INDE включает немало библиотек и компонентов, упрощающих разработку ПО. Часть из них используется и в System Studio: Graphics Frame Analyzer и Debugger, System Analyzer и Platform Analyzer. Правда, в INDE доступна поддержка не только OpenGL (ES), но и DirectX. Доступны и компилятор Intel C++, совместимый с GNU C++ Compiler, и библиотеки Intel TBB/IPP. Для удобной отладки приложений под x86-версию Android предлагается Intel Hardware Accelerated Execution Manager (HAXM), который за счёт использования аппаратной виртуализации Intel VT на порядок быстрее классического эмулятора Android.

Кроме того, в INDE имеется поддержка OpenCL 2.0 (в том числе с SVM на Intel Core M) для переноса обработки данных CPU на GPU Intel. Впрочем, для ускорения и упрощения работы с видео и аудио Intel предлагает набор Media for Mobile, который позволяет мобильным приложениям работать с камерой в устройстве, с захватом и обработкой видео на лету, с потоковым вещанием и распознаванием. Для платформы Windows доступен отдельный Media SDK, который предоставляет кроссплатформенные API для работы с аппаратным ускорением функций обработки и редактирования видео, его конвертации и потокового вещания (в том числе для видеоконференций). Для ускорения работы с RAW-фото и RAW–видео (вплоть до 4K) с помощью GPU предназначен Media RAW Accelerator for Windows – пригодится для предварительной обработки отснятого материала на ноутбуке по пути с места съёмок до студии. Наконец, для (де)кодирования аудио в AAC и дорожек в MPEG-1/2 доступна библиотека Audio for Windows.

Это всё, в общем-то, стандартные библиотеки и наборы для разработчиков. Однако Intel припасла кое-что поинтереснее – Context Sensing SDK , то самое «седьмое» чувство. Данная библиотека позволяет использовать контекстно зависимые функции в мобильных приложениях, правда пока что только для Android и Windows. Как это работает? Здесь есть два варианта. Во-первых, так называемый исторический контекст – приложение собирает и сохраняет информацию о поведении пользователя локально или отправляет её на обработку в облако Intel. Со временем на основе этих данных можно определить привычки пользователя и предлагать в соответствии с ними те или иные функции или подсказки. На данный момент можно собирать данные о местоположении пользователя, посещении различных мест, маршрутах передвижения, оценках, поисковых запросах или определяемых разработчиком типах данных – например, о списках блюд при заказе доставки из ресторана. Как именно использовать эту информацию — зависит уже от разработчика софта, но, к примеру, можно определить, что пользователь предпочитает посещать кофейни одной сети. Если он окажется в другом городе и забьёт в поиск запрос «где ближайшие кафе», то первым делом ему можно показать кофейни именно этой сети.

Второй вариант – использование локального контекста для управления состоянием модулей Wi-Fi/Bluetooth и основного динамика, для изменения яркости дисплея и звукового профиля, для запуска приложений и отправки SMS или же для других действий, определяемых разработчиком. Контекст определяется текущим состоянием различных датчиков и параметров, число которых очень велико. Например, доступно отслеживание активности пользователя: ничего не делает (или телефон просто лежит в сторонке), идёт, бежит, прыгает, едет на велосипеде или в машине/поезде, держит в руках смартфон, смотрит на экран, подносит аппарат к уху или уже убрал его в сумку и пошёл дальше по своим делам — и так далее. Можно получить информацию о последних звонках и сообщениях и связать их с информацией из адресной книги — вплоть до определения взаимоотношений между пользователем и другим абонентом (член семьи, коллега, знакомый, супруг(-а), ребёнок и так далее. Параметров, определяющих положение смартфона в пространстве, тоже немало: повороты и переносы по трём осям, встряхивание, различные жесты (например, рисование букв/цифр, показ направления), портретная/альбомная ориентация, лежит ли смартфон на столе и как именно лежит – экраном вниз или вверх.

А ведь есть распознавание и более хитрых действий – например, человек на секунду подвинул планшет к себе, чтобы посмотреть время, и тут же отложил назад. Можно определить тип аудиоокружения: тишина, речь (и даже пол говорящего), шум толпы, музыка, механические звуки, движения пользователя. Естественно, доступны и прочие привычные сведения о погоде, о ближайших точках общепита, о записях в календаре, о состоянии батареи и режиме энергопотребления, об установленных и работающих приложениях, о ситуации на дорогах, о состоянии сетевых подключений, о технических характеристиках устройства и так далее. Все эти данные нужны для создания правил. Либо вручную, то есть при определённых показаниях сенсоров или при изменении параметров запускается то или иное действие. Либо же в режиме самообучения – если пользователь, например, приходя домой в будние дни, каждый раз включает Wi-Fi и переводит аппарат в тихий режим, то почему бы не выполнять все эти действия за него.

⇡#Intel XDK – для всех платформ

Альтернативным вариантом создания действительно кросс-платформенных приложений может стать использование HTML5 вкупе с JavaScript и CSS3. Именно для этого Intel выпустила бесплатный набор разработчика XDK для создания гибридных и HTML5-приложений. Главное преимущество – скорость и простота разработки. Intel XDK предлагает дизайнер интерфейса приложения, редактор кода, эмуляторы различных смартфонов и планшетов, возможность отладки прямо на устройствах Android/iOS, средства профилирования и оптимизации, а также возможность быстрой сборки пакетов для публикации в магазинах приложений Apple, Amazon, Google, Microsoft, Nook, Tizen и в виде расширений для Chrome, Firefox и Facebook или же просто в качестве обычного веб-приложения. За счёт плагинов Apache Cordova или при использовании платформы Crosswalk (для Android) и подключении репозиториев GitHub функциональность приложения можно значительно расширить путём использования API самой ОС и сторонних сервисов. В качестве примера обычно приводят использование Dolby Digital API (естественно, устройство должно иметь аппаратную поддержку Dolby) или создание простеньких игр с использованием WebGL. Кроме того, Intel предлагает специальную версию XDK для Интернета вещей, позволяющую создать приложения для управления «умными» устройствами со смартфонов и планшетов.

Intel Media Server Studio 2015 – для о-о-очень больших видео

Пакет Media Server Studio предназначен для создания высокопроизводительного ПО для обработки видео. В последние годы потребление потокового видео стремительно растёт, а вот скорость интернет-каналов и в особенности последней мили не всегда успевает расти так же быстро. Так что видео приходится многократно перекодировать, чтобы дать каждому пользователю наилучшее качество при разумных требованиях к пропускной способности канала – посмотрите для примера на YouTube, который вынужден даже для UHD-роликов готовить ухудшенные вплоть до 144p версии. С видеоконференциями и прямыми трансляциями всё ещё сложнее, так как видео приходится обрабатывать в реальном времени. Ближайший чемпионат мира по футболу будет транслироваться в 4K-разрешении, а к 2020 году прогнозируют появление не менее 200 UHD-каналов. Для 8K-видео всё ещё хуже – несжатый поток на 120 к/с требует канал шириной до 48 Гбит/с, да и для сжатого видео понадобится около 0,5 Гбит/с. Пакет Media Server Studio как раз и предназначен для создания приложений, способных эффективно обрабатывать видео на серверах с CPU Intel – (де-) кодировать, конвертировать, транслировать, распознавать и искать объекты, накладывать эффекты, создавать конвейеры обработки видео (VPP) и так далее.

Впрочем, в идеальном с точки зрения компании случае весь путь от съёмки до просмотра видео пользователем проходит с участием решений Intel – съёмка и предварительная обработка идёт в приложении, написанном с использованием INDE, потом видео монтируется и обрабатывается на серверах с ПО на базе Media Server Studio и передаётся пользователю, который, конечно же, смотрит его в программе, созданной опять-таки в INDE. Для обработки видео используются и ресурсы CPU, и встроенной графики. На презентации также отмечалось, что пара стоек машин с новыми Intel Xeon E3, которые как раз имеют встроенный GPU, способна заменить десяток стоек с серверами, использующими ускорители «одной известной компании». Помимо средств обработки видео, в пакете имеются утилиты Video Pro Analyzer 2015 и Visual Quality Caliper Tool для поиска артефактов и ошибок кодирования и Stress Bitstreams and Encoder 2015 для тестирования корректности работы кодеров видео, а также VTune Amplifier для профилирования приложений. Intel Media Server Studio 2015 поддерживает (де-) кодирование форматов H.264, H.265 (8- и 10-бит), MPEG-2, VC-1, MVC, MJPEG (только для Windows), AAC LC HE AAC V1 и декодирование AAC LTP, AAC PS, HEAAC V2 и MPEG-Audio (включая MP3).

⇡#Intel Graphics Technology – запускаем код на Intel HD/Iris Graphics

Идея переноса части вычислений, а особенно тех, которые хорошо выполняются параллельно, на графические карты и впоследствии уже на специализированные ускорители, мягко говоря, не нова – NVIDIA CUDA, AMD FireStream, а теперь и OpenCL активно используются разработчиками, да и у самой Intel есть карты Xeon Phi. Однако сейчас встроенная графика уже не так слаба, как раньше, – в современных процессорах Intel Core она занимает больше половины площади кристалла, а по «чистой» производительности она теоретически сопоставима с восемью CPU-ядрами. Так почему бы не перенести часть задач на GPU (сделать оффлоад)? Типичные сценарии для ускорения – сложение массивов или, например, работа с матрицами.

Прирост производительности различных алгоритмов при частичном или полном оффлоаде функций на Intel HD/Iris Graphics

Прирост производительности различных алгоритмов при частичном или полном оффлоаде функций на Intel HD/Iris Graphics

Кроме того, к плюсам данного решения можно отнести: а) наличие общей памяти для CPU и GPU, что снижает накладные расходы; б) определённую универсальность – если на хосте нет интегрированной графики, то код будет выполняться на CPU; в) простоту оффлоада, так как требуются лишь небольшие изменения исходного кода путём использования Intel Cilk и добавления директив компилятора. Минусы, в общем-то, тоже очевидны. Во-первых, жёсткая привязка к «железу» и компилятору Intel. Во-вторых, код всё равно придётся модифицировать. В-третьих, из-за ограничений GPU работа с 64-битными данными не так эффективна.

Блок-схема современной интегрированной графики Intel

Блок-схема современной интегрированной графики Intel

Заключение

Это, конечно, весьма краткий обзор текущих средств разработки, создаваемых Intel. На конференции также было рассказано о выпуске Intel Parallel Studio XE 2016 Beta, но это всё-таки весьма специфичный продукт для высокопроизводительных вычислений. Те, кому он действительно жизненно необходим, и так уже изучают его возможности, а для остальных компания подготовила описание новшеств и текущих проблем, а также серию вебинаров.

Рядовым же пользователям интересны, конечно, не средства разработки, а то, что с их помощью могут сделать программисты. Основные темы всё те же – переход к 4K-видео, повышение энергоэффективности и быстродействия за счёт переноса задач на GPU и распараллеливания, активное использование облачных технологий, кросс-платформенность, реализация концепций Интернета вещей и «умных» приборов. Самая интересная и в то же время самая пугающая из представленных технологий – это возможности самообучения в Context Sensing SDK. Если грамотно использовать все её возможности, то получится просто «магия». Впрочем, вы уже знаете, как оно всё работает, так что хотя бы один закон Кларка вам уже не грозит.