Перейти к содержанию
CoreInfra
Все записи

Почему процессоры Apple M* такие быстрые?

Есть мнение, что решает техпроцесс. Но кроме техпроцесса, есть и архитектурные хитрости.

Рассмотрим одну из них – выполнение атомарных операций в кэше.

Традиционно в процессоре атомарные операции выполняет ядро, а координирует L2 Cache.

Анимация показывает процесс увеличения счётчика.

Прежде чем ядро сможет это сделать, оно должно получить эксклюзивное право это сделать, вместе со свежей версией счётчика. Протокол работает в единицах кэш-линий (64 или 128 байтов), так что вместо небольших 8-байтных счётчиков по шине приходится передавать огромные кэш-линии.

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

В новой схеме атомарные операции выполняет не ядро, а сам L2 Cache с помощью своего собственного крошечного арифметического ядра.

Поддерживаются операции плюс, минус, максимум, минимум, логические, безусловный и условный обмен (CAS).

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

Ядро просто отправляет команду «увеличь счётчик на X», в ответ летит предыдущее значение.

Это ускорение особенно актуально не для счётчиков, а для примитивов синхронизации – мьютексов, неблокирующихся очередей и других.

Входит в стандарт Large System Extensions (LSE) Arm v8.1-A, используется и другими производителями процессоров ARM.

Автор: Григорий Бутейко