Microsoft и Intel, объявляя в середине марта о намерении выделить 20 млн долл. двум американским университетам, преследовали вовсе не благотворительные цели. Таким образом корпорации надеются стимулировать не только создание новых методов параллельного (в том числе «многоядерного») программирования, но и обучение таким методам.
«Безусловно, во всем мире ощущается нехватка специалистов, владеющих навыками написания программ с параллельной обработкой, — заявил Дэн Рид, директор Microsoft по масштабируемым и многоядерным вычислениям. — Щедрые инвестиции направлены в том числе и на повышение информированности академического сообщества, поскольку именно оттуда придет следующее поколение разработчиков».
Если в течение многих лет наращивание тактовой частоты процессоров служило гарантией, что код приложения будет работать все быстрее и быстрее, то сейчас, с появлением многоядерных архитектур, ситуация изменилась.
Проблема заключается в том, что простое увеличение числа ядер в центральном процессоре не приводит к увеличению скорости или производительности последовательного кода приложений, что подтверждают авторы недавнего отчета компании Forrester Research.
«Для того чтобы добиться адекватной производительности и подготовиться к работе с многоядерными процессорами более высокой плотности, а таковые появятся в ближайшем будущем, разработчикам приложений необходимо писать код, в котором автоматически формируются несколько одновременно выполняемых цепочек. Все процессы: управление назначением цепочек, синхронизация параллельной работы и управление совместно используемыми данными — должны синхронизироваться для предотвращения возможных проблем с согласованностью при выполнении многопоточного кода», — пишут аналитики Forrester.
И четырехъядерные процессоры, которые сейчас получают массовое распространение, в скором времени создадут предпосылки для перехода на кардинально иные архитектуры, считают в Forrester: «Предполагается, что в 2009 году появятся серверы в архитектуре x86, имеющие 64 процессорных ядра, а выпуск аналогичных настольных систем начнется к 2012 году».
Эта ситуация заставляет производителей процессоров и ведущих производителей программного обеспечения предпринимать активные действия, чтобы информировать профессиональное сообщество о преимуществах и сложностях программирования для многоядерных архитектур.
К примеру, популярный проект TopCoder приглашает своих партнеров поработать над различными сценариями конкурсов по параллельному программированию, а недавно уже начал проводить серию специальных конкурсов.
Майк Лидон, директор TopCoder по технологиям, подчеркнул, что программирование для многоядерных процессоров остается уделом очень немногих.
«Навыки, которыми обладают специалисты в данной сфере, варьируются довольно широко, — заметил он. — Естественно, высококлассные разработчики знакомы с многопоточностью. Но чуть ниже по иерархии число специалистов, обладающих такими навыками, резко падает».
«Для меня это удивительно, поскольку многопоточное программирование — вещь далеко не новая», — добавил Лидон. И действительно, одна из статей по этой теме, опубликованная на сайте Microsoft MSDN, датируется еще 1993 годом.
«Думаю, все начинается с колледжей, — подчеркнул он. — Я крайне редко слышал об учебных заведениях, в которых преподавали бы многопоточное программирование, но надеюсь, что эта ситуация очень скоро изменится».
Вместе с тем в отчете Forrester отмечается, что основные операционные системы и большинство продуктов, относящихся к категории программного обеспечения промежуточного слоя, уже готовы к многопоточным операциям и к работе с теми многоядерными архитектурами, которые производители собираются предлагать «в ближайшее время». При этом разработчикам целесообразно шире прибегать к использованию тех платформ и инструментальных средств разработки, которые полнее адаптированы к задачам, связанным с многоядерными вычислениями.
Так или иначе, Рид уверен, что со временем обеспечение многопоточности станет неотъемлемым навыком любого профессионального разработчика программного обеспечения.
В то же время большинство имеющихся сейчас ресурсов для параллельных вычислений плохо скрывают сложность кодирования для многопоточных архитектур. Сейчас разработчикам-профессионалам предлагают определенные возможности, но большинство из них — это расширения языков довольно низкого уровня и библиотеки, утверждают аналитики Forrester.
Например, в феврале компания AMD передала сообществу Open Source свыше 3200 программных утилит в рамках проекта Framewave, который, как утверждается, поможет разработчикам создавать многопоточные приложения для процессоров в архитектуре x86.
«Библиотеки не могут помочь в разрешении всех вопросов, но мы рассматриваем это как шаг в верном направлении, — подчеркнула Маргарет Льюис, директор AMD по стратегии в области программного обеспечения. — Кое-что вы можете делать уже сейчас, пока ожидаете появления более совершенного инструментария, который позволит увеличить использование потенциала многопоточности в ваших приложениях».
На рынке уже есть несколько продуктов более высокого уровня, таких как платформа, предлагаемая компанией RapidMind. Это решение за счет использования уровня абстракций «распараллеливает» по нескольким ядрам однопоточный код, написанный на C++.
Однако, как заявляет Лидон, только идеалист может считать, что создания несколько более эффективных инструментальных средств будет достаточно.
«Когда вы действительно доходите до тех точек в коде, где можно добиться более высокой производительности за счет организации нескольких цепочек,только интеллект человека позволит увидеть, как именно это можно сделать», — заметил он.