Здравствуйте, vdimas, Вы писали:
V>И да, ядра с гипертредингом имеют чуть большее кол-во выч.блоков в АЛУ, но небольшое увеличение для 2x и затем еще меньшее увеличения от этого до 4x показывает эффект от аппаратной реализации СМО.
Там нет никаких 2х и 4х. Иначе бы никто не называл это "гипертредингом" и не было бы понятия "честные ядра".
V>Вот как раз в Эльбрусе этих блоков больше, потому что идёт упор на спекулятивное исполнение, а не на ОоО, т.е. конкурирующие результаты вычислений часто отбрасываются.
Как мы в прошлый раз выяснили, в Эльбрусе этих блоков меньше. Независимо от наличия или отсутствия упоров.
V>На обычных многопоточных, даже независимых по данным.
На "обычных многопоточных" данные и так не пересекаются, безо всяких усилий по разметке. Например, при перемножении матриц каждый из потоков работает со своим сегментом матрицы.
При сортировке слиянием каждый из потоков сортирует свой сегмент. И так далее.
Чтобы когерентность начала как-то сильно мешать, надо специально писать многопоточный код так, чтобы потоки наступали друг другу на пятки.
V>Вот у тебя есть некий объект, в нём работает пара потоков, их локальные данные необходимо разносить по линейкам кеша.
V>В мейнстримовых языках пока мало "подсказок" компилятору насчёт этого, приходится размечать память вручную.
Это, КМК, очень специальный случай.
V>И еще бы заранее знать на каких процах оно будет исполняться, т.е. размер линейки кеша... ))
Или учитывать это при джите
V>Размечать блоки данных, которые локальные для некоего потока, т.е. чтобы была возможность разметить несколько таких блоков в лейауте объекта.
V>Дальнейшая автоматизация в компиляторе, потом на реальном железе на уровне загрузчика ОС со стандартной коррекцией адресов в процессе загрузки.
Было бы интересно посмотреть на пример кода, в котором нужно делать рукопашный лейаут, с бенчмарком "тупого" случая по сравнению с "умным".
Ну, и идеи по поводу того, как могла бы выглядеть такая разметка.
V>Да, языки необходимо допиливать, но это надо было начинать делать еще в нулевые, когда многоядерность пошла в мейнстрим десктопа.
Ну так начать-то никогда не поздно. Напилить язык сейчас — дело невыносимо лёгкое. Добавить разметку в какой-нибудь clang, да привинтить поддержку этих метаданных в llvm.
V>Разнесение локальных данных на некоторых алгоритмах даёт до 3-10 раз, кстате, зависит от соотношения стоимости полезных вычислений и стоимости обеспечения когерентности.
Возможно, выбор более удачной структуры данных даст ускорение в 3-10 раз и без ручной подгонки линеек кеша.
V>>>Для этого надо взглянуть на спецификации языка Эль-22, который обещает некий "полный параллелизм".
S>>Я об этом уже написал.
V>Ты написал лишь два базовых вида
Я написал не про два разных вида, а про то, что надо посмотреть на Эль-22.
V>Да нет, они в макетах всё неплохо демонстрировали.
Макеты Эльбрус-Б? Да ладно!