Wymuszenie zatrzymania czegoś w cache'u

Odpowiedz Nowy wątek
2018-11-30 11:40
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).

Pozostało 580 znaków

2018-11-30 11:49
2

GCC ma do tego funkcję __builtin_prefetch.

Pozostało 580 znaków

2018-11-30 12:29
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...

Wydaje mi się, że GCC jest na tyle sprytne, że jeśli będziesz miał wystarczająco gęsto tego prefetcha usłanego, to otrzymasz to, co chcesz. - Althorion 2018-11-30 13:03
@Althorion: Tak, ale ja włąściwie już mam, co chcę, nawet bez prefetcha -- po prostu czasem mi dane z cache'a znikają za wcześnie -- ale z trafianiem do niego nie ma problemu. :) - koszalek-opalek 2018-11-30 15:23

Pozostało 580 znaków

2018-11-30 12:42
2

Intel wprowadził coś co daje Ci jakąś nadzieję: https://www.intel.pl/content/[...]ta-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 ;)

Pozostało 580 znaków

2018-11-30 13:09
Rev
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.


Pozostało 580 znaków

2018-11-30 13:32
Rev
3

No i tak całkiem na serio to najpierw profiluj, a potem się martw. I przeczytaj rozdział 7 z https://software.intel.com/si[...]tures-optimization-manual.pdf


Pozostało 580 znaków

2018-11-30 15:21
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/si[...]tures-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ą.

Pozostało 580 znaków

2018-11-30 17:35
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.


Jeśli chcesz pomocy, NIE pisz na priva, ale zadaj dobre pytanie na forum.
edytowany 3x, ostatnio: MarekR22, 2018-11-30 17:39

Pozostało 580 znaków

Odpowiedz
Liczba odpowiedzi na stronę

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