32ビット値が2ページにわたるメモリ位置に書き込まれたとします。議論のために、最初のページで2バイト、2番目のページで2バイトと仮定します。最初のページは書き込み可能ですが、2ページ目はマップされていません。全体として命令を実行するとページフォールトが発生し、問題ありません。未割り当ての書き込みがページ境界を越えてフォルトがトリガされた場合はどうなりますか?
私の質問は:値の最初の2バイトの前後にページ違反トリガがメモリに書き込まれるのですか?別の言い方をすると、フォルト後に実行されるコード(フォルトハンドラなど)は部分的な書き込みを観察できるでしょうか?
X86環境では、動作がアーキテクチャであるか、モデル固有である可能性があると考えられます。
インテルアーキテクチャマニュアルボリューム3Aから
IIRCでは、書込み全体がフォルトによって中止されます。 Intelのx86マニュアルでは、これを再確認したい場合には、これを詳細に文書化する必要があります。このことはあまり確かではありませんが、IIRC AVX512マスクストア*は実際にフォールトが発生する前に(フォルト以外の)要素の一部を保存するかもしれません。私は、散布命令のISAリファレンスマニュアルをチェックしました。そして、スキャッタは、指定された順序でフォルトをチェックします。 (ただし、散布図の1つの要素に対しては、それが全く行われていないと失敗します。) –
部分的なストアを非フォルトのページに進めるようにするアーキテクチャがあれば、私は驚いています。 BTWは、[x86タグwiki](https://stackoverflow.com/tags/x86/info)のインテルのx86マニュアルにリンクしています。 –
@PeterCordes - 私はAVX-512ストアをチェックしませんでしたが、それはどのように動作するのか疑いがありません。 AVX2ギャザリングでさえ、このように動作します。各ギャザリング操作後(原則としてとにかく)マスクレジスタを更新して中断できるようにします(私は思う)。例外がスローされた場合、ロードの一部が既に完了している可能性があります。マスクレジスタに反映されます(潜在的に問題が修正され、ロードが再開される可能性があります)。間違いなくAVX-512は同じように動作しますが、スキャッターが異なると変なことになります。 – BeeOnRope