Имеем два ядра и массив структур. Этот массив хочется обрабатывать параллельно и без блокировок и синхронизаций. Данные меньше размера кеш линии поэтому если передать как есть две структуры будут лежать в одной кеш линии и попадут вместе в L1 каждого из ядер и даже если запись происходит в разные места то будет взаимоблокировка с синхронизацией. Поэтому я увеличиваю размер структур до размера кеш линии теперь каждое ядро загружает в L1 независимые данные и могут их обработать без блокировок. Также и то и то лежит в одном массиве размером со страницу памяти. Что исключает работы ядер с двумя таблицами адресации и переключениями между ними.
Помимо этого я ещё передаю в оба потока указатель на одну и туже структуру но эту структуру потоки будут только читать.
Вопрос - всегда ли данные которые лежат в 1 кеш линии попав в L1 отдельных ядер вызывают процесс синхронизации? Или это происходит только тогда когда данные изменяются? Ну тоесть память помечается как неактуальная и L1 другого ядра вынуждено перезагрузить данные снова. Хотя они уже были.
Я сейчас не говорю про атомарность, мутексы и прочее. Тут дело в том что всё должно быть без этого.