sonyps4.ru

Наука@Home: распределенные вычисления на ПК. Распределённые вычисления

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

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

Тем не менее, развитие Всемирной Сети и увеличение производительности процессоров в полном соответствии с законом Мура привело к тому, что сейчас распределенные сети на равных конкурируют с топовыми суперкомпьютерами, причем, в отличие от них, постоянно совершенствуются и не стоят ни копейки.

Если взглянуть на изменения в распределенных сетях за последние несколько лет, то можно сразу отметить несколько ключевых моментов.

Наверное, самым важным и пока еще не до конца раскрывшим себя шагом стал переход на GPU-вычисления, в некоторых случаях ускоряющий расчеты на порядок. Значительную роль сыграла и оптимизация вычислительных алгоритмов под многоядерные процессоры, возможность одновременного выполнения расчетов на CPU и GPU, поддержка 64-битных вычислений, появление клиентов для игровых консолей, поддержка альтернативных операционных систем (Mac OS X, Linux), быстрое распространение Интернета, и что немаловажно, заметное упрощение клиентов, которые больше не требуют от пользователей запуска вычислений через командную строку.

Сравнение с суперкомпьютерами

Сети распределенных вычислений уже называют виртуальными суперкомпьютерами, и приставка «виртуальные» здесь скорее используется для дифференциации от классических суперкомпьютеров, поскольку по скорости работы оба типа вычислительных систем находятся практически на одном уровне.

По состоянию на октябрь 2012 года проект Folding@home «завербовал» 219 тыс. процессоров, 20 тыс. GPU, 16 тыс. консолей PlayStation 3, и его суммарная мощность составила 3.7 petaFLOPS (пиковая мощность 6 petaFLOPS была зарегистрирована в ноябре 2011 г.). По данным за этот же месяц, производительность BOINC (всех проектов, входящих в состав этой сети) составляет 6.6 petaFLOPS (на момент публикации материала — 7.4 petaFLOPS, по данным официального сайта, но эта цифра подсчитывается лишь за последние 24 часа).

Если эти виртуальные вычислительные системы разместить в списке суперкомпьютеров, то они втиснутся между третьей и четвертой строчкой рейтинга, заметно опережая ближайшего конкурента (производительность SuperMUC, занимающего сейчас четвертое место, составляет 3.1 petaFLOPS).

Для того, чтобы подняться на первое место, Boinc необходимо быть быстрее приблизительно в три раза, поскольку рейтинг Sequoia (самого производительного на текущий момент суперкомпьютера в мире) составляет 20.1 petaFLOPS. Учитывая, что этот компьютер в полную мощность заработал лишь летом этого года, можно предположить, что распределенные вычислительные системы смогут вырваться вперед уже в течение нескольких лет, даже с учетом появления новых суперкомпьютеров.

Основные направления исследований

Без сомнения, распределенные вычисления уже стали распространенным феноменом, следовательно, среди них можно отыскать проекты, занимающиеся решением практически любых научных задач. Тем не менее, самые популярные проекты сконцентрированы на решении довольно узкого круга проблем. В первую очередь это медицина (исследование белков и поиск лекарств), предсказание климата, изучение космоса (поиск внеземных сигналов, правильных моделей вселенной, экзопланет), проверка математических и физических теорий.

Как подключиться к сети распределенных вычислений

Если вы решили, что поиск лекарств от неизлечимых пока болезней или предсказание изменения климата Земли – задачи, достойные того, чтобы выделить под них свой компьютер, то добровольно пожертвовать вычислительную мощность под любой из этих проектов совсем не сложно.

Проще всего это сделать, скачав клиент BOINC и запустив мастер добавления нового проекта. На одном из шагов необходимо будет зарегистрироваться (что можно сделать прямо в программе), вот и все трудности. Если возникли затруднения с выбором конкретного проекта, то можно указать сразу несколько, и они будут считаться по очереди.

По умолчанию BOINC использует компьютер все свободное время, однако выставляет для своих расчетов самый низкий приоритет, так что процессорные ресурсы используются клиентом в самую последнюю очередь.

Что касается памяти, то здесь понятие приоритета неприменимо, а поскольку на многоядерных процессорах BOINC запускает сразу несколько копий расчетов, каждая из которых может занимать в памяти несколько сотен мегабайт (такие объемы нужны не для всех проектов), то в играх и других требовательных приложениях все же лучше ставить расчеты на паузу, что можно сделать непосредственно в клиенте.

Более тонкую настройку можно провести в опциях BOINC, указав программе часы использования компьютера, период бездействия ПК, после которого можно запускать расчеты, а также количество процессорной мощности (в процентах), доступной клиенту.

Очки за участие

В большинстве проектов за участие начисляют очки. Их количество напрямую зависит от сложности расчетов, следовательно, чем производительнее компьютер и чем дольше он используется, тем больше очков начисляется. У каждого пользователя есть собственная страница со статистикой, где можно посмотреть личное и командное место в общем зачете (в качестве команды по умолчанию используется страна, указанная во время регистрации).

Boinc — это не распределенная сеть в традиционном понимании, а скорее посредник между проектами и пользователями. Изначально Boinc разрабатывался как клиент для SETI@home, но сейчас с его помощью можно подключиться и к десяткам других проектов.

Самый мощный проект по изучению климата Земли. Занимается моделированием погодных условий будущего (до 2080 года) с учетом различных входных данных. На текущий момент имеет в активе несколько миллионов просчитанных комбинаций. Проект был запущен в 2003 г.

Проект занимается поиском гравитационных волн, существование которых еще не доказано, но их наличие теоретически было предсказано Эйнштейном почти сто лет назад.

Для обнаружения гравитационных волн обрабатываются данные с радиотелескопов и специальных спутников, наблюдающих за вращающимися нейтронными звездами (пульсарами). За время существования проекта таких объектов было обнаружено более трех десятков.

Результаты проверки, опубликованные в июле 2012 г., свидетельствуют о том, что на текущий момент даже самые чувствительные датчики гравитационных волн не смогли зарегистрировать их наличие, но проект продолжает свою работу, анализируя новые данные и ожидая ввода в эксплуатацию более точных инструментов.

Einstein@home запущен в 2005 г. и на текущий момент его вычислительная мощность составляет приблизительно 0.5 petaFLOPS.

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

Проект запущен в 2005 г. и по состоянию на октябрь 2011 г. его вычислительная мощность составляла приблизительно 60 teraFLOPS (0.06 petaFLOPS)

Возможно, самый популярный проект распределенных вычислений. По вычислительной мощности уже сопоставим со всеми проектами, входящими в состав BOINC. Занимается практически тем же, что и Rosetta@home, т.е. изучением свойств белка, и с момента запуска благодаря ему были опубликованы более ста научных работ.

Большой мощности проект смог достичь как за счет раннего старта (2000 год), так и за счет выпуска очень производительного клиента для PlayStation 3 (2007 год), а также оптимизации расчетов под многоядерные процессоры и видеокарты, выполняющие вычисления, как правило, в несколько раз эффективнее самых современных CPU.

Один из ветеранов распределенных вычислений. Запущен в 1999 году, и таким образом, после десятилетий поиска внеземных сигналов в застенках научных лабораторий, к дешифровке космических радиоволн подключились и обычные компьютеры.

Несмотря на тринадцатилетний стаж, проект до сих пор не получил ни одного результата, сравнимого по скандальности с сигналом «Wow!» , зарегистрированном в 1975 г. Тем не менее, на небе было найдено несколько точек — кандидатов на более тщательное сканирование, в связи с повышенной интенсивностью сигналов на фоне обычного шума. Вычислительная мощность проекта составляет приблизительно 0.5 petaFLOPS.

Интересный проект, целью которого является создание поискового движка по принципу сетей распределенных вычислений.

Основная задача клиента, работающего на ПК, — индексирование страниц. В отличие от других типов распределенных вычислений, у Majestic-12 очень скромные требования к вычислительной мощности компьютера, но он очень интенсивно потребляет трафик.

По состоянию на октябрь 2009 Majestic-12 проиндексировал один триллион страниц. Google достиг той же цифры ненамного раньше — в июле 2008 года.

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

На текущий момент таблицы RainbowCrack уже занимают сотни гигабайт и позволяют за несколько минут найти любой пароль длиной до семи символов (состоящий из букв, цифр и других символов), зашифрованный с помощью нескольких разных алгоритмов (LanMan, MD5, SHA1, и др.).

Проект создания искусственного интеллекта, способного воспринимать и обрабатывать информацию в языковой форме.

Проект все еще находится в стадии разработки и предназначен для поиска экзопланет, в том числе земного типа.

Проект поиска оптимальных стратегий обнаружения астероидов, проходящих вблизи от Земли.

Рендеринг 3D-анимации — весьма ресурсоемкая задача, поэтому и для нее нашлось место в распределенных вычислениях. Пока Burp находится в стадии Beta, а это значит, что сцены, загруженные для просчета, не обязательно будут выданы кому-то как задания, или могут быть выданы с задержкой, однако после полноценного запуска гарантируется рендеринг всех поступающих проектов.

Проект воссоздания трехмерной модели нашей Галактики, позволяющий узнать историю формирования Млечного Пути.

Помимо этого, просчитываются процессы столкновения и слияния Галактик.

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

Проект занимается поиском наилучшего варианта органических молекул для создания нового типа солнечных панелей, а также оптимальных полимерных мембран для создания топливных батарей.

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

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

  • Tutorial

Девять лет назад я начал «в свободное от основной работы время» преподавать компьютерные дисциплины в одном из университетов Санкт-Петербурга. И только сравнительно недавно к своему удивлению обнаружил, что в наших вузах практически отсутствуют курсы с фокусом на проблематику распределённых вычислений. И даже на Хабре эта тема не раскрыта в достаточной мере! Надо прямо сейчас исправлять ситуацию.

Этой теме я и хотел посвятить статью или даже серию статей. Но потом решил выложить своё учебное пособие по основам распределённых вычислений, вышедшее в свет в этом году (читай, небольшую книгу объемом 155 страниц). В итоге получился гибрид – статья со ссылкой на книгу. Книга распространяется бесплатно и доступна в электронном виде.

Вместо пролога. Приступив к тексту статьи, я в очередной раз задумался, а зачем программисту нужно знать теоретические основы распределённых вычислений. Этот вопрос я неоднократно слышал (и продолжаю слышать) от студентов и специалистов, уже работающих в области ИТ. Действительно, зачем, например, знать, что «множество событий распределённого вычисления упорядочено частично, а не линейно»? В чем, так сказать, каждодневная практическая польза этого фундаментального знания?

Должен признать, что у меня нет готового заученного ответа, который я могу выдать не задумываясь. Поэтому каждый раз приходится напрягаться извилинами, и каждый раз ответы и аргументы получаются разными. Вот и сейчас всё как впервые…

Давайте попробуем начать издалека. И чтобы было нагляднее – с медицины. Потому как, если речь заходит о врачебных ошибках, мозг начинает активно работать и генерировать сильное возмущение: ужас, ужас, могли человека угробить. Что они там, совсем что ли? Неужели не знают, чего делают?

Все мы совершенно естественным образом рассчитываем на то, что перед тем как начать какие-либо манипуляции с человеческим организмом врачи всё-таки изучают его внутреннее устройство и принципы работы. Мы абсолютно не согласны с утверждением, что хирургам гораздо важнее пройти практические курсы кройки и шитья вместо многолетней зубрежки теоретического материала о том, что у нас там внутри и зачем оно там. Так почему же программистам, занимающимся разработкой системы с сетевым взаимодействием (т.е. к настоящему моменту практически любой системы), не нужно знать «что там внутри и зачем оно там»? Почему ошибки в ИТ воспринимаются максимум с легкой иронией? Ну да, ну баг. А кто не пьет не делает багов?! Назови! Нет, я жду! Среди требований к программистам очень часто почему-то на передний план выходят практические навыки владения тем или иным языком программирования. Причем сильно на передний план, полностью затмевая собой требования к пониманию основных концепций, теоретических моделей, алгоритмов, в конце концов… Да и сами программисты, чего греха таить, с началом разговора «про никому не нужную теорию» вянут как цветы в пустыне… Чудеса, не правда ли…

Приведу небольшое высказывание Л. Лэмпорта на эту тему (чуть ниже я постарался перевести это высказывание на русский язык, не сильно отдаляясь от оригинала):

For quite a while, I"ve been disturbed by the emphasis on language in computer science. One result of that emphasis is programmers who are C++ experts but can"t write programs that do what they"re supposed to. The typical computer science response is that programmers need to use the right programming / specification / development language instead of / in addition to C++. The typical industrial response is to provide the programmer with better debugging tools, on the theory that we can obtain good programs by putting a monkey at a keyboard and automatically finding the errors in its code.
I believe that the best way to get better programs is to teach programmers how to think better. Thinking is not the ability to manipulate language; it"s the ability to manipulate concepts. Computer science should be about concepts, not languages.

Уже довольно длительное время меня беспокоит слишком большое внимание, уделяемое компьютерному языку в ИТ. В результате переизбытка такого внимания появляются программисты, которые являются экспертами в С++, но которые не в состоянии написать программы, делающие то, что от этих программ требуется. Типичная реакция представителей ИТ на эту проблему заключается в предложении программистам использовать другой более подходящий язык (программирования, спецификаций и т.п.) вместо / вдобавок к С++. В свою очередь характерный для индустрии разработки ПО выход из ситуации видится в предоставлении программистам более совершенных инструментов отладки, видимо, основываясь на предположении, что получить хорошие программы можно просто посадив мартышку за клавиатуру и затем отыскивая и исправляя ошибки в её коде.
Моё твердое убеждение в том, что для получения качественных программ необходимо учить программистов думать лучше. Умение думать – это не способность оперировать компьютерным языком; это способность оперировать концепциями. Изучение информационных технологий должно быть сфокусировано на изучении концепций, а не языков.

Для иллюстрации того насколько могут быть важны «концепции» и «элементы теории» в вопросах построения распределённых систем давайте рассмотрим парочку простеньких примеров. Для начала - групповую рассылку сообщений электронной почты между пользователями A, B, C и Х. Предположим, что пользователь А отправляет всей группе письмо с темой «Общее собрание». Пользователи В и С отвечают на него всей группе своими сообщениями с темой «Re: Общее собрание».

В действительности события происходят в следующей последовательности:

  1. Первым отправляется сообщение от пользователя А.
  2. Пользователь В получает его, читает и отправляет ответ.
  3. Пользователь С получает оба сообщения от А и В и затем отправляет свой ответ, опирающийся на оба сообщения от А и В.
Однако в связи с произвольными и независимыми задержками доставки сообщений, некоторые пользователи могут видеть другую последовательность наступления событий. Например, согласно сценарию, приведённому на рисунке ниже, в почтовом ящике пользователя Х сообщения будут располагаться в следующем порядке:
  1. Сообщение от пользователя С с темой «Re:Re: Общее собрание».
  2. Сообщение от пользователя А с темой «Общее собрание».
  3. Сообщение от пользователя В с темой «Re: Общее собрание».

Ага, оказывается порядок поступления сообщений, наблюдаемый различными процессами, может быть различным даже для FIFO каналов! А что делать, если мы хотим, чтобы наблюдаемый порядок был везде одинаков (и при этом не хотим использовать синхронный обмен сообщениями)? К примеру, если мы пишем свой транспорт с соответствующими гарантиями. Или хотим построить отказоустойчивую службу (replicated state machine), где каждая реплика должна обрабатывать поступающие запросы в едином для всех реплик порядке, чтобы состояния реплик не различались? Вопрос…

Рассмотрим теперь еще одно выполнение распределённой системы, в которой процессы взаимодействуют только с помощью обмена сообщениями, и каждый процесс занимается включением / выключением фонаря с определенным светом. Пусть первый процесс управляет фонарем с красным светом, второй – с желтым, а третий – с зеленым. Такая вот светофорная система. На рисунке ниже включение процессом своего фонаря обозначено прямоугольником, а выключение – вертикальной линией; отправка и получение сообщения – стрелкой. Вопрос: могут ли процессы определить, какие фонари светили одновременно?

Так вот оказывается, что в данном выполнении асинхронной системы процессы никак не смогут определить был ли включен красный свет одновременно с желтым. Может быть да. А может и нет… Сие останется неизвестным. Но зато будет точно известно, что красный и зеленый фонари одновременно находились во включенном состоянии. Другими словами, оказывается, нет особого смысла говорить о том, что то или иное глобальное состояние достигается по ходу выполнения распределённой системы! Равно как и очень часто нельзя сказать, выполнялось ли какое-либо условие (предикат), заданное на множестве его глобальных состояний! Опять же вопрос: почему?

Наш ответ Чемберлену. На самом деле ответы на эти и многие другие вопросы, связанные с работой асинхронных распределённых систем, крайне сложно уложить в рамки одной статьи. Поэтому я и решил опубликовать сразу несколько статей в одной. Точнее, как указано в начале статьи, представить свою небольшую книгу по основам распределённых вычислений, доступную в электронном виде.

Из этой книги вы узнаете:

  • про причинно-следственный порядок событий распределённого вычисления
  • что такое справедливость, безопасность и живучесть
  • что такое конус прошлого и конус будущего для события вычисления
  • чем логический параллелизм отличается от физического параллелизма
  • почему не имеет особого смысла говорить о совокупности глобальных состояний вычисления, а имеет смысл говорить о совокупности событий вычисления
  • как нам упорядочить события распределённого вычисления в одну или несколько последовательностей, которые «могли бы» происходить в системе
  • что такое логические часы, и какое такое логическое время они отсчитывают
  • почему логическое время останавливается, если в системе ничего не происходит
  • чем скалярное время отличается от векторного
  • как и для чего можно использовать логическое время в распределённых алгоритмах
  • какие есть подходы к эффективной реализации векторных часов
  • зачем нам может понадобиться матричное время
  • чем распределённый алгоритм отличается от централизованного
  • как решать задачу взаимного исключения без использования разделяемых переменных
  • на какие категории делятся все распределённые алгоритмы взаимного исключения
  • зачем в алгоритмах на основе получения разрешений используется логическое время
  • почему философам так трудно пообедать в распределённой системе
  • зачем нам граф конфликтов и граф предшествования
  • почему граф предшествования должен меняться со временем
  • почему в алгоритмах на основе передачи маркера есть еще много чего кроме собственно «передачи маркера»
  • и, я надеюсь, ещё кое-что…
Из чего состоит книга и как её читать?

В начале я постарался в двух словах изложить, какие цели ставились при написании книги, и как она соотносится с другой литературой. Этому посвящено введение к книге. Оно занимает всего чуть более двух страниц, поэтому прочитать его стоит.

Первый раздел по большей части болтологический и посвящен «качественным» особенностям распределённых систем. Если вы не знаете, что такое распределённая система, и какие к ней предъявляются требования, то первый раздел имеет смысл прочитать. Если же вы знаете, что поступающие процессу-получателю сообщения могут давать устаревшее представление о процессе-отправителе, точно так же, как и световое излучение, поступающее к нам от далекой звезды, дает представление о состоянии этой звезды в прошлом, то первые четыре пункта можно пропустить:) Отдельно стоит отметить п. 1.5 «Взаимодействие в распределённых системах», в котором я попытался привести несколько простых задач, демонстрирующих сложности, с которыми можно столкнуться при разработке распределённых систем. Эти задачи мы будем потом решать, вооружившись теоретическими знаниями, поэтому стоит с ними ознакомиться.

Во втором разделе представлена модель распределённого вычисления и основная теория, используемая при дальнейшем изложении. В определенном смысле этот раздел является ключевым. Однако надо быть готовым к работе с такими терминами как «множество / подмножество», «бинарное отношение», «отношение эквивалентности», «отношение порядка», «линейный / частичный порядок». В этом разделе вы встретите доказательства некоторых утверждений. Мне кажется, что их следует, как минимум, проглядеть (а лучше изучить) для более глубокого понимания существенных особенностей функционирования распределённых систем, выделяющих их среди систем других классов.

На базе теории, представленной выше, в третьем разделе, наконец, рассматриваются более практичные вещи, а именно, различные механизмы логических часов. С их помощью мы можем упорядочивать события в одну или несколько последовательностей, которые могли бы происходить в системе, что позволяет значительно упростить разработку алгоритмов для распределённых систем. Приводятся примеры использования логических часов для решения задач, сформулированных в п. 1.5 «Взаимодействие в распределённых системах».

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

На кого ориентирована эта книга?

Материал книги следует рассматривать в качестве введения в проблематику распределённых вычислений. Она выросла из академической вузовской среды, и будет, безусловно, полезна, если вы только начинаете работать в этой области. Если же у вас уже есть определённый опыт в разработке распределённых систем и алгоритмов, возможно, вы найдете для себя что-то новое и поделитесь своим мнением в комментариях. Если же вы имеете многолетний опыт за плечами и являетесь экспертом в этой теме, надеюсь, что вы сможете дополнить меня своими мыслями и соображениями.

Чего бы мне хотелось?

15 января 2013 в 10:55

Эх, ухнем! Распределенные вычисления вчера и сегодня

  • Блог компании Intel ,
  • Высокая производительность

Принцип параллельного проведения расчетов – один из тех, что буквально «витают в воздухе». И это естественно, ведь любую работу удобней выполнять сообща. Параллельные вычисления появились задолго до первой ЭВМ, однако идея расцвела именно в компьютерную эпоху, ведь именно тогда появились и задачи, требующие большой вычислительной мощности, и устройства, готовые «всем миром» эту мощность предоставить. В эти дни исполняется ровно 15 лет с моего первого знакомства с проектами распределенных вычислений – хороший повод, чтобы написать об их истории и сегодняшнем дне.

Краткое теоретическое предисловие
Немного теории для тех, кто ранее не интересовался распределенными вычислениями. Проект подобного рода предполагает, что вычислительная нагрузка распределяется между компьютерами-клиентами, чем их больше, тем лучше. Необходим также центр управления, его функции состоят в следующем:
  • Раздача «сырых» кусочков клиентам и прием от них результатов обработки;
  • Контроль потерянных и неверно посчитанных фрагментов;
  • Интерпретация полученных кусочков в свете общей цели;
  • Подсчет и визуализация статистики.
Итак, программа, установленная на клиенте, получает кусочек задания, выполняет его и отсылает результат в центр. В первых проектах блоки пересылались вручную, по e-mail, потом транспортная функция была полностью автоматизирована, было бы подключение к интернету (что в конце 90-х, впрочем, не звучало так банально, как сейчас). По большому счету, из всех компонентов компьютера программа использует только процессор, так сказать, «подчищая» его незадействованный ресурс. Приложение-клиент работает с низким приоритетом, не мешая остальным, однако, есть, конечно, у стопроцентной утилизации и отрицательные стороны: прежде всего, повышенное энергопотребление и тепловыделение ПК.
Несмотря на кажущуюся простоту, создать систему распределенных вычислений до появления типовых решений было задачей нетривиальной – ведь надо было как минимум написать клиенты под несколько операционных систем и управляющий сервер, да так, чтобы это все вместе еще и работало. Некоторые проекты так и не смогли преодолеть «детские болезни» и не достигли своих целей. Однако существовали и вполне успешные – один из таких и затянул меня на без малого 5 лет.
Эпоха distributed.net
Итак, начало 1998 года. Один из моих коллег по тогдашней работе, человек увлекающийся и азартный, рассказывает нам о невиданном чуде: проекте, объединяющем компьютеры со всего мира в единую вычислительную сеть. Идея как-то сразу всем приглянулась, включая техническое руководство – и процесс пошел. В нашем распоряжении было тогда около сотни рабочих станций и десяток серверов, и практически все они были пущены в дело.
Проект, в который мы вошли, назывался Bovine RC5 . Как следует из названия, его идея – атака с помощью «грубой силы» (простого перебора вариантов) на алгоритм шифрования RC5. Первый ключ был 40-битным – его «расковыряли» за три с небольшим часа. 48-битный продержался 13 дней, 56-битный – 265 дней. На момент нашего подключения проект находился в 64-битной фазе, она продолжалась почти 5 лет.
Bovine RC5 быстро набрал популярность. Организаторы проекта, сообщество distributed.net , сумели правильно определить главную движущую силу процесса – азарт участников. Движуха приобрела глобальный масштаб: команда соревновалась с командой, страна – со страной. «Догнать и перегнать» стала практически смыслом жизни для сотен тысяч человек, а для русских, как водится, еще и чем-то вроде национальной идеи. Каждое утро начиналось для нас с просмотра командной и глобальной статистики, клиент RC5 ставился на любой компьютер, который попадал к нам в руки. Дошли до того, что запускали «коровок» на чужих серверах, до которых была удаленка – до первого конфликта.


Интерфейс клиента distributed.net почти не изменился за время существования проекта

После завершения 64-битной фазы интерес к проекту стал угасать, прежде всего потому, что следующая, 72-битная, обещала быть очень долгой. Предчувствия нас не обманули: она продолжается уже более 10 лет, за это время проверено лишь чуть более 2,5% пространства ключей. Скорее всего, до 80-битного ключа дело уже не дойдет, хотя вычислительная мощность компьютеров за время проекта и возросла многократно. Что ни говори, а предполагаемая продолжительность этапа в 400 лет определенно пугает.

Считаем линейки и ищем инопланетян
Bovine RC5 можно отнести скорее к спортивным соревнованиям, нежели к способу решения каких-то реальных вычислительных задач, тем более что затеявшая его RSA сама впоследствии от него открестилась. Есть, впрочем, у distributed.net и более ценный для науки проект: расчет оптимальных линеек Голомба , однако с каждой новой единицей длины линейки он также скрипит все больше.

Естественно, сообществом distributed.net организаторы проектов добровольных распределенных вычислений не исчерпываются. Напротив, в мире сейчас насчитывается не менее сотни активных проектов, некоторые из которых также имеют богатую историю: так, с 1996 года идет поиск простых чисел Мерсенна , а в 1999 году начался проект SETI@home , где на основе расшифровки данных радиотелескопов SETI изучается вопрос, есть ли жизнь на Марсе во Вселенной. Всего же, как уже говорилось, вариантов буквально «несть числа»: тут и поиск лекарств от самых страшных болезней, и совершенствование Большого Адронного Коллайдера, и изучение трехмерной структуры белка, и решение многочисленных математических проблем и гипотез… вам предоставляется огромный выбор, в каком проекте участвовать, и можно утверждать на 100%: для процессора своего ПК вы нагрузку обязательно найдете – к вящему удовольствию обоих. Не забывайте только следить за температурой.


Клиент BOINC выгодно отличается от всех прочих наличием дизайна

Важным событием в жизни «распределенного» сообщества стало появление в 2005 году платформы BOINC (Berkeley Open Infrastructure for Network Computing) производства краснознаменного Калифорнийского университета в Беркли, как у них водится – с открытым исходным кодом. BOINC представляет собой готовую обвязку (типовые серверные компоненты + клиент) для проектов по сетевым вычислениям, которая значительно облегчает их запуск, хотя и не избавляет полностью от умственного труда, поскольку ряд серверных модулей необходимо готовить под конкретную задачу. Зато клиент, можно сказать, готов почти полностью, отлаженный и красивый. Более того, он позволяет участвовать сразу в нескольких BOINC-совместимых проектах. Получается эдакая связка разнородных, но объединенных технологически задач, что идет на пользу и самим задачам, и идеологии в целом.

Закончить хотелось бы опять на лирической ноте. Возможно, распределенные вычисления – это не самый оптимальный способ потратить имеющиеся у вас процессорные мощности. Но, если подумать, другие способы ведь еще менее оптимальны? Зато почувствовать себя членом команды – более легкого пути, пожалуй, нет. Моя «карьера» в этой области закончилась в 2004 – почти 9 лет назад. И вот сюрприз: сейчас, когда писал этот пост, зашел в статистику своей команды – представляете, она до сих пор жива и по-прежнему занимает первое место в нашем регионе. Не перевелись еще на Руси увлеченные люди!
Я приглашаю всех, кто когда-либо участвовал в проектах по распределенным вычислениям, откликнуться и дополнить мой рассказ – может быть, я чего-то пропустил?

Теги:

  • распределённые вычисления
  • distributed.net
Добавить метки

При которой меньшая часть приложения (клиент) может работать на множестве различных систем, а большая часть (сервер) – запускается на сервере. Серверная часть имеет значительно более широкую функциональность и работает на более мощной платформе, по сравнению с клиентской частью. Клиенты направляют запросы серверной части, а сервер возвращает им уже готовые результаты. Выглядит достаточно просто. Но каким образом организуется взаимодействие клиентских частей с серверной?

Тремя основными вариантами архитектуры взаимодействия клиентских и серверной частей являются: CORBA, EJB и Microsoft COM. Они будут рассмотрены далее в этом разделе.

Распределенная модель вычислений требует регистрации клиентских и серверных компонентов, которым нужно найти друг друга в сети по именам или идентификаторам, выясить, какую функциональность выполняют различные компоненты. Первой задачей клиентской части обычно является поиск нужных компонентов и определение их функций. Это необходимо для организации управляемого и контролируемого взаимодействия между компонентами, обеспечения возможности передачи запросов и результатов правильным компонентам.

Жизнь была бы намного проще, если бы у нас была только одна архитектура межкомпонентного взаимодействия, которую использовали бы все разработчики. Но в действительности существует множетсво различных архитектур, предназначенных для работы в различных средах программирования. Тем не менее, все они так или иначе выполняют главную функцию – обеспечивают возможность взаимодействия компонентов клиентской и серверной сторон друг с другом.

Чтобы компоненты могли взаимодействовать, должны использоваться стандартизованные интерфейсы и коммуникационные механизмы. Это единственный способ обеспечить возможность взаимодействия.

Искусственная нейронная сеть (ANN – artificial neural network) – это математическая или вычислительная модель, основанная на нейронной структуре мозга. Компьютеры выполняют такие виды деятельности, как расчеты с большими числами, хранение объемных документов, выполняют сложные математические функции, но они не могут распознавать образы или учиться на собственном опыте, как может это делать мозг. ANN состоит из множества модулей, симулирующих нейроны , каждый из которых обладает небольшим объемом памяти. Эти модули обрабатывают данные, которые вводятся через их многочисленные соединения. Используя правила обучения, такие системы способны учиться на примерах и могут обобщать.

Мозг хранит информацию в форме образов. Люди могут распознавать лица других людей, глядя на них с разных углов. Каждая черта лица человека состоит из сложного набора образов. Даже если видна только половина лица или лицо находится в тени и плохо освещено, человеческий мозг может дополнить недостающие фрагменты, позволяя человеку узнать своего друга и знакомого. Компьютеру, на котором работает обычное программное обеспечение, применяющее стандартную логику, необходимо иметь образец каждого фрагмента и лицо полностью, повернутое под определенным углом – тогда он сможет сравнить его с образцами и распознать.

Для того, чтобы помнить, думать, использовать предыдущий опыт, использовать логику и распознавать образы, мозг использует нейроны. Способности мозга обеспечиваются большим количеством нейронов и многочисленными связями между ними. Сила мозга является результатом генетического программирования и обучения.

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

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

Подобно мозгу, реальная мощь ANN основана на ее способности к обучению. В мозгу, маршруты соединений с нейронами, в которых хранится часто используемая информация, усиливаются, что обеспечивает более быстрый доступ к ней. Вот почему иногда бывает, что вы знаете что-то, но не можете вспомнить – откуда. Это означает, что в мозге нет четких маршрутов к хранящейся информации. Если у вас спросили ваш номер телефона, вы можете сразу же назвать его, не затратив на это никакой энергии. Но если вас спросят, как звали вашего учителя в третьем классе, может потребоваться значительно больше времени и энергии, чтобы вспомнить это. Хотя и та, и другая информация хранится в мозге, путь к номеру телефона является более четким и усиленным, поэтому вспомнить его можно быстро и легко. В ANN связи между двумя модулями, которые часто используются, также могут усиливаться, что является одной из форм обучения.

Известно, что события, которые произошли с человеком, находящемся в высокоэмоциональном состоянии, будут им запомнены гораздо лучше, скорее всего, он запомнит все до мельчайших подробностей. Например, Анна прекрасно помнит события своего дня рождения в 30 лет, на который она получила много подарков и провела его в компании друзей. Но она плохо помнит, что происходило в ее день рождения в 31 год, когда ее муж просто подарил ей открытку. Зато она прекрасно помнит события своего дня рождения в 32 года, когда ее муж вообще забыл ее поздравить, что едва не привело к разводу. Причиной того, что некоторые воспоминания являются более яркими, чем другие, заключается в том, что с этими воспоминаниями связано гораздо больше эмоций или они более значительны. В искусственных нейронных сетях некоторые входы также имеют больший вес, по сравнению с другими входами, что усиливает значение или важность получаемой через них информации, аналогично тому, что делают эмоции с людьми.

Интуиция – это качество, которое очень сложно повторить в электрических схемах и логических элементах. Для реализации интуиции, прогнозирования, догадок применяется нечеткая логика (fuzzy logic) и другие математические дисциплины. Эти подходы работают с вероятностями, используя математику и анализируя членство в различных множествах. Простым примером использования нечеткой логики, является стиральная машина, обладающая некоторым интеллектом. После того, как вы загрузили в нее грязную одежду, и бак заполнился водой, машина, основываясь на принципах нечеткой логики, посылает лучи света из одной части бака в другую. В зависимости от того, сколько света фактически было получено в другой части бака, она может определить, насколько грязна загруженная в нее одежда, учитывая плотность грязи в воде. Чтобы определить тип загрязнений (жирные или сухие) и проверить другие аспекты, могут использоваться дополнительные проверки. Стиральная машина берет всю эту информацию, анализирует ее, и на основании полученных результатов выбирает температуру стирки и нужное количество порошка. Это обеспечивает более эффективную стирку, т.к. экономится вода и порошок, стирка выполняется при наиболее правильной температуре, в течение нужного количества времени. Стиральная машина не может знать всех фактов, она не может быть уверена в точности всей собранной информации, однако она способна строить догадки на основе этой информации, которые будут довольно близки к реальности.

ANN разрабатываются таким образом, чтобы они могли принимать решения и обучаться, чтобы улучшить свою функциональность, принимая множество решений методом проб и ошибок.

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

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

Традиционные компьютерные системы видят мир черно-белым и работают в мире точных значений. Нечеткая логика позволяет компьютеру включить неточность в язык программирования, что открывает совершенно новый мир для вычислений и решения сложных вопросов. Исследователи нейронных сетей пытаются больше узнать о работе мозга, и о природе его возможностей, чтобы усовершенствовать ANN, позволяя им решать все более сложные задачи, по сравнению с традиционными вычислительными средствами.

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

История [ | ]

Работы по распределённым вычислениям с весьма прикладной целью - для военных нужд, а именно автоматизации процессов секретной связи и обработки разведывательной информации, велись интенсивно в США с 1960-х гг. Разработкой технологий распределённых вычислений и созданием распределённых информационных систем в Соединённых Штатах по заказу Агентства по перспективным оборонным научно-исследовательским разработкам США , видов вооружённых сил и служб (агентств) в структуре Министерства обороны США занимались исследовательские подразделения компаний и университетов:

В 1973 году Джон Шох и Джон Хапп из калифорнийского научно-исследовательского центра Xerox PARC написали программу, которая по ночам запускалась в локальную сеть PARC и заставляла работающие компьютеры выполнять вычисления .

В 1978 году советский математик Виктор Глушков работал над проблемой макроконвейерных распределённых вычислений. Он предложил ряд принципов распределения работы между процессорами . :320 На базе этих принципов им была разработана ЭВМ ЕС-2701 .

В январе 1996 года стартовал проект GIMPS по поиску простых чисел Мерсенна , также используя компьютеры простых пользователей как добровольную вычислительную сеть.

28 января 1997 года стартовал конкурс RSA Data Security на решение задачи взлома методом простого перебора 56-битного ключа шифрования информации RC5 . Благодаря хорошей технической и организационной подготовке проект, организованный некоммерческим сообществом distributed.net , быстро получил широкую известность .

Распределённые операционные системы [ | ]

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

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

В результате сетевая ОС может рассматриваться как набор операционных систем отдельных компьютеров, составляющих сеть. На разных компьютерах сети могут выполняться одинаковые или разные ОС. Например, на всех компьютерах сети может работать одна и та же ОС UNIX . Более реалистичным вариантом является сеть, в которой работают разные ОС, например, часть компьютеров работает под управлением UNIX, часть - под управлением NetWare, а остальные - под управлением Windows NT и Windows 98 . Все эти операционные системы функционируют независимо друг от друга в том смысле, что каждая из них принимает независимые решения о создании и завершении своих собственных процессов и управлении локальными ресурсами. Но в любом случае операционные системы компьютеров, работающих в сети, должны включать взаимно согласованный набор коммуникационных протоколов для организации взаимодействия процессов, выполняющихся на разных компьютерах сети, и разделения ресурсов этих компьютеров между пользователями сети.

Если операционная система отдельного компьютера позволяет ему работать в сети, и может предоставлять свои ресурсы в общее пользование и/или использовать ресурсы других компьютеров сети, то такая операционная система отдельного компьютера также называется сетевой ОС.

Таким образом, термин «сетевая операционная система» используется в двух значениях: как совокупность ОС всех компьютеров сети и как операционная система отдельного компьютера, способного работать в сети. Из этого определения следует, что такие операционные системы, как, например, Windows NT, NetWare, Solaris, HP-UX, являются сетевыми, поскольку все они обладают средствами, которые позволяют их пользователям работать в сети.

См. также [ | ]

Примечания [ | ]



Загрузка...