2016-05-18 7 views
0

versucht, die Antwort auf diese Frage in der Intel 64/IA-32, aber konnte keine endgültige Antwort finden. Fragen sind: Wenden Speicherbefehlsanweisungen, wie beispielsweise SFENCE, nur den lokalen Prozessor an oder verteilen sie sich auf die gesamte Cache-Kohärenzdomäne, z. B. CPUs auf einem benachbarten Socket (in einem Multi-Socket-System)?Wirkung der Speicher Bestellanweisungen auf x86/x86_64 mehrere Sockets

Antwort

1

SFENCE wirkt sich auf die Reihenfolge aus, in der die Speicher der lokalen CPU für andere Kerne in demselben Socket oder anderen Sockets oder für speicherplatzierte E/A sichtbar werden.

Andere Kerne können nicht feststellen, ob Sie SFENCE ausgeführt haben oder nicht, alles was sie beobachten können, ist die Reihenfolge Ihrer Speicheroperationen. (d. h. die Implementierung von sfence ist intern für einen Kern und seine Speicherwarteschlange).

sfence wurde in SSE1, mit PIII, vor den ersten Multi-Core-CPUs eingeführt. Zu dieser Zeit waren die einzigen SMP-Systeme Multi-Socket.

Beachten Sie auch, dass es nur etwas mit schwach geordneten Speichern (movnt* oder speichert, um Speicherregionen zu kombinieren) nützlich ist. Normale Geschäfte haben "release" semantics bereits auf x86. Nur mfence (und lock Ed-Anweisungen) sind wichtig für normale Speicheroperationen auf x86, to prevent StoreLoad reordering.

+0

Danke für die schnelle Antwort. Sehr hilfreich. – dsaada

+0

@dsaada: Wenn das Ihre Frage beantwortet, können Sie das Häkchen unter den Abstimmpfeilen verwenden, um es als akzeptiert zu markieren. –

+0

Danke. Tat dies. Nur eine ergänzende Frage - Sie sagten, dass andere _Cores_ nicht bewusst sind, Zaun Anweisungen wie ** SFENCE **. Gilt dies auch für andere Threads im selben Kern? – dsaada