169 похожих чатов

И еще вопрос Вы принимаете необходимость выравнивания данных как факт? Т.е.

тут никто не понимает как это на hardware уровне это работает и почему процессору физически надо работать с выровненными адресами?

23 ответов

2 просмотра

Потому что при невыравненных адресах требуется два обращения к памяти

Dmitry-Croft Автор вопроса
Aleksandr
Потому что при невыравненных адресах требуется два...

Это я тоже читал. Но я не понимаю почему нельзя было сделать процессор который это за раз делал бы с любыми адресами

Dmitry-Croft Автор вопроса
YVEF
Возможно интеловский мануал поможет

Возможно. Я просто уже много чего гуглил и тыкал, но так и не найду то, что откроет мне глаза

Dmitry Croft
Возможно. Я просто уже много чего гуглил и тыкал, ...

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

Dmitry-Croft Автор вопроса
Алексей Шведов
Не байт, а X байт (в зависимости от размера данных...

Грубо говоря, выравнивание нужно из-за особенностей работы кеша?

Dmitry-Croft Автор вопроса
Алексей Шведов
Не байт, а X байт (в зависимости от размера данных...

Покурил эту информацию Всё равно не понятно почему без выравнивания процессор будет неэфективно читать память. Допустим у нас есть массив 32 байта. Мы его положили по адресу 1. Когда обращаемся к адресу 4, то все 32 байта последовательно выгружаются в кэш начиная с адреса 4. Ну и всё Зачем выравнивать и ложить этот массив по адресу 0,32,64 и т.п. если и в теории и без выравнивания всё должно работать быстро?

Dmitry Croft
Покурил эту информацию Всё равно не понятно почем...

"положить по адресу 4" Это разве не выровнять на 32?

Dmitry-Croft Автор вопроса
Алексей Шведов
"положить по адресу 4" Это разве не выровнять на 3...

Че то я теперь запутался. Я думал надо ложить по адресу, кратному размеру

Dmitry-Croft Автор вопроса
Алексей Шведов
"положить по адресу 4" Это разве не выровнять на 3...

Напутал, всё, Читается же по 32 бита а это 4 байта

Dmitry Croft
Покурил эту информацию Всё равно не понятно почем...

И в твоём примере: массив 32 байт при выравнивании на 1 байт ничего не даст процессору. Адрес начала будет выравнен на 1 байт, из-за чего процессору придётся *брать первую часть, вторую, отбрасывать ненужное* что неэффективно: 0xFFFF01 (выравнивание на 1) 0xFFFF04 (выравнивание на 4)

Dmitry Croft
Покурил эту информацию Всё равно не понятно почем...

Это ведь не просто так все. Если читать блоком по 32 бита тол ко выровненными кусками то нижние биты адреса ==0 и их можно не передавать, заметно упрощая дизайн и количесвто сигнальных линий и всяких дорожек на схемах

Agent
Это ведь не просто так все. Если читать блоком по ...

Чего-чего? Количество сигнальных линий и дорожек на схемах?

Алексей Шведов
Чего-чего? Количество сигнальных линий и дорожек н...

Ну да, я в древние времена 8086 для упрощения дизайна нижние биты адресных дорожек между процессором и памятью не передавались соответственно и дорожек не было и всё было проще делать, но при этом естественно процессор работать читать только по 2 байта или по четыре не помню как

Agent
Это ведь не просто так все. Если читать блоком по ...

представь ситуацию комманда fidiv это 2 байта DA35 вот невыровнен код, DA попала в страницу кэша а 35 не попала как проц поймет что ему прилетело вот и будет еще раз перегружать например

Den Fomin
представь ситуацию комманда fidiv это 2 байта DA35...

Поймёт поймёт вот там есть много-много серьезный логики которая контролирует чтобы данные в кэш были когерентными, если надо загрузить два раза Он загрузит 2 раза а потом выберет нужны байты и занесет в регистр Ну а команда всё это время будет ждать

Agent
Поймёт поймёт вот там есть много-много серьезный л...

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

Алексей Шведов
Ничего подобного. Ждать будут только зависимые ком...

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

Алексей Шведов
Будут-будут. Это вы в 8086 застряли

Я сейчас не обсуждаю спекулятивное выполнение конвейеризацию и выполнение вне очереди. Если процессоры нужно считать байты по невыровненному адресу или через границы кэшлиний - будет произведено 2 считывания из кэша или из памяти потом в специальных буферах данные объединяются И выбираются только Те байты которые изначально были нужны и дальше уже посылаются на выполнение как данные или как код

Agent
Я сейчас не обсуждаю спекулятивное выполнение конв...

Выравнивание по 4 байта, а не 2. Потом он вернёт 3, если адрес не выравнен. Данные не обьединяются, а отбрасываются ненужные биты, и потом возвращаются

Agent
Это ведь не просто так все. Если читать блоком по ...

Двачую, даже по структуре разных служебных битовых полей видно, что младшие биты адресов выровненных блоков отбрасываются. Те же 12 бит в каталогах страниц, 6 бит в тегах кэш линий и.т.п. А каждый бит, это несколько транзисторов, так что выравнивание полезное дело: выровнял блок - спас транзистор))

Похожие вопросы

Обсуждают сегодня

читать файл максимально быстро? странный вопрос))
zamtmn
53
тоесть, указав return eax, сгенерируется никому ненужная инструкция mov eax,eax ?
Aiwan \ (•◡•) / _bot
24
Компания Elif ищет менеджера проектов, который будет заниматься поиском и ведением новых проектов. Прежде чем приступить к работе, вам нужно пройти наш недельный курс, где вы ...
Elif
1
Святости? Когда дотумкаешь что открытое лучше закрытого - кастани
zamtmn
9
я имею в виду официально интегрированный в телегу? в том плане что не сливает переписку с пользователем?
Andrey
9
а зачем этот вопрос для удаления из чата?
Mёdkinson Medvezhkin
63
А чего сейчас в моде вместо Error для эксепшенов? А то я тут внезапно узрел что он не рекомендуется :) У Try::Tiny какой-то совершенно ужасный синтаксис если надо конкретные э...
Denis F
19
Кто-нибудь решал проблему с автоматическим скроллингом к выбранной ячейке в TDBGrid в Lazarus? Проблема в том, что есть допустим 3 столбца, третий столбец виден наполовину, вк...
Дмитрий Логинов
1
Приветствуем всех! Устали без проектов? Если вы программист и хотите получать стабильные заказы, компания Elif предлагает вам недельный курс по поиску проектов и их ведению. ...
Elif
1
ты вот так хотел? а пурджить arg бесполезно это не макрос, вот рестроить arg смысл есть, но в конце области видимости, а не перед началом новой области видимости.
ProMiNick
7
Карта сайта