Wie Sie wissen, beginnend mit Version 2.0 unterstützt PCI Express Verbindung atomare Operationen:
FetchAdd
,Swap
,CAS
: https://pcisig.com/sites/default/files/specification_documents/ECN_Atomic_Ops_080417.pdfKönnen wir x86_64-CPU-Atomics verwenden, um auf PCI Express die zusammengesetzten atomaren Operationen zu erzeugen?auch bekannt, dass x86_64 CPU Assembler Verbindung atomare Operationen hat:
lock add
,[lock] xchg
,lock cmpxchg
: https://godbolt.org/g/MmqMRw
, die von C-Compiler verwendet volatile atomic_int
-Operationen hergestellt werden können:
int expceted_cas = 0;
volatile atomic_int a;
atomic_fetch_add(&a, 1);
atomic_exchange(&a, 1);
atomic_compare_exchange_weak(&a, &expceted_cas, 1);
Ich mag Zugriff auf den Pufferspeicher auf dem Gerät (Ethernet, GPU, ...), die verbunden ist mit PCI Express PC-x86_64, durch unter Verwendung der Verbindung atomare Operationen. I.e. Wir wissen bereits, wie funktioniert Hardware-Bus (PCIe unterstützt Atomic FetchAdd/Swap/CAS), aber wir wollen wissen, welche Assembler-Quellcode erforderlich, um diese PCIe-Funktionen zu verwenden.
Können wir x86_64 CPU Verbindung atomare Operationen verwenden: lock add
, [lock] xchg
, lock cmpxchg
die Verbindung atomare Operationen auf PCI Express zu generieren: FetchAdd
, Swap
, CAS
?
Oder was für asm-Code sollten wir verwenden auf x86_64 CPU atomare Operationen FetchAdd
, Swap
, CAS
auf PCI Express 2.0/3.0 auszuführen?
Das ist eher eine Hardware- als Software-Frage über die x86/64-Architektur. – Olaf
Sie fragen XY Frage. CPU-Befehle sind orthogonal zur Funktionsweise von BUS. – 0andriy