On 10/2/17 5:03 PM, Mike Shirobokov wrote:
> В смысле - "интерпретировать"? Это чисто ТТХ процессора. Иногда помогает
> быстро на пальцах прикинуть, сколько что должно занимать. Я привел
> ссылку чисто чтобы показать порядок разницы между L1/L2/L3/RAM latency.
>
Я думал, что ты имел ввиду там есть какой-то конкретный бенчмарк.
>> Из моего опыта, легко может быть 3-4x разница во времени выполнения,
>> когда два разных сокета бьются за одну и ту же 64-byte cache line.
>
> Сокета или треда на одном ядре? И почему два - кэши у нас давно 2-way, 2
> entries per index. Да собственно и threads не нужны: a[i]=b[i]+c[i] в
> одном треде может биться за один cache line. И как могут сокеты
> "биться", когда L1/L2 кэши у них каждого свои (per core, even),
> независимые? L3 у них зависимые, но синхронизированные через cache
> coherency protocol (MESIF у интела), не через память. Короче ничего не
> понятно, о какой проблеме идет речь. "Биться" они могут только при
> наличии explicit memory fences, но это к кэшам уже имеет мало отношения.
>
Мое понимание такое:
Cache coherency требует того, чтобы определенная cache line принадлежала
определенному либо core, либо socket, в зависимости от уровня кеша - L1
или L2.
И если thread1 попользовал определенный L1 cache line в core1, то для
того, чтобы thread2 попользовал ту же L1 cache line в core2, этот cache
line должен быть "передан" между core-specific L1 caches.
И, аналогично, если thread1 попользовал L2 cache line в socket1, то для
того, чтобы thread2 попользовал ту же L1 cache line в socket2, надо
"передать" L2 cache line между sockets.
Как именно L1/L2 cache line "передается" между sockets/cores, я не
уверен. Поэтому и спрашивал, как это deduce из 7-cpu. Но подозреваю, что
оно тупо идет в L3, либо в RAM.
2-way associative cache, тут, вроде, ни при чем.
> Короче, универсальный ответ на все проблемы: gcov/gprof, perf, valgrind,
> vtune amplifier. Можно сколько хорошо угодно знать теорию, но все равно
> лучше просто просто профайлить и устранять проблемы.
Ну вот когда профайлили, то и нашли проблему. Вот такую, примерно:
http://cpp-today.blogspot.com/2008/05/false-sharing-hits-again.html
ilya