Це цілком можливо зрозуміти та оптимізувати для кешів. Він починається з розуміння обладнання та продовжує контролювати систему. Чим менше контролю над системою, тим менше шансів на успіх. Linux або Windows, де працює безліч додатків / потоків, які не працюють.
Більшість кеш-книг за своїми властивостями дещо схожі, використовуйте деяку частину адресного поля, щоб шукати звернення, мати глибину (способи) та ширину (лінія кешу). Деякі мають буфери для запису, деякі можуть бути налаштовані для запису через або обходу кеша запису тощо.
Потрібно чітко усвідомлювати всі операції з пам'яттю, які відбуваються в кеш-пам'ять (деякі системи мають незалежну кеш-інструкцію та кеш даних, що полегшує завдання).
Ви можете легко зробити кеш марним, не ретельно керуючи своєю пам'яттю. Наприклад, якщо у вас є декілька блоків даних, які ви обробляєте, сподіваючись зберегти їх у кеші, але вони знаходяться в пам’яті за адресами, які навіть кратні відносно перевірки кешу / пропуску, скажімо, 0x10000 0x20000 0x30000, і у вас є більше окрім шляхів у кеш-пам'яті, ви можете дуже швидко зробити щось, що працює доволі повільно, якщо кеш увімкнено, повільніше, ніж із кешем. Але змініть це, можливо, на 0x10000, 0x21000, 0x32000, і цього може бути достатньо, щоб повністю використати кеш, зменшивши виселення.
Підсумок, ключове значення для оптимізації кешу (ну, крім того, що добре знати систему) полягає в тому, щоб одночасно зберігати всі необхідні для керування речі, організуючи ці дані такими, щоб їх можна було мати все це відразу в кеші. І запобігання тим, як виконання коду, переривання та інші регулярні або випадкові події не вилучати значні частини цих даних, які ви використовуєте.
Те саме стосується коду. Це трохи складніше, хоча вам потрібно контролювати місця, де знаходиться код, щоб уникнути зіткнень з іншим кодом, який ви хочете зберегти в кеші. Під час тестування / профілювання будь-якого коду, який проходить через кеш, що додає туди-сюди єдиний рядок коду або навіть єдиний nop, все, що зміщує або змінює адреси, де код живе з однієї компіляції в іншу, на той самий код, змінюється де рядки кеша підпадають під цей код і змінюють те, що вилучається, а що не - для критичних розділів.