У меня есть простая тестовая программа, которая загружает регистр xmm с помощью команда movdqu, доступ к данным через границу страницы (OS = Linux).
Если отображается следующая страница, это работает отлично. Если это не отображается, тогда я получаю SIGSEGV, который, вероятно, ожидается.
Однако это уменьшает полезность неуравновешенных нагрузок немного. Кроме того, инструкции SSE4.2 (например, pcmpistri), которые допускайте, чтобы ссылки на неравнозначные ссылки отображали это поведение также.
Что все хорошо - кроме там много реализации strcmp используя pcmpistri, который я обнаружил, что, похоже, не рассматривают эту проблему вообще - и я смог выработать тривиальные тестовые приводят к сбою этих реализаций, тогда как байт по времени тривиальный Реализация strcmp будет работать отлично с тем же макетом данных.
Еще одно замечание - похоже, что реализация библиотеки GNU C для 64-разрядный Linux имеет вариант __strcmp_sse42, который, как представляется, использует pcmpistri более безопасным образом. Реализация этот strcmp довольно сложный, но, похоже, он тщательно пытается чтобы избежать проблемы с границей страницы. Я не уверен, что из-за вопрос, который я описываю выше, или это просто побочный эффект от попыток получить более высокую производительность, совместив данные.
В любом случае вопрос, который у меня есть, в первую очередь - где я могу узнать больше об этой проблеме? Я набрал "границу страницы переходов movdqu" и каждый вариант, о котором я могу думать в Google, но не натолкнулся ничего особенно полезного. Если кто-нибудь может указать мне на дополнительную информацию на этом было бы весьма полезно.