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 ?

Author: kristianp, 2008-09-01

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/

 114
Author: Espo,
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.

 31
Author: Pramod,
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