Re[25]: Эльбрус мёртв, да здравствует Эльбрус-Б!
От: vdimas Россия  
Дата: 03.06.25 07:39
Оценка:
Здравствуйте, ·, Вы писали:

·>Справедливости ради стоит заметить, что в шарпе пришлось унизительно расставлять unsafe да ещё какие-то прагмы для инлайнинга. А в src/Disruptor/Util/InternalUtil.cs вообще какие-то магические коды, почти ассемблерные вставки; правда лень разбираться для чего это.


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

Просто в Джаве эти ср-ва идут изкаробки, бгг...
И да, в дотнете эти ср-ва тоже идут изкаробки, просто этот код написан разработчиками Disruptor, кои в моих глазах недосамоучки, что и показывает твоя ссылка.


·>Такое ощущение, что писать на шарпе high performance можно только из любви к искусству...


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

Ну так-то достижение нужной эффективности на этих языках даётся намного большей кровью, чем в нейтиве, я последние лет 12 как раз этим занимаюсь — выжиманием максимума из дотнета, и мне есть с чем сравнить (разработка продуктов для бирж одновременно на плюсах и дотнете).
Re[26]: Эльбрус мёртв, да здравствует Эльбрус-Б!
От: vdimas Россия  
Дата: 03.06.25 08:10
Оценка:
Здравствуйте, Sinclair, Вы писали:

S>Да, там кокие-то чудеса. На первый взгляд выглядит совершенно как обычный ансейф-код обращения к массиву, минуя проверки диапазона.

S>Зачем они это навертели, вместо простых и понятных манипуляций с указателями в unsafe — х.з.

Чтобы не делать пин при преобразовании к указателю в блоке fixed().
Да, этот пин условно бесплатен для клиентского GC, но не всегда бесплатен для серверного, выполняющего GC в фоне постоянно.


S>И вообще, там много непонятного кода.


Это надо смотреть на сценарии использования.
В аналогичных случаях мне удавалось обходиться без unsafe-блоков кода через библиотечные Unsafe.As<>/Unsafe.Add<>, т.е. через обычные ref int/long/etc ссылки.
Код выглядит как достаточно тупой порт на C# на сегодня.


S>Такое впечатление, что вся эта ансейф-магия в дотнетном дисрупторе нужна для покрытия тех случаев, который джавовский дисруптор не умеет в принципе: когда евенты в очереди лежат не по ссылке, а по значению.


Кстате, раз уж ты дал ссылку на дотнетную реализацию, то там есть, в том числе, реализация поверх unamanaged-буфера. ))
Но опять всё сделано максимально по-нубски, бо можно было сразу хранить типизированный указатель, а не пользовать SafeHandle, т.к. это опять очень внутренний код, т.е. можно было сделать надёжную финализацию в объектах более высокого уровня, наследуя их от CriticalFinalizerObject, а не получать штраф на лишнюю косвенность. Разрабы этого говнокода явно не понимают, что в отсутствии необходимости вызовов DangerousAddRef/DangerousRelease у объекта SafeHanlde тот не нужен вовсе. ))

И заодно куча ручной разметки:
public abstract class UnmanagedRingBuffer : ICursored
{
    // padding: DefaultPadding

    [FieldOffset(DefaultPadding)]
    protected IntPtr _entries;

    [FieldOffset(DefaultPadding + 8)]
    protected long _indexMask;

    [FieldOffset(DefaultPadding + 16)]
    protected int _eventSize;

    [FieldOffset(DefaultPadding + 20)]
    protected int _bufferSize;

    [FieldOffset(DefaultPadding + 24)]

Что тоже нубство, бо можно было просто описать структуру Padding и пометить класс через LayoutKind.Sequential.

DefaultPadding у них равен 64-8=56, что тоже странно, бо на современных серверных процах бывает размер линейки кеша 128 байт, т.е. эта константа из прошлого.

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

Забейте вы уже на этот Dusruptor, это действительно плохой пример, аминь.
Отредактировано 03.06.2025 8:37 vdimas . Предыдущая версия .
Re[24]: Эльбрус мёртв, да здравствует Эльбрус-Б!
От: vdimas Россия  
Дата: 03.06.25 10:43
Оценка:
Здравствуйте, Sinclair, Вы писали:

S>Примерно как пытаться делать HTTP-сервер на честных аппаратных потоках, создаваемых на каждый сокет.


А, да.
Про кооперативную многозадачность я упомянул по той причине, что потоки эти не аппаратные, конечно, а логические уровня ОС.
Т.е., прикладные потоки всегда логические, ес-но, а вопросом выделения потокам/задачам машинного времени занимается некая внешняя система.

Это почему я утверждаю, что совершенно не было смысла вводить в дотнет асинхронщину, что можно было сразу же сделать на уровне платформы обычную кооперативную многопоточность, где блокирующие вызовы просто переключали бы шедуллер при блокировании логического потока. Т.е. никакой await не нужен — всё то же самое могло бы происходить в stackful реализации, как оно отродясь было в Виндах до 3.х включительно и прекрасно шустренько работало на тормозной технике тех лет.

Просто они как бы в документации сразу же написали, что поток дотнета не привязан к потоку ОС (может быть НЕ привязан), а на деле в реализации прибили поток дотнета к потоку ОС и за 20 лет накопилось столько связанного с этим кода, включая рукописный TLS, что никакой плавный переход на кооперативную многозадачность стал невозможен. ))

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

В кавычках определение кривое, понятно, этому еще предстоит изобрести более короткий термин.
Отредактировано 03.06.2025 14:37 vdimas . Предыдущая версия . Еще …
Отредактировано 03.06.2025 10:46 vdimas . Предыдущая версия .
Отредактировано 03.06.2025 10:44 vdimas . Предыдущая версия .
Re[26]: Эльбрус мёртв, да здравствует Эльбрус-Б!
От: · Великобритания  
Дата: 03.06.25 10:49
Оценка: +1 -1 :)
Здравствуйте, vdimas, Вы писали:

V>·>Справедливости ради стоит заметить, что в шарпе пришлось унизительно расставлять unsafe да ещё какие-то прагмы для инлайнинга. А в src/Disruptor/Util/InternalUtil.cs вообще какие-то магические коды, почти ассемблерные вставки; правда лень разбираться для чего это.

V>Это как раз то, что ты просил показать — чтение из нетипизированной памяти массива байт.
Я это просил показать в lmax disruptor. Ты так и не смог.

V>Ты чудесно повторил подвиг Синклера — сам себе ответил на свои же донельзя яростные возражения.

Ты подменяешь контекст.

V>Просто в Джаве эти ср-ва идут изкаробки, бгг...

Какие? Давай точную строчку кода. Или господин соврамши?

V>И да, в дотнете эти ср-ва тоже идут изкаробки, просто этот код написан разработчиками Disruptor, кои в моих глазах недосамоучки, что и показывает твоя ссылка.

Ты опять соврал. Этот код не написан разработчиками Disruptor. Разработчики — Martin Thompson и Mike Barker, может ещё пара.

V>·>Такое ощущение, что писать на шарпе high performance можно только из любви к искусству...

V>Как и на Джаве.
Факты говорят о другом.

V>Но это ты сильно себе польстил, конечно, насчёт любви к искусству... ))

V>На этих языках окучивают несвойственные этим языкам ниши из-за пресловутой "планки входа", более никаких причин происходящего нет.
Фактические причины я уже тут описывал — компромисс между безопасностью и перформансом.

V>я последние лет 12 как раз этим занимаюсь — выжиманием максимума из дотнета,

Приношу свои соболезнования. Но тебе ещё повезло, что не из вижуалбасика.
но это не зря, хотя, может быть, невзначай
гÅрмония мира не знает границ — сейчас мы будем пить чай
Re[27]: Эльбрус мёртв, да здравствует Эльбрус-Б!
От: vdimas Россия  
Дата: 03.06.25 13:38
Оценка:
Здравствуйте, ·, Вы писали:

V>>·>Справедливости ради стоит заметить, что в шарпе пришлось унизительно расставлять unsafe да ещё какие-то прагмы для инлайнинга. А в src/Disruptor/Util/InternalUtil.cs вообще какие-то магические коды, почти ассемблерные вставки; правда лень разбираться для чего это.

V>>Это как раз то, что ты просил показать — чтение из нетипизированной памяти массива байт.
·>Я это просил показать в lmax disruptor. Ты так и не смог.

Самому поискать по ByteBuffer не судьба?


V>>Ты чудесно повторил подвиг Синклера — сам себе ответил на свои же донельзя яростные возражения.

·>Ты подменяешь контекст.

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

Невменяемый шлак, кароч.
Это просто несерьёзно, извините.


V>>И да, в дотнете эти ср-ва тоже идут изкаробки, просто этот код написан разработчиками Disruptor, кои в моих глазах недосамоучки, что и показывает твоя ссылка.

·>Ты опять соврал. Этот код не написан разработчиками Disruptor. Разработчики — Martin Thompson и Mike Barker, может ещё пара.

Многовато людей для такой задачи.
Хотя, если прикола ради сугубо для опенсорса...


V>>·>Такое ощущение, что писать на шарпе high performance можно только из любви к искусству...

V>>Как и на Джаве.
·>Факты говорят о другом.

Факты говорят, что на дотнете писать такой код проще, бо в нём больше вещей, заточенных на низкий уровень.
Джавовский этот AtomicReferenceUpdater, создаваемый через рефлексию — это ж порождение больного воображения.
А рефакторить потом как, с этими символическими именами полей прямо в значениях строк хер знает где в константах? ))


V>>На этих языках окучивают несвойственные этим языкам ниши из-за пресловутой "планки входа", более никаких причин происходящего нет.

·>Фактические причины я уже тут описывал — компромисс между безопасностью и перформансом.

Это оно и есть.
Потому что безопасность требуется вовсе не на уровне реализации Disruptor — это небольшая по объёму кода библиотека, в которой можно обеспечить безопасность относительно задешево...
Безопасность требуется в прикладных колбэках, т.е. в клиентском коде.

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


V>>я последние лет 12 как раз этим занимаюсь — выжиманием максимума из дотнета,

·>Приношу свои соболезнования. Но тебе ещё повезло, что не из вижуалбасика.

Дык, причины те же, что и в джаве — существование этого рынка.
И этот рынок стал нехило расти с появлением .Net Core (сейчас опять просто .Net называется).

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

И результат тоже несравним, конечно — в Джаве многое физически невозможно...
Ну или начать оперировать сугубо бестиповыми массивами байт вместо типизированных объектов. ))
Или как в Disruptor — разносить поля объектов по разным массивам (см MultipleProducer), получая несколько круговых буферов вместо одного, из-за отсутствия value-type в языке.

И да, мне несколько похер на обе эти недотехнологии, я тут третья сторона, со мной устраивать срач дотнета vs джавы не надо. ))
Просто бизнес, ничего личного...
И просто свои многолетние наблюдения.
Отредактировано 03.06.2025 14:31 vdimas . Предыдущая версия .
Re[28]: Эльбрус мёртв, да здравствует Эльбрус-Б!
От: · Великобритания  
Дата: 03.06.25 14:55
Оценка: +1 -1 :)
Здравствуйте, vdimas, Вы писали:

V>·>Я это просил показать в lmax disruptor. Ты так и не смог.

V>Самому поискать по ByteBuffer не судьба?
Поищи. Доложи о результатах. И извинись за враньё. Дальше разговор продолжать не вижу смысла. Ты полностью игнорируешь реальность.
но это не зря, хотя, может быть, невзначай
гÅрмония мира не знает границ — сейчас мы будем пить чай
Re[25]: Эльбрус мёртв, да здравствует Эльбрус-Б!
От: Sinclair Россия https://github.com/evilguest/
Дата: 04.06.25 04:57
Оценка: +1
Здравствуйте, vdimas, Вы писали:

V>Ты смотрел описание механизма разветвления и схлопывания потоков при выполнении задач в этом гипотетическом Эльбрус-Б?

Где бы я его посмотрел?
V>Попахивает той самой "кооперативной многозадачностью на аппаратном уровне", когда ресурсы автоматом отдаются другим потокам, пока нынешний ожидает.
Поскольку никаких материалов в открытом доступе нет, попахивает распилом обыкновенным, классическим.
А то, что вы описываете, и называется "hyperthreading".
Уйдемте отсюда, Румата! У вас слишком богатые погреба.
Re[26]: Эльбрус мёртв, да здравствует Эльбрус-Б!
От: vdimas Россия  
Дата: 04.06.25 06:09
Оценка:
Здравствуйте, Sinclair, Вы писали:

S>А то, что вы описываете, и называется "hyperthreading".


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

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

В гипертрединге Интел поток всегда работает, он не может не работать. ))
Даже если просто сидит в режиме ожидания — нихера он не сидит, на деле, а крутится в цикле, как это делали любые допотопные одноядерные процы, только теперь многоядерные и многопоточные.
Сравни с гетерогенными ядрами Cell или гетерогенными ARM или видеокартейками, где активностью аппаратных потоков исполнения (ядер) можно именно управлять.

В общем, некие черты интеловского гипертрединга во всём этом есть, но на деле там разница шириной примерно в пропасть. ))
Отредактировано 04.06.2025 6:11 vdimas . Предыдущая версия .
Re[29]: Эльбрус мёртв, да здравствует Эльбрус-Б!
От: vdimas Россия  
Дата: 04.06.25 06:29
Оценка: :)
Здравствуйте, ·, Вы писали:

V>>·>Я это просил показать в lmax disruptor. Ты так и не смог.

V>>Самому поискать по ByteBuffer не судьба?
·>Поищи. Доложи о результатах. И извинись за враньё. Дальше разговор продолжать не вижу смысла. Ты полностью игнорируешь реальность.

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

А реальность мы обсуждали именно с тобой, что в отсутствии value type в джаве есть всего 2 способа борьбы с этим в случае необходимости хранения массивов данных — или массив представлен как нетипизированный набор байт и вся типизация происходит "в уме" по смещениям, или поля удерживаемого в голове якобы объекта хранятся по разным массивам, т.н. "вертикальное хранение данных". За давностью лет прошлого обсуждения я мог запамятовать, какой способ использован в Disruptor, но помнил, что видел ByteBuffer у них. В самой реализации унутре использован второй подход, ОК, т.е. кол-во круговых очередей более одной для multiple producer. Вот твоя реальность.

Не одно убожество, так второе, пусть даже в профиль (натурально в профиль), и?

И да, ты тоже нагнал там лажи, а я сходу не проверил — нельзя подставить произвольную свою очередь в систему.
А которая есть — она сделана на основе нетипизированного массива object[] в базовом классе, что простые long приходится хранить в обертке.
Впрочем, именно в примерах это хорошо показывается.

Про остальные мои тезисы возражения по-существу будут, или схватился как утопающий за эту соломинку? ))
Re[27]: Эльбрус мёртв, да здравствует Эльбрус-Б!
От: Sinclair Россия https://github.com/evilguest/
Дата: 04.06.25 08:48
Оценка:
Здравствуйте, vdimas, Вы писали:

V>Потоков два, а не десятки-сотни.

V>Потоки не могут аппаратно приостанавливаться и продолжаться по некоему условию/флагу, т.е. не могут синхронизироваться.
V>Потоки имеют независимые ОоО, чего не требуется при распараллеливании одного цикла по потокам, например (см реализацию в видеокартейках, где "ядром" называют распараллеливаемый код).
V>И т.д. до бесконечности.
Ну зато эти потоки могут активироваться бесплатно, т.к. весь необходимый контекст лежит прямо в регистрах. Как предполагается переключать сотни потоков? Иметь регистровый банк в несколько тысяч регистров, или восстанавливать все регистры из памяти? Ну, тогда переключение будет на порядок дороже гипертрединга.

V>В общем, ожидаемая схема

Непонятно, откуда взята "ожидаемая схема". В публично доступных источниках я видел только финансовый аспект этой схемы — и он-то как раз сомнений особо не вызывает.
Уйдемте отсюда, Румата! У вас слишком богатые погреба.
Re[30]: Эльбрус мёртв, да здравствует Эльбрус-Б!
От: · Великобритания  
Дата: 04.06.25 08:51
Оценка: +1 :)
Здравствуйте, vdimas, Вы писали:

V>·>Поищи. Доложи о результатах. И извинись за враньё. Дальше разговор продолжать не вижу смысла. Ты полностью игнорируешь реальность.

V>Посмотрел,
И где извинения?

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

Где? Ссылку в студию.
но это не зря, хотя, может быть, невзначай
гÅрмония мира не знает границ — сейчас мы будем пить чай
Re[31]: Эльбрус мёртв, да здравствует Эльбрус-Б!
От: vdimas Россия  
Дата: 05.06.25 09:31
Оценка:
Здравствуйте, ·, Вы писали:

V>>·>Поищи. Доложи о результатах. И извинись за враньё. Дальше разговор продолжать не вижу смысла. Ты полностью игнорируешь реальность.

V>>Посмотрел,
·>И где извинения?

А ты уже извинился за свои ошибки?


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

·>Где? Ссылку в студию.

Ссылку на Disruptor ты дал, см примеры там же.
Re[28]: Эльбрус мёртв, да здравствует Эльбрус-Б!
От: vdimas Россия  
Дата: 05.06.25 09:49
Оценка:
Здравствуйте, Sinclair, Вы писали:

S>Ну зато эти потоки могут активироваться бесплатно, т.к. весь необходимый контекст лежит прямо в регистрах.


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


S>Как предполагается переключать сотни потоков?


Дык, а как сейчас останавливают и запускают логические потоки? — программно.
Но я не вижу проблем перенести в железо львиную долю этой логики.
Понятно, что это невозможно сделать, не сломав обратную совместимость с легаси-архитектурами и даже с легаси-кодом...

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


S>Иметь регистровый банк в несколько тысяч регистров


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


S>или восстанавливать все регистры из памяти?


В случае переполнения ресурсов — а как же? ))


S>Ну, тогда переключение будет на порядок дороже гипертрединга.


Ну открой в страницах браузера многие десятки динамических 3D-визуализаций даже на самой современной видеокартейке — и начнутся запинания. ))
Никакие ресурсы не бесконечны, конечно.

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


V>>В общем, ожидаемая схема

S>Непонятно, откуда взята "ожидаемая схема". В публично доступных источниках я видел только финансовый аспект этой схемы — и он-то как раз сомнений особо не вызывает.

Я нащёлкал по ссылкам от ТС, страница, где показаны графы разветвления и слияния множества потоков.
И я уже видел не раз эти схемы ранее (не связанные конкретно с Эльбрус-Б) и почитывал обсуждения способов решения проблематики.

Они не изобретают чего-то нового — попытки реализации в железе (но совсем на другом уровне в прошлые десятилетия) уже были.

Они просто отбросили пресловутый "груз легаси" и пытаются на актуальных кол-вах транзисторов на кристалле воплотить с 0-ля сочетание нескольких уже обкатанных схем.

С Эльбрусом E2k та же история — абсолютно ничего нового не было изобретено, была реализация с 0-ля уже хорошо показавших себя подходов в сигнальных процах, просто довели эти подходы "до абсурда", до практически-достижимого максимума за счёт экстенсивного наращивания кол-ва АЛУ, наиболее мощного механизма спекулятивного исполнения на сегодня и механизма явной предзагрузки памяти (тоже в топах на сегодня, потягаться могут только Cell-процы в видеоприставках). Даже их способ ветвления в одной команде, когда исполняются две ветки, а в память записывается результат исполнения лишь одной по результату вычисления логического выражения — это тоже уже было до них в сигнальных процах. Просто они сделали это чуть качественней, бо сигнальные процы не могли позволить себе быть дорогими, а ЦП может!
Отредактировано 05.06.2025 10:02 vdimas . Предыдущая версия . Еще …
Отредактировано 05.06.2025 10:00 vdimas . Предыдущая версия .
Отредактировано 05.06.2025 9:59 vdimas . Предыдущая версия .
Отредактировано 05.06.2025 9:54 vdimas . Предыдущая версия .
Re[32]: Эльбрус мёртв, да здравствует Эльбрус-Б!
От: · Великобритания  
Дата: 05.06.25 10:18
Оценка: +2 -1 :)
Здравствуйте, vdimas, Вы писали:

V>>>·>Поищи. Доложи о результатах. И извинись за враньё. Дальше разговор продолжать не вижу смысла. Ты полностью игнорируешь реальность.

V>>>Посмотрел,
V>·>И где извинения?
V>А ты уже извинился за свои ошибки?
Всё что не соответсвует твоим фантазиям ты считаешь ошибкой. За твои фантазии извиняться должен ты.

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

V>·>Где? Ссылку в студию.
V>Ссылку на Disruptor ты дал, см примеры там же.
Если у тебя есть что показать, то показывай. Если собираешься мне отвечать без ссылок и конкретных кусков кода, то не трудись, я просто это проигнорирую.
но это не зря, хотя, может быть, невзначай
гÅрмония мира не знает границ — сейчас мы будем пить чай
Re[33]: Эльбрус мёртв, да здравствует Эльбрус-Б!
От: vdimas Россия  
Дата: 06.06.25 12:15
Оценка: -2
Здравствуйте, ·, Вы писали:

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

V>>·>Где? Ссылку в студию.
V>>Ссылку на Disruptor ты дал, см примеры там же.
·>Если у тебя есть что показать, то показывай. Если собираешься мне отвечать без ссылок и конкретных кусков кода, то не трудись, я просто это проигнорирую.

Отвечать мне надо тезисно или никак.

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

А пока от тебя нет никаких тезисов, а лишь пустопорожняя пена — идёшь меняешь себе пармерсы и в другой раз не влазишь в разговор взрослых дядек. ))
Re[29]: Эльбрус мёртв, да здравствует Эльбрус-Б!
От: netch80 Украина http://netch80.dreamwidth.org/
Дата: 13.06.25 03:18
Оценка:
Здравствуйте, vdimas, Вы писали:

S>>Как предполагается переключать сотни потоков?

V>Дык, а как сейчас останавливают и запускают логические потоки? — программно.
V>Но я не вижу проблем перенести в железо львиную долю этой логики.

Уже было в 80286. Почему-то к тем "таскам" возвращаться не хотят.

S>>Иметь регистровый банк в несколько тысяч регистров

V>А он де-факто уже есть даже в мейнстримовых архитектурах на уровне кеша 0-го уровня — в этом банке хранятся как "реальные" регистры, куда ОоО совершает отображение-переименование,

Там редко когда аппаратных регистров больше в 10 раз чем архитектурных.

V> так и таблицы разметки виртуальной памяти.


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

V> Просто требуется этот подход тоже довести до абсурда банально через экстенсивное увеличение размера кеша 0-го уровня и снабдив его огромной ассоциативной схемой отображения,


Как ты думаешь, почему L1 кэши памяти такие маленькие?

V>Я нащёлкал по ссылкам от ТС, страница, где показаны графы разветвления и слияния множества потоков.

V>И я уже видел не раз эти схемы ранее (не связанные конкретно с Эльбрус-Б) и почитывал обсуждения способов решения проблематики.
V>Они не изобретают чего-то нового — попытки реализации в железе (но совсем на другом уровне в прошлые десятилетия) уже были.

"Попытки", угу.

V>С Эльбрусом E2k та же история — абсолютно ничего нового не было изобретено, была реализация с 0-ля уже хорошо показавших себя подходов в сигнальных процах, просто довели эти подходы "до абсурда",


Кавычки явно лишние.
The God is real, unless declared integer.
Re: Эльбрус мёртв, да здравствует Эльбрус-Б!
От: Pzz Россия https://github.com/alexpevzner
Дата: 13.06.25 07:30
Оценка:
Здравствуйте, Sinclair, Вы писали:

S>3. Действительно ли есть способ в 30-200 раз эффективнее использовать транзисторы по сравнению с современными CISC и RISC архитектурами?


А что, Pentium 4 Prescott на частоте 3.8 GHz в 30-200 раз медленнее современных интеловских процессоров?
Re[2]: Эльбрус мёртв, да здравствует Эльбрус-Б!
От: Sinclair Россия https://github.com/evilguest/
Дата: 13.06.25 16:07
Оценка:
Здравствуйте, Pzz, Вы писали:

Pzz>А что, Pentium 4 Prescott на частоте 3.8 GHz в 30-200 раз медленнее современных интеловских процессоров?

Нет, раз в 10. А какое отношение этот вопрос имеет к топику?
Уйдемте отсюда, Румата! У вас слишком богатые погреба.
Re[3]: Эльбрус мёртв, да здравствует Эльбрус-Б!
От: Pzz Россия https://github.com/alexpevzner
Дата: 13.06.25 18:13
Оценка:
Здравствуйте, Sinclair, Вы писали:

Pzz>>А что, Pentium 4 Prescott на частоте 3.8 GHz в 30-200 раз медленнее современных интеловских процессоров?

S>Нет, раз в 10. А какое отношение этот вопрос имеет к топику?

Ну потому, что P4 — пример микросхемы, сделанной по технологии 90 nm.
Re[30]: Эльбрус мёртв, да здравствует Эльбрус-Б!
От: vdimas Россия  
Дата: 13.06.25 21:42
Оценка:
Здравствуйте, netch80, Вы писали:

S>>>Как предполагается переключать сотни потоков?

V>>Дык, а как сейчас останавливают и запускают логические потоки? — программно.
V>>Но я не вижу проблем перенести в железо львиную долю этой логики.
N>Уже было в 80286. Почему-то к тем "таскам" возвращаться не хотят.

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


S>>>Иметь регистровый банк в несколько тысяч регистров

V>>А он де-факто уже есть даже в мейнстримовых архитектурах на уровне кеша 0-го уровня — в этом банке хранятся как "реальные" регистры, куда ОоО совершает отображение-переименование,
N>Там редко когда аппаратных регистров больше в 10 раз чем архитектурных.

А и не будет больше это отношение.
И там не в 10 раз, а поменьше, вроде.
Просто будет больше самих наборов регистров, т.к. будет больше аппаратных потоков.


V>> так и таблицы разметки виртуальной памяти.

N>Кэш совсем не резиновый, а тегирование через PCID эффективно работает максимум на 1 процесс назад. По сути от того идентификатора остаётся только упрощение для ОС.

Это схема показала себя де-факто плохой.
Переключение контекстов дорого в основном из-за "разогрева" таблиц виртуальной памяти.
НизачОт современному мейнстриму, кароч. ))

И да, много потоков в одном процессе — это не то же самое, что много независимых процессов, т.е. потоки одного процесса шарят контекст исполнения.


V>> Просто требуется этот подход тоже довести до абсурда банально через экстенсивное увеличение размера кеша 0-го уровня и снабдив его огромной ассоциативной схемой отображения,

N>Как ты думаешь, почему L1 кэши памяти такие маленькие?

Потому что сложная ассоциативная схема отображения на память — ведь отображение происходит на произвольную память.

А для L0 эта схема очень простая — каждый поток имеет свой участок в кеше L0, т.е. "отображение" с большой вероятностью будет заключаться в старших битах адреса обращения к этому кешу, где значения этих бит константны для каждого потока. Динамическое отображение потребуется только для OoO и спекулятивного исполнения. И то... Возможно будет "дешевле" просто взять статической памяти с запасом, чем наверчивать динамическое аппаратное распределение этой памяти. ))


V>>И я уже видел не раз эти схемы ранее (не связанные конкретно с Эльбрус-Б) и почитывал обсуждения способов решения проблематики.

V>>Они не изобретают чего-то нового — попытки реализации в железе (но совсем на другом уровне в прошлые десятилетия) уже были.
N>"Попытки", угу.

Ну так и векторные процессоры были уже в 70-е, но выстрелили только в конце 90-х в первых 3D-видюхах, когда кол-во АЛУ взяли на порядок больше.
Т.е., количество иногда переходит совсем в новое качество. ))


V>>С Эльбрусом E2k та же история — абсолютно ничего нового не было изобретено, была реализация с 0-ля уже хорошо показавших себя подходов в сигнальных процах, просто довели эти подходы "до абсурда",

N>Кавычки явно лишние.

))

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