Компьютер, способный работать без сбоев, без аварийных остановок, остаётся голубой мечтой с незапамятных времён. Избавиться от ошибок мы давно не надеемся: даже программы с открытым исходным кодом всё ещё содержат примерно одну ошибку на каждые две тысячи строк. В наших силах, похоже, лишь защититься от последствий.
Ещё двадцать лет назад ошибка в программе стремилась унести с собой результат работы не только самой программы, но и операционной системы. Популяризация микропроцессоров, способных аппаратно изолировать приложения друг от друга (архитектура x86 умеет это с середины 80-х), появление массовых операционных систем, умеющих использовать эту возможность, несколько улучшило ситуацию. Не стояла на месте и эволюция языков программирования. Вышедший из лабораторий Ericsson чудаковатый Erlang и его последователи делают ставку на конкурентное решение задачи множеством мелких параллельных процессов: если один из них вдруг «обваливается», соседям это не мешает.
Тем не менее и сегодня ещё стопроцентная надёжность остаётся недостижимой. Даже дата-центры таких гигантов бизнеса, как Amazon, Facebook, Google, Microsoft, обеспечивают аптайм лишь с одной девяткой после запятой (онлайн 99,9 процента времени). Вправе ли мы надеяться, что однажды научимся строить вычислительные машины, сохраняющие работоспособность вне зависимости от качества кода, решаемых задач, любых других обстоятельств? Учёные — пожалуй, единственные, кто ещё не растерял оптимизма. На днях группа британских компьютерщиков (University College, London) обнародовала результаты эксперимента, в рамках которого была создан действующий прототип именно такой — абсолютно надёжной! — машины.
Британцы оттолкнулись от простого рассуждения. Мы строим компьютеры и разрабатываем программы, равняясь на последовательное исполнение команд. Суперскалярные фокусы в микропроцессорах (уже Intel Pentium умел исполнять несколько команд одновременно) и суперкомпьютеры с их тысячами параллельно работающих узлов лишь маскируют это препятствие. Взгляните на картину в целом: весь компьютерный мир всё ещё крутится вокруг идеи последовательного исполнения. Если одна команда в потоке приводит к непредвиденному результату, выполнение прекращается — и вся задача остаётся нерешённой.
Представьте, как смешно выглядел бы, скажем, человек, надели нас природа
Это и попытались воспроизвести в виде компьютерной архитектуры британцы. Идея, несколько упрощая, следующая: каждая большая задача разбивается на множество независимых кусков, которые — и это важный момент — вместе с необходимыми исходными данными передаются на исполнение разным микропроцессорам. Авторы назвали это «системными вычислениями», потому что каждый микропроцессор с порученной ему частью задачи здесь фактически является самодостаточной системой (архитектура HAoS — Hardware Architecture of Systemic computation). Работают они одновременно, асинхронно, словно пчелиный рой или части человеческого тела. Вышла из строя одна система? Не беда! Можно добавить избыточности, сделав резервные системы, ждущие повода вступить в игру, а можно заставить некоторые из систем следить за соседями, скажем, перезагружая их в случае необходимости. Результатом станет машина, не просто чрезвычайно устойчивая к сбоям, но и обладающая необычной для компьютеров способностью «лечить» себя на ходу.
Строго говоря, авторы HAoS Америки не открыли, но научная пресса комментирует их работу тепло: британцы спроектировали и построили (с помощью имеющихся на рынке FPGA и графических процессоров) действующий, практически применимый образчик сверхнадёжного компьютера с архитектурой, отличной от доминирующей фон-неймановской, а попутно ещё и доказали, что такая машина может быть производительней, нежели предполагалось ранее.