149 votes

Quelle est la signification des accès mémoire "non temporels" dans x86

C'est une question un peu basse. Dans l'assemblage x86, il y a deux instructions SSE:

MOVDQA

et

xmmi, m128

Le Manuel du développeur de logiciels IA-32 indique que le NT dans MOVNTDQA signifie Non-Temporel , et que sinon, il est identique à MOVDQA.

Ma question est la suivante: que signifie non temporel ?

178voto

Espo Points 24318

Non-Temporel instructions SSE (MOVNTI, MOVNTQ, etc.), ne suivez pas les normal de cache-cohérence des règles. Dès lors, la non-temporelle des magasins doit être suivi par un SFENCE instruction pour que leurs résultats soient visibles par les autres processeurs en temps opportun.

Lorsque les données sont produites et pas (immédiatement) de consommé de nouveau, le fait que la mémoire des opérations de magasin de lire l'intégralité d'un cache de premier la ligne et ensuite modifier les données mises en cache qui est préjudiciable à la performance. Cette opération pousse des données des caches qui pourrait l'être à nouveau en faveur de données qui ne seront pas utilisées bientôt. Cela est particulièrement vrai pour les grandes structures de données, comme les matrices, qui sont remplis, puis utilisé plus tard. Avant le dernier élément de la matrice est remplie de la taille expulse les premiers éléments, faire de la mise en cache des écritures inefficace.

Pour cela et pour des situations similaires, les processeurs de fournir un soutien pour les non-temporelle des opérations d'écriture. Non-temporel dans ce contexte signifie que les données ne seront pas réutilisés bientôt, il n'y a pas de raison de les mettre en cache. Ces non-temporel des opérations d'écriture ne pas lire une ligne de cache et ensuite de le modifier; au lieu de cela, le nouveau contenu est directement écrit à la mémoire.

Source: http://lwn.net/Articles/255364/

44voto

Pramod Points 3580

Espo est quasiment coup sur la cible. Voulais juste ajouter mon grain de sel:

Le "non temporel" phrase signifie manquer de localité temporelle. Des Caches d'exploiter deux types de localité spatiale et temporelle, et en utilisant un non-temporelles de l'enseignement que vous êtes de signalisation pour le processeur que vous ne vous attendez pas à l'élément de données sera utilisée dans un avenir proche.

Je suis un peu sceptique à propos de la main-codé de l'assemblée qui utilise le cache d'instructions de contrôle. Dans mon expérience, ces éléments conduisent à plus de mal de bugs que l'efficacité de toute la performance augmente.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X