0: Всем привет, меня зовут Ренат Минязев. Сегодня у нас с вами 1 лекция в рамках нашего учебного курса. Параллельное программирование. Давайте начнём.
1: Структуру курса мы с вами уже разобрали. Итак, 1 лекция это введение. Поговорим немного о том, для чего вообще нужно писать параллельные программы, какие здесь есть основные подходы и
2: Пару слов буквально о платформах, где это может все быть использовано.
3: Ну, начнём спектр задач параллельного программирования. Здесь приведены некоторые примеры, где возникает необходимость в написании параллельных программ. То есть, отмечу, что параллельные программы нужно писать для
4: Параллельного аппаратного обеспечения, чтобы наиболее эффективно использовать такие платформы. И в основном, конечно же, это суперзадачи в повседневной жизни. У большинства фирм таких таких задач не возникает. То есть надо понимать, что
5: Параллельное программирование это все-таки достаточно узкоспециализированная область. Если говорить конкретно про Россию, то, наверное, такие задачи, они, конечно, востребованы в основном в московских каких-то крупных исследовательских компаниях, в Питерских
6: Ну, в Казани, в принципе, вакансии, при желании, наверное, тоже у нас можно найти. Итак, ну, 1 моделирование Газа и гидродинамики, и как конкретный пример задачи из этой области, это предсказание погоды. То есть, вы знаете, что в России у нас есть росгидромет.
7: Центр, который находится в Москве, у него есть вычислительный кластер, на котором у него крутится своя собственная так называемая климатическая модель, которая как раз-таки написана с использованием подходов параллельного программирования. Вот, ну, к примеру,
8: Другой такой серьёзной задачи, достаточно актуальной сейчас это конструирование летательных аппаратов конкретно у нас сейчас в России, да, и в целом в мире очень востребована разработка беспилотных летательных аппаратов, а также
9: Проектирование и исследование каких-то новых видов материалов, так называемые композитные материалы и так далее. И вот чтобы все вот эти вещи исследовать и изучать, ну в частности, летательные аппараты раньше активно использовалось
10: Аэродинамическая труба. Сейчас же большинство экспериментов проводится предварительно на компьютере, и только уже после этого изделия выпускают в аэродинамическую трубу. То есть да, труба, она осталась, никуда не делась, тем не менее.
11: Очень большое количество экспериментов предварительных проводят именно на компьютере. Ну и как пример конкретного продукта, который это может реализовывать, это промышленный пакет ансис флюент, если вскрыть, как бы, ну, условно говоря, код этого анти,
12: То внутри там окажется та же самая библиотека, эмпиай, ну, конкретная какая-то её реализация. Ну, другой пример, тоже актуальный сейчас, это синтез лекарств, исследование новых веществ. То есть это у нас раздел молекулярной Дина.
13: Биоинформатика и все прочее. Все это относится сюда. Здесь приведены 2 интересных таких программных пакета. Это пакет намт с помощью него. Ну далее он у нас будет учёные, биологи, молекулярные биологи, они могут
14: Проводить какие-то эксперименты, получать какие-то цифры, пакет вмд в от слова визуализ мд, это молекулярная динамика, молекулар, дайнемик. Вот, то есть с помощью пакета вмд можно результаты, полученные в нам, визуализировать
15: В красивой такой картинке для дальнейшего изучения, ну, краш тест автомобилей, там, в частности, например, может использоваться ансис механикал. То есть, опять-таки очень много, очень большое количество экспериментов, предварительно
16: Проводится на суперкомпьютере, на вычислительном кластере с использованием таких пакетов, как Анис механикс. Так вот, что флюентом Ханика, что вот эти нам вмд, вот эти промышленные пакеты, они внутри себя
17: Себя содержат как раз-таки технологии параллельного программирования, они написаны с использованием подходов параллельного программирования, в частности, это mpi, то, что там лежит в основе. И вот эти пакеты, они как раз-таки функционируют на вычислительном кластере. Вот, то есть
18: Использует множество узлов одновременно. Ну, примеры ещё задач это оптимизационные задачи, традиционные нахождение экстремума, градиентный спуск. Отмечу, что вот эта задача по оптимизации, она сейчас стала актуальной и востребованной в области
19: Искусственного интеллекта, то есть там действительно возникает задача поиска, ну, так называемых оптимов или минимумов 1, 2 порядка и так далее. Далее. Ну опять-таки ещё 1 актуальная задача это обработка
20: Изображение видео. Здесь надо понимать, речь идёт про обработку изображения в режиме реального времени. То есть сейчас есть программно аппаратные комплексы, ну те же самые, например, комплексы, которые есть
21: Полицейских, которые позволяют, например, там где-то на вокзалах, снимать множество людей, которые там ходят, и в режиме реального времени, сравнивать распознанные лица людей с базой тех лиц, которые находятся в поиске.
22: И вычислять тех людей, которые, как бы, ну, находятся в поиске, которых нужно задержать. Соответственно, вот. То есть, ну, достаточно такая тоже серьёзная задача. Вот, ну, анимация, спецэффекты, распознавание образов, здесь, как пример, приведены пакет
23: Блендер это по сути бесплатный аналог. 3 д студио Макс. При этом блендер это, ну по сути редактор, в нём вы можете рисовать 3 д модели, а вот дальнейшая трудоёмкая задача стоит в их рендеринге. И вот для этого как раз-таки исполь
24: Может быть использован так называемый менеджер Афанасий, который устанавливается на вычислительный кластер и позволяет вам ваши 3 д модели обрабатывать параллельно и, естественно, процесс тогда ускоряется. Итак,
25: Здесь буквально как, ну, маленькая толика тех задач, которые возникают в реальной жизни. Отмечу, наверное, что наиболее актуальная и востребованная, ну, условно говоря, востребованная, это вот эта 1 задача, моделирование Газа и гидродинамики.
26: Это у нас нефтянка, это у нас газовая область, ну и прочее, прочее, прочее, прочее. В чем здесь смысл? Смысл в том, что здесь при решении этих задач используется очень сложная математика, там, ре,
27: Огромное количество, система уравнений, сложных уравнений дифференциальных там и так далее. И вся эта математика, она в принципе уже известна, и все, все эти задачи, они могут быть решены аналитически, но
28: При аналитическом решении такие задачи решаются очень и очень долго. То есть, если там решать такую задачу на 1 даже мощном сервере, то это займёт, не знаю, там месяц, 2, 3 и так далее. Поэтому что делают очень часто
29: На практике, на практике очень часто вот эти уравнения, которые здесь находятся, их максимально упрощают.
30: То есть преобразовывать таким образом, чтобы задача имела меньшую размерность, имела меньшее количество уравнений и могла быть решена за приемлемое приемлемое время. Вот это 1 подход, ну или 2 подход, это исполь.
31: Как раз-таки мощный вычислительный кластер, то есть задачку разбивать на подзадачи. То есть есть сейчас разработаны алгоритмы для параллельного решения, в том числе систем уравнений и для других каких-то задач, и
32: Соответственно, задача, она решается уже не на мощном сервере, а на вычислительном кластере. Вот, ну и вот эти все пакеты. То есть ансис, это семейство программных продуктов очень мощное. Популярен этот пакет во всем мире. Его используют многие исследовательские
33: Центры, заводы крупные и так далее. При этом у ансис есть конкретные уже, ну, как сказать, под пакеты внутри него. То есть это ансис флюент, ансис механикс, например, и другие. То есть вот эти задачи традиционно сейчас
34: Решается использованием вот этих вот промышленных пакетов. Тем не менее, все-таки бывает востребована, ну, такая задача, как написать свою какую-то специализированную параллельную программу, которая бы реша
35: Какую-то, ну, конкретную узкую задачу из той же, например, там газодинамики, либо что-то ещё. Вот. Так что несмотря на то, что вроде бы здесь есть популярные такие пакеты, востребованные, повторюсь, по всему миру, они очень дорогие лицензия.
36: Них продаются исходя из количества узлов в вашем вычислительном кластере. Вот. Тем не менее, все крупные фирмы, в том числе и наш книту каи, активно используют данные промышленные пакеты. Если же задача какая-то специфичная,
37: То учёные исследователи часто пишут свою какую-то небольшую параллельную программу для решения какой-то своей специфичной задачи. Хорошо, сейчас мы пробежимся, наверное, немножко и пару слов.
38: Скажем, про вот эти основные пакеты итак, 1 пакет ансис Флюнт, то есть про ansys я уже 2 слова буквально сказал, то есть, повторюсь, в чем здесь смысл? Решаются очень сложные, трудоёмкие.
39: Задачи из газогидродинамики, там необходимо решать огромное количество систем очень сложных уравнений. Вся эта математика, все вот эти вот какие-то справочные данные, коэффициенты там, материалов и прочее, прочее, коэффициенты.
40: Газов и так далее. Все это спрятано сидит внутри пакета ансис, да, то есть вся эта математика, она здесь сидит, соответственно, учёный исследователь, все, что ему нужно сделать, это буквально накидать какие-то узловые, скажем так, точки для своей
41: Модели, которые он хочет изучить, после чего он запускает этот пакет, и он сам уже проводит все необходимое математическое моделирование. То есть строить эти уравнения, строит эти системы уравнений, решает их и в итоге даёт учёному просто ответ уже на его задачку. Вот, ну вот пример.
42: Задач, которые решаются здесь как бы показано.
43: Так, далее. Идём. Ну и пример визуализации. Вот. То есть это картинки из, ну, официальной, рекламной, скажем так, статьи, посвящённой пакету ансис, к сожалению. Ну, не показано. Это процесс, взлёт.
44: Судно или процесс его посадки. То есть вы, я думаю, понимаете, что самый сложный этап во время полёта самолёта это процесс взлёта и посадки, то есть именно
45: Именно в эти моменты самолёт испытывает наибольшие нагрузки. Вот поэтому, когда учёные разрабатывают какой-то новый вид самолёта, новую модель самолёта, они, конечно же, вот эти режимы взлёта и посадки исследуют наиболее полно.
46: Вот наиболее детально. То есть, видим, когда садится самолёт, возникают вот такие вот вохре потоки по цвету, можно видеть, какие элементы шасси, какие элементы покрышек нагреваются сильнее всего. Вот, и
47: Понять, куда идёт максимальная нагрузка. То есть, исходя из вот этой картинки. То есть исследователь, инженер строит в энсиси, ну там есть свой редактор, модель вот этого крыла. Далее запускает процесс моделирования в ансисе.
48: Получает вот эту картинку, смотрит на неё и принимает какие-то конструкторские решения. То есть принимает о том, ну, решение о том, например, на какой высоте расположить крыло от покрышки, к примеру, да, ну и какие-то, может быть, другие конструктивные решения. Вот.
49: Есть, очень упрощает вот такая вот визуальная картинка инженеру, конструктору процесс проектирования каких-то новых, ну вот в частности летательных аппаратов. Далее ещё 1 рекламный пример.
50: Показано, как происходит сгорание топлива внутри поршня двигателя внутреннего сгорания. То есть это у нас сопло, через которые подаются струйки с топливом. Далее они сгорают, толкают вот этот вот поршень и опять-таки
51: Инженер, он смотрит, какие элементы конструкции поршня нагреваются, сильнее всего смотрит, куда идёт основная сила от сгорающего топлива, то есть на полезное кпд, чтобы поршень толкать или на
52: Бесполезное кпд, чтобы нагревать стенки самого вот этого поршня и так далее, и так далее. То есть и опять-таки принимает решение о том, под каким углом разместить сопло, подающее топливо внутрь поршня, под каким углом
53: Разместить вот эти трубки, через которые уходят выхлопные газы и так далее, и так далее. Также инженер может видеть, насколько сильно нагреваются стенки металлические поршня и исходя из этого, принять решение о том, какую выбрать толщину для металла.
54: Вот какую выбрать длину вот этого всего поршня и так далее. Цилиндр, точнее, да, прошу прощения, цилиндра. То есть это называется цилиндр. А вот это вот сам именно поршень, который туда сюда, вниз входит внутри вот этого цилиндра двигателя внутреннего сгорания.
55: Далее, ну как выглядит сам вот этот редактор, ну условно он напоминает 3 d студию Макс или программу компас нашу российскую, то есть инженер строит в нём модель и потом уже запускает процесс её моделирования, процесс её рендеринга, да.
56: Ну, здесь у нас показаны проект не проект, а программные пакеты нам и вмд. То есть, повторюсь, нам это, по сути, консольная утилита. Вот, условно, она здесь справа показана, которая может
57: Решать опять-таки какие то уравнения и решив их выдавать информацию в числовом виде, числовой текстовый вид о том, какие молекулы внутри вещества, где у нас, как
58: Располагаются после того, как произошла та или иная какая-то, ну, операция, биологическая операция там, либо что-то ещё. Ну, а пакет вмд, молекуляр, ну, повторюсь, визуализация молекулярной динамики, он
59: Да, как раз-таки позволяет все вот эти текстовые данки данные визуализировать вот такой вот красивой картинке. То есть инженер, учёный, исследователь, биолог, молекулярный биолог смотрит вот на эту картинку здесь у нас, насколько я помню, показаны
60: Молекулы гемоглобина крови человека. Если мне память не изменяет. Вот, то есть исследователь смотрит сюда и принимает решение о том, скажем, какие дозы препарата необходимо включить в состав там
61: Лекарственного средства, например, да, либо там что-то ещё. Ну, я не биолог, сложно мне здесь, как бы судить об этом. Вот. То есть, повторюсь, это просто пример опять-таки, параллельной программы промышленной, которая активно используется тоже учёными по всему миру, и которая
62: Функционирует на платформе вычислительного кластера внутри неё вот этот самый пакет нам он использует как раз-таки библиотеку. Эмпиай, ну, её специфичную реализацию, если быть точным.
63: Далее, ну показан менеджер, не менеджер, а редактор blender и менеджер рендер ферм Афанасий. Вот он здесь слева показан. Вот это сам редактор, в котором вы рисуете свои 3 д модели, после чего запускаете рендеринг через утилиту афана.
64: Которые уже используют узлы вашего вычислительного кластера, чтобы параллельно осуществлять рендеринг вашей 3 д сцены.
65: Итак, мы буквально совсем чуть чуть пробежались по некоторым примерам параллельных промышленных программ, которые функционируют на платформах вычислительных кластеров, которые очень популярны и используются инженерами.
66: Исследователями по всему миру. Вот. Ну а сейчас давайте перейдём уже больше к такой некой теоретической части. Так, ну и с чего мы здесь начинаем? С очень известного очень популярного закона
67: Гордон Муром, да, то есть здесь я отмечу следующее. У нас, по большому счёту, в мире есть 2 основных производителя процессоров. Это компания intel и компания amd из
68: За событий, которые произошли у нас в России, ну, сравнительно недавно, там, несколько лет назад, вы знаете, что Россия взяла курс на импортозамещение. И сейчас у нас в России есть компания ростех, которая разрабатывает наши российские централь.
69: Процессора, и у них, ну, они здесь уже добились как бы, определённых успехов. У них там процессора наши российские, это Эльбрус, это байкал, они тоже у них, кстати, многоядерные. Вот, ну и чуть позже.
70: Возможно, мы их посмотрим вот пару слов про них мы тоже скажем вот тем не менее, изначально исторически у нас были 2 основные компании. Это intel и amd. Причём лидером здесь, ну, на мой, по крайней мере, взгляд, являлась всегда компания intel. Вот она.
71: И сегодня у нас остаётся по прежнему лидер. И вот 1 из его отцов основателей как бы выделил закон, который здесь представлен. Думаю, вы его прочитали уже. Вот, ну и далее визуализация этого закона, в принципе.
72: То есть, начиная вот с семидесятых годов, когда появился 1, по сути, процессор компании intel, intel 4:00 4, этот закон, он, в принципе, по большому счёту работал. Вот, тем не менее, то есть, что означает, что
73: Работал. Процессоры становились по размеру все меньше, меньше, меньше, количество транзисторов внутри кристалла процессора, оно увеличивалось, и, несмотря на то, что процессоры становились меньше по мощности они становились быстрее, быстрее, быстрее.
74: Ну и те процессоры, которые мы имеем на сегодняшний день, это. Ну, если говорить про компанию интел линейка для обычных домашних пользователей это intel core 5, intel core 7 и линейка для серверных процессоров это
75: То, то есть вот эти процессоры, они достаточно мощные, они практически все уже, да, многоядерные. Вот. И тактовая частота у них превышает 3 гигагерца зачастую
76: Далее идём. То есть закон мура мы посмотрели, но практически сразу же появились скептики, которые утверждали, что очень скоро этот закон перестанет работать. Ну вот если, правда, картинку посмотреть, вроде бы до сих пор он более менее как-то работал, да,
77: То есть там, действительно, там каждые 2 года количество транзисторов, а следовательно, и мощность процессора, она увеличилась тоже где-то в 2 раза. Вот. Тем не менее, ну, специалисты говорят, что скоро этот закон перестанет, работат.
78: С чем это связано? Здесь очень много букв, презентации будут выложены, вы сможете их тоже почитать, все внимательно изучить. Ну, просмотреть. Я отмечу следующее. На самом деле, 1 из причин, почему
79: Этот закон перестанет работать, она даже не связана с физическими ограничениями, а связана она скорее с экономическими ограничениями, то есть просто станет невыгодно делать процессоры, а если быть точным,
80: Транзисторы внутри процессора меньшего размера. Вот почему? Ну здесь как бы говорится, потому что чем меньше размер у транзистора, эти самые пресловутые нанометры, тем сложнее.
81: Технологический, технологический процесс изготовления таких процессоров и, следовательно, увеличивается процент брака. То есть на самом деле там при производстве очень большое количество планок просто уходит, как бракован.
82: Вот они отправляются на переработку по этой причине как бы
83: Закон может перестать работать в 1 очередь из за экономики. То есть, есть такое, ну, не знаю, условно говоря, понятие, да, проект не сошёлся по экономике. Как пример. Это обычно я разбираю, емобиль, наш российский проект.
84: Который в своё время, к сожалению, закрылся, хотя было очень много.
85: Как бы вложенных сил в его раскрутку этого термина емобиль. То есть почему он закрылся именно потому, что у них в итоге не сошлась экономика их проекта. Так вот, тем не менее, пока что закон ещё работает и все крупные
86: Компании, они гонятся за этими нанометрами и стараются их сделать. Транзистора свои все меньшего и меньшего размера. Вот. Ну, чем меньше размер, тем, соответственно, большее количество транзисторов помещается на
87: Площади кристалла, а сам процессор, ну, я думаю, вы его видели, он размером примерно там, как условно половина спичечного коробка. Вот, то есть все большее и большее количество резисторов туда могут засунуть. Следовательно, все у процессора становится все выше и выше. Мощность. Вот.
88: Далее, вот тут красным выделено перспективное направление по, ну, развитию, что ли, да, процессорной техники, это использование альтернативных кремнию материалов, они здесь перечислены. Вот, но я не
89: Химик, вдаваться в это не буду. Просто хочу вот на это обратить ваше внимание. Вот также ещё отмечу, что кроме интел и амд, есть и многие другие компании, которые изготавливают процессоры, это и самсунг, вообще то говоря, да, и
90: Компания apple и компания там, Philips и прочие прочие, прочие, но интел и амд, они делают процессора для, ну, общего пользования, для персональных компьютеров, для серверов, а вот эти компании, они, как правило, делают.
91: Специализированные для какого-то специализированного железа, там, для смартфонов, например, или там какой-нибудь там компании lg, там, для телевизоров своих умных, для стиральных машинок и так далее. Вот. То есть мы, конечно, с вами говорим в 1 очеред.
92: Про процессоры общего использования и это компания intel и мд. Ну и плюс наши российские компания ростех, которая выпускает наши российские процессора, сколько у наших российских? Я сейчас, если честно, не вспомню 20 с чем-то.
93: По моему, там нанометров, у российских процессоров технологический процесс. Вот. Далее идём. Так, пару слов про процессор сказали. Теперь классификация. Как можно классифицировать, вообще то говоря, параллельные программы.
94: Видов классификаций очень много, но наибольшую популярность получила классификация флинна в ней используются такие понятия, как поток команд и поток данных в классификации флинна. Все про
95: Программа делится на условно на 4 вот таких вот типа 1 сист сингл, истрашно сингл дейт, то есть выполняется 1 поток инструкций, 1 поток команд, и он обрабатывает 1 поток данных вот в рамках этого подхода пишет
96: Как раз все традиционные программы, то есть это 1 программа, она запускает 1 процесс, внутри которого запускается 1 поток, который исполняет 1 какой-то набор инструкций и обрабатывает какую-то 1 единственную порцию данных. Вот это по сути классическая программа.
97: То есть 1 поток команд, 1 поток данных это то, каким образом наверняка вы уже писали свои программы ранее. На самом деле следующая модель симт 1 поток команд, но при этом малтипл дейта
98: То есть это, по сути, пример векторной обработки данных. По сути, симт можно отнести к многопоточной программе. То есть в чем здесь суть? Суть здесь в том, что вы написали программу, она у вас начинает исполняться при этом
99: Инструкции, которые вы указали, они исполняются, но они исполняются параллельно над своим массивом данных.
100: Ну, как пример, обычно я здесь разбираю задачку с умножением, векторами. Вот, ну, может, чуть позже мы её разберём, с вами. Посмотрим далее модель мист на практике.
101: Особого применения не нашла, не будем её даже комментировать. И последняя это модель in multiple инстракшн малтипл дейта. То есть вот то, что мы с вами будем смотреть в начале на лабораторных, это библиотека эмпиай, которая позволяет писать
102: Параллельные многопроцессные программы, вот такие программы, они как раз могут быть отнесены к пакету, не к пакету, а к типу минт. То есть, повторюсь, эмпиай, программы относятся к классу минт. То есть будем мы запускать множество процессов.
103: При этом каждый процесс может исполнять свои какие-то инструкции над своим набором данных. Итак, если, ну, кратко, как бы повторить сист, это классические программы обычные, однопоточные, никакого пара.
104: У них нет далее симт это по большому счёту параллельные многопоточные программы. То есть вы запускаете множество потоков, они исполняют одни и те же инструкции, но каждый поток обрабатывает свою какую-то порцию данных, и все они это делают параллельно.
105: Если там, например, у вас машина многоядерная, то каждый поток может обрабатываться на своём ядре вашего вычислительного процессора. Далее минт это
106: Класс, по сути параллельных многопроцессных программ, то есть запускается параллельная программа, которая исполняется множество процессов, и каждый процесс может исполнять свои какие-то инструкции над своим набором данных. Как правило, такие программы запускаются на плат.
107: Форме вычислительного кластера. Вот хорошо. Пойдём далее. Так это у нас то, что касает, то, что касалось параллельных программ, теперь то что касается параллельных аппаратных архитектур. То есть если у вас
108: Обычный там какой-нибудь там старинный процессор, пентиум 3, в котором всего лишь там 1 ядро, то, конечно никакого смысла для такого железа писать параллельную программу не будет. То есть параллельную программу нужно писать в том случае, если у вас какой-то
109: Современное мощное железо. Либо у вас мощный сервер, у которого множество ядер. Тогда, чтобы все ядра эффективно использовать, необходимо писать параллельно многопоточную программу, либо у вас там крутой дорогой вычислительный кластер, состоящий из
110: Множество узлов, и тогда необходимо писать параллельную многопроцессную программу, например, с использованием технологии mpi. Далее. Ну, здесь у нас показаны 4 основных класса аппаратных архитектур. Я опять-таки особо останавливаться не
111: Буду. Презентация у вас будет в свободном доступе, вы сможете их прочитать. Вот остановлюсь, наверное, на следующем. Что наиболее наибольшую востребованность, наибольшую популярность имеют по большому счёту.
112: 2 вида параллельных аппаратных платформ это мощные многоядерные серверы, то есть сервера с общей памятью да, многоядерные платформы, тут опечатка.
113: Давайте прям при вас даже исправлю отлично многоядерные платформы и 2 класс это вычислительные кластера кластер. Это множество узлов, которые соединяются через локальную сеть. При этом у каждого узла своя оператива.
114: Память это важно. У каждого узла, как правило, своя операционная система и так далее. То есть если у вас многоядерная платформа, вы пишите параллельное многопоточное приложение, кстати говоря, современные смартфоны, они тоже
115: У нас многоядерный, вообще то говоря, если же у вас мощный вычислительный кластер, то вы пишите параллельную многопроцессную программу.
116: Далее вот тут ещё выделено красным то, что актуальность сейчас начинают приобретать гибридные системы, так называемые, и квантовые компьютеры. Гибридные системы. Это вычислительные кластера, которые утяжелены специа,
117: Многоядерными вычислителями. То есть простой пример. У вас есть вычислительный кластер. При этом в каждом узле кластера у вас установлена промышленная видеокарта, например, компания нвидео, которая внутри себя содержит огромное количество ядер. И у вас
118: По сути, получается массивно параллельная система. То есть, да, с 1 стороны, у вас вычислительный кластер, при этом каждый отдельный узел вашего кластера это сам по себе мощный такой небольшой многоядерный сервер. Вот. И поэтому
119: Возникает задача писать, ну, гибридные параллельные программы. С 1 стороны, они многопроцессные. Каждый процесс садится на свой узел кластера. Одновременно с этим они многопоточные. То есть каждый процесс, вы ещё и
120: Параллелите на множество потоков, которые стараются максимально эффективно использовать вычислительные ядра отдельно взятого узла сервера вашего вычислительного кластера. Ну, квантовые компьютеры это сейчас передовой край, иссле.
121: Очень много здесь проводится исследований, в том числе и у нас в России, в том числе и у нас в Казани по разработке квантовых компьютеров. Прототипы какие-то уже начинают появляться, но пока что все-таки это
122: Все на уровне фантастики. Вот, и каких-то промышленных уже решений. Ну по крайней мере, мне о них ещё неизвестно. Квантовые компьютеры внутри себя, они тоже содержат огромный запас параллелизма, вот там
123: Вместо битов байты, битов, байтов используются кубиты, какие-то свои совсем вещи. Вот. Ну и их мы разбирать не будем. То есть кому интересно, я думаю, изучит самостоятельно. Итак, тоже скорректируем суперкомпьютеры.
124: То есть параллельные программы пишутся для параллельных суперкомпьютеров. Определение суперкомпьютера здесь есть. Вот. Далее 2 вида аппаратных платформ, это так называемые мейнфреймы, то есть многоядерные системы.
125: Где множество ядер работает с общей оперативной памятью, и кластера массивно параллельные системы, где имеется множество узлов, которые соединяются локальной сетью. Далее для того, чтобы
126: Страны мира могли соревноваться между собой. Какая страна самая суперкомпьютера, суперкомпьютерная, у какой страны самый мощный суперкомпьютер есть так называемый рейтинг топ 500, ну, составляется он 90
127: Года. Вот. Ну, тут небольшая справка о том, что Россия, вот, по данным на ноябрь 2009 года занимает там 8, 10 места. Вот. Но сейчас, наверное, мы все-таки уже немножко вниз ушли сейчас.
128: У нас 2019 год. То есть с тех пор прошло уже 10 лет. Вот. Далее здесь показан
129: Ну, выдержка из этого рейтинга 2016 год, если мне память не изменяет, то есть лидерство по суперкомпьютерам в мире делит между собой Китай и америка. То есть, то Китай выходит на 1 место, запускает самый мощный суперкомпьютер.
130: То америка выходит на 1 место, тоже там запускает свой, там суперкомпьютер. Ну, в 2016 году 1 место занимал суперкомпьютер, китайский тянхэ 2. Ну, его другое название милкивей. 2 его характеристики, они здесь
131: Представлены, то есть суперкомпьютеры, которые находятся в топе этого рейтинга. Это огромные просто монстры, которые занимают там целые здания. Вот при этом отмечу, что количество
132: Узлов, узлов у них исчисляется десятками и сотнями тысяч. И потребляемая мощность этими суперкомпьютерами. Она, конечно, очень тоже как бы серьёзная, на самом деле. Вот, ну здесь более детально.
133: Информация про вот этого китайского лидера 2016 года, то есть количество ядер линпак это тест, который используется как раз-таки для оценки мощности суперкомпьютерной системы. Вот, ну, объём
134: Суммарный объём оперативной памяти. Далее видим, кстати, что вот этот суперкомпьютер китайский был построен на процессорах компании intel, intel ксион, и в качестве основы в узлах кластера использовалась линукс система.
135: Ну, был установлен на всех узлах компилятор компании intel, intel, айсиси. Вот также использовалась, видим, здесь библиотека мкл, ну и версия импич, импич 2 кастомизированный вот каким-то тут лексом.
136: Вот, хорошо. Далее. Ну, как вообще выглядят вот эти самые вычислительные кластера? Это дата центры, как правило, в подвальных помещениях. То есть вот такие вот шкафы, так называемые стойки, в которые понатыкан
137: Вот такие вот лезвия, то есть каждое лезвие это все у нас, по сути, кластер, да, вот это у нас лезвие. Каждое лезвие это узел. То есть в каждом лезвии свой процессор, своя оперативная память, там свой жёсткий диск, своя операционная система.
138: И так далее. Соединяются они все между собой, эти узлы видим вот такими локальными сетями. Причём, как правило, там делают 2 локальных сети, 1 высокоскоростную, как правило, это инфинибенд, 2 уже для передачи просто управляющих сигналов.
139: Низкоскоростная это гигабит изернет в России тоже у нас есть суперкомпьютеры тоже у нас есть дата центры ну наши крупные компании, такие как яндекс, вконтакте, mail, ru и так далее это
140: Очень сложные веб, скажем так, порталы, вот которые тоже функционируют на платформе вычислительных мастеров.
141: Давайте пойдём далее. Так.
142: Так, ну ещё 1 дата центр контакта. Он, кстати, сгорел. Насколько я знаю сейчас контакт, все свои мощности он перевёз в Москву уже, ну, в подмосковье, если быть точным, это у нас уже американский суперкомпьютер, по моему, он
143: Называется on road runner. Кстати говоря, 1 время он даже занимал 1 место в топе в 2000 каком-то там году. Ну вот это обслуживающий персонал, который там ходит по этому дату центру, меняет жёсткие диски, проверяет, сет.
144: Кабеля и так далее. Итак, опять-таки некоторое резюме, виды параллелизма, параллельные программы для суперкомпьютеров с общей памятью, то есть множество узлов условно.
145: Ядер работает с общей памятью, и распределённая память. То есть это как раз-таки кластер. У каждого узла кластера свой процессор, своя оперативная память. Соединяются узлы кластера между собой высокоскоростной локальной сетью. Как
146: Можно описать параллельные программы, да, ну и виды параллелизма, да, то есть параллельные программы могут взаимодействовать между собой через общую память. Это как раз-таки в случае потоков, при этом взаимодействие очень быстрое.
147: Либо параллельные программы взаимодействуют по сети через различные сетевые функции приёма передачи. Это низкоскоростное взаимодействие. То есть, с 1 стороны, общая память предпочтительнее, чем распределённая память, но
148: Но здесь главный минус, что у таких систем очень низкая масштабируемость, то есть тяжело к общей оперативной памяти подключить там более 64 процессоров. Вот, то есть, ну, представьте себе материнскую плату, на которой у вас там 2 процессора при
149: На неё, грубо говоря, ещё 2 процессора это, ну, практически невозможно. Вот у вычислительных кластеров их главное преимущество, это их очень высокая масштабируемость. То есть у вас есть стойка вычислительный
150: В нём, например, 24 узла вам перестало хватать, вы рядом поставили ещё 1 шкаф, в котором ещё 24 узла соединили эти шкафы между собой локальной сетью. И вот у вас увеличение, ну, масштабирование вашей системы в 2 раза произошло.
151: То есть здесь никаких проблем нет средство для параллельного программирования для потоков это системная библиотека сресс для языка си плюс плюс либо какие-то внешние инструменты, такие как open mp либо инструмент.
152: Технология кюда для многопоточных программ, которые функционируют на видеокартах, вот для распределённой памяти есть системная библиотека socket как под windows платформу, так и под линукс платформу, либо внешняя библиотека.
153: Пв. Отмечу, что пвм это уже архаизм, практически он нигде не используется и лидером при написании параллельных программ для вычислительных кластеров с распределённой памятью является библиотека эмпиай она.
154: Пользуется по всему миру, в том числе и у нас в России. Далее, ну, определение кластера. То есть в начале мы с вами будем работать именно со своим кластером. Я, кстати, напомню, во введении я про это рассказывал лабораторный
155: Занятия по mpi это наш 1 раздел я буду проводить на своём небольшом кластере, который состоит из 3 машин. Это моя машина, и вот 2 ноутбука позади меня, то есть в моём кластере будет, получается, 3 узла.
156: Определение кластер группа компьютеров, соединённых локальной сетью, способных работать в качестве единого ресурса, при этом, как правило, на вычислительный кластер устанавливают какой-то инструмент, например, библиотеку для работы.
157: Параллельных программ эмпиай. Вот также отпечатка, сколько помню, ставит какую-то систему для мониторинга и управления вот этими параллельными ресурсами.
158: Теперь по поводу типа кластеров, то есть выделяют несколько типов кластеров. 1 это кластера высокопроизводительные.
159: То есть используются такие кластера там, где нужно решить максимально быстро, параллельно какие-то очень сложные математические уравнения, математические задачи. То есть, как правило, такие кластера используют
160: В научных исследованиях при этом они есть промышленные аш писи кластера и есть, ну, условно говоря, домашние, то есть домашние, ещё по другому иногда называют биовульф кластерами. Что это такое?
161: Так, ну вот здесь можно как бы определение прочитать, то есть по другому. Это ещё классические пк кластера, это кластера, которые собираются из обычных компьютеров, то, что у меня
162: Кластер из 3 узлов это как раз пример пк кластера. То есть я взял то, что было, соединил это все локальной сетью. В моём случае это вай Фай. Вот. И у меня получился небольшой такой простенький пк кластер. Вот для большинства
163: Задачи этого может быть вполне достаточно. Если же вы хотите решать какие-то сложные научные задачи, то вы покупаете дорогой мощный аш писи кластер промышленный. Это такая шкаф стойка, в котором необходимое вам количество узлов и
164: На нём уже, как правило, очень хорошая локальная сеть. Ну и обычно это инфинит.
165: Далее, откуда это все пошло? 1 из первых классических кластеров собрали в компании наса, то есть в 94 году вообще в наса им очень часто приходится решать сложные, трудоёмкие математические задачи, то есть
166: Там расчет траектории полёта космического корабля, расчет траектории приземления космического корабля и так далее. Все это очень сложные математические задачи, которые нужно решать очень быстро в режиме реального времени.
167: В момент полёта космического корабля, чтобы определять там, на какую траекторию кораблю нужно спуститься, ну, так называемые эшелоны, высоты, там, ну и прочее, прочее, прочее. Вот, ну, здесь показано характеристики.
168: Вычислительного кластера, который был в своё время собран в наса, и на котором решались какие-то, ну, свои космические задачи, в том числе, вот, ну и небольшая его схема такая условная. То есть видим, что биовульф кластер
169: Убираю просто обычных персональных компьютеров.
170: Далее, ну если в виде какой-то некой условной схемы это показать множество узлов, выделяется, как правило, 1 узел в качестве управляющего, к которому имеют уже доступ множество пользователей через сеть интернет.
171: Через локальную сеть, либо как-то ещё. То есть, как правило пользователям закрывают доступ непосредственно на рабочие узлы, а все взаимодействие идёт через вот этот узел мониторинга, через управляющий узел. На нём ставится какая-то утилита, например, торки
172: В качестве планировщика задач, то есть множество пользователей скидывают сюда свои задачи, а утилита мониторинга, она смотрит, какие узлы кластера свободны, и на них уже отправляет задачу от пользователя, то есть формирует расписание исполнения задач.
173: Выдаёт пользователю результат, когда он будет получен и так далее. Ставят на кластере 2 сети управления. Про это я уже говорил. 1 сеть попроще. Обычно это, ну, какой-нибудь там гигабит изернет с достаточно большой латентностью.
174: 2 сеть уже промышленная, мощная. Как правило, это инфинит либо оптоволокно в таких дорогих кластерах может быть использовано далее. Ну, здесь название сетей показаны у нас далее небольшие примеры.
175: Ну, некоторые примеры сетей локальных и их скоростей и латентностей, что здесь я отмечу, некий стандарт де факто по всему миру, в том числе и в России, это 2 сети гигабит изернет.
176: И сеть инфинибенд. При этом у сети инфинибенд главное преимущество это даже не её скорость передачи. Вот, а именно маленькая латентность. То есть, если говорить про семиуровневую
177: На самых нижних 2 уровнях аппаратных, то есть чисто внешне кабель инфинибенд, он выглядит, ну, по сути, так же, как и кабель, гигабит, изернета. Вот только внутри у него там не скрученные вот эти вот кабеля, а свой кабель.
178: Передача данных идёт обычным электрическим сигналом у оптоволокна. Напомню, передача данных, она идёт цветом. Здесь у инфини Бенда нет, это обычный электрический сигнал и обычный кабель медный, насколько я помню. Вот, но там свои реализованы.
179: Протоколы на нижних уровнях, которые позволяют добиться более высокой скорости передачи данных, она идёт передача данных идёт на более высокой частоте и при этом с гораздо меньшей задержкой латентностью.
180: Далее, кроме вычислительных кластеров, когда разбирается параллельное программирование, иногда ещё упоминают так называемые грид системы.
181: В чем особенность? Грид систем кластер. Как правило, это суперкомпьютер, который у вас стоит там, в вашем здании, в вашей комнате и так далее. Грид система это, ну, тоже, по сути, кластер, только это распределённый кластер.
182: Ну, определение здесь есть, вы их можете прочитать. Давайте схему посмотрим.
183: То есть если взять множество узлов, раскиданных по сети интернет, и объединить их между собой при решении какой-то задачи, то такую
184: Аппаратную схему можно как раз-таки рассматривать в качестве грид системы, ведь что такое кластер, по сути, кластер это множество узлов, которые соединяются сетью, локальной сетью, высокоскоростной грид система это кластер, где множество узлов соединяются
185: Низкоскоростной сетью. И, как правило, это сеть интернет, у неё очень большая латентность, у неё большие задержки, бывают обрывы, связи и так далее. Тем не менее, есть огромное количество задач, которые могут быть распараллелены.
186: Для решения в такой грид системы системе, где потеря связи или низкая скорость передачи между отдельными узлами она не сказывается в целом на процессе решения задачи есть несколько известных исследовательских
187: Проектов сложных мега задач, которые решаются как раз-таки в рамках вот таких вот грид систем. Вот. Ну и здесь, наверное, как пример, приведу криптовалюту, а если быть более точным,
188: Вирус, который получил, ну, не знаю, актуальность, что ли, да, популярность там, 2 там, или, может быть, 3 года назад. В чем суть, если вы немножко знакомы с процессом майнинга, то есть поиска криптовалюты есть.
189: Криптовалюта, там, например, биткоин, чтобы её получить, вы должны произвести огромное количество математических операций. При этом те математические операции, которые выполняются, они могут быть распараллелены, что сделали некоторые программисты там, ну,
190: Автора этого вируса я не знаю, конечно. Там 1 программист написал программу, которая заражала компьютеры. Далее эта программа, она с управляющего узла вот эту сложную математическую задачу по майнингу криптовалют она делила
191: Её на отдельные подзадачи эти подзадачи вирус рассылал по заражённым узлам далее все они работали в фоновом режиме, выполняли все эти математические операции, а результаты своих промежуточных исследований отправляли на главный управляющий узел.
192: Вот этого разработчика. То есть это как раз пример решения большой сложной задачи на creed системе. Вот. Ну, пример, может быть, немножко негативный. Тем не менее, вот такой случай имел место быть у нас в мире. Далее
193: Ну, более такие конструктивные примеры, это проект по поиску внеземных цивилизаций, проект сети, там они исследуют радиосигналы, получаемые из космоса. Вот, ну, некоторые другие задачи, там, прогнозирование
194: Климата, обработка результатов, получаемых на адронном коллайдере и так далее. В чем основная идея всех вот этих грит вычислений где-то там, на каком-то главном компьютере получают данные для математи.
195: Тической обработки. Далее эти данные, они делятся на огромное количество маленьких блоков. Эти блоки, они рассылаются по узлам грид системы. Каждый узел обрабатывает свою маленькую часть и отсылает выполненный результат обратно.
196: На сервер, на сервере. Все эти полученные результаты между собой объединяются, конкатенируются и выдаётся результат итоговый решения вот этой огромной сложной задачи. Не все задачи можно решать. Таким подходом. Есть задачи, которые
197: Можно распараллелить. Есть задачи, которые нельзя распараллелить. Поэтому грид система это не панацея от всех вопросов. Тем не менее, в каких-то проектах она, ну такая идея, такой подход, он очень актуален и востребован.
198: У нас в клинту каи есть 2 своих вычислительных кластера. 1 кластер это компания sun 2008 года. Здесь показаны его характеристики. Вот 2 кластер это кластер.
199: В котором всего лишь 6 вычислительных узлов, но каждый узел там утяжелён 2 видеокартами. Это как раз пример гибридного кластера. Всего получается там, внутри этого кластера 12 видеокарт компании, видео семейства тесла это
200: Вычислительный кластер 2012 года выпуска. Вот, ну, в 1 кластере на узлах стоит операционная система linux интерпрайс, сервер, слес 10 версии. Во 2 кластере установлена на сегодняшний день операционная система.
201: 2012. Здесь показана фотография нашего дата центра нитки. Показаны наши вычислительные кластера. Вот компании сан. Вот это вот чёрный, это как раз кластер 12 года. Видим, кстати, что вот здесь каждое
202: Лезвие, оно, ну вот эта фотография, кстати, достаточно толстая, потому что сами видеокарты, они очень высокие. Вот. И поэтому лезвие здесь похоже на системный блок, который просто вот так вот уронили и вот так вот затолкнули вот этот ноутбук, это называется квн.
203: Консоль управления, она, ну, выдвигается прямо изнутри вот этого шкафа, изнутри стойки. Этот ноутбук, он vga кабелем соединён со всеми узлами и в самом начале через него системный администратор производит первич.
204: Установку операционных систем и первичную настройку всего железа на вычислительном кластере у кластера компании сан. Кстати говоря вот такой полезной штуки как kvm консоль к сожалению нету, вот туда доступ имеется.
205: Ну, на узлы санского кластера только лишь по локальной сети. И на самом деле это может иногда быть серьёзной проблемой. Далее идём. Ну и теперь по поводу закона андала.
206: Это очень популярный и известный закон, который показывает, какой прирост по скорости вы можете получить при использовании параллельного суперкомпьютера вместо 1 мощного сервера.
207: Презентация у вас будет, вы сможете внимательно это все прочитать, изучить, что я отмечу. Главное здесь. Так, сейчас, секунду. Угу. Отмечу следующее у вас.
208: Есть программа, хорошо. Вы запускаете её на мощном сервере, она работает, но работает очень долго. Вы хотите ускорить её работу, покупаете себе вычислительный кластер, в котором условно, там 100 вычислительных узлов, запускаете на ней свою программу.
209: Как она будет работать? Естественно, она будет работать на нём также медленно в том случае, если вы запустите ту же самую программу, то есть предварительно вам необходимо разработать параллельную версию вашей программы, то есть какой-то
210: Какую-то часть кода вы должны распараллелить, как правило параллелят вычислительные циклы. Вот при этом
211: Если вы запустите свою, распараллелен уже программу на своём кластере, где у вас 100 узлов, это не означает, что она у вас будет работать в 100 раз быстрее. Конечно же, нет. Все определяется тем, какую часть своего программного кода вы сможете распараллелить.
212: И вот этот закон амдала, он как раз-таки и показывает вот это отношение, вот этот коэффициент сп показывает, во сколько раз, условно говоря, вы можете ускорить ваши вычисления на параллельной системе при
213: Сравнении с последовательной версию, то есть вот это вот, ну а или альфа, это та часть кода, которую вы не смогли распараллелить, которая у вас осталась последовательной, ну, там, чтении.
214: Данных каких-то жёстких дисков, вывод итоговых результатов, передача данных по сети и так далее. Все это садится у нас в коэффициент, а часть кода, которую мы не смогли проверить, соответственно, 1 минус, а это часть кода, которую мы смогли проверить.
215: Вот так вот, если эту формулу применить и такую вот небольшую табличку построить, то можно увидеть следующее. Если вы смогли все 100% своего кода распараллелить, то это идеальный случай тогда на 10 маш.
216: Машина у вас будет прирост в 10 раз на сотни машин у вас будет прост в 100 раз и так далее. На практике же, если вы, например, смогли распараллелить там 90% своего кода, и у вас только 10.
217: Процентов кода осталось последовательно, то на 10 машинах у вас прирост будет там всего лишь 5,3 раза на 100 машин, в 9,2 раза и так далее. Ну и далее, если вы смогли распараллелить 75 про
218: Процентов кода, 60% кода и так далее. То есть о чем нам говорит закон амдал о том, что у каждой задачи есть так называемая граница масштабируемости. Тот это тот предел, к которому стремит
219: Данной задачи. Далее говорят о том, что чем большую часть кода вы сможете распараллелить, тем, соответственно, больший прос производительности вы сможете получить, тем не менее, за пределы вот этой границы масштабируемости вы все равно как бы те,
220: Даже, да, никогда не выйдете. И вот это надо иметь ввиду, и про это надо не забывать.
221: Далее, есть ещё сетевой закон амдала. По сути, это, ну, улучшенная, что ли, версия закона амдала, которая учитывает передачу данных по сети. И здесь вот такие вот сложные формулы. То есть ещё добавляется, видим в эту формулу.
222: Коэффициент. Ну да, условно, коэффициент ц, это время, которое затрачивается на передачу данных по сети. То есть, если вы используете параллельный суперкомпьютер для решения вашей задачи, тогда у вас
223: Появляются издержки, связанные с передачей промежуточных данных, потом и итоговых данных между всеми узлами вашего суперкомпьютера. Вот это все является сетевыми издержками и сетевой закон.
224: Формула сетевого закона, она как раз-таки вот это дело уже учитывает. И здесь, ну, показаны математические выкладки, которые позволяют оценить, насколько это эти издержки, насколько они могут быть серьёзными. Более детально можно почитать по
225: Ссылки я сейчас останавливаться не буду.
226: Итак, если вы пишите параллельную программу, что нужно иметь ввиду, нужно иметь ввиду, что у вас будут издержки самые жёсткие, это алгоритмические издержки. То есть если ваш алгоритм плохо параллелится, то рассчитывать на прирост скорости
227: Ну, не стоит далее дисбаланс загрузки процессоров. То есть, если у вас кластер более менее, ну,
228: Внутри которого узлы с более менее одинаковыми аппаратными характеристиками, но при распараллеливании своей задачи на какой-то узел вы скинули больше работы, на какой-то узел, скинули меньше работы. Тогда нужно понимать, что здесь равнение будет идти на
229: Самого слабого. То есть поделили задачу на части. Большинство узлов кластера быстро справились со своей задачей. Какой-то узел кластера работает дольше остальных. Вот пока этот самый медленный узел свою работу не закончит, то, скорее всего, вся задача в целом
230: У вас не будет решена, поэтому надо внимательно следить, чтобы загрузка работой была более менее равномерна по всему, по всем узлам вашего вычислительного кластера. Следующий вид издержек это коммуникационный. Это как раз издержки, связанные с переда.
231: Промежуточных данных по локальной сети. То есть в процессе работы. Задачу вы поделили на части. Далее каждый узел кластера обрабатывает свою часть. Есть задачи простые, где там переборные, например, да.
232: Скажем, вы подбираете пароль неизвестный вам, у вас есть огромное количество паролей, которые нужно проверить. Эта задача простая, она легко параллелится. Все огромное количество там паролей ваших.
233: Да, вы бьёте на части, и каждый узел проверяет свою. Там часть паролей. Есть задачи более сложные. Например, решение систем дифференциальных уравнений. В процессе решения каждый узел вынужден обмениваться какими-то своими промежуточными.
234: Результатами с другими узлами и вот здесь узкой узким местом в вашем суперкомпьютере может как раз-таки стать локальная сеть. По этой причине, повторюсь, в вычислительном кластере традиционно используются высокоскоростные локальные сети.
235: Такие как инфинибенд. Тем не менее, если у вас очень большое количество сетевых передач и они очень частые, это вас не спасёт, вплоть до того даже, что ваша задача на вычислительном кластере может решаться даже
236: Медленнее, чем на 1 мощном сервере. Вот. Поэтому нужно понимать какие-то задачи, они хорошо параллелятся для вычислительного кластера, для множества процессов, какие-то задачи, они хорошо параллелятся для мощного
237: Сервера на множество потоков, потому что у сервера такой проблемы нет. Потоки, они имеют доступ к общей оперативной памяти. И в этом случае по локальной сети ничего перегонять не нужно. Это надо иметь ввиду. Ну и здесь
238: Небольшое графическое отображение вот этих самых, ну, случаев, да, распараллеливание вашего кода. То есть видим вот эту вот
239: Синяя, ну, синий график это как раз идеальный случай, когда вы все 100% кода распараллелили. А вот эти все штуки, а симпатичные, да, графики это уже случай, когда вы распараллелили 10% кода, 25 проценто.
240: Кода, 40% кода и так далее.
241: Да, ну а в случае f1, это имеется ввиду, когда вы вообще ничего в коде распараллелить не смогли. То есть обычную последовательную программу будете запускать на вычислительном кластере. Неважно, сколько у вас узлов в этом вычислительном кластере никакого ускорения. Вы, конечно,
242: Конечно же, в этом случае не получится. Вот на этом нашу небольшую такую вводную лекцию мы заканчиваем. Если у вас будут какие-то вопросы или комментарии, то, пожалуйста, пишите либо в комментариях под видео.
243: Либо пишите мне на электронную почту, она также у меня в канале показана. Вот.