0:00
[МУЗЫКА]
[МУЗЫКА] [МУЗЫКА] Теперь
поговорим про различные нестандартные архитектуры ЭВМ.
Просто бывают такие задачи, специализированные задачи,
для которых необходимы какие-то специальные машины,
и люди на это идут, бывают такие важные задачи.
Например, начнем с систолических архитектур.
Эти машины возникли как ответ
на требование моделирования сложных химических реакций.
Все начиналось с моделирования реакций в органической химии.
Там есть такое понятие «бензольное кольцо»: 6 атомов углерода
соединены в такую замкнутую структуру, и к ним еще что-то там присоединено.
Так вот, если сделать структуру из шести ЭВМ, соединенных локальными сетями
именно структурноподобным образом бензольному кольцу,
то можно моделировать очень быструю реакцию.
И возникли такие машины, их стали делать.
И потом, естественно, их стали использовать не только для бензольных
колец, но и для различного управления.
Что такое сегодня систолическая архитектура?
Это множество вычислительных элементов, их иногда называют систолами,
которые соединены в какие-то сети, заданные структуры.
И чаще всего это не сети, а дерево,
когда так несколько компьютеров соединены в деревянную структуру.
Так вот, если вам удастся подогнать исполнение так,
чтобы все ветки исполнялись примерно за одинаковое время,
можно очень быстро сделать счет, очень много выиграть по времени счета.
Вы запускаете верхушку дерева, корень дерева, и потом все ветки
выполняются параллельно и заканчиваются практически одновременно тоже.
И на этом достигается выигрыш.
Таким образом, сегодня это применяется, и в общем надо сказать,
что систолические архитектуры в каком-то смысле являются развитием SIMD/MIMD и чаще
всего реализуются в гибких кристаллах, поскольку задач много, вы же не можете под
каждую задачу делать совершенно уникальную вычислительную машину, под одну задачу.
Так вот, в гибких кристаллах такое вполне допустимо.
Сегодня мы перепрограммировали — она решает одну систолическую архитектуру,
а завтра она будет построена по другой систолической архитектуре.
Но аппаратные средства будут все одинаковые.
Следующий раздел в каком-то смысле более простой, зато и более массовый.
Это архитектура с общей памятью.
Вот взгляните на слайд.
У вас есть много-много процессоров.
И основная память, общая.
И все эти процессоры обращаются к общей памяти.
Понятно, что возникает множество конфликтов, если два процессора обратились
к памяти, то будет приостановка, я уже вам рассказывал,
есть такая схема — арбитраж, и будет конфликт, и будет замедление.
Ситуацию можно несколько сгладить,
если каждому процессору дать большую кэш-память.
Тогда большую часть времени, мы надеемся, что процессор будет работать с данными и
программами из кэш-памяти и к основной памяти обращаться сравнительно редко.
Мы проводили эксперименты над такими архитектурами с общей памятью.
По нашему мнению, шесть процессоров еще дают какой-то эффект,
а добавление седьмого и восьмого процессоров уже эффекта никакого не дает,
потому что количество конфликтов памяти очень сильно растет,
и не стоит добавлять ничего.
Но хотя, может быть, это в наших экспериментах, возможно,
при другой памяти, при других кэшах цифры будут несколько другими.
Но надо понимать, что увеличение количества процессоров в архитектуре с
общей памятью имеет свой верхний предел, причем очень небольшой.
По моему мнению, шесть.
По крайней мере, в наших экспериментах было видно, что добавление седьмого,
восьмого процессора такой архитектуре уже ничего не дает.
Конфликтов в памяти становится слишком много.
Но еще раз повторю, что увеличение размера кэш-памяти у каждого
процессора повышает производительность суммарную всей этой системы.
Давайте чуть подробнее рассмотрим работу кэша.
Кэш — это относительно небольшая быстрая память для часто используемых данных и
команд.
Чаще всего она, конечно, триггерная, статическая память, быстрая.
Кэш состоит из набора записей.
Запись, или еще иногда говорят линейка,
— это несколько десятков слов.
И в этих линейках хранятся копии основной памяти.
Линейки связаны в цепные списки, причем наиболее часто используемые
линейки находятся в начале цепного списка, а редко используемые линейки
потихоньку уходят в конец списка и в конце концов выкидываются из кэш-памяти,
поскольку кэш-память имеет весьма ограниченный объем.
Тем не менее, такая архитектура позволяет существенно ускорить работу.
Да, я, конечно, не сказал: я все время говорю хеш-таблица,
Все ли знают, что такое хеш-таблица?
Это таблица, входом в которую является некоторая односторонняя хеш-функция,
которая позволяет несколько элементов с одинаковым хешем собрать в единый список.
Так вот, в кэш-памяти входом является просто адрес,
от которого несколько, скажем, 10-11, младших битов отрезаны.
И вот то, что остается,
является кэш-функцией и является входом в кэш-память.
Такая архитектура позволяет обеспечить равномерное использование линеек кэша,
и сильно ускоряет работу машины в целом.
Еще раз повторюсь, что для многопроцессорных архитектур с
общей памятью наличие большого и быстрого кэша абсолютно необходимо.
Только это позволяет избежать многочисленных конфликтов при обращении к
основной памяти.
Уважаемые слушатели, я бы хотел, чтобы вы четко поняли, что то,
что я вам сейчас рассказываю, это не какое-то абстрактное знание, это знание,
которое поможет вам в работе и поможет ускорять ваши собственные программы.
Мы только что с вами разбирались с работой кэш-памяти,
а я хочу вам привести живой пример из практики, из жизни.
У меня есть приятель, коллега,
профессор Южного федерального университета Борис Яковлевич Штейнберг.
Он и его студенты много занимаются распределением памяти,
управлением работы памяти.
И вот он рассказал мне такую интересную историю, которую я сейчас хочу вам
повторить, что, оказывается, проводятся международные соревнования,
как можно на одной и той же машине ускорить одну и ту же задачу.
Скажем, есть задача — умножение матриц.
Есть машина — например, обычная персоналка, которая у вас на столе лежит.
Как вы думаете, если вы будете знать структуру внутреннего кэша,
структуру шин, структуру внутренних передач, во сколько раз можно ускорить это
умножение матриц на той же самой машине, еще раз повторяю, не имея ни частоты,
ни системы команд, ничего — на той же самой машине?
Так вот, оказывается, мировой рекорд,
который на этих соревнованиях был достигнут, 62.
Вы представляете?
В 60 раз ускорить работу одной и той же программы.
Это важно отметить, что Борис Яковлевич очень гордится,
что его студенты достигли 62,5 раза.
Звучит, может, немножко смешно.
Тем не менее, это текущий мировой рекорд в этих соревнованиях.
То есть они разбивают матрицу на небольшие блоки,
они знают структуру кэша, знают ее физические характеристики,
поэтому они подбирают блоки при разбиении матриц таких размеров,
чтобы каждый блок помещался полностью на линейку кэша.
И после этого они умудряются повышения производительности в 62,5 раза.
Для меня это просто как фокус.
Даже трудно себе представить.
Но тем не менее, это реальный живой пример.
На самом деле у нас еще и другие примеры есть.
У нас на кафедре системного программирования действует лаборатория
системного программирования — такая небольшая тавтология.
Руководят лабораторией системного программирования на нашей кафедре
доцент нашей кафедры Максим Баклановский
и сотрудники уже упомянутой мною компании Digital Design.
Они умудряются добиться повышения производительности компьютеров,
не применяя никаких аппаратных ускорителей.
То есть они умеют выжать из компьютера то, что никто другой выжать не может.
Каждый раз, когда я президенту компании DigDes Андрею Рюриковичу Федорову говорю,
давай, мы сделаем тебе аппаратный ускоритель, мы это умеем делать,
он говорит, нет, я хочу, чтобы все оборудование работало на технике,
купленной в ближайшем магазине.
Выглядит немножко странно, но зато с коммерческой стороны очень важно.
Покупаешь обычную персоналку, не какую-то сильно разогнанную,
не какую-то особо дорогую, но применяя определенные приемы программирования,
зная устройство кэш-памяти, устройство шин, остальные характеристики,
применяя всякие ухищрения, можно добиться огромного,
в разы, повышения производительности машины, купленной в ближайшем магазине.
Это тоже показывает, насколько велика наука системного программирования,
и поэтому наличие лаборатории системного программирования на
кафедре системного программирования мне очень нравится.
Мои студенты могут делать такое, чего другие студенты делать не смогут.
Я этим горжусь.