Почему процессоры Apple M* такие быстрые?
Есть мнение, что решает техпроцесс. Но кроме техпроцесса, есть и архитектурные хитрости.
Рассмотрим одну из них - выполнение атомарных операций в кэше.
Традиционно в процессоре атомарные операции выполняет ядро, а координирует L2 Cache.
Анимация показывает процесс увеличения счётчика.
Прежде чем ядро сможет это сделать, оно должно получить эксклюзивное право это сделать, вместе со свежей версией счётчика. Протокол работает в единицах кэш-линий (64 или 128 байтов), так что вместо небольших 8-байтных счётчиков по шине приходится передавать огромные кэш-линии.
Также, перед тем как ядро эсклюзивно завладеет кэш-линией, нужно уведомить предыдущего владельца и получить у него последнюю версию кэш-линии.
В новой схеме атомарные операции выполняет не ядро, а сам L2 Cache с помощью своего собственного крошечного арифметического ядра.
Поддерживаются операции плюс, минус, максимум, минимум, логические, безусловный и условный обмен (CAS).
Вместо огромных кэш-линий по шине летают только небольшие значения счётчиков, и не нужно координироваться с другими ядрами.
Ядро просто отправляет команду "увеличь счётчик на X", в ответ летит предыдущее значение.
Это ускорение особенно актуально не для счётчиков, а для примитивов синхронизации - мьютексов, неблокирующихся очередей и других.
Входит в стандарт
Large System Extensions (LSE) Arm v8.1-A, используется и другими производителями процессоров ARM.
@hrissan
Post #175
359
- ⚡ 12
- 🔥 6
- 🤷♂ 2
- 👍 2