chizh писал(а):
SII, с выравниванием понятно. Ещё Intel рекомедует выравнивать на 128 байт для скорости.
Я кажется понял суть вопроса. На многоядерном процессоре используется единый кэш первого уровня для всех ядер, поэтому там нет преград для обмена кэшированной информацией между ядрами. Вот почему у меня работает без проблем. А на системах с физически разными процессорами, кэши первого уровня физически разделены, и там его нужно обходить с помощью некэшированных страниц (у страниц есть такой атрибут запрета кэширования).
О кэше представление неверное в корне ;) У каждого ядра свой личный кэш первого уровня, кэши второго и третьего могут быть как общими, так и индивидуальными, ну и так далее. Это, вообще говоря, зависит от модели процессора (например, у Core 2 Quad на каждую пару ядер приходится общие 6 Мбайт кэша третьего уровня, поэтому в сумме объём получается 12 Мбайт, но это "нечестно" из-за разделения; а вот у Core i7 8 Мбайт кэша третьего уровня, но он общий для всех ядер независимо от их числа, и в этом случае 8 Мбайт оказывается лучше, чем 12 у Core 2). Кроме того, у процессоров ИА-32 предусматриваются аппаратные механизмы обеспечения когерентности кэшей (отсутствующие в большинстве других архитектур), так что запрет кэширования не требуется, а вот некоторые другие пляски с бубнами могут быть нужны. В общем, это надо внимательно вникать в определённые разделы руководства...