Jakie jest znaczenie "non temporal" dostępu do pamięci w x86
Jest to pytanie nieco na niskim poziomie. W zestawie x86 znajdują się dwie instrukcje SSE:
MOVDQA xmmi, m128
I
MOVNTDQA xmmi, m128
Instrukcja programisty IA-32 mówi, że NT w movntdqa oznacza Non-Temporal, a poza tym jest to to samo co MOVDQA.
Moje pytanie brzmi, co oznacza nie-czasowy ?
2 answers
Nie-temporalne instrukcje SSE (MOVNTI, MOVNTQ, itp.), nie postępuj zgodnie z normalnymi regułami cache-coherency. W związku z tym po przechowywaniu nie-czasowym musi nastąpić Instrukcja SFENCE, aby ich wyniki były widoczne dla innych procesorów w odpowiednim czasie.
Gdy dane są wytwarzane, a nie (natychmiast) zużywane ponownie, fakt, że operacje przechowywania pamięci najpierw odczytują pełną linię pamięci podręcznej, a następnie modyfikują dane buforowane, jest szkodliwy dla wydajności. Ta operacja wypycha dane z pamięci podręczne, które mogą być potrzebne ponownie na rzecz danych, które nie zostaną wkrótce wykorzystane. Jest to szczególnie prawdziwe w przypadku dużych struktur danych, takich jak macierze, które są wypełniane, a następnie używane później. Przed wypełnieniem ostatniego elementu macierzy rozmiar usuwa pierwsze elementy, co powoduje, że buforowanie zapisów jest nieskuteczne.
W tej i podobnych sytuacjach procesory zapewniają wsparcie dla operacji zapisu nieokresowego. Nie-czasowe w tym kontekście oznacza, że dane nie zostaną wkrótce ponownie wykorzystane, więc nie ma powodu, aby go buforować. Te nie-czasowe operacje zapisu nie odczytują linii bufora, a następnie modyfikują ją; zamiast tego nowa zawartość jest zapisywana bezpośrednio do pamięci.
Źródło: http://lwn.net/Articles/255364/
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2008-08-31 20:50:00
Espo jest w zasadzie uderzeniem w cel. Chciałem tylko dodać moje dwa grosze:
Wyrażenie "non temporal" oznacza brak miejsca czasowego. Pamięć podręczna wykorzystuje dwa rodzaje lokacji-przestrzenną i czasową, a używając instrukcji nie-czasowej sygnalizujesz procesorowi, że nie spodziewasz się, że pozycja danych zostanie użyta w najbliższej przyszłości.
Jestem trochę sceptyczny co do ręcznie kodowanego zestawu, który używa instrukcji sterowania pamięcią podręczną. Z mojego doświadczenia wynika, że te rzeczy prowadzą do więcej złe błędy niż jakakolwiek skuteczna wydajność zwiększa.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2008-09-01 16:03:35