Меня смущает спецификация заказа инструкции clflush
. С моей точки зрения, два руководства Intel содержат противоречивую информацию:
Человек по оптимизации. 8.4.5.3
MFENCE
следует использовать всякий раз, когда используется строка кэша flu sh (CLFLUSH
), чтобы гарантировать, что спекулятивные ссылки на память, сгенерированные процессором, не влияют на грипп sh.
Следует пример использования Example 8-1. Pseudo-code Using CLFLUSH
:
sfence
for(i=0;i<num_cachelines;i+=cacheline_size) {
clflush (char *)((unsigned int)buffer + i)
}
sfence
использовался вместо mfence
.
Arch. Разработчик Man. 8.2.2:
Запись в память невозможна при выполнении инструкции CLFLUSH
При этом условии mfence
выглядит избыточным.