Борис Бабаян: время первых анонсов многоядерных процессоров прошло, теперь настало время писать для них программы
Появление многоядерных процессоров в реальной жизни требует от софтверной индустрии новых подходов к созданию программного обеспечения, ориентированного на параллельные вычисления. Переходить к ним призывали слушателей московского форума Intel для разработчиков ведущие исследователи корпорации. Ведь уже к концу этого года больше половины процессоров Intel будут выпускаться с двумя ядрами, а в следующем году многоядерными станут почти все процессоры.
Борис Бабаян: «Для того чтобы работать с параллельными системами, нужно мощное математическое обеспечение» |
Борис Бабаян, заслуженный инженер-исследователь корпорации Intel, считает параллельные вычисления единственным способом логического ускорения архитектуры вычислительных машин. Свой краткий экскурс в историю параллельных вычислений Бабаян сопроводил примерами собственных разработок, а также продуктов Intel.
Параллельные вычисления начали развиваться практически одновременно с началом развития вычислительной техники в нашей стране и в мире. Первой советской параллельной машиной стала БЭСМ, параллелизм которой сводился к одновременной обработке битов. Следующий шаг в этом направлении был сделан при появлении в нашей стране процессора «Эльбрус-1», а в США — Pentium Pro. Оба они смогли реализовать подход, названный суперскалярной архитектурой, который позволил микропроцессорам обрабатывать несколько инструкций за один такт. Кроме того, в них был реализован еще один уровень параллелизма — многопроцессорность: несколько чипов могли работать над одним пулом данных.
В процессорах Itanium и «Эльбрус-3» была реализована возможность управлять параллельными вычислениями при помощи программного обеспечения. И наконец, новый виток параллелизма, на который выходит индустрия, заключается в использовании нескольких ядер в одном процессоре.
«Много процессоров можно поместить в один кристалл, и это логическое продолжение всей истории развития параллелизма с 50-х годов», — полагает Бабаян.
Воспользоваться увеличением производительности, которое появится при переходе на многоядерные процессоры, не так-то просто. Нужны новые программы. Можно, конечно, ничего не менять, однако выигрыш в этом случае будет небольшим, уверяют в Intel. Масштаб задачи по переходу на новое программное обеспечение куда больший, если сравнивать с переходом отрасли на 64-разрядные вычисления.
Тогда задача сводилась к изменению разрядности. Теперь же нужно менять алгоритмы программ и изначально проектировать их под параллельные вычисления. Процесс состоит из четырех этапов. Сначала определяются участки кода, которые вызывают наибольшее потребление вычислительных ресурсов и являются главными кандидатами на распараллеливание, далее происходит собственно определение потоков в приложении, после чего осуществляются процессы отладки и оптимизации.
Одна из опасностей, которая возникает в этом процессе, — «гонка данных», когда два потока пытаются одновременно получить доступ к одному ресурсу, как если бы два кассира пытались выписать билеты пассажирам на одно и то же место в самолете. Проблема решается предоставлением процессу монопольного доступа к ресурсу на время его выполнения. Однако если излишне блокировать ресурсы для одного потока, то это приведет к снижению быстродействия программы. Задача оптимизации кода состоит в том, чтобы найти разумный баланс между выполнением процессов в эксклюзивном режиме и распараллеливании остальных процессов, не требующих монопольного доступа к данным. Для ее решения предназначен специальный инструментарий, который Intel представила на форуме.
Специализированные утилиты — это лишь один элемент программы по переходу на параллельные вычисления, считают в Intel. Помимо них нужны новые алгоритмы, поддержка операционных систем, обучение, как внутри компаний, так и на университетском уровне. В рамках образовательных программ Intel планирует осуществить поддержку вузов, которые включат программирование для многоядерных систем в свои учебные планы.
Сейчас распараллеливание программ осуществляется при их создании вручную. Динамическая оптимизация (когда этот процесс осуществляется автоматически во время выполнения программы) является областью, где ведутся активные исследования. Но распараллеливание на уровне двоичного кода представляет гораздо более сложную задачу, нежели то же самое на уровне исходного кода, и реализация идеи динамической оптимизации пока представляет неразрешимую задачу.