2012-05-19 2 views
4

На машинах SMP есть выигрыш в производительности до # 2 против # 1:ли это быстрее, чтобы избежать операции записи, когда значения может быть один и тот же

1) х = 0;

или

2) если (х) х = 0;

Я думал, что накладные расходы за кулисами для управления когерентностью кэша между CPU могут иметь некоторую стоимость. Я орехи?

+1

Когерентность кэша имеет некоторые затраты, также как и предсказание ветвления (с использованием другого кеша). Вы торгуете один за другим - это победа или потеря? Кто знает. –

ответ

4

Даже с однопоточным кодом последнее может иметь преимущество, если объект находится в памяти копирования на запись (например, личное сопоставление файла или почти любая записываемая память после вилки). Я подозреваю, что преимущество, о котором вы просите, тоже реально, по крайней мере, в таких системах, как x86, где согласованность памяти обрабатывается автоматически. На таких машинах запись в память, которая может находиться в кеше другого процессора, приведет к аннулированию кешированной копии (фактически всей строки кэша). Просто чтение не принесет никакого вреда. Конечно, если это память, которая потенциально может быть изменена и разделена несколькими потоками, она должна быть защищена механизмами синхронизации в любом случае, а затем вы, вероятно, потеряете большинство или все преимущества.

3

Он должен управлять когерентностью кеша, даже если вы читаете, поэтому я не думаю, что он что-нибудь купит. И это также будет во многом зависеть от того, что делает компилятор. Если вам действительно все равно, я бы сравнил его с используемой вами системой.