Re[9]: Эльбрус мёртв, да здравствует Эльбрус-Б!
От: vdimas Россия  
Дата: 20.05.25 20:23
Оценка:
Здравствуйте, Sinclair, Вы писали:

V>>Гипертрединг 2x в Интел потребовал всего лишь ~12% увеличение кол-ва логических вентилей, если склероз не изменяет.

V>>У Sun для 4x гипертрединга что-то менее 18% увеличения кол-ва вентилей вышло (у них лучше кодировка инструкций, компиляторы порождают более простой код)
S>Гипертрединг не добавляет мощности.

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

И да, ядра с гипертредингом имеют чуть большее кол-во выч.блоков в АЛУ, но небольшое увеличение для 2x и затем еще меньшее увеличения от этого до 4x показывает эффект от аппаратной реализации СМО.


S>Чтобы объехать Интел, нужно а) добавить FMA-блоков и б) обеспечить, чтобы они не простаивали в ожидании памяти.


Ес-но.
Вот как раз в Эльбрусе этих блоков больше, потому что идёт упор на спекулятивное исполнение, а не на ОоО, т.е. конкурирующие результаты вычислений часто отбрасываются.


V>>Основная проблема многоядерников — это когерентность памяти.

S>Смотря на каких задачах.

На обычных многопоточных, даже независимых по данным.
Эту независимость приходится организовывать физически разметкой лейаута.
Вот у тебя есть некий объект, в нём работает пара потоков, их локальные данные необходимо разносить по линейкам кеша.
В мейнстримовых языках пока мало "подсказок" компилятору насчёт этого, приходится размечать память вручную.

И еще бы заранее знать на каких процах оно будет исполняться, т.е. размер линейки кеша... ))


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

S>И каким чудом можно эти танцы с бубном переложить на компилятор+железо?

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

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


S>И даст ли это переложение хотя бы 30-кратный рост производительности, не говоря уже о 200?


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

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

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


V>>Для этого надо взглянуть на спецификации языка Эль-22, который обещает некий "полный параллелизм".

S>Я об этом уже написал.

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

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


V>>Рискну предположить, что увидим нечто подобное. ))

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

Да нет, они в макетах всё неплохо демонстрировали.
Умудрились же в самую эпоху развала создать нехилую архитектуру E2k, которая была натурально революционной по меркам второй половины 90-х...
А что не сумели воплотить в актуальном техпроцессе — это не к разработчикам проца вопросы, а к технологиям страны в целом, конечно, и к банальным вложениям денег.

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

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

Будь тогда возможность воплотить в железе на актуальном техпроцессе в начале нулевых — все бы офигели, конечно... ))
Отредактировано 20.05.2025 21:10 vdimas . Предыдущая версия . Еще …
Отредактировано 20.05.2025 21:01 vdimas . Предыдущая версия .
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.