Size: a a a

2021 November 18

SZ

Sergey Z in rannts
Кирилл и Антон, а можно для маленьких, что за выравнивание? Я, к счастью, слишком молод
источник

БС

Байт Словович... in rannts
Смотри память в интеллвских процах (в армах не таки такой проблемы тупо нет), это непрерывный массив из байтов. Ты хочешь хранить четырех байтное число. Оно может лечь условно по адресу 100, а может по адресу 101 или 102. Так вот, раньше ты получал пенальти (официальный термин из документации) за то, что пытаешься прочитать 4 байтное число по адресу 102. То есть его чтение было медленее на 30% , чем по адресу 100.
источник

БС

Байт Словович... in rannts
Поэтому программисты которые про это знали, хорошо продумывали как писать структуры в плюсах.
Производительность кода со структурами вида

int8 a;
Int64 b;

И

int64 b;
Int8 a;
 Было существенно разным
источник

KK

Kirill (Cykooz) Kuzm... in rannts
Про ARM не совсем верно. Такого там нет в относительно новых ARM, особенно которые x64.
А вот до версии 5 там было ещё более жёстко, там не пенальти, там в принципе нельзя было читать не выровненные данные
источник

KK

Kirill (Cykooz) Kuzm... in rannts
В интелах это вроде связанно с кешами проца, хотя может и ошибаюсь.
источник

БС

Байт Словович... in rannts
Потом пришлось ещё выравнивать структуры под размер кешлинии. Это минимальная порция байтиков которые читаются в l1 кеш. То есть ты хочешь прочитать число по адресу 112, а копируются из оперативки все байты с 100 по 132. а это чтение ооочень медленное. Порядка 100 тактов. Но если ты работаешь с массивами длинными, процесор в бэкграунде может загрузить кешлинию до того как ты захочешь прочитать данные из нее
источник

БС

Байт Словович... in rannts
Именно там нельзя читать не выровненные данные. Я удивлюсь, если сейчас можно лелать
источник

KK

Kirill (Cykooz) Kuzm... in rannts
Ну вот пишут что в новых ARM уже можно читать не выровненые.
источник

БС

Байт Словович... in rannts
Ну и зря так сделали...
источник

KK

Kirill (Cykooz) Kuzm... in rannts
Зато можно сразу читать байтики из любого места, а не городить забор, что бы прочитать 3 байта не выровненые.
источник

БС

Байт Словович... in rannts
Интел это набор легаси костылей с 80ых годов. Нафиг это в современные процы вносить. -- не понимаю
источник

БС

Байт Словович... in rannts
За тебя это сделает легко компилятор
источник

KK

Kirill (Cykooz) Kuzm... in rannts
Может просто современная память и широкие шины адреса уже позволяют обходится без выравнивания. Раньше видимо экономили пару битов в шине адреса, поэтому и надо было выравнивать. А если хотелось не выровненное - то приходилось в общем случае делать два чтения из памяти.
источник

БС

Байт Словович... in rannts
Так в интеле такая же экономия внутри. Это уже на фроненде два слова превращались в одно
источник

KK

Kirill (Cykooz) Kuzm... in rannts
Что то я не понял. Ты вроде бы выше "ругал" новые ARM, за то что они сделал чтение без выравнивания (и без пенальти).
источник

БС

Байт Словович... in rannts
Угу, нафиг на ненужную фичу тратить золотые транзисторы. Интелу для совместимости надо, а в арм зачем добавлять этот функционал, который компилятор прекрасно обеспечит?
источник

KK

Kirill (Cykooz) Kuzm... in rannts
Ну видимо выходило так, что одно не выровненное чтение было быстрее двух выровненных. Там дело ведь только за 2-умя битами в шине адреса. По сравнению с остальными 62 это уже не так много.
источник

KK

Kirill (Cykooz) Kuzm... in rannts
Хотя думаю что там и так не все 64 используются для обращения к памяти.
источник

S

Shieldy in rannts
Привет, @sidukov_roman,  у нас принято представляться и кратко рассказывать о себе с тэгом #whois.

Cпасибо за внимание!

Вакансии размещаем тут: http://t.me/jobsit52/2
источник

SB

Sergey Belash in rannts
О, блин, без оповещения о новом участнике выглядит крипово
источник