1. ホーム
  2. x86

[解決済み] x86における「非一時的」メモリアクセスの意味

2022-05-16 22:23:49

質問

これはやや低レベルな質問です。 x86アセンブリでは、2つのSSE命令があります。

MOVDQA xmmi, m128

そして

MOVNTDQA xmmi, m128

IA-32 Software Developer's Manual には、以下のように書かれています。 NT を意味すると書かれています。 非時空 を表し、それ以外はMOVDQAと同じであることを意味します。

私の疑問は 非時間的 とはどういう意味でしょうか?

どのように解決するのですか?

非一時的な SSE 命令 (MOVNTI、MOVNTQ など) は、通常のキャッシュ コヒーレンシーのルールに従いません。したがって、非一時的なストアは、その結果が他のプロセッサによってタイムリーに見られるように、SFENCE 命令が続かなければなりません。

データが生成され、(すぐに)再び消費されない場合、メモリ ストア操作が最初にキャッシュ ラインを完全に読み取り、次にキャッシュされたデータを変更するという事実は、性能に悪影響を及ぼします。この操作は、すぐに使用されないデータを優先して、再び必要になる可能性のあるデータをキャッシュから押し出します。これは特に、行列のような大きなデータ構造で、一度埋めてから後で使用する場合に当てはまります。行列の最後の要素が満たされる前に、膨大なサイズが最初の要素を退避させ、書き込みのキャッシュを効果的でなくしています。

このような状況のために、プロセッサは非一時的な書き込み操作のサポートを提供します。この文脈での非一時的とは、データがすぐに再利用されないので、キャッシュする理由がないことを意味します。これらの非一時的な書き込み操作は、キャッシュ行を読み取ってからそれを変更するのではなく、新しいコンテンツがメモリに直接書き込まれます。

出典 http://lwn.net/Articles/255364/