Re[4]: Кто и зачем придумал алигн?
От: Евгений Музыченко Франция https://software.muzychenko.net/ru
Дата: 17.01.23 11:06
Оценка:
Здравствуйте, LaptevVV, Вы писали:

ЕМ>>Там был отдельный геморрой со сборкой/разборкой слов.


LVV>Возможно, и поэтому тоже размер слова в БЭСМ-6 был 48 бит.


Наоборот: размер слова был 48 бит, и поэтому был геморрой со сборкой/разборкой байтов.
Re[7]: Кто и зачем придумал алигн?
От: Евгений Музыченко Франция https://software.muzychenko.net/ru
Дата: 17.01.23 11:08
Оценка: +1
Здравствуйте, pagid_, Вы писали:

_>Там же наверно команда была размером в слово?


В полслова — две команды в слове.
Re[4]: Кто и зачем придумал алигн?
От: B0FEE664  
Дата: 17.01.23 12:24
Оценка:
Спасибо, Евгений Музыченко, Вы писали:

ЕМ>Один цикл может быть выполнен только в пределах разрядности магистрали (машинного слова — нынче это 64 бита, 8 байтов). Прочитать/записать один или несколько байтов за один цикл можно только в пределах одного слова. Для операций с байтами, находящимися в разных словах, нужно выполнять разные циклы.

Правильно ли я понимаю, что для описанной архитектуры:
1) за один цикл можно прочитать 8 идущих подряд байтов с любого адреса?
2) операции чтения/записи как-то связаны с атомарностью?

BFE>>и почему атомарность важнее выравнивания?

ЕМ>Без атомарности невозможна многопроцессорная работа,

Тогда у меня возникает такой вопрос: почему выравнивание важно для всех типов, а не только для std::atomic ?
И каждый день — без права на ошибку...
Re[5]: Кто и зачем придумал алигн?
От: Евгений Музыченко Франция https://software.muzychenko.net/ru
Дата: 17.01.23 12:57
Оценка:
Здравствуйте, B0FEE664, Вы писали:

BFE>за один цикл можно прочитать 8 идущих подряд байтов с любого адреса?


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

BFE>операции чтения/записи как-то связаны с атомарностью?


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

BFE>почему выравнивание важно для всех типов, а не только для std::atomic ?


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

Ну и std::atomic — недавнее изобретение, а требования по выравниванию были еще в самых первых версиях языка.
Re[7]: Кто и зачем придумал алигн?
От: LaptevVV Россия  
Дата: 17.01.23 12:58
Оценка:
LVV>>И поэтому ТОЖЕ...
_>А второе это удачно впихнуть в слово команду ЦП с задуманными методами адресации и предполагаемыми объемами памяти. Там же наверно команда была размером в слово?
Нет.
Машина была одноадресная с сумматором.
В слово помещалось 2 команды по 24 бита.
Хочешь быть счастливым — будь им!
Без булдырабыз!!!
Re[5]: Кто и зачем придумал алигн?
От: LaptevVV Россия  
Дата: 17.01.23 13:00
Оценка:
ЕМ>>>Там был отдельный геморрой со сборкой/разборкой слов.
LVV>>Возможно, и поэтому тоже размер слова в БЭСМ-6 был 48 бит.
ЕМ>Наоборот: размер слова был 48 бит, и поэтому был геморрой со сборкой/разборкой байтов.
48 — ХОРОШЕЕ число.
Это тебе не 45 бит в машинах типа М-20 или 37 в Минске-22...
Хочешь быть счастливым — будь им!
Без булдырабыз!!!
Re[6]: Кто и зачем придумал алигн?
От: Евгений Музыченко Франция https://software.muzychenko.net/ru
Дата: 17.01.23 13:13
Оценка:
Здравствуйте, LaptevVV, Вы писали:

LVV>48 — ХОРОШЕЕ число.


Исключительно в определенных условиях.

LVV>Это тебе не 45 бит в машинах типа М-20 или 37 в Минске-22...


45 с его пятью 9-разрядными полноценными символами — это еще ничего, а вот 37 разрядов в Минске-2, с шестью символами в 6-разрядной телеграфной регистровой кодировке — это куда печальнее.
Re[8]: Кто и зачем придумал алигн?
От: pagid_ Россия  
Дата: 17.01.23 13:29
Оценка:
Здравствуйте, LaptevVV, Вы писали:

LVV>Нет.

Да.
LVV>Машина была одноадресная с сумматором.
LVV>В слово помещалось 2 команды по 24 бита.
Вот и замечательно. Но это ничего не меняет в написанном мною.
Re[4]: Кто и зачем придумал алигн?
От: kov_serg Россия  
Дата: 17.01.23 13:38
Оценка:
Здравствуйте, Евгений Музыченко, Вы писали:


ЕМ>Доступ к памяти выполняется циклами — подготовка операции, собственно операция, завершение операции. Один цикл может быть выполнен только в пределах разрядности магистрали (машинного слова — нынче это 64 бита, 8 байтов). Прочитать/записать один или несколько байтов за один цикл можно только в пределах одного слова. Для операций с байтами, находящимися в разных словах, нужно выполнять разные циклы.

Там еще веселее оно читает в кэш процессора длинна лини 64байта. Если попадаете на стык получаете вИселье.

BFE>>и почему атомарность важнее выравнивания?

Для не выровненных данных атомарность слишком дорого и долго.
Computer Architecture

ЕМ>Без атомарности невозможна многопроцессорная работа, а выравнивание создает проблемы лишь тем программистам, которые неудачно выбрали язык. В языках, не требующих связи с низким уровнем, программисту вообще не видны эти особенности.
Re[4]: Кто и зачем придумал алигн?
От: Философ Ад http://vk.com/id10256428
Дата: 17.01.23 13:52
Оценка:
Здравствуйте, пффф, Вы писали:

int x = *(int*)(bytes+n)
П>Я хз как сишечка, думаю, аналогично, но вообще C++ такое запрещает. Это UB. Надо нужную область копировать в заранее объявленный int, и вот уже после этого с ним можно работать

Почему запрещает? Почему тут UB? Где об этом прочитать?
Всё сказанное выше — личное мнение, если не указано обратное.
Re[6]: Кто и зачем придумал алигн?
От: B0FEE664  
Дата: 17.01.23 13:59
Оценка:
Здравствуйте, Евгений Музыченко, Вы писали:

BFE>>за один цикл можно прочитать 8 идущих подряд байтов с любого адреса?

ЕМ>Нет. На шине адреса выставляется только адрес слова, без младших разрядов. На магистраль попадают только байты, лежащие в пределах данного машинного слова.
Тогда мне не понятно о каких 64-х битах идёт речь, если последние 3 бита всегда 0.
фактически битов 61?
или же общее адресное пространство от 0 до 2^(64+3) ?
Или же это костыль для защиты от перекрывающихся машинных слов?

BFE>>операции чтения/записи как-то связаны с атомарностью?

ЕМ>Связаны тем, что каждый цикл шины сам по себе атомарен, другие процессоры не могут в него вмешаться. А между двумя последовательными циклами одного процессора могут влезть циклы других.
Правильно ли я понимаю, что все операции синхронизации завязаны на частоту шины магистрали и не существует никаких специальных механизмов синхронизации на уровне архитектуры?
И каждый день — без права на ошибку...
Re[7]: Кто и зачем придумал алигн?
От: Евгений Музыченко Франция https://software.muzychenko.net/ru
Дата: 17.01.23 14:20
Оценка: 4 (1)
Здравствуйте, B0FEE664, Вы писали:

BFE>фактически битов 61?


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

BFE>Или же это костыль для защиты от перекрывающихся машинных слов?


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

BFE>Правильно ли я понимаю, что все операции синхронизации завязаны на частоту шины магистрали и не существует никаких специальных механизмов синхронизации на уровне архитектуры?


В большинстве современных процессоров, работающих с памятью через контроллер, это так. Когда-то, в эпоху медленной памяти, операции были асинхронными.
Re[2]: Кто и зачем придумал алигн?
От: netch80 Украина http://netch80.dreamwidth.org/
Дата: 17.01.23 16:37
Оценка:
Здравствуйте, koenjihyakkei, Вы писали:

K>Здравствуйте, Sm0ke, Вы писали:


K>Его не придумывали он сам пришел. Попробуйте придумать архитектуру процессора с бесплатным и атомарным доступом к невыровненной памяти.


Во-первых, насчёт атомарного невыровненного не говорили.
Во-вторых, бесплатного доступа не бывает в принципе. А вот на неатомарном две операции вместо одной это реально небольшое изменение. Хотя да, в ряде случаев гиморное (ну-тко через кэш прогоните две операции MESI-протокола на соседние строки).
The God is real, unless declared integer.
Re[7]: Кто и зачем придумал алигн?
От: netch80 Украина http://netch80.dreamwidth.org/
Дата: 17.01.23 16:38
Оценка:
Здравствуйте, Евгений Музыченко, Вы писали:

ЕМ>Здравствуйте, LaptevVV, Вы писали:


LVV>>48 — ХОРОШЕЕ число.


ЕМ>Исключительно в определенных условиях.


LVV>>Это тебе не 45 бит в машинах типа М-20 или 37 в Минске-22...


ЕМ>45 с его пятью 9-разрядными полноценными символами — это еще ничего, а вот 37 разрядов в Минске-2, с шестью символами в 6-разрядной телеграфной регистровой кодировке — это куда печальнее.


Это если те 45 делали как 5*9, в стиле "Альфа". А если 6*7+остаток, как раньше, то грустнее.
The God is real, unless declared integer.
Re[5]: Кто и зачем придумал алигн?
От: netch80 Украина http://netch80.dreamwidth.org/
Дата: 17.01.23 16:42
Оценка:
Здравствуйте, Философ, Вы писали:

Ф>Здравствуйте, пффф, Вы писали:


Ф>int x = *(int*)(bytes+n)

П>>Я хз как сишечка, думаю, аналогично, но вообще C++ такое запрещает. Это UB. Надо нужную область копировать в заранее объявленный int, и вот уже после этого с ним можно работать

Ф>Почему запрещает? Почему тут UB? Где об этом прочитать?


Например https://blog.regehr.org/archives/959
и дальше по ключевым словам.
The God is real, unless declared integer.
Re[5]: Кто и зачем придумал алигн?
От: netch80 Украина http://netch80.dreamwidth.org/
Дата: 17.01.23 16:44
Оценка:
Здравствуйте, kov_serg, Вы писали:

_>Там еще веселее оно читает в кэш процессора длинна лини 64байта. Если попадаете на стык получаете вИселье.


Ну есть и некэшируемые области памяти. Там как раз рабочий метод — то, что описывает Евгений.
Вроде в большинстве x86 такое проблемно назначать на основную память, но за всех не распишусь.
The God is real, unless declared integer.
Re[4]: Кто и зачем придумал алигн?
От: netch80 Украина http://netch80.dreamwidth.org/
Дата: 17.01.23 16:48
Оценка:
Здравствуйте, LaptevVV, Вы писали:

LVV>>>В советских машинах никаких байтов не было.

ЕМ>>Там был отдельный геморрой со сборкой/разборкой слов.
LVV>Да. Возможно, и поэтому тоже размер слова в БЭСМ-6 был 48 бит.

https://habr.com/ru/post/690554/

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


Для gcc @ PDP-10, например, 1 char будет 9 бит.

The God is real, unless declared integer.
Re[3]: Кто и зачем придумал алигн?
От: netch80 Украина http://netch80.dreamwidth.org/
Дата: 17.01.23 16:50
Оценка:
Здравствуйте, so5team, Вы писали:

S>Здравствуйте, Pzz, Вы писали:


Pzz>>Да Си — это вообще сплошное издевательство над программистом. А C++ добавляет к этому жестокое, негуманное обращение с животными и преступления против человечности.


S>Мне всегда казалось, что с помощью C++ вы себе случайно отстрелили палец, отсюда и любовь к этому языку. Но, такое ощущение, что отстрелили вовсе и не палец.


Если в сообщении Pzz я чувствую 100% сарказма, то в вашем он слишком глубоко скрыт.
The God is real, unless declared integer.
Re[4]: Кто и зачем придумал алигн?
От: so5team https://stiffstream.com
Дата: 17.01.23 17:15
Оценка:
Здравствуйте, netch80, Вы писали:

N>Если в сообщении Pzz я чувствую 100% сарказма, то в вашем он слишком глубоко скрыт.


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