Nehmen wir an, ein 32-Bit-Wert wird in einen Speicherbereich geschrieben, der 2 Seiten umfasst. Für das Argument nehmen wir an, dass 2 Bytes in der ersten Seite und 2 in der zweiten Seite enden. Die erste Seite ist beschreibbar, aber die zweite Seite ist nicht zugeordnet. Wenn Sie den Befehl als Ganzes ausführen, wird ein Seitenfehler ausgelöst, und das ist in Ordnung.Was passiert, wenn ein nicht markierter Schreibvorgang eine Seitengrenze überschreitet und ein Fehler ausgelöst wird?
Meine Frage ist: wird der Seitenfehler Trigger vor oder nachdem die ersten 2 Bytes des Wertes in den Speicher geschrieben werden? Anders ausgedrückt, kann Code, der nach dem Fehler läuft (z. B. der Fehlerbehandler), in der Lage sein, den partiellen Schreibvorgang zu beobachten?
Nehmen wir eine X86-Umgebung an, da ich vermute, dass das Verhalten Architektur oder vielleicht sogar modellspezifisch ist.
IIRC, der gesamte Schreibvorgang wird durch den Fehler abgebrochen. Intels x86-Handbücher sollten dies im Detail dokumentieren, wenn Sie dies noch einmal überprüfen möchten. Weniger sicher, aber IIRC AVX512 maskierte Speicher * können * tatsächlich einige der (nicht fehlerhaften) Elemente speichern, bevor der Fehler gemacht wird. Ich habe gerade das ISA Ref Handbuch für Streuanweisungen überprüft, und sie sagen nicht, dass: Scatter nach Fehlern in einer bestimmten Reihenfolge suchen. (Aber für ein einzelnes Element einer Streuung, wenn es fehlerhaft ist, wird es überhaupt nicht ausgeführt.) –
Ich wäre überrascht, wenn es Architekturen gibt, die das partielle Speichern auf der nicht fehlerhaften Seite durchgehen lassen. Übrigens, Links zu Intels x86-Handbüchern finden Sie im [x86-Tag-Wiki] (https://stackoverflow.com/tags/x86/info). –
@PeterCordes - Ich habe die AVX-512-Shops nicht überprüft, aber es funktioniert zweifellos. Selbst die AVX2-Erfassungen funktionieren auf diese Weise: Sie aktualisieren das Maskenregister nach jeder Sammeloperation (im Prinzip sowieso), so dass sie unterbrochen werden können (denke ich), und wenn eine Ausnahme ausgelöst wird, kann ein Teil der Ladung bereits abgeschlossen sein Das Maskenregister wird dies widerspiegeln (möglicherweise kann das Problem behoben und die Last neu gestartet werden). Zweifelsohne funktionieren AVX-512-Collections genauso, und es wäre komisch, wenn Scatters anders wären. – BeeOnRope