Как подчеркнул Линли Гвеннап, главный аналитик компании Linley Group, большая часть современного программного обеспечения написана для одноядерных процессоров, и его придется переписать или модернизировать, чтобы задействовать возможности многоядерных процессоров, предлагаемых Intel, AMD, Sun Microsystems и другими производителями.
По словам Гвеннапа, готовые приложения работают быстрее на процессорах, имеющих не более четырех ядер, а при увеличении этого числа уровень масштабирования производительности перестает быть приемлемым. Наличие этой проблемы подтверждает и опубликованный нынешней весной отчет Gartner.
Производители процессоров и систем начали обучать разработчиков и предоставлять им более эффективные инструментальные средства для программирования в расчете на многоядерные процессоры. В 2008 году Intel и Microsoft объявили о намерении инвестировать 20 млн долл. в создание двух специализированных исследовательских центров в университетах США. По словам Гвеннапа, пожалуй, самая серьезная проблема, с которой сейчас столкнулась отрасль, — отсутствие у большинства разработчиков эффективного инструментария для создания программ, рассчитанных на процессоры с несколькими ядрами.
Есть идея создавать приложения так, чтобы можно было разделять определенные части вычислительной задачи, например расчетную часть или вывод изображения, и одновременно выполнять их на нескольких ядрах. Но эта модель, часто называемая параллельной обработкой, пока зачастую ограничивается специализированными, высокопроизводительными вычислительными средами.
В последние годы Intel и AMD используют увеличенное число ядер как более эффективный с точки зрения энергозатрат способ повышения производительности процессора, кардинально отличающийся от традиционной практики наращивания тактовой частоты. Intel использует восемь ядер в своих процессорах Nehalem-EX, а AMD разрабатывает 12-ядерные процессоры для серверов. Одновременно поддерживается многопоточность, что позволяет каждому из ядер работать одновременно с несколькими нитями кода.
Это значит, что все наиболее распространенные приложения необходимо переписать так, чтобы в них использовались возможности дополнительных ядер. Это крайне трудная работа, и она чревата новыми видами программных ошибок. Одна из наиболее распространенных — «состояние гонки» (race conditions), когда результат вычислений зависит от того, в каком порядке будет завершено выполнение разных элементов задачи. Если порядок будет нарушен, могут возникнуть ошибки.
Несмотря на то что возможно, самые серьезные проблемы связаны с программированием, необходимы и аппаратные изменения, чтобы преодолеть такие проблемы, как задержка при доступе к памяти и низкие скорости шины.
В конечном итоге основное бремя может лечь на плечи разработчиков, которые должны будут устранить дисбаланс между аппаратным и программным обеспечением, чтобы создавать более эффективные параллельные программы.