Replies: 1 comment
|
Thanks for the issue. |
0 replies
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Uh oh!
There was an error while loading. Please reload this page.
Hi,
I have a question about a very specific case of cross-GPU synchronization.
According to the
libcudacxxmemory model documentation, for an object in GPU memory, a system-scope atomic operation is only guaranteed to be atomic across GPUs ifcudaDevP2PAttrNativeAtomicSupported == 1(or if only one GPU accesses it concurrently).My question is specifically about plain store/load with
memory_order_release/memory_order_acquire, not RMW atomics such asfetch_add,exchange, orcompare_exchange.Test setup
xandyare both located in GPU0 global memoryP0runs on GPU0P1runs on GPU4nvidia-smi topo -p2p rreports GPU0 <-> GPU4 asOKnvidia-smi topo -p2p areports GPU0 <-> GPU4 asNSSo this pair appears to support peer read/write, but not peer native atomics.
Test pattern
P0does:P1does:This is a basic MP-style litmus test.
The weak outcome I am checking is:
Observed result
I ran:
N_INSTANCES = 256N_ITERS = 100000Total observations:
25600000Histogram:
r0=0, r1=0 : 1359292r0=0, r1=1 : 24189531r0=1, r1=1 : 51177r0=1, r1=0 : 0So in this run, the weak MP outcome never appeared.
Main question
If
cudaDevP2PAttrNativeAtomicSupported == 0, is cross-GPUstore(..., cuda::memory_order_release)andload(..., cuda::memory_order_acquire)on GPU memory officially:
I am mainly looking for an official clarification on the status of this case.
Follow-up question
If this case is not officially guaranteed, why can it still appear to pass reliably in a test like this?
More specifically, is the observed behavior more likely due to:
release/acquireeven whencudaDevP2PAttrNativeAtomicSupported == 0?If there is any official documentation or guidance on this point, I would appreciate a reference.
I am attaching the test source and the log.
MP_system_diffGPU_G0_acq.cu.txt
MP_system_diffGPU_G0_acq.log
Thanks!
All reactions