Речь не о том, что тормозит, а о том, что спинлоки электричество жрут, проц греют, кэш забивают, да пайплайн засоряют. Предложенное решение этой проблемы 1. электричество хоть всё же и жрёт, но меньше, так как работает асинхронно по записи к кэш/память, что долго и гораздо реже, чем дёргать кэш и память каждые несколько циклов. Но при этом жрёт чуточку больше постоянно, так как наличиствует несколько дополнительных транзисторов. Но они мосфеты, поэтому постоянно жрать будет только операция сравнения. Учитывая, что в каждом модуле ядра есть по нескольку спинлоков и они по многу раз в секунду активируются, то не удивлюсь, если от такого решения система станет намного энергоэффективнее. 2. не держит нужную линию в кэше, освобождая кэш 3 уровня для других потоков и кэш 1 уровня для других гиперпотоков. Исполнительные блоки ядра тоже освобождается для других потоков и гиперпотоков. 3. конвейер не засоряется спекулятивно исполненными инструкциями с неверными предсказаниями, а сразу останавливается
|