Виртуальная память для распределенных вычислительных систем

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

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

Внимание:

Все идеи и алгоритмы, описываемые в данной статье, являются результатом моей независимой и полностью самостоятельной интеллектуальной деятельности. Как автор, разрешаю свободно использовать, изменять, дополнять все идеи и алгоритмы любому человеку или организации в любых типах проектов при обязательном указании моего авторства (Балыбердин Андрей Леонидович Rutel@Mail.ru).

Предлагаю механизм работы современной виртуальной памяти расширить в сторону виртуализации памяти для всего дата-центра целиком. В качестве линии передачи данных между процессорами предлагаем использовать оптическое волокно для линий связей больше метра и электрический интерфейс для меньших расстояний (100G на пару, для 12 пар 1.2Т). Современные трансиверы позволяют достигать скоростей передачи до 400G (ближайшей перспективе до 800G), при этом максимальная пропускная способность PCI-E 5.0 500G, а пропускная способность интерфейса памяти DDR4 200G. Получается, что полное задействование всех имеющихся интерфейсов не позволяет полностью использовать производительность даже одного оптического интерфейса, поэтому данный механизм необходимо интегрировать именно в процессор, а не сделать в виде устройства на шине PCI с доступом в основную память.

Расположение виртуальной памяти

Модуль виртуальной память должен быть непосредственно в процессоре и работать с кэш-памятью практически со скоростью процессорных ядер (архитектура COMA). Кроме того, необходимо учитывать, что далеко не все данные необходимо сохранять в локальной оперативной памяти, оптимальнее произвести обработку прямо в кэш-памяти, а результат отправить в кэш другого ядра для дальнейшей обработки, не отправляя их в «бутылочные горлышки» медленных интерфейсов. Такой подход позволит строить очень эффективные цепочки конвейерной обработки, собирать данные, считываемые с большого числа интерфейсов DDR памяти в кэш-память процессоров или контроллеров DSM, где находится начало конвейера, далее передавать через промежуточные обрабатывающие звенья, до конца и уже там производить обратное сохранение результата в DDR. Появится возможность отделить основную оперативную память от процессора, по примеру СХД.

Количество каналов

Если каждый процессор будет иметь только один, то это будет обязательно требовать внешнего коммутатора, что снизит привлекательность для систем низкого и среднего размера (до 1000 процессоров). Коммутатор большого размера автоматически потребует и более длинных линий связи, а это неустранимая задержка передачи данных. Если каналов в процессоре сделать много, то это сделает устройство слишком сложным, что неоправданно поднимет его стоимость. Оптимальным будет интеграция шести высокоскоростных интерфейсов, что позволит строить различные трехмерные структуры, а в системах больше, например 1000 процессоров, использовать внешние коммутаторы для создания дополнительных связей.

Минимальные требуемые характеристики

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

Для системы с временем доступа к разделяемой памяти сопоставимой с локальной динамической памятью, максимум производительности соответствует квадрату или кубу со стороной 3 метра для задержки доступа к первому элементу не более 50нс, в этом случае время доступа в кэш любого процессора не будет больше времени доступа в локальную память. Современная динамическая память, хоть и имеет высокие скорости передачи данных, но доступ к новой строке медленный и особого прогресса в этом параметре нет (всего в 2 раза за 20 лет).

Устройство виртуальной памяти с точки зрения программиста

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

Устройство распределенной памяти

Для понимания проблемы DSM желательно прочитать это.

Предлагаю такой вариант: Модель консистентности: Последовательная (Все процессы видят все записи разделяемых данных в одном и том же порядке).

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

Итог: Такая реализация виртуальной общей памяти позволяет сделать ее полностью прозрачной для программ и не требующей каких-либо дополнительных вызовов при ее использовании (кроме начального конфигурирования системы виртуальной памяти при запуске системы). Соответственно не потребуется написания какого-либо дополнительного софта (кроме ПО обслуживающего виртуальную память), с точки зрения программиста никаких отличий от системы с последовательной консистентностью, при использовании префикса LOCK и вообще обычного компьютера. Если грамотно использовать предоставленные возможности (совместное использование физической памяти и конвейерную обработку данных без промежуточной записи в локальную память), то можно существенно повысить производительность многопроцессорной системы, относительно обычной грид-системы.

Реализация виртуальной общей памяти с точки зрения аппаратуры

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

Сетевой основой выбрана свободно распространяемая коммуникационная технология: «Синхронная символьная коммутация» (разработанная Балыбердиным А.Л. Rutel@Mail.ru).

Данная технология соответствует всем заявленным характеристикам и имеет относительно небольшие требования к размеру аппаратуры. Описание примененной коммуникационной парадигмы ( https://habr.com/ru/post/512652/ ).

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

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

Повышения производительности за счет лучшей загрузки АЛУ

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

Распределенный по отдельным процессорам вычислительный конвейер может повысить производительность в несколько раз. Есть статистика, что на каждые пять исполняемых команд, требуется одно обращение в оперативную память за обрабатываемыми данными. Если считать, что одно 32х разрядное число считывается из памяти за 200 ps (25E9 команд в секунду), а одно 400G сетевое соединение позволяет его получить за 80 ps, то это позволит поддерживать в 2.5 раза больший темп исполнения команд (60E9 команд в секунду).

Если задействовать все 6 каналов, то это позволит загрузить в вычислитель практически в пиковой производительности на постоянной основе. Современная оперативная память является достаточно медленным устройством (относительно процессора), и символьная сеть позволит суммировать пропускные способности многих интерфейсов памяти для «запитывания» точек входа таких вычислительных конвейеров, что существенно увеличит производительность вычислительной системы целиком.

Хочу отдельно выделить интересный момент : Максимальная производительность на современных процессорах часто достигается только при правильном расположении данных в памяти, а сеть с синхронной символьной коммутацией может это делать без практически дополнительных затрат. Причем возможно сразу делать несколько различных раскладок, если данные используются в нескольких частях программы и не только для одного конкретного процессора. Есть возможность следить за «комплектностью» данных и формировать сигнал вызова нужного обработчика, иными словами выполнять аппаратную поддержку параллельной обработки.

Краткое описание работы распределенной виртуальной памяти

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

Если локальный процессор выполняет запись данных в разделяемую память, то сначала данные помещаются в буфер местного контроллера DSM, далее он формирует и передает запрос на изменение данных контроллеру владеющему оригиналом данных. Контроллер «хозяин», получив запрос, помещает его в общую очередь изменений (формирует одинаковую для всех последовательность изменений) и используя единый и очень быстрый канал рассылает уведомления всем владельцам копий. Получив уведомление, владелец копии обновляет данные в своем кэше (даже тот кто инициировал исходную запись). Для куба размером 3 метра, теоретическое полное время составляет 50нс. Если использовать префикс LOCK, то можно очень быстро (50нс) разрешать ситуации входа в критические секции для всей вычислительной системы целиком.

Влияние задержки передачи данных на производительность вычислительной системы

Есть еще важное соотношение, известное существенно меньше закона Амдала :

«Степень распараллеливания задачи равна корню из отношения времени исполнения на одном процессоре к суммарному времени затрачиваемому на передачу данных»

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

Цели проекта

Создание прототипа универсальной сети на базе недорогой FPGA матрицы с достаточным число трансиверов ) в формате сетевой карты с интерфейсом PCI-E.

Подтвердить предположения о возможности новой сетевой технологии (ССИ) на реальной вычислительной системе.

Получить реально работающее оборудование. Уровень скорости 240 Гбит при относительно скромном ценнике позволяет говорить о реальности применения ?

Создание IP блока контроллера виртуальной общей памяти и применение его в выпускаемых процессорах (например, только для версии для дата-центров).

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

Ожидаемые результаты

Для системы из 1000 процессоров и максимальном числе промежуточных коммутаторов 20.

Среднее ожидаемое время доставки:

(Размер посылки в символах) * (Время передачи символа) + (Длина кабеля связи) * (Скорость света в кабеле) + (Число промежуточных коммутаторов) * (Время передачи символа.)

Максимальное ожидаемое время доставки:

(Размер посылки в символах) * (Время передачи символа) + (Длина кабеля связи) * (Скорость света в кабеле) + (Число промежуточных коммутаторов) * (Время передачи символа) * 2.5

Чтение (запись) страницы размером 4кБ в монопольном режиме (пиковая производительность).

G10 3948 нс

G100 382 нс

G400 95 нс

Чтение (запись) страницы размером 4кБ в режиме средней загрузки сети

G10 9870 нс

G100 1035 нс

G400 296 нс

Чтение (запись) от 8 до 32 бит в монопольном режиме

G10 328 нс

G100 69 нс

G400 47 нс

Чтение (запись) от 8 до 32 бит в режиме средней загрузке сети

G10 760 нс

G100 112 нс

G400 50 нс

Время задержки стремится к 40 нс, ко времени распространения света по оптическому волокну.

* Средняя загрузка сети, когда для передачи обновлений выделяется только 30% от максимальной производительности физического канала.

Комментарии (43)


  1. SerjV
    18.09.2021 21:23

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

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

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

    Если преследуете этим заявлением какую-то практическую цель, помимо декларации, можем обсудить...


  1. Rutel_Nsk Автор
    18.09.2021 21:28

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


    1. SerjV
      18.09.2021 23:15

      Одобряю, дело полезное.

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

      Правильно сформулированным текстом можно дать разрешение на использование объекта авторского права (т.е. фактически сформулировать лицензию на него). Напоминаю, что алгоритмы авторским правом не защищаются, но зато защищаются их описания (поэтому нельзя просто так взять кусок описания из Интернета и использовать в своих целях просто потому, что он опубликован в Интернете). Также нельзя просто взять и сказать "да пользуйтесь кто хотите" - это в каких-нибудь США работает, например, в виде лицензии BSD - у нас она до 2014г. вообще лицензией не являлась, да и сейчас "на грани" кроме как для программ для ЭВМ и баз данных.


      1. Rutel_Nsk Автор
        18.09.2021 23:29

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


        1. SerjV
          19.09.2021 00:08

          В вопросах разрешения на использование и тд все решают деньги и банально у кого их сильно больше тем и поровну на все патенты и тд.

          Зависит от страны. В странах типа США, где выиграть суд может оказаться дороже, чем проиграть, оно примерно так и есть, в других странах уже повеселее (в хорошем смысле этого слова).

          Вообще считаю современную систему патентных отношений глубоко порочной

          Тут палка о нескольких концах.

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

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

          Все правообладетели пойдут лесом.

          Вот написал статью, и даже еще не опубликовал - но у неё уже есть правообладатель. Радует правда, что авторское право - не патентное, реализовывать те же идеи самостоятельно ничто не мешает.


  1. amarao
    18.09.2021 22:19

    что-то я не понял как 1000 ядер планирует использовать сериализованную консистентность и при этом быстро работать. Допустим, у нас 1000 тредов, которые что-то там себе молотят, и в нужный момент решают получить мьютекс. Мьютекс в памяти. Вот процессоры [1-500] решили одновременно получить мьютекс, т.е. сделать +1 в байт памяти.

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


    1. Rutel_Nsk Автор
      18.09.2021 23:31

      Ответил — чуть ниже.


  1. Rutel_Nsk Автор
    18.09.2021 22:47

    Структура сети — куб со стороной в 10 процессоров, каждый связан с 6 соседними.
    Каждый процессор содержит коммутатор, время коммутации примерно 1-2 нс (в зависимости от тактовой чатоты коммутатора). Соответственно соединение проходит через промежуточные коммутаторы (15 для самой длинной).
    Основой соединени является канал между передатчиком и от одного до 1000 приемников.
    Как получается до 1000 приемников — канал передачи синхронный и каждый коммутатор для него вырождается в регистр. Вся цепочка промежуточных коммутаторов в FIFO. При этом в промежуточном коммутаторе есть возможность записать в несколько регистров одновременно, которые будут отправлены в различные интерфейсы. Получаем дерево — один источник, любое число приемников.
    Используя один такой канал «хозяин» оригинала памяти производит рассылку изменений всем держателям копий одновременно.
    Если держатель копии хочет изменить слово в памяти, он отправляет «хозяину» оригинала запрос на изменение. У «хозяина» оригинала есть отдельные каналы связи с каждым владельцем копии и он по какому то своему алгоритму преобразовавает поступившие запросы (часть из них могут приходить и совсем одновременно) в единую для всех последовательность изменений. Редактирует содержимое оригинала и формирует канал с уведомленими о изменениях.
    LOCK и тд это отдельный вопрос.

    Хочу добавить: Если сделать +1 к памяти такая нужная операция, то делать ее нужно не путем блокировки переменной ее изменения и разблокирования, а отправкой «хозяину» оригинала запроса на увеличение данных на 1. Время обработки 500 обращений будет равно времени передачи 500 обновлений памяти. Каждый получит результат исполнения своего запроса (персональное уведомление), ну и еще все сделанные обновления (за время менее мкс сформируется очередь).


    1. amarao
      19.09.2021 00:45

      Мне страшно вас читать. Скажите, вы модель памяти современных компьютеров знаете? acquire/release семантику и т.д.?


      1. Rutel_Nsk Автор
        19.09.2021 05:45

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

        Поясните, что Вам не понравилось: Запись многими процессорами (ядрами, нитями) по одному и тому же физическому адресу данных породит последовательность изменений, обновлений копий.
        Для программиста это выразится в чтении случайного варианта изменения.
        Для схемотехника произойдет построение последовательности изменений данных, иными словами будет получена очередь доступа к разделяемому ресурсу.
        Полученную очередь можно пропустить через систему приоритетов (должна быть одинакова для всех процессоров). И все это происходит за время единичного доступа в память 50нс + Время обновления, время обновления пропорционально производительности скорости сети.
        Как работа данного алгоритма будет «состыкована» с конкретной моделью процессора и его системой команд, другой вопрос. Скорее всего прозрачно для программиста и так как это уже реализовано для конкретной вычислительной системы (обеспечение совместимости).
        Как пример cc-NUMA, программу не видит принципиальной разницы между своим и чужим кэшем, все алгоритмы выполнены схемотехником и прозрачны для программиста.

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


        1. amarao
          19.09.2021 11:15

          Никому не нужна последовательность записей. Всем нужна эксклюзивность: если я записал, остальные не записали.

          Обычно это делается инструкцией cas: https://en.wikipedia.org/wiki/Compare-and-swap


          1. Rutel_Nsk Автор
            19.09.2021 11:55

            А я Вам про тоже самое: если запрещено писать, запишет только самый первый (с момента освобождения ресурса), остальные встанут в очередь и их запросы на запись будут удовлетворены в последовательности поступления запросов на изменение помноженное на таблицу приоритетов.
            При этом повторного запроса на запись не потребуется, очередность записей уже построена и будет кооректироваться в моменты поступления дополнительных запросов.
            Еще следует отметить возможность вычислить время когда подойдет очередь на доступ к разделяемому ресурсу, что позволит на это время загрузить процессор другой задачей.
            Можно добавить функционал таймаута — после прохождения определенного времени ресурс автоматически освобождается для использования следующим в очереди.
            Если позволяется параллельное чтение разделяемых ресурсов, то все запросы на чтение будут обслужены параллельно. Понятное дело что с запретом записи в этот момент.
            Можно реализовать много усовершенствований позволяющих повысить производительность.
            Например: Процессор выполняет «виртуальную» блокировку ресурса, производимые изменения данных не отправляются сразу. Если за время «виртуальной» блокировки не происходит модификации памяти, то процессор выполняет реальную блокировку и разом отправляет все необходимые изменения. Такой подход имеет свои плюсы при преобладании чтений над модификациями.


            1. amarao
              19.09.2021 16:30

              Что такое "встать в очередь" с точки зрения процессора №499? halt? интеррапт?


              1. Rutel_Nsk Автор
                19.09.2021 16:46

                Если процессор №499 встал в очередь, значит есть процессор N который запросил ресурс чуть раньше или имеет больший приоритет. К чему это приведет зависит от решаемой задачи, может быть wait, может быть отказ самого процессора от доступа к ресурсу, может быть прерывание с переключением задачи и другое. Главное, что арбитраж пройден и каждому обратившемуся назначен приоритет.


                1. amarao
                  19.09.2021 20:24

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


                  1. Rutel_Nsk Автор
                    19.09.2021 20:51

                    С ответами (варианты я перечислил в опросе) все интересно.
                    Разговаривал с заместителем директора достаточно большой и известной компании производящей телекоммуникационное оборудование (на хабре статьи про них и их оборудование периодически пишут), он ответил просто:
                    «Наша компания не занимается „наукой“ это слишком дорого и рискованно, мы покупаем, припаиваем стандартные микросхемы, устанавливаем платы в корпус и продаем». Российский разработчик трансиверов конкретно не ответил, но тема им интересна и потянуть сами они ее не могут. Наш крупный разработчик процессоров (ответ получил устно и с большим трудом): Советом директоров принято решение ничего вам не отвечать. Производитель (разработчик) оптических коммутаторов не ответил, хотя практически наверняка получил все описания по разным каналам. Попытался связываться с различными учеными, абсолютному большинству лень изучать новое направление (среднее ощущение от общения), а профильной научной школы в нашей стране нет.
                    Сейчас появился прогресс, вроде начал интересоваться университет как темой для научных работ.
                    По факту все уйдет в Китай, в нашей старане нет заинтересованности в новых разработках, этикетки переклеивают да конструктор из готовых ядер создают.
                    Сегодняшние статьи это часть огромного проекта и именно поэтому я стараюсь сделать его свободнораспространяемым. По факту я проектирую основу новой технической (технологической) революции. Ну и если очень повезет, то до своей смерти смогу создать описываемое в этой статье ( habr.com/ru/post/489068 ). Звучит как фантастика, но я хочу заниматься чем то действительно большим и сложным.

                    По поводу производительности: С хорошей вероятностью будет увеличение производительности на три порядка от современных машин (для этого и нужны скорости в сотни триллионов бит в секунду), мне нужно система для исследования и синтеза биологических структур с производительностью эквивалентной 10Е20 FLOPS


                    1. amarao
                      19.09.2021 21:50

                      Знаете, почему вам директора решили не отвечать? Потому что вы обещаете три порядка увеличения производительности, игнорируете проблемы и излагаете "решение" пропуская критические проблемы, требующие решения.

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


                      1. Rutel_Nsk Автор
                        19.09.2021 22:09

                        Я им столько не обещал — я отправил принципы работы плезиохронной сети и примерное описание системы распределенной памяти с ее использованием.
                        Первая прочитананная книга по вычислительной технике в 10-12 лет (точно не помню) — белый «кирпичик» IBM 360 ( www.ozon.ru/product/programmirovanie-na-ibm-360-dzhermeyn-k-291587098/?sh=eZaabHMV ) ничего не понял, но очень понравилось. Ну и само оборудование понравилось. Рядом с нашей школой несколько институтов было и у нас информатика была с использованием машин EC10XX, занимающим целый этаж (тогда персоналок еще небыло). Задачи запускались в пакетном режиме, выдача результатов работы программы в виде распечатки на барабанном принтере бумага с перфорацией по краям.
                        Печатный узел — цилиндр диаметром в 200 мм на котором выгравирован весь алфавит — один оборот одна строка.
                        А если неудачно руку засунешь, то и руки не станет. Дискетка диаметром в пол метра и высотой в 15 см примерно. Байки ходили, что если плохо установить может пополам разрезать. Фальшпол из аллюминиевых плиток. Кстати успел немного поремонтировать машины CM-1420 (ее ассемблер очень нравится). Интересное время ))))


                      1. Rutel_Nsk Автор
                        22.09.2021 03:01

                        Интересный текст (2012) с параметрими перспективных вычислительных систем ( rosatom.ru/upload/iblock/c4e/c4e2a133ad639c499cafc5f6f618d851.pdf ). На странице 57 описывается связь вычислительной производительности и скорости межпроцессорного обмена.


  1. Myclass
    19.09.2021 09:48

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

    А в удалённую пишут другие, а вы всё равно продолжаете читать свою копию. И где здесь принцип совместной памяти? Ок, вы добавите регулятор когда, куда, после чего итд. Ну те то, что сегодня в принципе уже существуют...

    Если бы я изобретал (запомните, это моя идея), то я бы сделал своего рлда RAID Controller для рабочей памяти. Когда пишут все в одну точку, это параллельно сохраняется на несколько компонентов, а читать каждый может на свей части этого RAID Controller(а). Хотя как это реализовать без усложнения и доп. шин данных мне пока не ясно.

    И вообще. Моё мнение. Не возможно описать наглядно действия схемы/памяти/большого количества компонентов итд. и при этом не нарисовать ни одного рисунка. Словами создаётся огромное поле для (false) интерпритации . Для себя и других для других.


    1. Rutel_Nsk Автор
      19.09.2021 11:06

      Последовательность записи:
      1. В момент записи процессором в свой локальный кэш формируется запрос на изменение данных «хозяину» оригинала данных, а запись в локальный кэш не производится.
      2. Запрос отправляется, а локальном кэш ставится отметка о транзакции, только при попытке прочитать данные по этому адресу процессор остановится и будет ожидать завершения запроса.
      3. Запрос передается по сети, попадает в контроллер DSM оригинала данных, он добавляет запрос в последовательность изменений и отправляет уведомление всем держателям копий.
      4. Получив уведомление о выполнении своего запроса на изменение данных, локальный DSM контроллер производит запись в локальный кэш.
      Между моментами формирования зопроса на изменение данных и ответом на этот запрос могут приходить уведомления о изменении данных инициированные другими процессорами.

      «Если бы я изобретал»
      Здесь именно так и сделано: Вариант работы сквозная запись, все направляют запросы на запись контроллеру DSM владеющему оригиналом памяти, а он уже параллельно корректирует содержимое всех копий в одинаковой для всех копий последовательности.


      1. Myclass
        19.09.2021 19:16

        по этому адресу процессор остановится и будет ожидать завершения запроса.

        Извините, но вы изобретаете то, что уже есть. Уверен, надо идти совсем в другом направлении. Например большое количество ядер всё равно пишет в одно и тоже место. Может быть стоит в этом направлении подумать...


        1. Rutel_Nsk Автор
          19.09.2021 19:36

          В данной статье описывается построение DSM на основе синхроной символьной иерархии и вот это действительно новое ( habr.com/ru/post/512652 ). Применение этого типа сети позволит создать быструю распределенную память и кардинально изменить принципы построения суперкомпьютеров. По поводу нового типа процессора, не все сразу. В следующих статьях буду описывать принципы работы высокопроизводительных вычислительных систем, принципы их программирования и тд.
          Современные программисты очень плохо реагирует на заявления о том что все их профессиональные навыки скоро станут устаревшими. Много раз повторяемая история с луддитами. ))


          1. Myclass
            19.09.2021 21:13

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

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


            1. Rutel_Nsk Автор
              19.09.2021 21:23

              Ладно, я не сильно то и обижаюсь. Неприятие новинок это «встроенное» свойство среднего человека.
              Мне нравятся вот эти предсказания о технологических укладах: ru.wikipedia.org/wiki/Циклы_Кондратьева.
              Над этим работаю: НБИК-конвергенция (NBIC-конвергенция) — гипотетическое ядро 6-го технологического уклада, основанное на объединении и синергетическом усилении достижений нано-, био-, информационных и когнитивных технологий. Результатом НБИК-конвергенции будет являться полное слияние этих технологий в единую научно-технологическую область знания[1].


  1. Rutel_Nsk Автор
    19.09.2021 11:58

    Если кажется, что скорости в триллионы байт и оптический интерфейс между микросхемами фантастика, то прочитайте: servernews.ru/1041594.

    Был так же усовершенствован многопортовый лазер SuperNova, который теперь поддерживает до 64 настраиваемых длин волн излучения и до 256 каналов, что даёт суммарную пропускную способность 8,192 Тбит/с. Он стал первым продуктом, совместимым со спецификациями CW-WDM MSA, отраслевого консорциума, который разрабатывает стандарты для передовых оптических коммуникационных и вычислительных приложений. При его создании разработчики использовали лазерные технологии MACOM, оптимизированные для кремниевой фотоники.


  1. SergeyIvanov87
    19.09.2021 15:56

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

    ИМХО, в контексте статьи вертикальное и горизонтальное масштабирование сливается в какую-то единую (плохо контролируемую лично для меня) сущность, где получить предсказуемые показатели производительности не представляется возможным. Опять же возникает вопрос отказоустойчивости: что если падает нода с эксклюзивными данными? К кому перейдет право писать-читать потерянный сегмент? Как поведет себя система в целом, если лишится части "процессоров" и распределенных блоков данных?
    На практике обычно нет однозначного ответа на эти вопросы, поэтому, исходя из контекста задачи, проектировщик выбирает подходящие software-tools. Это более гибкий и дешевый подход нежели "прожигать" поведение в аппаратной части. Отчасти, поэтому, я почему-то так считаю, производители железа и не собираются решать описанную Вами задачу, в то время как имеется большое количество программных средств, реализующих это пусть и не на скорости света в оптоволокне, но, с учетом распространенных паттернов проектирования, более гибко и надежно.
    Прошу прощения, что не вдумывался в каждой предложение в процессе чтения, но опять же что-то мне подсказывает, что в статье не учтены всякого рода тонкости работы с шареными данными, я уверен, что прочитав реализацию базового MESI Cache coherency protocol https://en.wikipedia.org/wiki/MESI_protocol можно почерпнуть много интересного. Отчасти еще и поэтому производители железа, вероятно, не стремятся реализовывать Вашу идею, не ломая при этом существующую совместимость стандартов.

    ИМХО, Distributed RAM должна строиться с учетом текущей модели Cache-RAM-DRAM, что с успехом реализуется существующими софтварными решениями.


    1. Rutel_Nsk Автор
      19.09.2021 16:13

      я не могу придумать реальных задач

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

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

      должна строиться с учетом текущей модели

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


      1. SergeyIvanov87
        19.09.2021 22:29

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

        Не очень подходящая аналогия, на мой взгляд. Вы ведете речь не об уточнении модели, а о полноценной замене. В данном контексте "замена" отрицает накопившийся годами легаси подход существующего стека технологий в организации памяти: система кешей, когерентность кеша, и, как заметил, комментатор @amarao acquire/release семантику.
        Текущий стек технологий прекрасно себя чувствует и показывает на имеющемся скопе задач и приносит всем неплохие бабки. В этом плане вносить избыточную сложность в ЦПУ общего назначения и разрабатывать "протоколы синхронизации" и отказоустойчивости на базе железа, а не софта (а ведь именно это предлагает делать автор, если я достаточно внимательно прочитал) в целом не выгодно ради 1/10...0% задач по переумножению матриц. Проще сделать специализированное устройство для перемножения матриц :) Хотя... оно уже есть - GPU! И соседствует рядом с Network Interface Controller, на PCI-E. Так что с точки зрения преемственности технологий и имеющего легаси - лучше двигаться в данном направлении коммутации GPU устройств.

        Думаю это не новая задача, возникшая в момент появления высокоскоростной сети.

        Конечно это не новая задача. Речь идет о реализации этого всего этого в железе (в ЦПУ в том числе) и удорожании и усложнении всего этого комплекса. Также добавит latency к операциям, придется вводить еще слой синхронизации и т.д. В любом случае будет trade-off между гарантией консистентности и производительности. НО, как я уже упомянул в своем первом комментарии - каждое приложение/задача требует индивидуального подхода в этом вопросе.

        ИМХО, интересная задумка в качестве "прожекта"


        1. Rutel_Nsk Автор
          20.09.2021 04:02

          Сеть с использованием ССИ это только начало (мелкие копейки)
          Следущая стаья будет про принципы построения процессора с производительностью на несколько порядков быстрее современных (на порядок быстрее GPU).

          А про бабки, то почитайте здесь: tproger.ru/articles/jeksperiment-bazermana-kak-my-ezhednevno-terjaem-dengi/?utm_referrer=https%3A%2F%2Fzen.yandex.com


    1. permeakra
      19.09.2021 18:18

      Сделайте, пожалуйста, умножение распределенно хранимых матриц (по причине, что в память одной машины влезает от силы 1/1024-я часть) на MAP-REDUCE.

      Хотя эта проблема давно решена RDMA


      1. Rutel_Nsk Автор
        19.09.2021 18:18

        ответил ниже


      1. SergeyIvanov87
        19.09.2021 22:47

        Проблема перемножения матриц стара как мир и еще старше, чем MAP-REDUCE. В сети полно алгоритмов перемножения в т.ч. cache-friendly. Классическая задача на GPGPU решается с помощью перемножения матриц по-блочно. И при учете параметров кеша, особенностей вычислительных блоков и некоторых других факторов решается быстрее на GPU, чем на CPU (даже с учетом трансферинга через PCI-E).
        С другой стороны, насколько я знаю, распределенные системы для DeepLearning используют MPI (Message Passing Interface) для своей работы (которому также уже лет 40), и перемножение матриц также можно организовать последовательностью allgather/allreduce и тд.

        по причине, что в память одной машины влезает от силы 1/1024-я часть

        А можно у Вас поинтересоваться, что за область компьютерного знания требует перемножения и хранения матриц таких объемов? Учитывая, что современные серверные ЦПУ, как правило, снабжаются сотнями гигабайт оперативной памяти


        1. permeakra
          20.09.2021 03:57

          >Проблема перемножения матриц стара как мир и еще старше, чем MAP-REDUCE

          Именно. И MAP-REDUCE с ней работает плохо.

          >А можно у Вас поинтересоваться, что за область компьютерного знания требует перемножения и хранения матриц таких объемов?

          Физические расчеты. Квантовая механика/химия, аэро/гидродинамика, сопромат и т.п.. Зависит от размера задачи, конечно. И IRL задача решается с использованием MPI.


        1. Rutel_Nsk Автор
          20.09.2021 04:13

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

          Самый тяжелый случай для вычислений: моделирование поведения молекул воды в объеме биологической клетки.
          Минимальный размер клетки 5 мкм: объем 4 х 10^-10 грамм или 1.34 х 10^13 молекул воды или 4х10^13 атомов.

          Хочется знать сколько вычислительных операций в среднем требуется для моделирования поведения одного атома в «ансамбле» из 4х10^13. Очень надеюсь что для вычисления поведения каждого атома не придется учитывать все атомы «ансамбля». Сколько соседних атомов в среднем участвуют в рассчетах по предсказанию положения конкретного атома при этом за одну итерацию любой атом не изменяет своего положения больше чем на диаметр атома водорода.


          1. Myclass
            20.09.2021 14:45

            поведения одного атома в «ансамбле» из 4х10^13

            … не в сути всех ваших умножений, но после того, как слышу огромные числа для определения того или иного результата всегда думаю следующее. А правда, что например именно все матрицы и их числа должны быть перемножены? Или есть в этих результатах такие, которые по количеству и кол-ву операций малы, но сильно дейаствуют на сам результат? И тонна других, которые какие-то оставшие 5-10% результата «весят». Т.е. последними можно пренебречь-? Ведь и падения яблока с дерева можно решать, используя при этом все атомы вселенной, их положение и вектор перемещения, но можно и простой формулой из физики обойтись. Я не то, что-бы ставлю ваши цели под вопрос. Но очень часто стоит ненужными вещами пренебрегать. Хоть это и не всегда легко и повышает неточность.


            1. Rutel_Nsk Автор
              20.09.2021 14:58

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


    1. Rutel_Nsk Автор
      22.09.2021 03:05

      rosatom.ru/upload/iblock/c4e/c4e2a133ad639c499cafc5f6f618d851.pdf
      Здесь описывается куда «девать» производительность.
      На 57 странице описывается связь межпроцессорного обмена и вычислительной производительности.


  1. Rutel_Nsk Автор
    19.09.2021 18:15

    Выбираем сколько процессоров будет использоваться для задачи умножения.
    В момент первого обращения, запрашиваем у контроллеров DSM участвующих в перемножении матриц создание оптимального адресного пространства (может быть различным для каждого из параллельно работающих процессоров).
    Оптимальное значит что перемножаемые числа в этом пространстве будут находиться последовательно (как строки, так и столбцы).
    Создаваемое адресное пространство полностью виртуально и совсем не обязательно последовательное. Можно даже сделать множество вариантов взаимного расположения данных, для различных алгоритмов обработки. Например можно расположить данные так что бы оптимально обработать с использованием векторных команд (как самый быстрый способ) и наиболее оптимально (без передачи лишних данных) уложить данные к кэш.
    Далее запрос доступа (если подразумевается возможность изменения) и ожидание подтверждения доступа.
    Далее происходит чтение необходимых данных (первое данное поступит через 50 нс), далее в свободную кэш страницу поступит нужное для полного заполнения страницы данные. Скорость зависит от производительности сети и скорости кэшрования памяти в узлах содержащих данные матрицы. Преобразование виртуального адреса в локальный физический и адрес производится контроллером DSM задействованного для вычислений процессора и DSM владельца оригинала данных.
    В каком порядке производить перемноженожение это «личное дело программиста». Можно строить любые варианты соединений процессоров (пока хватает производительности сети).
    Отдельного времени для инициализации заранее вычисленного маршрута не требуется, в момент первого обращения происходит построение канала (более подробно здесь habr.com/ru/post/512652).


  1. Kubera2017
    17.11.2021 04:01

    1. Rutel_Nsk Автор
      17.11.2021 05:30

      Посмотрел, описание сильно урезанное.
      Если посмотреть на обещания

      производительности, предполагающие, что узел PIUMA превзойдет обычный вычислительный узел на один-два порядка

      В моем варианте производительность на 3 порядка больше и задержки передачи очень близкие к времени распространения сигнала в кабелях связи.

      Да и связность каждый с каждым в пределах ноды не радует (пусть даже и на одной печатной плате)
      По поводу устройства физического интерфейса, думаю будущее за такими решениями: servernews.ru/1041594


      1. Kubera2017
        17.11.2021 05:48

        Описание сильно урезанное потому что это пока что проект для DARPA HIVE :) Можно еще гуглом поискать, есть вот это https://arxiv.org/pdf/2010.06277.pdf и некоторые картинки из презентаций интересные находит.

        Производительность в 10-100 раз, да, немного, но это для графовых задач +10 хопов и сейчас это будет очень существенно.

        Я к тому что:

        1) все в итоге приходят к shared memory и это будущее, а не спарк на moderate hardware как пишут некоторые комментаторы

        2) Судя по их родмапу все должно быть уже готово


        1. Rutel_Nsk Автор
          17.11.2021 05:57

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