Что происходит с невыровненным MOVSD на разных процессорах? - PullRequest
3 голосов
/ 03 марта 2012

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

1 Ответ

4 голосов
/ 03 марта 2012

Из тома 1 спецификации Intel, раздел 4.1

4.1.1. Выравнивание слов, двойных слов, четырехсловных слов и двойных четырехсловых слов

Слова, двойные слова и четырехсловные слова не имеютнужно выровнять в памяти по естественным границам.Естественные границы для слов, двойных слов и четырех слов - это четные адреса, адреса, равномерно делимые на четыре, и адреса, равномерно делимые на восемь соответственно.Однако для повышения производительности программ структуры данных (особенно стеки) должны быть выровнены по естественным границам, когда это возможно.Причина этого заключается в том, что процессору требуется два доступа к памяти, чтобы сделать доступ к памяти без выравнивания;Выровненный доступ требует только одного доступа к памяти.Операнд из слова или двойного слова, пересекающий 4-байтовую границу, или операнд из четырех слов, пересекающий 8-байтовую границу, считается невыровненным и требует двух отдельных циклов шины памяти для доступа.

При "нормальных" обстоятельствах, для нелегированного movsd потребуется 2 цикла.

Если вы включите проверку выравнивания (в EFLAGS), тогда ЦП подаст сигнал переменного тока.В первую очередь он предназначен для того, чтобы помочь вам обнаружить непривязанные доступы.

...