Wymuszenie zatrzymania czegoś w cache'u

2

Hej, pomocy. :)

Mam takie pytanie/problem -- czy jest możliwość wymuszenia zatrzymania czegoś w cache'u? Wiem, że to będzie mi potrzebne za chwilę, ale kompilator/system chyba tego nie wie, więc wyrzuca i wszystko działa wolno...

Chodzi o procesory Intela (Haswell itp.). Najlepiej w C++ (lub C) z poziomu języka, w kompilatorach gcc lub icc -- ale ostatecznie może być i poziom niższy (intrinsic, asembler).

Jeśli jest taka możliwość, to jak?

Jeśli nie, to podajcie jakieś źródła, że się nie da...

Pozdrowienia,
k-o

PS. Nie chodzi mi o techniki programistyczne, które są cache-friendly (to umiem :)), ale o konkretne rozkazy zablokowania czegoś w cache'u (któregokolwiek poziomu).

2

GCC ma do tego funkcję __builtin_prefetch.

0
Althorion napisał(a):

GCC ma do tego funkcję __builtin_prefetch.

Tak, ale to trochę co innego -- prefetch ładuje mi do cache'u coś przed użyciem. A ja wiem, że coś już w cache'u jest, ale chcę, żeby z niego nie wypadło...

2

Intel wprowadził coś co daje Ci jakąś nadzieję: https://www.intel.pl/content/www/pl/pl/io/data-direct-i-o-technology.html
Co prawda przewija się w kontekście kontrolerów I/O i tego, że mogą do L3 coś wrzucać z pominięciem RAMu. W praktyce może to oznaczać konieczność napisania własnego sterownika.
Super temat do zabawy ;)

2

https://www.coreboot.org/images/6/6c/LBCar.pdf

Jest hack na to, ale podejrzewam, że podczas działania normalnego systemu operacyjnego taka operacja może być co najmniej nietrywialna do zaimplementowania.

3

No i tak całkiem na serio to najpierw profiluj, a potem się martw. I przeczytaj rozdział 7 z https://software.intel.com/sites/default/files/managed/9e/bc/64-ia-32-architectures-optimization-manual.pdf

0

@yarel: @Rev: dzięki. :)

Rev napisał(a):

No i tak całkiem na serio to najpierw profiluj, a potem się martw. I przeczytaj rozdział 7 z https://software.intel.com/sites/default/files/managed/9e/bc/64-ia-32-architectures-optimization-manual.pdf

Znam to wszystko (no, prawie :)) -- tu nie chodzi o konkretną optymalizację, tylko raczej wyżyłowanie wydajności, żeby się (innych :)) o czymś przekonać... :)

Wygląda na to, że się jednak sensownie nie da... Tak jak myślałem zresztą.

1

W tym temacie warto obejrzeć ten cppcon.
Generalnie z tego co pamiętam gość ma topowy procesorem X rdzeniowy i wyłącza na nim wszystkie core-y poza jednym, żeby mieć cały cache tylko dla tego jednego core-a. Robi też mnóstwo innych sztuczek.
Może wyłowisz tam jeszcze coś wartościowego dla siebie.

1 użytkowników online, w tym zalogowanych: 0, gości: 1