@mentools: @tank_driver: CPU: Czy cache posiada dane z 0x82731? Cache: Tak CPU: Poproszę te dane. Cache: Już ich nie mam, a nie chcesz przypadkiem danych z 0x91452? CPU: Nie, chcę dane z 0x82731. Cache: Nie to nie, sam sobie szukaj.
@S3Mi: To jest przypadek tzw. CACHE FOCH, błąd nieprzewidywalny i niemożliwy do okiełznania przez programistę:P W moim przypadku byłoby to pewnie tak: CPU: Nie, chcę dane z 0x82731. Cache: Nie to nie, sam sobie szukaj. CPU: Co takiego? Cache: Nic, jakby ci zależało to wiedziałbyś co :P
Jakby ktoś chciał to dalej pozgłębiać tematykę cache'u, to polecam prezentację przygotowaną przez Scott'a Meyersa (jeden z guru C++). Wyłożył to na jednym ze spotkań konferencji code::dive organizowanej przez Nokię we Wrocławiu.
Dobrym źródłem informacji, odnośnie optymalizacji dostępu do pamięci, są pierwsze trzy optimization manuals wydane przez Agnera Foga(częściowo dotyczą też optymalizacji pod SIMD). Ponadto publikacja "What Every Programmer Should Know About Memory" - autor Ulrich Drepper, również jest bardzo dobra. Sporo przykładów na prostym kodzie, znajduje się w "Intro to High Performance Scientific Computing".
Miałem zamiar dorzucić wideo Scotta Meyers'a, ale widzę że @kamichal już podlinkował, zatem dodam tylko, że dla każdego szanującego fach programisty obowiązkową lekturą winna być publikacja Ulricha Dreppera - What Every Programmer Should Know About Memory
Nie napisali, na jakim procesorze robili testy - Intel, AMD? Że o modelu nie wspomnę. Istotnym jest bowiem tutaj zastosowany algorytm predykcyjny w danym procesorze, który próbuje zgadnąć, jakie dane mogą być potrzebne ładując właśnie je do pamięci podręcznej. A pomiędzy procesorami sytuacja może się zmieniać o 180 stopni przy danych algorytmach. Warto też dodać, że prezentowane kody są w językach wysokiego poziomu, a optymalizatory kompilatorów takich języków mogą albo "pomóc" albo
@Dzyszla: Po pierwsze on testuje cache, a nie procesor. Napisał dokładnie jakie ma cache'e. Procesory zawsze były szybsze niż pamięć czy cache, dlatego można model procesora pominąć. Po drugie: gdzie widziałeś algorytm predykcji dostępu do danych inny niż brak lub "jeśli chciałeś x, to może będziesz chciał x+1"? Tutaj przykłady są tak proste, że każdy procesor od i386 dzięki pipeline będzie przetwarzał tak samo i wszystko będzie zależne tylko od
@Dzyszla: W ogólności tak, fajnie, ale nie w tych przykładach. System predykcji rozgałęzień nie ma nic do roboty, a system wyprzedzania dostępu do danych też nie, bo procesor w 100% czeka na cache'e, aby zakończyły swoje zadania potrzebne do przetwarzania i nie mają kiedy nawet o jakieś przewidywane dane poprosić cache - to dzięki pipelining'owi, procesorowi te inkrementacje/mnożenia itd zajmują efektywnie 0 cykli. To jest powód dlaczego te testy są
Komentarze (52)
najlepsze
CPU: Czy cache posiada dane z 0x82731?
Cache: Tak
CPU: Poproszę te dane.
Cache: Już ich nie mam, a nie chcesz przypadkiem danych z 0x91452?
CPU: Nie, chcę dane z 0x82731.
Cache: Nie to nie, sam sobie szukaj.
W moim przypadku byłoby to pewnie tak:
CPU: Nie, chcę dane z 0x82731.
Cache: Nie to nie, sam sobie szukaj.
CPU: Co takiego?
Cache: Nic, jakby ci zależało to wiedziałbyś co :P
#informatyka
Wyłożył to na jednym ze spotkań konferencji code::dive organizowanej przez Nokię we Wrocławiu.
http://www.google.pl/url?sa=t&rct=j&q=&esrc=s&source=web&cd=4&cad=rja&uact=8&ved=0CDsQFjAD&url=http%3A%2F%2Fcodedive.pl%2Fwp-content%2Fuploads%2F2014%2F12%2FCPUCachesHandouts.pdf&ei=iUqlVO5j0NDsBqOugIAP&usg=AFQjCNHSmad8b0sm1jvZo5qokWllMOojbg
A tu całe jego wystąpienie (akurat z innej konferencji, ale widzę że gada dokładnie to samo).
wydane przez Agnera Foga(częściowo dotyczą też optymalizacji pod SIMD). Ponadto publikacja "What Every Programmer Should Know About Memory" - autor Ulrich Drepper, również jest bardzo dobra.
Sporo przykładów na prostym kodzie, znajduje się w "Intro to High Performance Scientific Computing".
źródło: comment_xNQ4BGjJuQtPSV3MM3PPzU9zVjTtPTgt.jpg
PobierzWarto też dodać, że prezentowane kody są w językach wysokiego poziomu, a optymalizatory kompilatorów takich języków mogą albo "pomóc" albo
Po drugie: gdzie widziałeś algorytm predykcji dostępu do danych inny niż brak lub "jeśli chciałeś x, to może będziesz chciał x+1"? Tutaj przykłady są tak proste, że każdy procesor od i386 dzięki pipeline będzie przetwarzał tak samo i wszystko będzie zależne tylko od
źródło: comment_bXrvvMiVta1gdxB0JCkZAAt8fWJyyjBE.jpg
Pobierz