LOCK DEC
のようなx86命令は、複数のキャッシュラインに跨っていますか、それともseg-faultですか?アトミック命令はキャッシュラインにまたがることができますか?
はであるべきかどうかを尋ねることはできません。
(私は特定のSSE命令がキャッシュ境界に配置する必要があります知っている)
LOCK DEC
のようなx86命令は、複数のキャッシュラインに跨っていますか、それともseg-faultですか?アトミック命令はキャッシュラインにまたがることができますか?
はであるべきかどうかを尋ねることはできません。
(私は特定のSSE命令がキャッシュ境界に配置する必要があります知っている)
はい、それが許されています。あなたはまたそれを試してみることもできました。または、命令セットリファレンスを参照してください。
LOCKプレフィックスの完全性は、メモリフィールド の配置の影響を受けません。メモリロックは、任意に のフィールドがずれていることが確認されています。
しかし参照:
あるがアラインされていないメモリ参照が行われた場合に例外
#AC(0)アライメント・チェックがイネーブルにされ、現在の特権レベルが3
通常、アライメントチェックは有効ではありません。
ロックはキャッシュ内で維持できない可能性があり、完全なバスロック(完全なシステムストール)にダウングレードする可能性があるため、パフォーマンスは大幅に低下する可能性があります。
たとえば - https://software.intel.com/en-us/articles/implementing-scalable-atomic-locks-for-multi-core-intel-em64t-and-ia32-architectures:インテル486プロセッサ、パフォーマンスに大きなヒットと一緒にバスに ロックを主張するために使用されるロックの接頭辞の日で
。 Intel Pentium Proアーキテクチャの から、バスロックは キャッシュロックに変換されます。ロックがキャッシュ不可能なメモリに存在する場合、またはロックがキャッシュライン境界分割キャッシュラインを越えて拡張されている場合は、最新のアーキテクチャではほとんどの アーキテクチャのバス上にロックがアサートされます。 これらのシナリオはどちらもありそうにないので、ほとんどのロックプレフィックスは、より安価なキャッシュロックに変換される になります。
プロセッサの仕様によって異なる場合がありますが、クロスライン境界はページ境界を越えることも意味します。これは、維持するのがさらに難しい(したがってダウングレードする可能性がさらに高くなります)。