Предпосылки, вызовы, модели мира современных высокопроизводительных вычислений
По мере развития технических средств изменения окружающего мира, меняются потребности человека к производительности вычислительных систем, меняются и требования приложений. Одним из возможных решений является разработка и применение систем с массовым параллелизмом - кластеров, Grid-систем, многопроцессорных комплексов, систем на многоядерных процессорах.
Компьютерный мир все плотнее и плотнее объединяется с миром реальным. Данный процесс основывается на успехах полупроводниковой промышленности, расширении и удешевлении сетевых услуг, развитии беспроводных технологий связи. Появился специальный термин "все-проникающие компьютерные системы" - pervasive computing. Компью-тер перестал быть ЭВМ, электронной вычислительной машиной, и нео-жиданно выяснилось, что в своем первоначальном виде компьютер не вполне соответствует окружающей среде. Реальный мир во всех его про-явлениях параллелен, а современный компьютерный мир по своей при-роде последователен: данные передаются по последовательным каналам, команды выполняются одна за другой, и, как следствие, - любые попыт-ки распараллеливания и адаптации к условиям реального мира рождают чрезвычайно сложные и искусственные решения [1,2]
Проблемы
Одну из фундаментальных слабостей современных компьютеров вскрыл в 1977 году Джон Бэкус в речи, с которой он выступил при полу-чении Тьюринговской премии. С тех пор в ход пошло прозвучавшее в ней выражение "бутылочное горло фон Неймана", символизирующее собой органический недостаток архитектурной схемы, которая ассоциируется с именем Джона фон Неймана. Альтернативной архитектурой является "гарвардская" архитектура, называемая так по имени машины Говарда Ай-кена Harvard Mark I, где программы хранились на перфорированных лен-тах, а обрабатываемые данные - в релейных массивах. В современных микроконтроллерах перфоленты заменила память ROM, реле - память RAM, но суть осталась прежней: в процессоре встречаются два независи-мых и не сдерживающих друг друга потока команд и данных.
Происходит смена приоритетов при разработке процессоров, систем на их основе и, соответственно, программного обеспечения. Направле-ние смены приоритетов выражает мнение [1] Дэйва Паттерсона, профес-сора Калифорнийского университета в Беркли, изобретателя RISC-про-цессоров и RAID-массивов, который считает, что грядет новое время, ког-да перестанут действовать прежние прописные истины и им на смену придут новые. Однако переход этот осложняется наличием трех "стен".
- Энергетическая стена. Старая истина - энергия не стоит ничего, транзисторы дороги. Новая истина - дорога энергия, транзисто-ры не стоят ничего.
- Стена памяти. Старая истина - память работает быстро, а опера-ции с плавающей запятой медленны. Новая истина - системную производительность сдерживает память, операции выполняются быстро.
- Стена параллелизма на уровне команд. Старая истина - производи-тельность можно повысить за счет качества компиляторов и таких архитектурных усовершенствований, как конвейеры, внеочередное выполнение команд, сверхдлинное командное слово (Very Long Instruction Word, VLIW), явный параллелизм команд (Explicitly Parallel Instruction Computing, EPIC) и др. Новая истина - естест-венный параллелизм, команды допустимы и длинные, и короткие, но выполняются они параллельно, на разных ядрах.
Выделяют также так называемую "стену ментальности" (educational wall). За время существования компьютеров сложилась определенная образовательная традиция. Вообще говоря, несовершенство и избыточная затратность современных компьютерных систем становится популярной темой для обсуждения. По мнению Билла Инмона, одного из создателей хранилищ данных, все современные решения для работы с данными объединяет то, что стоимость функциональных компонентов (транзисторы, диски и т.д.) становится все менее значимой, а основная стоимость продуктов приходится на поддерживающую инфраструктуру.
Помимо очевидных технологических претензий к фон-неймановской архитектуре (излишняя сложность, неспособность к распараллеливанию, низкий коэффициент полезного использования транзисторов и т.п.) есть еще одна группа претензий. Несколько десятилетий назад существовал повышенный интерес к искусственному интеллекту, делались прогнозы на возможности компьютеров с системами искусственного интеллекта. Ныне же на то, чтобы приспособить компьютеры для решения интеллектуальных задач, остались, в основном, языковые возможности. Многие прогнозы не оправдались.
За последнее десятилетие удельная производительность процессоров в пересчете на число транзисторов упала на один-два порядка. Дальнейшее развитие полупроводниковых технологий по закону Мура не может компенсировать неэффективность современных процессоров. Диспропорцию между числом транзисторов на кристалле и удельной производительностью, которая выражена в скорости выполнения, отнесенной к площади, иногда называют "дефицитом Мура" (Moore Gap). Показатели быстродействия процессоров (в частности, тактовые частоты) достигли практически граничных показателей, плотность энергии увеличивается пропорционально уменьшению размеров транзисторов, и, соответственно, увеличиваются проблемы с теплоотводом.
Нетрудно прийти к выводу, что если нельзя использовать возможности закона Мура на одном ядре из-за исключительной сложности такого ядра, то следует пойти по пути увеличения числа ядер. Именно так поступили в Sun Microsystems, выпустив 8-ядерный процессор Niagara. Количественный рост, постулируемый законом Мура, предопределяет неизбежные перемены, и в какой-то момент количество должно перейти в качество. Сторонники EPIC-подхода также склонились к многоядерному решению. На форуме IDF осенью 2004 года Пол Отеллини, генеральный директор Intel, заявил:" Мы связываем наше будущее с многоядерными продуктами; мы верим, что это ключевая точка перегиба для всей индустрии : : Это не гонка. Это радикальное изменение в компьютинге, мы не имеем права рассматривать происходящее как простую технологическую гонку ".
Мнения ведущих специалистов
Настрой разработчиков процессоров можно оценить по следующим их словам [1].
Ананд Агарвал, профессор Массачусетского технологического института, основатель компани Tilera, выступая на конференции, посвященной проблемам современных процессоров, сказал следующее: "Процессоры становятся все более и более единообразными и обезличенными, критичнее становится система". "Процессор - это транзистор современности".
Энди Бехтольсхайм (Sun Microsystems): "Больше нельзя рассматривать производительность как серьезное ограничение. Теперь главное ограничение - ввод-вывод, а производительность ввода-вывода невозможно поднять за счет простого увеличения плотности транзисторов".
Журнал Dr. Dobb's Journal, август 2006 года: "Только подумайте: впервые в истории вычислительной техники массовые компьютеры не будут строиться на основе фон-неймановской архитектуры - они станут параллельными. Наши приложения смогут одновременно выполняться на нескольких ядрах. Такой переход сулит огромные возможности, но и потребует много усилий. Конечно, принцип параллельных вычислений не является каким-либо новшеством. Их исследовали многие из специалистов, упомянутых ранее. Такие компании, как Cray, занимаются параллелизмом уже много лет. Но большинство программистов, создающих приложения для массовых вычислительных систем, не использовали эту технологию повседневно. Только сейчас начинается процесс переноса принципов многопоточности и параллелизма в область массового программирования".
Можно говорить о двух заметно разнящихся между собой тенденциях в процессе увеличения числа ядер. Одна носит название мультиядерность (multi-core). В этом случае предполагается, что ядра являются высокопроизводительными и их относительно немного; сейчас их число - два-четыре, и согласно закону Мура оно будет периодически удваиваться. Основных недостатков два: первый - высокое энергопотребление, второй - высокая сложность чипа и, как следствие, низкий процент выхода готовой продукции. При производстве 8-ядерного процессора IBM Сell только 20% производимых кристаллов являются годными. Другой путь - многоядерность (many-core). В таком случае на кристалле собирается на порядок большее число ядер, но имеющих более простую структуру и потребляющих миливатты мощности. Сейчас количество ядер варьируется от 40 до 200, и если закон Мура будет выполняться и для них, то можно ожидать появления процессоров с тысячами и десятками тысяч ядер. Данный подход попадает в категорию так называемых "разрушительных инноваций" (disruptive innovation). Ни одна из современных школ программирования не в состоянии справиться с грядущими проблемами. Неслучайно на суперкомпьютерной конференции, прошедшей в Дрездене в 2007 году, один из центральных докладов назывался "Развал системы традиционных знаний в многоядерную эру. Все что вы знаете - неверно".
Очевидно, что увеличение в десятки и сотни раз числа все тех же фон-неймановских ядер на одной подложке не является панацеей. В одном из интервью Дональд Кнут сказал по поводу упрощенного подхода к увеличению числа ядер следующее: "Мне кажется, у проектировщиков процессоров иссякли идеи, и они хотят переложить ответственность за невозможность повышать производительность компьютеров в соответствии с законом Мура на тех, кто создает программы. Они предлагают процессоры, отлично работающие на отдельных тестах, но я не удивлюсь, что вся эта эпопея многоядерности закончится неменьшим провалом, чем Itanium,где все выглядело прекрасным, пока не выяснилось, что компиляторы с соответствующими ему возможностями предвидения невозможно написать.
Сколько вы знаете программистов, относящихся с энтузиазмом к будущим многоядерным процессорам? У всех, кого я знаю, они лишь вызывают огорчение, хотя разработчики процессоров говорят, что я неправ. Я знаю приложения, адаптируемые к параллельному исполнению; это графический рендеринг, сканирование изображений, моделирование биологических и физических процессов, но все они требуют подходов, которые чрезвычайно специализированы. Моих знаний хватило, чтобы написать о них в "Искусстве программирования", но я считаю время, затраченное на них, потерянным, в этой области все быстро меняется, и совсем скоро написанное мной никому не будет нужным. Мультиядерность в том виде, как ее представляют, сейчас не прибавляет мне счастья".
Многоядерные процессоры, если все сводится к размещению большего числа классических простых ядер на одной подложке, нельзя воспринимать как решение всех проблем. Их чрезвычайно сложно программировать, они могут быть эффективны только на приложениях, обладающих естественной многопоточностью.
На конференции Hot Chips, которая прошла в Стэнфордском университете в конце августа 2009 года, производители рассказали о своих планах по выпуску восьмиядерных серверных процессоров [4].
Традиционным средством повышения производительности процессоров всегда было увеличение тактовой частоты, но рост потребления энергии и проблемы с отводом тепла заставили разработчиков вместо этого наращивать количество ядер.
Представители IBM впервые подробно рассказали об архитектуре Power7, которая приходит на смену представленной два года назад Power6, предназначавшейся для Unix-серверов корпорации. Архитектура Power7 является для IBM заметным шагом вперед. От двухъядерных моделей корпорация переходит к четырем, шести и восьми ядрам, и каждое из них способно выполнять четыре потока команд одновременно.
Процессоры Power7 должны выйти в первой половине 2010 года. Они будут изготавливаться по 45-нанометровому технологическому процессу и, как утверждают в IBM, их можно будет устанавливать в нынешних серверах моделей Power 570 и Power 595.
Инженеры Fujitsu рассказали о восьмиядерном процессоре SPARC64 - новой версии выпущенного в июле прошлого года четырехъядерного процессора SPARC64 VII. Об этом процессоре, получившем кодовое наименование Venus, вкратце упоминалось в докладе на конференции Hot Chips 2008 года, но никаких подробностей не приводилось. Процессоры SPARC64 используются в серверах Fujitsu и Sun Microsystems (правда, планы последней в свете слияния с Oracle повисли в воздухе).
Представители AMD сделали доклад о применении в лезвийных серверах процессоров Magny-Cours. Это 12-ядерные процессоры, которые объединяют на одной микросхеме два шестиядерных процессора, соединенных шиной AMD Hyper Transport. Название им взяли у известной гоночной трассы во Франции. Выход Magny-Cours запланирован на начало 2010.
Специалисты Intel сообщили о работе над восьмиядерными двухпоточными процессорами Nehalem-EX, выход которых назначен на первую половину 2010 года. Но о Tukwila - четырехъядерной версии процессора Itanium - в их докладе сказано не было. Его появление уже несколько раз откладывалось и теперь ожидается в будущем году.
Но вопрос в том, в какой степени современное программное обеспечение - и, следовательно, конечные пользователи - способно использовать возможности многоядерных процессоров. Приложения должны быть написаны так, чтобы решаемые ими задачи можно было разбивать на подзадачи, выполняемые на нескольких ядрах параллельно.
Аналитик компании Gartner Карл Кланч в январе подготовил пессимистический доклад на эту тему. Производители процессоров, пишет он, вывели количество ядер далеко за тот уровень, для которого были разработаны основные программные средства - операционные системы, инструментарий промежуточного слоя, приложения, виртуализационные средства и т. д.
Большая часть современных программных систем, считает Кланч, обладает ограничениями, которые не дадут им воспользоваться всеми имеющимися ядрами. Пользователям же, чтобы угнаться за развитием аппаратной платформы, придется чаще обновлять программное обеспечение.
Аналогичное мнение выразили в июне аналитики IDC. За некоторыми исключениями, считают они, производительность большинства современных приложений при наличии свыше четырех логических процессоров стагнирует.
Другие смотрят на вещи более оптимистично. Большая часть программ, для которых важна производительность процессора, полагают они, на сегодняшний день уже параллелизована, потому что их разрабатывали в расчете на кластеры серверов или на крупные системы SMP-архитектуры со множеством процессоров.
"Не думаю, что это станет препятствием, и любой, кто так думает, вероятно, слишком пессимистичен", - считает аналитик Натан Бруквуд из компании Insight64 [4].
Одной из наиболее интересных точек зрения на происхождение "стен" и других недостатков существующего компьютерного миропорядка обладает немецкий профессор Рейнер Хартенштайн, с 1977 года возглавляющий лабораторию Xputer Lab, одну из немногих, где занимались тематикой, связанной с реконфигурируемым компьютингом (Reconfigurable Computing).
Профессор Хартенштайн - автор таких терминов, как "антимашина" (anti-machine), "конфигурируемое аппаратное обеспечение" (configware), "структурное проектирование аппаратного обеспечения" (structured hardware design) и ряда других. Хартенштайн является создателем KARL, новаторского языка для проектирования аппаратного обеспечения. Реконфигурирование - это перепрограммирование аппаратуры; теоретически его можно применять к массивам, собранным из ядер с фон-неймановской архитектурой, но гораздо перспективнее - к ядрам, представляющим собой антимашины. Рамамути в ряде своих работ показал, что чаще всего компьютеры с массовым параллелизмом, содержащие тысячи и десятки тысяч процессоров, оказываются менее продуктивными, чем ожидается при их проектировании. Основные причины этого эффекта, называемого самим Рамамути "суперкомпьютерным кризисом", - наличие "стены памяти" и сложность программирования параллельных задач, что тоже является следствием фон-неймановской архитектуры. Главный вывод Хартенштайна состоит в том, что и энергетическая стена, и стена памяти, и стена параллелизма на уровне команд являются прямым следствием фон-неймановской архитектуры. Из-за технологических ограничений Джоном фон Нейманом была избрана схема, в основе которой лежит управляемый поток команд, программа, выбирающая необходимые для команд данные. Этим определяется канонический состав архитектурных компонентов, составляющих любой компьютер, - счетчик команд, код операции и адреса операндов; он остается неизменным по сей день. Все мыслимые и немыслимые усовершенствования архитектуры фон Неймана в конечном счете сводятся к повышению качества управления потоком команд, методам адресации данных и команд, кэшированию памяти и т.п. При этом последовательная архитектура не меняется, но сложность ее возрастает. Очевидно, что представление о компьютере как об устройстве, выполняющем заданную последовательность команд, лучше всего подходит для тех случаев, когда объем обрабатываемых данных невелик, а данные являются статическими. Но в современных условиях приходится сталкиваться с приложениями, где относительно небольшое количество команд обрабатывает потоки данных. В таком случае целесообразно предположить, что компьютером может быть и устройство, которое имеет каким-то образом зашитые в него алгоритмы и способно обрабатывать потоки данных. Такие компьютеры могли бы обладать естественным параллелизмом, а их программирование свелось бы к распределению функций между большим числом ядер.