Распределенные и параллельные вычисления: Параллельные и распределенные вычисления. Лекции от Яндекса для тех, кто хочет провести праздники с пользой
Параллельные и распределенные вычисления. Лекции от Яндекса для тех, кто хочет провести праздники с пользой
Праздничная неделя подходит к концу, но мы продолжаем публиковать лекции от Школы анализа данных Яндекса для тех, кто хочет провести время с пользой. Сегодня очередь курса, важность которого в наше время сложно переоценить – «Параллельные и распределенные вычисления».
Что внутри: знакомство с параллельными вычислениями и распределёнными системами обработки и хранения данных, а также выработка навыков практического использования соответствующих технологий. Курс состоит из четырех основных блоков: concurrence, параллельные вычисления, параллельная обработка больших массивов данных и распределенные вычисления.
Лекции читает Олег Викторович Сухорослов, старший научный сотрудник Центра грид-технологий и распределенных вычислений ИСА РАН. Доцент кафедры распределенных вычислений ФИВТ МФТИ. Кандидат технических наук.
Concurrency (одновременность).
Области применения и проблематика. Способы реализации одновременных систем, процессы и потоки, программный инструментарий. Основы многопоточного программирования на примере языков C++ и Java. Типичные ошибки многопоточного программирования. Взаимное исключение и условная синхронизация. Модель памяти и низкоуровневые примитивы синхронизации. Альтернативные подходы к реализации одновременных программ.
Параллельные вычисления.
Области применения и проблематика. Современные параллельные вычислительные системы. Теоретические основы параллельных вычислений. Показатели качества параллельного алгоритма. Принципы разработки и типовые структуры параллельных алгоритмов. Методология PCAM. Системы параллельного программирования. Типовые модели программирования и шаблоны. Основы параллельного программирования на системах с общей памятью на примере технологии OpenMP. Основы параллельного программирования на системах с распределенной памятью на примере технологии MPI.
Параллельная обработка больших массивов данных.
Феномен Big Data. Модель программирования MapReduce. Принципы параллельной реализации вычислений. Область применения и примеры задач. Принципы распределенной реализации MapReduce на кластерных системах. Платформа Apache Hadoop. Интерфейсы прикладного программирования и реализация программ для Hadoop. Локальная отладка и запуск программ на кластере. Приемы и стратегии реализации MapReduce-программ. Высокоуровневые языки и инструментарии для работы с Hadoop. Практические примеры использования MapReduce. Ограничения модели MapReduce, расширения и альтернативные подходы.
Распределенные системы и вычисления.
Области применения, характерные особенности и виды распределенных систем. Проблемы построения распределенных систем. Теоретические основы распределенных вычислений, примеры распределенных алгоритмов. Способы взаимодействия распределенных процессов, сетевые протоколы. Технологии распределенного программирования. Знакомство с языком Erlang. Распределенные системы хранения данных, репликация данных, NoSQL-системы. Технологии распределенных вычислений, гриды, добровольные вычисления. Облачные вычислительные системы.
Update: все лекции курса «Параллельные и распределенные вычисления» в виде открытой папки на Яндекс.Диске.
Параллельные и распределенные вычисления — МФТИ
КУРС ЛЕКЦИЙ
ПАРАЛЛЕЛЬНЫЕ И РАСПРЕДЕЛЕННЫЕ ВЫЧИСЛЕНИЯ:
Лекция 1. Вводная лекция
Содержание лекции: 00:00 — Обзор курса.
10:16 — Мотивация.
23:30 — Классификация компьютеров по Флинну.
29:26 — Multiple Instructions Multiple Data, системы с общей памятью.
34:58 — Проблема когерентности кэшей.
37:43 — Системы с распределенной памятью.
40:11 — Параллелизм.
46:17 — Ускорение.
48:02 — Эффективность.
50:08 — Масштабируемость.
1:00:37 — Оценка эффективности разработки.
1:10:07 — Ограничения сети.
Лекция 3. Методы параллелизма
Содержание лекции: 00:07 — Напоминание, метод геометрического пара.
04:38 — Конвейерный параллелизм.
43:13 — OpenMP.
Лекция 7. Hive
Содержание лекции: SQL поверх больших данных.
Лекция 8. Hive, вторая часть
Содержание лекции: Текстовый файл. Sequence File. Avro. Protobuf. ORC.
Лекция 9. Spark
Содержание лекции: Spark.
Лекция 10. Распределенные системы
Содержание лекции: Распределенные системы.
Лекция 11. AB, FLP-теорема, CAP-теорема, CRDT
Содержание лекции: AB, FLP-теорема, CAP-теорема, CRDT.
Лекция 12. ZooKeeper
Содержание лекции: ZooKeeper.
Лекция 13. Kafka
Содержание лекции: Kafka.
Лекция 14. Dynamo, Cassandra
Содержание лекции: Dynamo, Cassandra.
Распределенные и параллельные вычисления | infoCOM.UZ
Распределенные и параллельные вычисления
3 марта 2004
Рубрика: Технологии.
Автор:
.
Чтобы объяснить, что такое распределенные и параллельные вычисления, легче всего привести конкретные примеры, в которых возникают проблемы использования вычислений обычных. Например, дети из трех семей, соседствующих по лестничной площадке, уговорили родителей объединить свои компьютеры, чтобы иметь возможность поиграть по сети. Игр таких более чем предостаточно. Проблемы возникнут после того, как они все это объединят. Если компьютеры разной конфигурации, как ни крути, а играть всем придется только в ту игру, которая по системным требованиям пойдет на самом слабом компьютере в сети. Причем у тех, у кого машина помощнее, большая часть ресурсов во время игры будет простаивать, а на более слабых, наоборот, притормаживать.
В силу того, что железо различное и несовместимое, попытки хоть как-либо на время такой игры распределить хардверные ресурсы между мощными компьютерами и слабыми тоже не приведут к успеху. Ведь процессоры нельзя распилить ножовкой на кусочки и раздать их нуждающимся. Да и память в виде различных колодок SIMM, DIMM, DDR, RIMM несовместима на различных материнских платах, если не по разъемам, то по тактовой частоте. Я не говорю о том, что даже совпадение частоты — это еще не признак совместимости, поскольку банки памяти могут формироваться либо с соблюдением четности, либо других характеристик и нередко две почти одинаковые колодки RAM в одном компьютере могут стать источником ошибок памяти.
Теперь ясно, что ресурсы компьютеров задаются в железе и распределять его между разными хардверными платформами практически невозможно, за редким исключением полной совместимости. От того, что все компьютеры объединены в локальную вычислительную сеть, толку нет. Потому что она локальная, но далеко не вычислительная. С помощью обычных сетевых решений можно распределять лишь транзит трафика, но никак не ресурсы. А результат налицо — большая часть компьютерной мощности вообще не используется или используется не по назначению. Например, эту статью я набивал в текстовом редакторе. Производительность компьютера для такой работы должна быть на уровне процессора Intel386/33, в то время как у меня стоит Athlon1500XP+. А это означает, что за все время подготовки статьи мой компьютер, по самым грубым и примитивным расчетам, использовал менее половины процента своей тактовой частоты. Более 99,5% ресурсов вообще не использовались. Если еще не учитывать, что в промежутках между нажатиями клавиш компьютер вообще простаивал на все 100%, и не считать перекуров, чаепитий, раздумий и прочих вынужденных пауз, во время которых на экране крутился бестолковый скринсейвер. Но бывают ситуации, когда запущенное прикладное приложение требует гораздо больших ресурсов, чем моя персоналка способна выдать «на гора». Вот если бы можно было те вычислительные ресурсы, которые не использовались ранее, взять и использовать в такие моменты? Не выйдет, ведь при организации работы с помощью персональных компьютеров, даже объединенных в сеть, всегда окажется, что либо ресурсы не используются в достаточной мере, либо их не хватает, а общая производительность в общей сложности не достигает даже 1%. Вот и получается, что, покупая персоналку, мы всегда более чем в 100 раз за нее переплачиваем, да еще и вместе с ней приобретаем различные проблемы, которые пытаемся решить за свой же счет ценой апгрейдов.
Но существуют два пути решения данной проблемы: вычисления параллельные и распределенные. Создать параллельные вычисления — это установить майнфрейм: одна многопроцессорная ЭВМ на всех пользователей, ее производительности хватит для решения самой мощной задачи, которую мы предполагаем на ней выполнять. В этом случае на каждом рабочем месте достаточно установить простейшие терминалы, вычислительные мощности которых почти нулевые, чтобы вывести информацию на экран или печать, а также передать ее к майнфрейму с клавиатуры, мышки или другого манипулятора. Майнфреймовые ЭВМ при кажущейся дороговизне на самом деле в некоторых случаях значительно окупаемы, поскольку при мощности в десятки раз ниже общей производительности объединенных в сеть персоналок можно выполнять задачи, которые на персоналках казались недостижимыми, ведь ресурсы эффективно распределяются. Приобрести такую ЭВМ можно и в Узбекистане, в ряде фирм и компаний, являющихся дилерами крупных производителей майнфреймов. Но здесь есть ряд проблемных моментов, с которыми придется столкнуться:
1. Программное обеспечение. Персоналки еще со времен ZX-Specrum лидировали по разнообразию и охвату задач программным обеспечением по сравнению даже с малыми ЭВМ. Причина проста: производители ЭВМ не стремятся к унификации своей продукции, в результате чего им своими силами приходится создавать софт для своих же железок. У персоналок же в силу их унификации производителей софта на три с лишним порядка больше.
2. Проблема морального старения техники, а с ней и апгрейда. Ведь ни для кого не секрет, что современная техника в своей хардверной конфигурации актуальна примерно в течение трех лет, после чего новые технологии сведут ее на нет. Доапгрейдить персоналку всегда проще, не говоря о том, что ее можно купить и распродать по частям. А если персоналок несколько, то апгрейд можно производить постепенно, вытесняя старый парк машин более современными. Вполне понятно, что окупить ЭВМ стоимостью от нескольких сот тысяч долларов и до нескольких миллионов за столь короткий срок весьма проблематично, если также учесть, что производители ЭВМ комплектуют свою технику далеко не самым гибким и оптимальным образом. В результате к ней приходится приобретать еще и кучу различной и совершенно ненужной периферии, будь то стримеры, флоппи с нестандартной емкостью, приводы уже морально устаревших и не оправдавших себя DVD-ROM и так далее. Все это лишь сильно привяжет вас к продукции и комплектации производителя. Ведь приобрести необходимые комплектующие для ЭВМ в ближайшем магазине оргтехники или на барахолке нереально.
3. Техническое обслуживание. Тут уж ни для кого не секрет, что апгрейд и апдейт персоналки можно произвести буквально на коленке. С ЭВМ такие фокусы не пройдут. Приобрести майнфрейм мало, поскольку к нему еще потребуется и соответствующее сервисное и техническое обслуживание. А это значит, что либо придется вызывать специалистов, которые частенько базируются за рубежом, либо обучать, сертифицировать и содержать свой штат таковых.
Именно удаленность от производителей и сервисных служб делает майнфреймы менее привлекательными у нас в Узбекистане и во многих других странах. В то время как на их родине — в США — майнфреймовая организация вычислений является чуть ли не основной.
Второй путь решения данных проблем — распределенные вычисления. В этом случае персоналки остаются персоналками, сеть сетью и их конфигурация не меняется. А вот в программное обеспечение добавляются функции сетевого распределения объектов. И если какому-то компьютеру не хватает ресурсов для выполнения текущей задачи, то ее фрагменты переносятся по сети на другие компьютеры и там выполняются, после чего результаты вычислений опять же по сети возвращаются на исходное место, откуда была запущена задача.
Параллельные вычисления в одной статье не удастся объяснить не только по принципам действия, но даже перечислить все возможные варианты их реализации. Впрочем, эти тонкости не обязательны ни для конечных пользователей, ни даже для многих разработчиков программного обеспечения. Ведь на каком бы языке программирования ни составлялась современная программа и как бы она линейно ни выглядела, но, тем не менее, при запуске она будет выполняться в режиме параллельных вычислений и на уровне операционной системы и железа процессора. Да и языков программирования, посредством которых можно вмешаться в процесс распараллеливания программ, не так уж много, и их можно пересчитать на пальцах одной руки: Ada, C, Java и, конечно же, Ассемблер.
Зато процесс распределенных вычислений в теории и практике не столь сложен. Современные программы, за небольшим исключением, объектно-ориентированы. Каждый объект содержит в своих полях некую информацию в виде данных, и набор методов для обработки этих самых данных, по сути, представляет собой микрозадачу. Вся программа состоит из отдельных объектов, способных хранить данные, передавать их друг другу и обрабатывать соответствующими методами. Поэтому с объектной точки зрения нет особой разницы в том, где хранить объекты и где их выполнять, будь то локальный компьютер или удаленный. Остается только создать организацию по распределению объектов по сети и сетевому же обмену данных между ними. Для этого на каждом компьютере в вычислительной сети запускается соответствующая программа, посредством которой другие такие же программы могут распределять между собой объекты. Дополнительно на одном из них должен стоять сервер, через который компьютеры находят друг друга. Процесс дальнейшего обмена информацией уже происходит без участия сервера, а напрямую от одной удаленной программы к другой — пиринговые сети (p2p), что служит для повышения производительности.
Когда человек впервые сталкивается с результатами распределенных вычислений, когда Pentium I выполняет задачи, кажущиеся нереальными для Athlon1000, у него создается противоречивое впечатление. И многие пользователи предполагают, что вместо того, чтобы оборудовать одно рабочее место компьютером с процессором тактовой частотой в 1000 мегагерц и 256 мегабайт ОЗУ, проще создать пять рабочих мест из компьютеров с процессорами частотой 200 мегагерц и 64 мегабайтами ОЗУ на каждой. Так ли это или налицо явное заблуждение? На самом деле такая сеть по реальной производительности не сможет заменить один 1000-мегагерцовый компьютер, если их загрузить под завязку. Распределенные вычисления выполняются медленнее, нежели локальные, и требуют больших ресурсов. Ведь задачу необходимо разбить на фрагменты, передать их по сети на другие компьютеры, связать все это воедино и запустить каждый фрагмент на выполнение, получить результаты и опять же по сети отправить их обратно на исходный компьютер. Да и передача информации с одного компьютера на другой по сети значительно медленнее, чем по локальной шине от ОЗУ к процессору и обратно. Поэтому если прогнать тесты на однопроцессорной персоналке, майнфрейме и на распределенной сети, суммарные ресурсы которых равны, то однопроцессорная персоналка всегда покажет лучший результат. Следом идет майнфрейм, который на каждом дополнительном процессоре получает от 80% до 90% прироста производительности от мощности этого самого процессора. И в самом конце теста будут стоять сети с распределенными вычислениями, где прирост производительности от включения дополнительной персоналки примерно составляет только 20% от ее мощности. Это что касается тестов. Совсем иные результаты можно получить, тестируя то же самое оборудование на прикладных задачах. Здесь майнфрейм всегда будет занимать первые места, обгоняя всех своих соперников. С незначительными потерями по мощности прочно займут второе место сети с распределенными вычислениями. А вот персоналка, которая лидировала по тестам, окажется с весьма жалкими прикладными результатами на последнем месте. Почему так происходит? Или тесты врут? Нет, не врут. Секрет фокуса прост: параллельные и распределенные вычисления позволяют более эффективно задействовать неиспользованные ресурсы других компьютеров. Даже в рамках одной большой задачи бывают моменты, когда требуется максимум ресурсов и большая часть их не задействована. Причем моменты минимума случаются намного чаще моментов максимума. Это с точки зрения пользователя компьютер не останавливается, пока выполняет программу. А с точки зрения железа и софта ему периодически приходится ждать и догонять, поскольку обмен данными с накопителями информации и периферией систематически переводит задачи в состояние ожидания (сигнал wait) или в спящий режим (сигнал sleep). И это без учета элементарных простоев оборудования, связанных с человеческим фактором, когда пользователи не работают за включенным компьютером, отвлекаясь на что-либо иное. Проще говоря, загрузить реальными прикладными задачами по максимальной производительности и в течение всего времени работы отдельно взятый персональный компьютер — задача нереальная. А следовательно, в общей сложности и за счет эффективного использования незадействованных ресурсов, по результататам, сеть с распределенными вычислениями, даже несмотря на значительные затраты по передаче данных, тем не менее, способна дать гораздо большую производительность, нежели аналогичная по мощности персоналка. Тесты же загружают ресурсы отдельно взятого компьютера под завязку и проводят процессорные вычисления по максимальной производительности всех ресурсов, без учета обращений к накопителям или периферии, и их цифры имеют отношение только к связке: RAM — CACHE — CPU. Попробуйте создать прикладную задачу, которая будет работать только в этих пределах. Правильно, такие прикладные задачи не существуют, поскольку они никому не нужны! Вычислительная техника не предназначена только для прогона тестов, а потому, если смотреть на это дело через прикладную точку зрения, то оказывается, что тесты вроде бы и рисуют правильные цифры, но только по очень узким предельным параметрам, которые в реальной ситуации абсолютно недостижимы и неприменимы. А посему в данном случае лучше плюнуть на тестовые показатели и оборудовать рабочие места более слабыми компьютерами, тем самым достигая значительной экономии и продлевая срок службы морально устаревшей, но еще работоспособной техники, переводя прикладные задачи на распределенные вычисления.
Что касается темы тестовых показателей, то, конечно же, тесты следует гонять при приобретении оргтехники с целью выявить явные неисправности в железе. Хотя, если техника приобретается, а не собирается, то локализация неисправностей с точки зрения покупателя, потребителя и конечного пользователя теряет всякий смысл, ведь наличие любой ошибки уже является причиной отказа от приобретения. И проверять компьютер следует опять же не с помощью тестов, а с помощью прикладных задач. Для этих целей более всего подходят современные игры. Игра «Хром» позволяет оттестировать компьютер конфигурацией от P-II/RAM-128Mb и до навороченных P-4 и Athlon. Поскольку помимо основного движка она запускает еще и виртуальную машину Java, а та уже в силу заложенных в нее обработчиков исключительных ситуаций вообще не стартует при наличии ошибок не только в железе, но и при кривых драйверах или других коллизиях операционной системы. Для более слабых компьютеров подходят различные версии игры «Quake» от I и до III. Никакие замеры производительности с помощью тестов не способны выдать, а тем более дать пощупать более реальную картину. Более того, тесты своими показателями могут ввести в заблуждение, и компьютер с более высокой тестовой производительностью в реальных прикладных задачах может оказаться слабее другого компьютера, который по тестам получит худшие показатели. Все дело в том, что реальные задачи выполняются не только в железе, но и активно используют систему ввода-вывода информации, проходящую через операционную систему, драйвера, шины, кэши и к периферии. Тестовые же программы используют ввод-вывод только для того, чтобы отобразить конечные результаты, отключаясь от нее на время прогона. Да и следует понять весьма простую истину, заключающуюся в том, что тесты проводятся в расчете на физические ресурсы компьютера, пределы которых заранее выясняются и используются во время прогона. Реальные задачи выполняются в ресурсах виртуальных, а потому прикладная задача может затребовать от системы памяти гораздо больше, чем есть в наличии, и система, пыхтя свопингом, постарается это требование удовлетворить, что приведет к явному снижению производительности.
Осталось только выяснить вопрос о том, как сделать из локальной сети вычислительную? Наверное, многим приходилось встречаться в Интернете с различными благотворительными акциями, предлагающими скачать и установить у себя на компьютере скринсейвер. В описании сообщается, что пока ваш компьютер не используется, запускается хранитель экрана, который в это время производит вычисления для «поиска лекарственных средств от такой сякой болячки» или «обрабатывает сигналы из космоса» с целью вычислить в них послания братьев по разуму из других галактик. Я бы не советовал даже врагу, а не только нашим читателям клюнуть на эту умилительно-слезоточивую благотворительность, поскольку закачка и инсталляция программ сомнительного содержания из Интернета может очень плохо закончиться. В лучшем случае, если вы действительно наткнетесь на распределенные вычисления, причем чаще всего вовсе не относящиеся к медицине или внеземному разуму, а для заработка на попытках решить теорему Ферма или найти большие простые числа, за которые полагаются денежные премии. В худшем случае вы нарветесь на хакеров, которые таким образом решают проблему нехватки вычислительных ресурсов для подбора чужого парольного кода доступа. Еще хуже, если безобидный с виду хранитель экрана с вашего же компьютера попытается получить доступ к конфиденциальной информации на удаленных серверах, и в результате придется иметь дело с Фемидой. Также мало приятного получить за свою наивность свежий апдейт какого-либо вируса. Да и, наконец, какой смысл от такой распределенности, если ее результатами могут воспользоваться только другие, а для вашего компьютера ничего, кроме лишней нагрузки и проблем, выудить не удастся?
Есть более реальный путь — это разработать программное обеспечение с распределенными вычислениями самостоятельно. Что касается языков программирования для этих целей, то следует в первую очередь отметить технологию Java, где соответствующее RMI (Remote Method Invocation) API было реализовано еще в ранних версиях, начиная с 1.1, и используется по сей день во многих сетевых приложениях. Чтобы не загромождать текст излишними эмоциональными восхищениями, лучше перечислю по пунктам основные преимущества применения технологии Java к контексту распределенных вычислений:
1. Интерфейсы RMI просты и понятны, поскольку не вносят чего-либо экзотического или нестандартного в концепцию программирования Java, а потому легко осваиваются и реализуются. Объем текста программ для распределенных вычислений почти не отличается от аналогичного объема для вычислений локальных, и любой уже готовый локальный проект можно запросто переделать в распределенный.
2. Серверная часть RMI не содержит новых решений, а использует уже проверенные и зарекомендовавшие себя службы, работающие по стандартным и даже упрощенным протоколам HTTP или FTP. Впрочем, даже эти сервера могут не понадобиться, если файлы объектов для RMI доступны через расшаренные ресурсы сетевых файловых систем.
3. Максимальная безопасность программирования за счет того, что виртуальная машина Java способна отслеживать различные софтверные и аппаратные коллизии, которые программист может и не предусмотреть, но в то же время при сетевых соединениях их наличие — скорее правило, нежели исключение. О сетевой безопасности Java давно ходят легенды, и мне добавить к сказанному более нечего.
4. RMI-объекты не только эффективно распределяются на удаленных сетевых хостах, но и также эффективно и автоматически уничтожаются там по мере того, как их дальнейшее использование теряет смысл. Тем самым вовремя высвобождаются удаленные ресурсы для выполнения других задач. Виртуальная машина самостоятельно следит за состоянием удаленных объектов, благодаря чему пропадает всякая необходимость в создании и отладке отдельного программного кода для слежения за состоянием локальных и удаленных ресурсов.
5. Платформенная независимость, благодаря которой сеть из разношерстных компьютеров по железу и операционным системам, тем не менее, выполняет задачи как единое целое.
Ну, а что же остается делать программистам, которые Java не освоили по тем или иным причинам? Писать проекты на своих излюбленных языках программирования, а выполнять в среде JVM, посредством JavaCC (CC — буквально означает компилятор компиляторов). JavaCC — это синтаксический анализатор, с помощью которого можно перевести листинг не Java-программы и выполнить ее в среде виртуальной машины Java. На сегодня существуют готовые реализации листингов, написанных практически для любых современных языков программирования от С++ и до VisualBasic, не говоря о возможности создать свой собственный язык программирования путем разработки правил анализа его выражений.
Программирование — это, конечно же, хорошо, особенно когда вы им виртуозно владеете. Но бессмысленно покупать пианино, когда можно послушать музыку по радио, и нет смысла писать самостоятельно каждое приложение, когда есть множество уже существующих и успешно используемых. Да и не всякий пользователь компьютера — закоренелый программист, хотя всякий программист — пользователь. Для таких случаев можно приобрести готовое программное обеспечение, которое реализует распределенные вычисления для операционной системы в целом, а не отдельных приложений. Для персоналок создано множество различных реализаций под OS Linux, причем как фирменных от Novell или Sun Microsystems, требующих привязку к платформам производителя, так и менее прихотливых от независимых разработчиков. Что касается платформы MS Windows, то от компании Microsoft исходили благие пожелания в адрес пользователей о том, что в данном направлении соответствующее программное обеспечение будет создано. Но не будем забегать вперед, поскольку про сетевые чудеса от Microsoft мы слышали еще во времена намерений создать Windows.NET с целью догнать и перегнать Java. Windows давно есть, а заявленных чудес до сих пор НЕТ. Впрочем, это не проблема, ведь многие приложения MS Windows запускаются прямо в Linux через API-приложения wine. Да и обнаружить в Windows какое-либо приложение, не имеющее лучшей альтернативы в реализации для Linux, практически невозможно.
Думаю, что этой информации вполне достаточно, чтобы читатель мог самостоятельно сделать выводы? Как и во всяком ином деле, результаты распределенных вычислений лучше один раз увидеть, чем сто раз про них услышать или прочитать в сотне статей. А еще лучше использовать. Остался всего лишь один-единственный вопрос: зачем покупать мощную персоналку, когда для достижения гораздо большей производительности более слабую можно завязать в сеть с распределенными вычислениями?
В Facebook
В Twitter
В Telegram
В WhatsApp
В Одноклассники
ВКонтакте
Микросервисная архитектура = распределенные вычисления / Хабр
Приветствую всех читателей Хабра! Меня зовут Игорь Рыбаков и я технический директор в казахстанской IT-компании DAR. Сегодня я поделюсь с вами пониманием и использованием принципов параллельных вычислений в современных информационных системах. Чтобы глубже разобраться в этом, я хотел бы привести аргументы в пользу изучения и практического применения концепций параллельных и распределенных вычислений при разработке современных информационных систем.
Параллельные вычисления или при чем тут основатель Intel
Сначала немного истории. В 1965 году Гордон Мур, один из основателей Intel, обнаружил закономерность: появление новых моделей микросхем наблюдалось спустя примерно год после предшественников, при этом количество транзисторов в них возрастало каждый раз приблизительно вдвое. Получается, что количество транзисторов, размещаемых на кристалле интегральной схемы, удваивалось каждые 24 месяца. Такое наблюдение стало называться законом Мура. Основатель Intel предсказал, что количество элементов в чипе вырастет с 2^6 (порядка 60) в 1965 году до 2^16 (65 тыс.) уже к 1975 году.
Сейчас, чтобы получить возможность задействовать на практике эту дополнительную вычислительную мощность, которую предсказывал закон Мура, стало необходимо задействовать параллельные вычисления. В течение нескольких десятилетий производители процессоров постоянно увеличивали тактовую частоту и параллелизм на уровне инструкций, так, чтобы на новых процессорах старые однопоточные приложения исполнялись быстрее без каких-либо изменений в программном коде.
Примерно с середины 2000-х годов производители процессоров стали отдавать предпочтение многоядерной архитектуре, но для получения всей выгоды от возросшей производительности центрального процессора программы должны переписываться в соответствующей манере. Тут возникает проблема, ведь согласно закону Амдала , не каждый алгоритм поддается распараллеливанию, определяя, таким образом, фундаментальный предел эффективности решения вычислительной задачи на суперкомпьютерах.
Для преодоления этого предела используются подходы распределенных вычислений. Это такой способ решения трудоемких вычислительных задач с использованием нескольких компьютеров, которые, чаще всего, объединены в параллельную вычислительную систему. Последовательные вычисления в распределенных информационных системах выполняются с учетом одновременного решения многих вычислительных задач. Особенностью распределенных многопроцессорных вычислительных систем, в отличие от локальных суперкомпьютеров, является возможность неограниченного наращивания производительности за счет масштабирования.
Примерно с середины 2005 года компьютеры массово комплектуются многоядерными процессорами, что позволяет проводить параллельные вычисления. А современные сетевые технологии позволяют объединить сотни и тысячи компьютеров. Что привело к появлению так называемых «облачных вычислений».
Применение параллельных вычислений
Нынешние информационные системы, например, системы электронной торговли, остро нуждаются в предоставлении качественных услуг своим клиентам. Компании ведут конкурентную борьбу, изобретая все новые сервисы и информационные продукты. Сервисы должны быть рассчитаны на высокую нагрузку и высокую отказоустойчивость, так как пользователи сервисов, не один офис, не одна страна, а весь мир.
При этом, важно сохранить экономическую целесообразность проектов и не тратить излишние средства на дорогостоящее серверное оборудование, если на нем будет работать старое программное обеспечение, использующее только часть вычислительных мощностей.
Перед разработчиками прикладных систем встала новая проблема — необходимость переписать информационные системы, чтобы соответствовать требованиям современного бизнеса и осознанию необходимости лучшей утилизации серверных ресурсов для снижения общей стоимости владения. Задачи, которые необходимо решать современным информационным системам разнообразны.
Начиная от машинного обучения и аналитики больших данных, до обеспечения стабильной работы существующего базового функционала системы в периоды пиковой нагрузки. Для примера здесь можно привести массовые распродажи в интернет-магазине. Все эти задачи можно решить используя комбинацию параллельных и распределенных вычислений, например реализуя микро-сервисную архитектуру.
Контроль качества сервисов
Для измерения фактического качества сервисов для клиента используется понятие service-level agreement (SLA), то есть, некоторые статистические метрики производительности системы.
Например, разработчики могут поставить перед собой задачу, чтобы 95% всех пользовательских запросов обслуживались со временем отклика не превышающим 200 ms. К слову сказать, то вполне реальные нефункциональные требования, потому что пользователи не любят ждать.
Для оценки удовлетворенности пользователей сервисом можно использовать показатель Apdex, который отражает отношение успешных (satisfied) откликов к неудовлетворительным (unsatisfactory). Например, наше пороговое значение SLA = 1,2 секунды, тогда при 95% времени отклика запросов <= 1,2 секунды результат будет успешным. В случае появлении большого числа запросов более 1,2 секунды, но менее 4T (4,8 секунды), результат считается удовлетворительным, а при появлении большого числа запросов превышающим 4T, те > 4,8 секунд результат считается провалом.
Выводы
В итоге хотелось бы сказать, что разработка микросервисов фактически предполагает понимание и практическое применение Распределенных и Параллельных вычислений.
Конечно, при этом придется пожертвовать некоторыми вещами:
- Простотой разработки и сопровождения — усилия разработчиков на реализацию распределенных модулей;
- При работе с базами данных строгую может отнять согласованность (ACID) и потребовать других подходов;
- Тратятся вычислительные мощности на сетевые коммуникации и сериализацию;
- Потратим время на внедрение практик DevOps на более сложный мониторинг и развертывание.
Взамен этому мы получаем, на мой взгляд, гораздо больше:
- возможность повторного использования целых модулей, готовых к работе, и, как следствие, быстрый запуск продуктов на рынке;
- высокую масштабируемость систем, что означает большее количество клиентов без потери SLA;
- Используя согласованность в конечном счете (eventual consistency), основываясь на CAP теореме, мы получаем возможность управлять огромными массивами данных, опять же, без потери SLA;
- возможность записывать любое изменение в состоянии системы для дальнейшего анализа и машинного обучения.
Распределённые вычисления: немного теории / Хабр
Девять лет назад я начал «в свободное от основной работы время» преподавать компьютерные дисциплины в одном из университетов Санкт-Петербурга. И только сравнительно недавно к своему удивлению обнаружил, что в наших вузах практически отсутствуют курсы с фокусом на проблематику распределённых вычислений. И даже на Хабре эта тема не раскрыта в достаточной мере! Надо прямо сейчас исправлять ситуацию.
Этой теме я и хотел посвятить статью или даже серию статей. Но потом решил выложить своё учебное пособие по основам распределённых вычислений, вышедшее в свет в этом году (читай, небольшую книгу объемом 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: Общее собрание».
В действительности события происходят в следующей последовательности:
- Первым отправляется сообщение от пользователя А.
- Пользователь В получает его, читает и отправляет ответ.
- Пользователь С получает оба сообщения от А и В и затем отправляет свой ответ, опирающийся на оба сообщения от А и В.
Однако в связи с произвольными и независимыми задержками доставки сообщений, некоторые пользователи могут видеть другую последовательность наступления событий. Например, согласно сценарию, приведённому на рисунке ниже, в почтовом ящике пользователя Х сообщения будут располагаться в следующем порядке:
- Сообщение от пользователя С с темой «Re:Re: Общее собрание».
- Сообщение от пользователя А с темой «Общее собрание».
- Сообщение от пользователя В с темой «Re: Общее собрание».
Ага, оказывается порядок поступления сообщений, наблюдаемый различными процессами, может быть различным даже для FIFO каналов! А что делать, если мы хотим, чтобы наблюдаемый порядок был везде одинаков (и при этом не хотим использовать синхронный обмен сообщениями)? К примеру, если мы пишем свой транспорт с соответствующими гарантиями. Или хотим построить отказоустойчивую службу (replicated state machine), где каждая реплика должна обрабатывать поступающие запросы в едином для всех реплик порядке, чтобы состояния реплик не различались? Вопрос…
Рассмотрим теперь еще одно выполнение распределённой системы, в которой процессы взаимодействуют только с помощью обмена сообщениями, и каждый процесс занимается включением / выключением фонаря с определенным светом. Пусть первый процесс управляет фонарем с красным светом, второй – с желтым, а третий – с зеленым. Такая вот светофорная система. На рисунке ниже включение процессом своего фонаря обозначено прямоугольником, а выключение – вертикальной линией; отправка и получение сообщения – стрелкой. Вопрос: могут ли процессы определить, какие фонари светили одновременно?
Так вот оказывается, что в данном выполнении асинхронной системы процессы никак не смогут определить был ли включен красный свет одновременно с желтым. Может быть да. А может и нет… Сие останется неизвестным. Но зато будет точно известно, что красный и зеленый фонари одновременно находились во включенном состоянии. Другими словами, оказывается, нет особого смысла говорить о том, что то или иное глобальное состояние достигается по ходу выполнения распределённой системы! Равно как и очень часто нельзя сказать, выполнялось ли какое-либо условие (предикат), заданное на множестве его глобальных состояний! Опять же вопрос: почему?
Наш ответ Чемберлену. На самом деле ответы на эти и многие другие вопросы, связанные с работой асинхронных распределённых систем, крайне сложно уложить в рамки одной статьи. Поэтому я и решил опубликовать сразу несколько статей в одной. Точнее, как указано в начале статьи, представить свою небольшую книгу по основам распределённых вычислений, доступную в электронном виде.
Введение в распределённые вычисления >>
Из этой книги вы узнаете:
- про причинно-следственный порядок событий распределённого вычисления
- что такое справедливость, безопасность и живучесть
- что такое конус прошлого и конус будущего для события вычисления
- чем логический параллелизм отличается от физического параллелизма
- почему не имеет особого смысла говорить о совокупности глобальных состояний вычисления, а имеет смысл говорить о совокупности событий вычисления
- как нам упорядочить события распределённого вычисления в одну или несколько последовательностей, которые «могли бы» происходить в системе
- что такое логические часы, и какое такое логическое время они отсчитывают
- почему логическое время останавливается, если в системе ничего не происходит
- чем скалярное время отличается от векторного
- как и для чего можно использовать логическое время в распределённых алгоритмах
- какие есть подходы к эффективной реализации векторных часов
- зачем нам может понадобиться матричное время
- чем распределённый алгоритм отличается от централизованного
- как решать задачу взаимного исключения без использования разделяемых переменных
- на какие категории делятся все распределённые алгоритмы взаимного исключения
- зачем в алгоритмах на основе получения разрешений используется логическое время
- почему философам так трудно пообедать в распределённой системе
- зачем нам граф конфликтов и граф предшествования
- почему граф предшествования должен меняться со временем
- почему в алгоритмах на основе передачи маркера есть еще много чего кроме собственно «передачи маркера»
- и, я надеюсь, ещё кое-что…
Из чего состоит книга и как её читать?
В начале я постарался в двух словах изложить, какие цели ставились при написании книги, и как она соотносится с другой литературой. Этому посвящено введение к книге. Оно занимает всего чуть более двух страниц, поэтому прочитать его стоит.
Первый раздел по большей части болтологический и посвящен «качественным» особенностям распределённых систем. Если вы не знаете, что такое распределённая система, и какие к ней предъявляются требования, то первый раздел имеет смысл прочитать. Если же вы знаете, что поступающие процессу-получателю сообщения могут давать устаревшее представление о процессе-отправителе, точно так же, как и световое излучение, поступающее к нам от далекой звезды, дает представление о состоянии этой звезды в прошлом, то первые четыре пункта можно пропустить 🙂 Отдельно стоит отметить п. 1.5 «Взаимодействие в распределённых системах», в котором я попытался привести несколько простых задач, демонстрирующих сложности, с которыми можно столкнуться при разработке распределённых систем. Эти задачи мы будем потом решать, вооружившись теоретическими знаниями, поэтому стоит с ними ознакомиться.
Во втором разделе представлена модель распределённого вычисления и основная теория, используемая при дальнейшем изложении. В определенном смысле этот раздел является ключевым. Однако надо быть готовым к работе с такими терминами как «множество / подмножество», «бинарное отношение», «отношение эквивалентности», «отношение порядка», «линейный / частичный порядок». В этом разделе вы встретите доказательства некоторых утверждений. Мне кажется, что их следует, как минимум, проглядеть (а лучше изучить) для более глубокого понимания существенных особенностей функционирования распределённых систем, выделяющих их среди систем других классов.
На базе теории, представленной выше, в третьем разделе, наконец, рассматриваются более практичные вещи, а именно, различные механизмы логических часов. С их помощью мы можем упорядочивать события в одну или несколько последовательностей, которые могли бы происходить в системе, что позволяет значительно упростить разработку алгоритмов для распределённых систем. Приводятся примеры использования логических часов для решения задач, сформулированных в п. 1.5 «Взаимодействие в распределённых системах».
Четвертый раздел посвящен изучению основных распределённых алгоритмов взаимного исключения, построенных без применения привычных разделяемых переменных. Ключевые идеи этих алгоритмов используются и для решения многих других задач в распределённых системах. Кроме того, их изучение позволяет раскрыть такие важные вопросы, как обеспечение свойств безопасности и живучести распределённых алгоритмов. Поэтому этот раздел мне представляется весьма полезным для ознакомления.
На кого ориентирована эта книга?
Материал книги следует рассматривать в качестве введения в проблематику распределённых вычислений. Она выросла из академической вузовской среды, и будет, безусловно, полезна, если вы только начинаете работать в этой области. Если же у вас уже есть определённый опыт в разработке распределённых систем и алгоритмов, возможно, вы найдете для себя что-то новое и поделитесь своим мнением в комментариях. Если же вы имеете многолетний опыт за плечами и являетесь экспертом в этой теме, надеюсь, что вы сможете дополнить меня своими мыслями и соображениями.
Чего бы мне хотелось?
Буду рад, если материал книги окажется для вас полезным и познавательным — будет время вернуться сюда после её прочтения и черкнуть «спасибо», буду признателен. Кроме того, мне бы хотелось собрать весь материал по теме, включая комментарии, вопросы и ответы в одном месте, чтобы потом отсылать сюда всех желающих, включая новые курсы новых студентов. Если вы сможете помочь и дополнить материал своими мыслями, своим опытом, буду признателен вдвойне. Читайте, набирайтесь знаний и используйте их в своей работе! Скачать книгу в формате PDF прямо сейчас вы сможете по ссылке ниже:
Введение в распределённые вычисления >>
Успехов!
Михаил Косяков
Вместо эпилога. «Информация, в отличие от ресурсов, задумана, чтобы ею делились». Роберт Кийосаки
НОУ ИНТУИТ | Лекция | Введение в параллельные вычисления
Аннотация: Архитектура ВС. Классификация вычислительных систем.
Пути достижения параллелизма.
Параллелизм на уровне команд, потоков, приложений.
Анализ эффективности параллельных вычислений. Закон Амдала.
Мотивы параллелизма
- Параллельность повышает производительность системы из-за более эффективного расходования системных ресурсов. Например, во время ожидания появления данных по сети, вычислительная система может использоваться для решения локальных задач.
- Параллельность повышает отзывчивость приложения. Если один поток занят расчетом или выполнением каких-то запросов, то другой поток может реагировать на действия пользователя.
- Параллельность облегчает реализацию многих приложений. Множество приложений типа «клиент-сервер», «производитель-потребитель» обладают внутренним параллелизмом. Последовательная реализация таких приложений более трудоемка, чем описание функциональности каждого участника по отдельности.
Классификация вычислительных систем
Одной из наиболее распространенных классификаций вычислительных систем является классификация Флинна. Четыре класса вычислительных систем выделяются в соответствие с двумя измерениями – характеристиками систем: поток команд, которые данная архитектура способна выполнить в единицу времени (одиночный или множественный) и поток данных, которые могут быть обработаны в единицу времени (одиночный или множественный).
- SISD (Single Instruction, Single Data) – системы, в которых существует одиночный поток команд и одиночный поток данных. В каждый момент времени процессор обрабатывает одиночный поток команд над одиночным потоком данных. К данному типу систем относятся последовательные персональные компьютеры с одноядерными процессорами.
- SIMD (Single Instruction, Multiple Data) – системы с одиночным потоком команд и с множественным потоком данных; подобный класс составляют многопроцессорные системы, в которых в каждый момент времени может выполняться одна и та же команда для обработки нескольких информационных элементов. Такая архитектура позволяет выполнять одну арифметическую операцию над элементами вектора. Современные компьютеры реализуют некоторые команды типа SIMD (векторные команды), позволяющие обрабатывать несколько элементов данных за один такт.
- MISD (Multiple Instructions, Single Data) – системы, в которых существует множественный поток команд и одиночный поток данных; к данному классу относят систолические вычислительные системы и конвейерные системы;
- MIMD (Multiple Instructions, Multiple Data) – системы с множественным потоком команд и множественных потоком данных; к данному классу относится большинство параллельных вычислительных систем.
Классификация Флинна относит почти все параллельные вычислительные системы к одному классу – MIMD. Для выделения разных типов параллельных вычислительных систем применяется классификация Джонсона, в которой дальнейшее разделение многопроцессорных систем основывается на используемых способах организации оперативной памяти в этих системах. Данный подход позволяет различать два важных типа многопроцессорных систем: multiprocessors (мультипроцессорные или системы с общей разделяемой памятью) и multicomputers (мультикомпьютеры или системы с распределенной памятью).
Классификация Джонсоном основана на структуре памяти (global — глобальная или distributed — распределенная) и механизме коммуникаций и синхронизации (shared variables — разделяемые переменные или message passing — передача сообщений). Системы GMSV (global-memory-shared-variables) часто называются также мультипроцессорами с разделяемой памятью (shared-memory multiprocessors). Системы DMMP (distributed-memory-message-passing) также называемые мультикомпьютерами с распределенной памятью (distributed-memory multicomputers).
Архитектура однопроцессорной машины
Современная однопроцессорная машина состоит из нескольких компонентов: центрального процессорного устройства (ЦПУ), первичной памяти, одного или нескольких уровней кэш-памяти (кэш), вторичной (дисковой) памяти и набора периферийных устройств (дисплей, клавиатура, мышь, модем, CD, принтер и т.д.). Основными компонентами для выполнения программ являются ЦПУ, кэш и память.
Процессор выбирает инструкции из памяти, декодирует их и выполняет. Он содержит управляющее устройство (УУ), арифметико-логическое устройство (АЛУ) и регистры. УУ вырабатывает сигналы, управляющие действиями АЛУ, системой памяти и внешними устройствами. АЛУ выполняет арифметические и логические инструкции, определяемые набором инструкций процессора. В регистрах хранятся инструкции, данные и состояние машины (включая счетчик команд).
Мультикомпьютеры с распределенной памятью
В мультикомпьютерах с распределенной памятью существуют соединительная сеть, но каждый процессор имеет собственную память. Соединительная сеть поддерживает передачу сообщений. Мультикомпьютеры (многопроцессорные системы с распределенной памятью) не обеспечивают общий доступ ко всей имеющейся в системах памяти. Каждый процессор системы может использовать только свою локальную память, в то время как для доступа к данным, располагаемых на других процессорах, необходимо использовать интерфейсы передачи сообщений (например, стандарт MPI). Данный подход используется при построении двух важных типов многопроцессорных вычислительных систем — массивно-параллельных систем (massively parallel processor or MPP) и кластеров (clusters).
Мультикомпьютер (многомашинная система) – мультипроцессор с распределенной памятью, в котором процессоры и сеть расположены физически близко (в одном помещении). Также называют тесно связанной машинной. Она одновременно используется одним или небольшим числом приложений; каждое приложение задействует выделенный набор процессоров. Соединительная сеть с большой пропускной способностью предоставляет высокоскоростной путь связи между процессорами.
Сетевая система – это многомашинная система с распределенной памятью, связаны с помощью локальной сети или глобальной сети Internet (слабо связанные мультикомпьютеры). Здесь процессоры взаимодействуют также с помощью передачи сообщений, но время их доставки больше, чем в многомашинных системах, и в сети больше конфликтов. С другой стороны, сетевая система строится на основе обычных рабочих станций и сетей, тогда как в многомашинной системе часто есть специализированные компоненты, особенно у связующей сети.
Под кластером обычно понимается множество отдельных компьютеров, объединенных в сеть, для которых при помощи специальных аппаратно-программных средств обеспечивается возможность унифицированного управления, надежного функционирования и эффективного использования. Кластеры могут быть образованы на базе уже существующих у потребителей отдельных компьютеров, либо же сконструированы из типовых компьютерных элементов, что обычно не требует значительных финансовых затрат. Применение кластеров может также в некоторой степени снизить проблемы, связанные с разработкой параллельных алгоритмов и программ, поскольку повышение вычислительной мощности отдельных процессоров позволяет строить кластеры из сравнительно небольшого количества (несколько десятков) отдельных компьютеров (lowly parallel processing). Это приводит к тому, что для параллельного выполнения в алгоритмах решения вычислительных задач достаточно выделять только крупные независимые части расчетов (coarse granularity), что, в свою очередь, снижает сложность построения параллельных методов вычислений и уменьшает потоки передаваемых данных между компьютерами кластера. Вместе с этим следует отметить, что организация взаимодействия вычислительных узлов кластера при помощи передачи сообщений обычно приводит к значительным временным задержкам, что накладывает дополнительные ограничения на тип разрабатываемых параллельных алгоритмов и программ.
Мультипроцессор с разделяемой памятью
В мультипроцессоре и в многоядерной системе исполнительные устройства (процессоры и ядра процессоров) имеют доступ к разделяемой оперативной памяти. Процессоры совместно используют оперативную память.
У каждого процессора есть собственный кэш. Если два процессора ссылаются на разные области памяти, их содержимое можно безопасно поместить в кэш каждого из них. Проблема возникает, когда два процессора обращаются к одной области памяти. Если оба процессора только считывают данные, в кэш каждого из них можно поместить копию данных. Но если один из процессоров записывает в память, возникает проблема согласованности кэша: в кэш-памяти другого процессора теперь содержатся неверные данные. Необходимо либо обновить кэш другого процессора, либо признать содержимое кэша недействительным. Обеспечение однозначности кэшей реализуется на аппаратном уровне – для этого после изменения значения общей переменной все копии этой переменной в кэшах отмечаются как недействительные и последующий доступ к переменной потребует обязательного обращения к основной памяти. Необходимость обеспечения когерентности приводит к некоторому снижению скорости вычислений и затрудняет создание систем с достаточно большим количеством процессоров.
Наличие общих данных при выполнении параллельных вычислений приводит к необходимости синхронизации взаимодействия одновременно выполняемых потоков команд. Так, например, если изменение общих данных требует для своего выполнения некоторой последовательности действий, то необходимо обеспечить взаимоисключение с тем, чтобы эти изменения в любой момент времени мог выполнять только один командный поток. Задачи взаимоисключения и синхронизации относятся к числу классических проблем, и их рассмотрение при разработке параллельных программ является одним из основных вопросов параллельного программирования.
Режимы выполнения независимых частей программы
При рассмотрении проблемы организации параллельных вычислений следует различать следующие возможные режимы выполнения независимых частей программы:
1) Режим разделения времени (многозадачный режим)
Режим разделения времени предполагает, что число подзадач (процессов или потоков одного процесса) больше, чем число исполнительных устройств. Данный режим является псевдопараллельным, когда активным (исполняемым) может быть одна единственнаяподзадача, а все остальные процессы (потоки) находятся в состоянии ожидания своей очереди на использование процессора; использование режима разделения времени может повысить эффективность организации вычислений (например, если один из процессов не может выполняться из-за ожидания вводимых данных, процессор может быть задействован для выполнения другого, готового к исполнению процесса), кроме того в данном режиме проявляются многие эффекты параллельных вычислений (необходимость взаимоисключения и синхронизации процессов и др.).
Многопоточность приложений в операционных системах с разделением времени применяется даже в однопроцессорных системах. Например, в Windows-приложениях многопоточность повышает отзывчивость приложения – если основной поток занят выполнением каких-то расчетов или запросов, другой поток позволяет реагировать на действия пользователя. Многопоточность упрощает разработку приложения. Каждый поток может планироваться и выполняться независимо. Например, когда пользователь нажимает кнопку мышки персонального компьютера, посылается сигнал процессу, управляющему окном, в котором в данный момент находится курсор мыши. Этот процесс (поток) может выполняться и отвечать на щелчок мыши. Приложения в других окнах могут продолжать при этом свое выполнение в фоновом режиме.
2) Распределенные вычисления
Компоненты выполняются на машинах, связанных локальной или глобальной сетью. По этой причине процессы взаимодействуют, обмениваясь сообщениями.
Такие системы пишутся для распределения обработки (как в файловых серверах), обеспечения доступа к удаленным данным (как в базах данных и в Web), интеграции и управления данными, распределенными по своей сути (как в промышленных системах), или повышения надежности (как в отказоустойчивых системах). Многие распределенные системы организованы как системы типа клиент-сервер. Например, файловый сервер предоставляет файлы данных для процессов, выполняемых на клиентских машинах. Компоненты распределенных систем часто сами являются многопоточными.
3) Синхронные параллельные вычисления.
Их цель – быстро решать данную задачу или за то же время решить большую задачу. Примеры синхронных вычислений:
- научные вычисления, которые моделируют и имитируют такие явления, как глобальный климат, эволюция солнечной системы или результат действия нового лекарства;
- графика и обработка изображений, включая создание спецэффектов в кино;
- крупные комбинаторные или оптимизационные задачи, например, планирование авиаперелетов или экономическое моделирование.
Программы решения таких задач требуют эффективного использования доступных вычислительных ресурсов системы. Число подзадач должно быть оптимизировано с учетом числа исполнительных устройств в системе (процессоров, ядер процессоров).
Уровни параллелизма в многоядерных архитектурах
Параллелизм на уровне команд (InstructionLevelParallelism, ILP) позволяет процессору выполнять несколько команд за один такт. Зависимости между командами ограничивают количество доступных для выполнения команд, снижая объем параллельных вычислений. Технология ILP позволяет процессору переупорядочить команды оптимальным образом с целью исключить остановки вычислительного конвейера и увеличить количество команд, выполняемых процессором за один такт. Современные процессоры поддерживают определенный набор команд, которые могут выполняться параллельно.
Параллелизм на уровне потоков процесса. Потоки позволяют выделить независимые потоки исполнения команд в рамках одного процесса. Потоки поддерживаются на уровне операционной системы. Операционная система распределяет потоки процессов по ядрам процессора с учетом приоритетов. С помощью потоков приложение может максимально задействовать свободные вычислительные ресурсы.
Параллелизм на уровне приложений.Одновременное выполнение нескольких программ осуществляется во всех операционных системах, поддерживающих режим разделения времени. Даже на однопроцессорной системе независимые программы выполняются одновременно. Параллельность достигается за счет выделение каждому приложению кванта процессорного времени.
Анализ эффективности параллельных вычислений
Анализ эффективности параллельных вычислений
Эффективность параллельного алгоритма определяется следующим образом:
Эффективность показывает, насколько задействованы вычислительные ресурсы системы; идеальное теоретическое значение эффективности равно единице.
Пределы параллелизма
Достижению максимального ускорения может препятствовать существование в выполняемых вычислениях последовательных расчетов, которые не могут быть распараллелены. Джин Амдал (GeneAmdahl)показал, что верхняя граница для ускорения определяется долей последовательных вычислений алгоритма:
– доля последовательных вычислений в применяемом алгоритме обработки данных, – число процессоров.
Например, если доля последовательных вычислений составляет 25%, то максимально достижимое ускорение для параллельного алгоритма равно:
В «законе Амдала»имеется несколько допущений, которые в реальных приложениях могут быть неверными. Одно из допущений заключается в том, что доля последовательных расчетов является постоянной величиной и не зависит от вычислительной сложности решаемой задачи. Однако, для большинства задач является убывающей функцией от , где –параметр сложности задачи.В этом случае ускорение может быть увеличено при увеличении вычислительной сложности задачи. Нарушение «закона Амдала» также может быть связано с архитектурными особенностями параллельной вычислительной системы. Например, параллельный алгоритм уменьшает объем данных, используемых каждым процессором, и повышает эффективность использования кэш-памяти каждого процессора. Оптимальная работа с кэш-памятью может сильно увеличить быстродействие алгоритма.
Параллельный алгоритм называется масштабируемым, если при росте числа процессоров он обеспечивает увеличение ускорения при сохранении постоянного уровня эффективности использования процессоров.
Параллельные и распределенные вычисления. — Студопедия.Нет
Сетевые операционные системы, их особенности. Примеры операционных систем для параллельных вычислений. Основы администрирования Linux. Интерфейсы обмена и протоколы. Распределенные системы имен. Однопроцессорные и SMP-системы. Кластеры. Системы планирования и управления заданиями. Распределенные сетевые файловые системы. Схемы параллельных систем. Алгоритмы работы распределенных ресурсов. Средства разработки параллельных программ. Стандартные интерфейсы операционных систем. Характеристики продуктивности вычислительных систем.
Телекоммуникационные системы и сети.
Каналы передачи данных, их классификация и основные характеристики. Принципы построения многоканальных систем передачи. Обобщенная структурная схема цифровой системы передачи и назначение основных модулей. Антенны, характеристики антенн. Системы спутниковой связи и принципы их построения. Организация волоконно-оптической линии связи. Принципы построения мобильных систем.
Компьютерные системы.
Режимы работы в компьютерных системах. Характеристики производительности и надежности компьютерных систем. Расчет характеристик компьютерных систем на основе Марковских процессов. Расчет характеристик компьютерных систем на основе моделей массового обслуживания. Вычислительные системы реального времени. Архитектура компьютерных систем параллельного действия. Коммутаторы и коммутационные среды. Классификация архитектур параллельных вычислительных систем.
Надежность компьютерных систем.
Общая характеристика показателей надёжности компьютерных систем. Общая характеристика показателей отказоустойчивости. Оценка надёжности нерезервированных невосстанавливаемых систем. Оценка надежности невосстанавливаемых резервированных систем. Оценка надежности систем с последовательно-параллельным соединением элементов. Оценка надежности восстанавливаемых нерезервированных систем Основные соотношения для расчета безотказности, ремонтопригодности и готовности. Понятие надежности программных средств. Влияние надежности программных средств на надежность и безопасность компьютерных систем. Общая характеристика моделей надежности программных средств. Методы обеспечения надежности программных средств. Классификация методов и средств обеспечения отказоустойчивости.
ТИПОВЫЕ ЗАДАЧИ.
- Построить автомат распознающий язык, заданный регулярным выражением .
- Дан IP-адрес 192.168.0.0 . Нужно разбить ее на 200 подсетей по 200 компьютеров в каждой.
- Реализовать булеву функцию в классе OBDD для упорядочений переменных и .
4. Найти минимальный уровень быстродействия процессора, при котором существует стационарный процесс обработки заданий, определить время ожидания потоков.
- Имеется восстанавливаемая система, у которой параметр потока отказов l, средняя интенсивность восстановления m. Определить, на сколько повысится надежность этой системы за счет более высокой организации работы ремонтного персонала.
СПИСОК ЛИТЕРАТУРЫ
№
| Наименование дисциплины
| Литература
| |||
1.
| Прикладная теория цифровых автоматов
| 1. Карпов Ю.Г. Теория автоматов. – Спб.: Питер, 2003. – 208 с.
2. Новоселов В.Г., Новоселова Т.А., Островский В.И. Прикладная теория цифровых автоматов.Часть 1 Проектирование комбинационных схем. /Учебное пособие. -Киев: УМКВО, Новоселов В.Г. Прикладная теория цифровых автоматов. Часть 2. Диагностика схем. /Учебное пособие. — Севастополь: СевГТУ, 1998. -78 стр.
3. Новоселов В.Г. Прикладная теория цифровых автоматов. Части 3,4. Синхронные и асинхронные цифровые автоматы с памятью. /Учебное пособие. — Киев: ИСИО, 1993. — 144 стр.
4. Новоселов В.Г., Скатков А.В. Прикладная математика для инженеров-системотехников. Дискретная математика в задачах и примерах ./Учебное пособие. — Киев: УМК ВО, 1992.-200 стр.
| |||
2. | Компьютерная электроника и схемотехника
| 1. Эрл. Д. Гейтс Введение в электронику. Серия Учебники и учебные пособия. Ростов-на-Дону: Феникс. 1998. – 640с.
2. Кузнецов В.А. Измерения в электронике. М.: Энергоатомиздат. – 1986. – 511с.
3. Ибрагим К.Ф. Основы электронной техники: элементы, схемы, системы. Пер. с англ. – Изд. Второе. М.: Мир, 2001. – 398с.
4. Прянишников В.А. Электроника. Курс лекций
5. Бойко В.И. Схемотехника электронных систем. Цифровые устройства. М.: BHV-СПб. 2000. – 321с.
6. Опадчий Ю. Ф., Глудкин О. П., Гуров А. И. Аналоговая и цифровая электроника: Учебник для вузов. — М: «Радио и связь», 2001, 768с.
7. Хоровиц П., Хилл У. Искусство схемотехники — М.: Мир. 1998. – 703с.
8. Титце У., Шенк К. Полупроводниковая схемотехника — М.: Мир. 1997. – 512с.
9. Баскаков С.И. Радиотехнические цепи и сигналы
10. Барри Уилкинсон Основы проектирования цифровых схем — М: «Вильямс», 2004, 320с.
| |||
3.
| Архитектура компьютеров
| 1. Э. Таненбаум Архитектура компьютера 4-е издание. – СПб..: СППТЕР. 2003. – 698с.
2. К. Хамахер, З. Вранешич, С. Заки, Организация ЭВМ. СПб, Из-во «Питер», 2003 г.
3. Хорошевский В.Г. Архитектура вычислительных систем. – Москва: МГТУ им. Баумана, 2005. – 511с.
4. Скотт Мюллер Модернизация и ремонт ПК, изд. 12, 13, 14, 15-е юбилейное — М: «Вильямс», 2004 г, 1344с.
5. Вильям Столингс Структурная организация и архитектура компьютерных систем, 5-е изд. — М: «Вильямс», 2002 г.
6. Борзенко А. Архитектура Athlon MP
7. Таненбаум Э. Архитектура компьютера
8. Михаил Кузьминский Athlon: от микропроцессоров к материнским платам
9. Якусевич В.В. BIOS Setup
10. Шагурин И. RISC -процессоры PowerPC
11. Архитектура процессоров Pentium
12. Ляшко Д.А. Методические рекомендации по практикуму курса архитектура ЭВМ
13. Озеров С. Новые шины. PCI Express — общая концепция и возможности
14. Гарматюк С. Современные десктопные процессоры архитектуры x86: общие принципы работы
15. Andreas Stiller Сравнение архитектур процессоров: AMD K7 Athlon против Pentium III
16. Озеров С. Ядра — чистый изумруд
17. Prescott: Последний из могикан? (Pentium 4: от Willamette Prescott)
18. Нейрокомпьютеры
| |||
4.
| Системное программирование
| 1. Пирогов В.Ю. ASSEMBLER. Учебный курс. — СПб: «Питер», 2002. 318с.
2. Юров В.И. Assembler. Специальный справочник.Изд.2 — СПб:»Питер», 2004, 412с.
3. Assembler. Учебник для вузов. 2-е изд. — Юров В.И. — СПб: «Питер», 2003, 321с.
4. ВиртН. Алгоритмы и структуры данных. — М.: Мир, 1989.-360 с.
5. Кнут Д. Искуство прграммирования для ЭВМ. Т 1,3. -М.: Мир, 1968.
6. Баррон Д. Ассемблеры и загрузчики.- М.: Мир, 1974.-74 с.
7. Бек Л. Введение в системное программирование. -М.: Мир, 1988.-448 с.
8. Вишняков В.А., Петровский А.А. Системное обеспечение микро-ЭВМ. — Минск: Вышейшая школа, 1990. — 304 с.
9. Донован Дж. Системное программирование. — М.: Мир, 1975.-540 с.
10. Скэнлон Л. Персональные ЭВМ. Программирование на языке ассемблера. — М.: Радио и связь, 1989.-335 с.
11. Лебедев В.Н. Введение в системы программирования. — М: Статистика, 1975. — 311 с.
| |||
5.
| Компьютерные сети
| 1. М.Кульгин Компьютерные сети. Практика построения – СПб.: «Питер», 2003, 462с.
2. Э. Таненбаум Компьютерные сети – СПб.: «Питер», 2003, 992с.
3. В.Г. Олифер, Н.А. Олифер Компьютер-ные сети – СПб.: «Питер», 2002, 893с.
4. Олифер В.Г Компьютерные сети. Прин-ципы, технологии, протоколы. Учебник для ВУЗов.–СПб.: «Питер», 2001, 736с.
5. Кеннеди Кларк, Кевин Гамильтон Принципы коммутации в локальных сетях Cisco — М: «Вильямс», 2003 г, 976с.
6. Кесрин Пакет, Дайана Тир Создание масштабируемых сетей Cisco — М: «Вильямс», 2002 г, 792 стр.
7. Дебра Литтлджон Шиндер Основы ком-пьютерных сетей -М:»Вильямс», 2002, 656с.
8. Аллан Леинванд, Брюс Пински Конфигурирование маршрутизаторов Cisco — М: «Вильямс», 2001 г.
9. Сэм Хелеби, Денни Мак-Ферсон Принципы маршрутизации в Internet 2-е издание — М: «Вильямс», 2001 г, 1100с.
10. Джо Хабракен Как работать с маршрутизаторами CISCO
11. Дилип Найк Стандарты и протоколы интернета
12. Вито Амато Основы организации сетей CISCO
13. Убайдуллаев Р.Р. Волоконно-оптические сети
14. Педжман Рошан, Джонатан Лиэри Основы построения беспроводных локальных сетей стандарта 802.11
| |||
6.
| Компьютерное моделирование
| 1. Компьютерное моделирование в физике часть 1 — Гулд Х., Тобочник Я.
2. Компьютерное моделирование в физике часть 2 — Гулд Х., Тобочник Я.
3. Уравнения математической физики — Тихонов А.Н., Самарский А.А.
4. Гуц А.К., Коробицын В.В., Лаптев А.А…. Компьютерное моделирование
5. Медведев С.В. Математическое моделирование ч.1
6. Медведев С.В. Математическое моделирование ч.2
7. Самарский А.А., Михайлов А.П. Математическое моделирование: Идеи. Методы. Примеры.
8. Вентцель Е.С. Теория вероятностей./Е.С.Вентцель. — М: Высшая школа, 2001 — 575с.
9. Основы теории вычислительных систем (Под ред. Майорова С.А.) — М.-. Высшая школа, 1978. — 408 с.
10. Советов Б.Я. Моделирование систем./ Б.Я.Советов, С.А.Яковлев. — М. Высшая школа, 2001. — 343 с.
| |||
7. | Системное программное обеспечение | 1. Молчанов А.Ю. Системное программное обеспечение — М.: Вильямс. 2002. – 687с.
2. Ахо А., Сети Р., Ульман Дж. Компиляторы. Принципы, технологии, инструменты – М.: Вильямс. 2003. – 768с. 3. Таненбаум Э.С., Вудхалл А.С. Операционные системы. Разработка и реализация 4. Басс Л., Клементс П., Кацман Р. Архитектура программного обеспечения на практике — СПб: «Питер», 2005 г, 576 стр. 5. Финогенов К. Г. Win32 Основы программирования 6. Р. М. Ганеев Проектирование интерфейса пользователя средствами Win32 API 7. Microsoft Corporation Разработка инфраструктуры сетевых служб Microsoft® Windows 2000 8. Microsoft Corporation Управление сетевой средой Microsoft® Windows 2000. Учебный курс 9. Кэти Айвеис MS Windows Server 2003 Полное руководство 10. Андрей Робачевский OS UNIX 11. Моххамид ДЖ . Кабир RedHat Linux 6 12. Майкл Эбен Администрирование FreeBSD 13. Дэвид Аллен Переход с Windows на Linux 14. Родерик Смит Полный справочник по FreeBSD |
8. | Параллельные и распределенные вычисления | 1. А.C. Антонов Введение в параллельные вычисления
2. Кацубо Д.В. Использование кластерной системы OPENMOSIX для построения распределенных вычислений 3. Антонов А.С. Параллельное программирование с использованием технологии MPI 4. В.В.Воеводин, Вл.В.Воеводин Параллельные вычисления, «БХВ «, 2002 5. Антонов А.С. Параллельное программирование с использованием технологии MPI 6. Шпаковский Г.И., Серикова Н.В. Программирование для многопроцессорных систем в стандарте MPI 7. Родерик В. СмитСетевые Средства Linux 8. Якобовский М.В. Распределенные системы и сети 9. Кацубо Д.В. Использование кластерной системы OPENMOSIX для построения распределенных вычислений |
9. | Телекоммуникационные системы и сети | 1. Брэдли Дансмор, Тоби Скандьер Справочник по телекоммуникационным технологиям
2. С.М. Сухман, А.В. Бернов и др. Синхронизация в телекоммуникационных системах 3. С.Л. Корякин-Черняк, Л.Я. Котенко Телефонные сети и аппараты |
10. | Компьютерные системы | 1. Майоров С.А.Основы теории вычислительных систем.-М.:Высш.шк.,1977.-408 с.
2. Ларионов А.М.,Майоров С.А. Вычислительные машины, комплексы и сети.- Л.:Энергоатомиздат,987.-215 с. 3. Корнеев В.В. Параллельные вычислительные системы..-М.:Нолидж,1999-320с. 4. Столингс У.Структурная организация и архитектура компьютерных систем .-М.:Вильям, 2002.-892с. 5. Таненбаум Э. Архитектура компьютера.-СПБ ПИТЕР,2002.-698с.,8 гл. 6. Лацис А. Как построить и использовать суперкомпьютер .-М БЕСТСЕЛЛЕР, 2003.-238с. 7. Немнюгин С.,Стесик О. Параллельное программирование для многопроцессорных вычислительных систем.-СПБ БХВ, 2002, 394с.,1 гл. 8. Завизиступ Ю.Ю., Калоша В.А., Партыка С.А.Материалы для самостоятельной работы по дисциплине “Компьютерные системы” по теме “Кластерные вычислительные системы”.Харьков ХНУРЭ, 2006, 52с. |
11. | Надежность компьютерных систем | 1. Черкесов Г. Н. Надежность аппаратно-программных комплексов: Учебное пособие — СПб: «Питер», 2004 г, 480 стр.
2. Коваленко А.Е., Гула В.В. Отказоустойчивые микропроцессорные системы 3. Технология защиты от сбоев |
информатика | Определение, поля и факты
Информатика , изучение компьютеров и вычислений, включая их теоретические и алгоритмические основы, аппаратное и программное обеспечение, а также их использование для обработки информации. Дисциплина информатики включает изучение алгоритмов и структур данных, компьютерное и сетевое проектирование, моделирование данных и информационных процессов, а также искусственный интеллект. Информатика берет некоторые свои основы из математики и инженерии и, следовательно, включает методы из таких областей, как теория очередей, вероятность и статистика, а также проектирование электронных схем.Информатика также широко использует проверку гипотез и экспериментирование во время концептуализации, проектирования, измерения и уточнения новых алгоритмов, информационных структур и компьютерных архитектур.
портативный компьютер портативный персональный компьютер. © Index Open
Популярные вопросы
Что такое информатика?
Кто самые известные программисты?
Что можно сделать с информатикой?
Используется ли информатика в видеоиграх?
Как мне изучить информатику?
Многие университеты по всему миру предлагают степени, которые обучают студентов основам теории информатики и приложениям компьютерного программирования.Кроме того, преобладание онлайн-ресурсов и курсов позволяет многим людям самостоятельно изучать более практические аспекты информатики (такие как кодирование, разработка видеоигр и дизайн приложений).
Информатика считается частью семейства из пяти отдельных, но взаимосвязанных дисциплин: компьютерная инженерия, информатика, информационные системы, информационные технологии и разработка программного обеспечения. Это семейство стало известно как дисциплина вычислений.Эти пять дисциплин взаимосвязаны в том смысле, что информатика является их объектом изучения, но они отделены друг от друга, поскольку каждая имеет свою исследовательскую перспективу и учебную программу. (С 1991 года Ассоциация вычислительной техники [ACM], Компьютерное общество IEEE [IEEE-CS] и Ассоциация информационных систем [AIS] сотрудничают, чтобы разработать и обновить таксономию этих пяти взаимосвязанных дисциплин и руководящие принципы, которые во всем мире для их программ бакалавриата, магистратуры и исследований.)
Основные области информатики включают традиционное изучение компьютерной архитектуры, языков программирования и разработки программного обеспечения. Однако они также включают в себя вычислительную науку (использование алгоритмических методов для моделирования научных данных), графику и визуализацию, взаимодействие человека с компьютером, базы данных и информационные системы, сети, а также социальные и профессиональные вопросы, которые являются уникальными для практики информатики. . Как может быть очевидно, некоторые из этих подполей пересекаются в своей деятельности с другими современными областями, такими как биоинформатика и вычислительная химия.Эти совпадения являются следствием тенденции компьютерных ученых признавать многочисленные междисциплинарные связи в своей области и действовать в соответствии с ними.
Развитие информатики
Информатика возникла как самостоятельная дисциплина в начале 1960-х годов, хотя электронно-цифровая вычислительная машина, являющаяся объектом ее изучения, была изобретена двумя десятилетиями раньше. Корни информатики лежат, прежде всего, в смежных областях математики, электротехники, физики и информационных систем управления.
Получите эксклюзивный доступ к контенту из нашего первого издания 1768 с вашей подпиской.
Подпишитесь сегодня
Математика является источником двух ключевых концепций в развитии компьютера — идеи о том, что всю информацию можно представить в виде последовательностей нулей и единиц, и абстрактного понятия «хранимая программа». В двоичной системе счисления числа представлены последовательностью двоичных цифр 0 и 1 так же, как числа в знакомой десятичной системе представлены цифрами от 0 до 9.Относительная легкость, с которой два состояния (например, высокое и низкое напряжение) могут быть реализованы в электрических и электронных устройствах, естественным образом привела к тому, что двоичная цифра или бит становится основной единицей хранения и передачи данных в компьютерной системе.
Электротехника обеспечивает основы проектирования схем, а именно идею о том, что электрические импульсы, входящие в схему, могут быть объединены с использованием булевой алгебры для получения произвольных выходных сигналов. (Булева алгебра, разработанная в 19 веке, предоставила формализм для разработки схемы с двоичными входными значениями нулей и единиц [ложь или истина, соответственно, в терминологии логики], чтобы получить любую желаемую комбинацию нулей и единиц на выходе.) Изобретение транзистора и миниатюризация схем, наряду с изобретением электронных, магнитных и оптических носителей для хранения и передачи информации, явились результатом достижений электротехники и физики.
Информационные системы управления, первоначально называвшиеся системами обработки данных, предоставили ранние идеи, на основе которых развились различные концепции информатики, такие как сортировка, поиск, базы данных, поиск информации и графические пользовательские интерфейсы.В крупных корпорациях размещались компьютеры, на которых хранилась информация, которая имела центральное значение для ведения бизнеса: платежная ведомость, бухгалтерский учет, управление запасами, производственный контроль, отгрузка и получение.
Теоретические работы по вычислимости, начатые в 1930-х годах, обеспечили необходимое распространение этих достижений на проектирование целых машин; важной вехой стала спецификация машины Тьюринга (теоретическая вычислительная модель, выполняющая инструкции, представленные в виде последовательности нулей и единиц) в 1936 году британским математиком Аланом Тьюрингом и его доказательство вычислительной мощности модели.Другим прорывом стала концепция компьютера с хранимой программой, которую обычно приписывают венгерскому американскому математику Джону фон Нейману. Это истоки области информатики, которая позже стала известна как архитектура и организация.
Алан М. Тьюринг, 1951. Science History Images / Alamy
В 1950-е годы большинство пользователей компьютеров работали либо в научно-исследовательских лабораториях, либо в крупных корпорациях. Первая группа использовала компьютеры для выполнения сложных математических вычислений (например,g., траектории ракет), в то время как последняя группа использовала компьютеры для управления большими объемами корпоративных данных (например, платежными ведомостями и товарно-материальными запасами). Обе группы быстро поняли, что написание программ на машинном языке нулей и единиц непрактично и не надежно. Это открытие привело к разработке языка ассемблера в начале 1950-х годов, который позволяет программистам использовать символы для инструкций (например, ADD для сложения) и переменных (например, X ). Другая программа, известная как ассемблер, переводила эти символические программы в эквивалентную двоичную программу, шаги которой компьютер мог выполнять, или «выполнять».”
Другие элементы системного программного обеспечения, известные как связывающие загрузчики, были разработаны для объединения частей собранного кода и загрузки их в память компьютера, где они могли быть выполнены. Концепция связывания отдельных частей кода была важна, поскольку позволяла повторно использовать «библиотеки» программ для выполнения общих задач. Это был первый шаг в развитии области компьютерных наук, называемой программной инженерией.
Позже, в 1950-х годах, язык ассемблера оказался настолько громоздким, что разработка языков высокого уровня (близких к естественным языкам) стала поддерживать более легкое и быстрое программирование.FORTRAN стал основным языком высокого уровня для научного программирования, а COBOL стал основным языком бизнес-программирования. Эти языки несли с собой потребность в различном программном обеспечении, называемом компиляторами, которое переводит программы на языке высокого уровня в машинный код. По мере того, как языки программирования становились все более мощными и абстрактными, создание компиляторов, которые создают высококачественный машинный код и которые эффективны с точки зрения скорости выполнения и потребления памяти, стало сложной проблемой информатики.Разработка и реализация языков высокого уровня лежит в основе области информатики, называемой языками программирования.
Рост использования компьютеров в начале 1960-х годов послужил толчком для разработки первых операционных систем, которые состояли из резидентного программного обеспечения системы, которое автоматически обрабатывало ввод и вывод, а также выполнение программ, называемых «заданиями». Спрос на более совершенные вычислительные методы привел к возрождению интереса к численным методам и их анализу, деятельности, которая распространилась настолько широко, что стала известна как вычислительная наука.
В 1970-х и 1980-х годах появились мощные устройства компьютерной графики, как для научного моделирования, так и для другой визуальной деятельности. (Компьютеризированные графические устройства были представлены в начале 1950-х годов с отображением грубых изображений на бумажных графиках и экранах электронно-лучевой трубки [ЭЛТ].) Дорогостоящее оборудование и ограниченная доступность программного обеспечения не позволяли этой области расти до начала 1980-х годов, когда компьютерная память, необходимая для растровой графики (в которой изображение состоит из небольших прямоугольных пикселей), стала более доступной.Технология растровых изображений вместе с экранами с высоким разрешением и развитием графических стандартов, которые делают программное обеспечение менее зависимым от машины, привели к взрывному росту этой области. Поддержка всех этих видов деятельности переросла в область компьютерных наук, известную как графика и визуальные вычисления.
С этой областью тесно связано проектирование и анализ систем, которые напрямую взаимодействуют с пользователями, выполняющими различные вычислительные задачи. Эти системы стали широко использоваться в 1980-х и 90-х годах, когда линейное взаимодействие с пользователями было заменено графическими пользовательскими интерфейсами (GUI).Дизайн графического интерфейса пользователя, который был впервые разработан Xerox, а затем подхвачен Apple (Macintosh) и, наконец, Microsoft (Windows), важен, потому что он определяет то, что люди видят и делают, когда они взаимодействуют с вычислительным устройством. Разработка соответствующих пользовательских интерфейсов для всех типов пользователей превратилась в область компьютерных наук, известную как взаимодействие человека с компьютером (HCI).
графический интерфейс пользователя Xerox Alto был первым компьютером, на котором для управления системой использовались графические значки и мышь — первый графический интерфейс пользователя (GUI). Предоставлено Xerox
Область компьютерной архитектуры и организации также резко изменилась с тех пор, как в 1950-х были разработаны первые компьютеры с хранимыми программами. Так называемые системы с разделением времени появились в 1960-х годах, чтобы позволить нескольким пользователям одновременно запускать программы с разных терминалов, жестко подключенных к компьютеру. В 1970-х годах были разработаны первые глобальные компьютерные сети (WAN) и протоколы для высокоскоростной передачи информации между компьютерами, разделенными на большие расстояния.По мере развития этих видов деятельности они переросли в область компьютерных наук, называемую сетями и коммуникациями. Важным достижением в этой области стало развитие Интернета.
Идея о том, что инструкции, а также данные могут храниться в памяти компьютера, имела решающее значение для фундаментальных открытий о теоретическом поведении алгоритмов. То есть такие вопросы, как «Что можно / нельзя вычислить?» были формально решены с использованием этих абстрактных идей. Эти открытия положили начало области компьютерных наук, известной как алгоритмы и сложность.Ключевой частью этой области является изучение и применение структур данных, подходящих для различных приложений. Структуры данных, наряду с разработкой оптимальных алгоритмов для вставки, удаления и размещения данных в таких структурах, являются серьезной проблемой для компьютерных ученых, потому что они так активно используются в компьютерном программном обеспечении, особенно в компиляторах, операционных системах, файловых системах, и поисковые системы.
В 1960-х годах изобретение магнитных дисков обеспечило быстрый доступ к данным, расположенным в произвольном месте на диске.Это изобретение привело не только к более грамотно спроектированным файловым системам, но и к разработке баз данных и систем поиска информации, которые впоследствии стали важными для хранения, извлечения и передачи больших объемов и разнообразных данных через Интернет. Эта область информатики известна как управление информацией.
Еще одна долгосрочная цель исследований в области информатики — создание вычислительных машин и роботизированных устройств, которые могут выполнять задачи, которые обычно считаются требующими человеческого интеллекта.К таким задачам относятся движение, зрение, слух, говорение, понимание естественного языка, мышление и даже проявление человеческих эмоций. Область информатики интеллектуальных систем, первоначально известная как искусственный интеллект (ИИ), на самом деле предшествовала первым электронным компьютерам в 1940-х годах, хотя термин искусственный интеллект не был введен до 1956 года.
Три развития вычислительной техники в начале XXI века — мобильные вычисления, вычисления клиент-сервер и взлом компьютеров — способствовали появлению трех новых областей в информатике: разработка на основе платформ, параллельные и распределенные вычисления и безопасность. и информационное обеспечение.Платформенная разработка — это изучение особых потребностей мобильных устройств, их операционных систем и приложений. Параллельные и распределенные вычисления связаны с разработкой архитектур и языков программирования, которые поддерживают разработку алгоритмов, компоненты которых могут работать одновременно и асинхронно (а не последовательно), чтобы лучше использовать время и пространство. Обеспечение безопасности и информации связано с проектированием компьютерных систем и программного обеспечения, которые защищают целостность и безопасность данных, а также конфиденциальность лиц, которые характеризуются этими данными.
Наконец, на протяжении всей истории информатики особое внимание уделялось уникальному социальному воздействию, которое сопровождает исследования в области информатики и технологические достижения. Например, с появлением Интернета в 1980-х годах разработчикам программного обеспечения потребовалось решить важные вопросы, связанные с информационной безопасностью, личной конфиденциальностью и надежностью системы. Кроме того, вопрос о том, является ли компьютерное программное обеспечение интеллектуальной собственностью, и связанный с ним вопрос «Кому оно принадлежит?» породила совершенно новую правовую область лицензирования и лицензионных стандартов, которые применяются к программному обеспечению и связанным с ним артефактам.Эти и другие проблемы составляют основу социальных и профессиональных вопросов информатики и проявляются почти во всех других областях, указанных выше.
Итак, чтобы подвести итог, дисциплина информатики превратилась в следующие 15 отдельных областей:
Алгоритмы и сложность
Архитектура и организация
Вычислительные науки
Графика и визуальные вычисления
Человеко-компьютерное взаимодействие
Управление информацией
Интеллектуальные системы
Сеть и связь
Операционные системы
Параллельные и распределенные вычисления
Разработка на базе платформы
Языки программирования
Обеспечение безопасности и информации
Программная инженерия
- Социальные и профессиональные вопросы
Информатика по-прежнему имеет сильные математические и инженерные корни.Программы бакалавриата, магистратуры и докторантуры по информатике обычно предлагаются высшими учебными заведениями, и эти программы требуют от студентов прохождения соответствующих курсов математики и инженерии, в зависимости от их специализации. Например, все студенты бакалавриата по информатике должны изучать дискретную математику (логику, комбинаторику и элементарную теорию графов). Многие программы также требуют от студентов завершения курсов по расчету, статистике, численному анализу, физике и принципам инженерии в начале учебы.
.
Журнал параллельных и распределенных вычислений
Этот международный журнал предназначен для исследователей, инженеров, преподавателей, менеджеров, программистов и пользователей компьютеров, которые особенно заинтересованы в параллельной обработке и / или распределенных вычислениях .
The Journal of Parallel and Distributed Computing публикует оригинальные исследовательские работы и своевременные …
Подробнее
Этот международный журнал предназначен для исследователей, инженеров, преподавателей, менеджеров, программистов и пользователей компьютеров, которые особенно заинтересованы в параллельной обработке и / или распределенных вычислениях .
The Journal of Parallel and Distributed Computing публикует оригинальные исследовательские работы и своевременные обзорные статьи по теории, проектированию, оценке и использованию параллельных и / или распределенных вычислительных систем. В журнале также есть специальные выпуски по этим темам; опять же, охватывая весь диапазон от проектирования до использования наших целевых систем.
Области исследований включают:
• Теория параллельных и распределенных вычислений
• Параллельные алгоритмы и их реализация
• Инновационные компьютерные архитектуры
• Параллельное программирование
• Приложения, алгоритмы и платформы для ускорителей
• Облачные, пограничные и туманные вычисления
• Платформы и приложения с интенсивным использованием данных
• Параллельная обработка графов и нерегулярных приложений
• Модели параллельного и распределенного программирования
• Программные инструменты и среды для распределенных систем
• Алгоритмы и системы для Интернета вещей
• Анализ производительности параллельных приложений
• Архитектура для новых технологий e.g., новые технологии памяти, квантовые вычисления
• Архитектура для конкретных приложений, например, архитектура на основе ускорителя и реконфигурируемая архитектура
• Архитектура взаимосвязанной сети, маршрутизатора и сетевого интерфейса
Преимущества для авторов
Мы также предоставляем множество преимуществ для авторов, такие как бесплатные PDF-файлы, либеральная политика в отношении авторских прав, специальные скидки на публикации Elsevier и многое другое. Щелкните здесь, чтобы получить дополнительную информацию о наших услугах для авторов.
Информацию о подаче статей см. В нашем Руководстве для авторов.Если вам потребуется дополнительная информация или помощь, посетите наш Центр поддержки
Исследователи, заинтересованные в отправке предложения по особой проблеме, должны придерживаться правил подачи.
Скрыть полную цель и объем
.
Что такое параллельные вычисления?
— MATLAB и Simulink
MATLAB worker : вычислительные механизмы MATLAB, которые работают в фоновом режиме без
графический рабочий стол. Вы используете функции в Parallel Computing Toolbox, чтобы автоматически разделять задачи и назначать их этим рабочим.
для параллельного выполнения вычислений. Вы можете запустить местных рабочих, чтобы
преимущество всех ядер в вашем многоядерном настольном компьютере.Вы также можете
масштабирование для запуска ваших рабочих на кластере машин с помощью MATLAB
Параллельный сервер ™. Сеанс MATLAB, с которым вы взаимодействуете, известен как
Клиент MATLAB . Клиент инструктирует рабочих с
функции параллельного языка.
Параллельный пул: параллельный пул рабочих MATLAB, созданный с использованием parpool
или
функции с автоматической параллельной поддержкой.По умолчанию параллельный язык
при необходимости функции автоматически создают для вас параллельный пул. Чтобы
дополнительные сведения см. в разделе Выполнение кода в параллельных пулах.
Для локального профиля по умолчанию количество рабочих по умолчанию — один на
физическое ядро процессора, использующее один вычислительный поток. Это потому, что даже
хотя каждое физическое ядро может иметь несколько виртуальных ядер, виртуальные ядра
совместно использовать некоторые ресурсы, как правило, включая общий блок с плавающей запятой
(FPU).Большинство вычислений MATLAB используют эту единицу, потому что они имеют двойную точность
плавающая точка. Ограничение одним работником на физическое ядро гарантирует, что
каждый рабочий имеет эксклюзивный доступ к модулю с плавающей запятой, который обычно
оптимизирует производительность вычислительного кода. Если ваш код не
требует больших вычислительных ресурсов, например, ввода / вывода (I / O),
затем рассмотрите возможность использования до двух рабочих на физическое ядро.Слишком много бега
работники на слишком малом количестве ресурсов могут повлиять на производительность и стабильность вашего
машина.
Ускорение: ускорите свой код, запустив несколько рабочих процессов MATLAB или графических процессоров, например, используя parfor
, parfeval
или gpuArray
.
Масштабируйте свои данные: разделите большие данные между несколькими рабочими процессами MATLAB, используя высокие массивы и распределенные массивы. Учить
подробнее см. Обработка больших данных.
Асинхронная обработка: используйте parfeval
для выполнения
вычислительная задача в фоновом режиме, не дожидаясь ее завершения.
Масштабирование до кластеров и облаков: если ваша вычислительная задача слишком велика или слишком велика
медленно для вашего локального компьютера, вы можете выгрузить свои вычисления в кластер
на месте или в облаке с помощью MATLAB
Параллельный сервер. Для получения дополнительной информации см. Кластеры и облака.
.