OSDev
http://osdev.su/

Выравнивание и кэш
http://osdev.su/viewtopic.php?f=5&t=1073
Страница 1 из 3

Автор:  Freeman [ 04 апр 2015, 13:54 ]
Заголовок сообщения:  Выравнивание и кэш

Зачем выравнивают поля структур, в целом понятно. Вопрос лишь в том, насколько выгодно выравнивание на большие значения (8 байт в Delphi), если не предполагается использование SIMD. Ведь в этом случае размер структур и классов также вырастает, и их меньше поместится в кэш. Нет ли тут противоречия?

Автор:  pavia [ 04 апр 2015, 14:56 ]
Заголовок сообщения:  Re: Выравнивание и кэш

Не вижу смысла в выравнивание. Разве что в компиляторе можно оптимизатор сделать проще. Обрабатывать все по 4 байта. И то это сомнительно.
Да в кэше будет меньше. Но я думаю на это никто не смотрит. Мы бы до сих пор писали бы на ассемблере и оптимизировали всё до байта как во времена спектрума. Сейчас вычислительных мощностей много. И для простой операции сложить элементы в массиве городим до 10 классов. Конечно оптимизаций занимаются, но редко. А если нужно то структуру модно упаковать. Или массив использовать.

Думаю в дельфи выравнивание связано со стеком. Что-бы структуры можно было проще и быстрее через стек перетаскивать.

Автор:  dragon [ 04 апр 2015, 17:10 ]
Заголовок сообщения:  Re: Выравнивание и кэш

В чём вопрос то: "нужно ли выравнивание вообще?", или "чем 8 байт лучше 4х?", или что?

Автор:  Freeman [ 04 апр 2015, 17:58 ]
Заголовок сообщения:  Re: Выравнивание и кэш

dragon писал(а):
"чем 8 байт лучше 4х?", или что?

Да, чем 8 лучше 4, если нет SIMD?

Автор:  dragon [ 04 апр 2015, 18:27 ]
Заголовок сообщения:  Re: Выравнивание и кэш

64 бит может быть? или особенность реализации user-level менеджера кучи. или особенность работы с современной памятью. Если ничего из этого, то на первый взгляд ничем не лучше.
Выравнивание чего, кстати? полей в структурах или выделяемых в куче блоков?

Автор:  Freeman [ 04 апр 2015, 19:46 ]
Заголовок сообщения:  Re: Выравнивание и кэш

dragon писал(а):
64 бит может быть? или особенность реализации user-level менеджера кучи. или особенность работы с современной памятью.

Да вот, мне бы хотелось услышать аргументированное объяснение. Выравнивание на 8 байт вроде в Delphi 6 появилось, до этого максимум было на 4. При этом библиотечные функции нигде SIMD не используют, и в кодогенераторе никаких MMX и SSE нет. Речь про выравнивание, задаваемой директивой {$A8} или в настройках проекта.

В сишных компиляторах как? У них вроде и оптимизация получше, и векторизация есть, поэтому выравнивание имеет практический смысл.

Для меня вопрос пока теоретический, но когда доберусь до собственной кодогенерации, станет практическим. Пока же просто не идет из головы, не могу понять логику Borland.

Автор:  pavia [ 04 апр 2015, 20:30 ]
Заголовок сообщения:  Re: Выравнивание и кэш

Думаю логика проста когда-то скопировали из другого проекта так и осталось. А кто зачем как в том анекдоте про странный рецепт мяса в горшочке.

Автор:  Freeman [ 05 апр 2015, 01:01 ]
Заголовок сообщения:  Re: Выравнивание и кэш

pavia писал(а):
Думаю логика проста когда-то скопировали из другого проекта так и осталось.

Из какого еще проекта? 1 апреля уже прошло.

Автор:  Freeman [ 09 апр 2015, 16:50 ]
Заголовок сообщения:  Re: Выравнивание и кэш

Ну вот, в кои веки решил что-то спросить, а ответа не получил. Сишные компиляторы на сколько выравнивают?

Автор:  iz56 [ 09 апр 2015, 21:39 ]
Заголовок сообщения:  Re: Выравнивание и кэш

линейка кэш ,например 32 байта, структура ,например 28 байт, если не выровнено на 32 - вся структура не попадает в линию. Структура - данные или код.
На сколько выравнивают - руками смотреть надо. В хередакторе .

Страница 1 из 3 Часовой пояс: UTC + 3 часа
Powered by phpBB® Forum Software © phpBB Group
http://www.phpbb.com/