/ / Виділити статичну пам'ять в кеш процесора в c / c ++: це можливо? - c + +, c, керування пам'яттю, cpu-cache

Виділити статичну пам'ять в кеш процесора в c / c: чи можливо це? - c + +, c, керування пам'яттю, cpu-cache

Чи можна явно створити статичнийоб'єкти в кеші процесора, напевно, щоб переконатися, що ці об'єкти завжди залишаються в кеші, так що ніяких показів ефективності ніколи не беруть від досягнення у всьому шляху в оперативну пам'ять, або боже забути - віртуальну пам'ять hdd?

Я особливо зацікавлений в орієнтації великої об'ємної кеш-пам'яті L3, яка не має наміру орієнтуватись на L1, L2, інструкцію чи будь-який інший кеш-пам'ять, просто найбільший у пам'яті там, де є пам'ять.

І щоб уточнити, щоб відрізнити від інших тем, які я шукав, перш ніж опублікувати це, я не зацікавлений в приватизації всього кешу, а лише невеликих, мало класів, вартих регіону.

Відповіді:

12 для відповіді № 1

Кеш-пам'ять не адресована, тому ви не можете виділяти в ньому об'єкти.

Те, що вам здається, ви мали на увазі, це: Виділив простір у віртуальній пам'яті, чи можу я переконатися, що я завжди отримую кеш-хіти?

Це більш складне питання, і відповідь є: частково.

Ви, безумовно, можете не поміняти на диск, використовуючи API керування пам'яттю вашої ОС (наприклад, mlock()), щоб позначити регіон як непридатний для пошуку. Або виділити з "непідписного пулу", щоб почати.

Я не вірю, що там є аналогічний API для закріпленняпам'ять в кеш процесора. Навіть якщо ви можете заблокувати процесорний кеш-пам'ять для цього блоку, ви не зможете уникнути помилок кешу. Якщо інший ядро ​​записує в пам'ять, то власність буде передана, і ви постраждаєте від пропуску кеша та пов'язаного з ним передавання автобуса (можливо, до основної пам'яті, можливо до кеш-пам'яті іншого ядра).

Як зазначає Мет'ю у своєму коментарі, ви також можете змусити помилку кешу виникати паралельно з іншою корисною роботою в трубопроводі, так що дані в кеш-пам'яті, коли вам це потрібно.


1 для відповіді № 2

Ви можете запустити інший потік, який циклізує дані, і перетворить його в кеш L3.