w mojej aplikacji, w pewnym momencie muszę wykonywać obliczenia na dużych ciągły blok danych do pamięci (100s MBS). Zastanowiłem się nad tym, aby nadal pobierać część bloku, z której mój program będzie korzystał w przyszłości, więc gdy wykonuję obliczenia na tej części, dane są już w pamięci podręcznej.prefetching buforować dane dla x86-64
Czy ktoś może dać mi prosty przykład, jak to osiągnąć za pomocą gcc? Czytam gdzieś _mm_prefetch
, ale nie wiem, jak właściwie go używać. Zauważ też, że mam system wielordzeniowy, ale każdy rdzeń będzie pracował równolegle nad innym regionem pamięci.
Jeśli dostęp do pamięci jest sekwencyjny, sprzętowy program do sprawdzania dostępności już to zrobi. Prawdopodobnie nie uzyskasz znacznej poprawy dzięki ręcznemu wstępnemu pobieraniu. – Mysticial
Zobacz to pytanie dla przykładu, gdzie prefetching faktycznie pomaga: http://stackoverflow.com/questions/7327994/prefetching-examples – Mysticial
Masz na myśli sprzęt Prefetcher jakoś rozpoznaje ja wykorzystując sąsiadujące obszary pamięci i przynieść te części w pamięci podręcznej ? – pythonic