Введение

 

С появлением глобальной сети интернет, вычислительные ресурсы стали концентрировать в центры обработки данных (ЦОД). Уже сейчас совокупные вычислительные ресурсы ЦОД сравнимы с общей мощностью ПК в мире. По прогнозам аналитиков через десять лет практически все высокопроизводительные процессоры будут производиться для ЦОД, а ПК превратятся в удобные терминалы для доступа к глобальной сети. Поэтому на данном этапе создание специализированных процессоров и платформ для ЦОД стало экономически обоснованной и актуальной задачей.

 

Как увеличить производительность ЦОД? Ответ на этот вопрос мы видим в разработке новых подходов к проектированию узлов ЦОД, в первую очередь процессоров, разработке существенно многоядерных многопотоковых чипов "с чистого листа" не содержащих "наследства" одноядерной эры, максимально использующих площадь кристалла. Разработанные совместно с соответствующей ОС и набором базового серверного ПО такие процессоры будут востребованы в универсальных ЦОД и облачных сервисах, где не нужна арифметика с плавающей точкой, не нужна характерная для персональных компьютеров периферия, но требуется предельная энергоэффективность и многопотоковость на заданном ограниченном наборе прикладных программ.

 

Каковы новые подходы? С одной стороны, современные возможности микроэлектроники позволяют располагать на кристалле множество вычислительных ядер. С другой, практически любая вычислительно сложная программа может, после некоторой обработки, быть представлена как код, содержащий множество фрагментов, возможно достаточно коротких, группы которых допускают параллельное исполнение. Таким образом, нужен механизм, позволяющий выполнять параллельно с очень низкими накладными расходами огромное количество достаточно коротких фрагментов кода из единой программы.

 

Параллельное исполнение кода сразу приводит к проблеме доступа к совместно используемым данным, в том числе разрешению конфликтов доступа к общей памяти из тысяч исполняемых параллельно потоков и синхронизации данных в исполняемых потоках. Поэтому необходим механизм, который бы позволял на уровне контроллера памяти работать "по готовности данных", желательно без дополнительных усилий со стороны программиста и накладных расходов со стороны ОС.