diff --git a/projects/rccl/src/collectives/device/prims_simple.h b/projects/rccl/src/collectives/device/prims_simple.h index e268d4f306..6ea594ce02 100644 --- a/projects/rccl/src/collectives/device/prims_simple.h +++ b/projects/rccl/src/collectives/device/prims_simple.h @@ -319,7 +319,11 @@ private: } barrier(); // This barrier has a counterpart in following loop +#if defined(__gfx1030__) + if (Send && (flags & RolePostSend) && index == 0) __threadfence_system(); +#else if ((MaxSend == 0 || MaxRecv == 0) && Send && (flags & RolePostSend) && index == 0) __threadfence_system(); +#endif __syncwarp(); postPeer(); offset += sliceSize; @@ -339,7 +343,11 @@ private: waitPeer(0, 0, 0, 0); } barrier(); // Has couterpart in preceding worker-only loop. +#if defined(__gfx1030__) + if (Send && (flags & RolePostSend) && sliceSize > 0 && index == 0) __threadfence_system(); +#else if ((MaxSend == 0 || MaxRecv == 0) && Send && (flags & RolePostSend) && sliceSize > 0 && index == 0) __threadfence_system(); +#endif __syncwarp(); postPeer(); offset += sliceSize;