Update puts and gets to include a fence following data movement, ensuring data visibility
This commit is contained in:
@@ -69,6 +69,7 @@ __device__ void IPCContext::putmem(void *dest, const void *source, size_t nelems
|
|||||||
reinterpret_cast<char *>(dest) - ipcImpl_.ipc_bases[my_pe];
|
reinterpret_cast<char *>(dest) - ipcImpl_.ipc_bases[my_pe];
|
||||||
ipcImpl_.ipcCopy(ipcImpl_.ipc_bases[pe] + L_offset,
|
ipcImpl_.ipcCopy(ipcImpl_.ipc_bases[pe] + L_offset,
|
||||||
const_cast<void *>(source), nelems);
|
const_cast<void *>(source), nelems);
|
||||||
|
ipcImpl_.ipcFence();
|
||||||
}
|
}
|
||||||
|
|
||||||
__device__ void IPCContext::getmem(void *dest, const void *source, size_t nelems,
|
__device__ void IPCContext::getmem(void *dest, const void *source, size_t nelems,
|
||||||
@@ -77,6 +78,7 @@ __device__ void IPCContext::getmem(void *dest, const void *source, size_t nelems
|
|||||||
uint64_t L_offset =
|
uint64_t L_offset =
|
||||||
const_cast<char *>(src_typed) - ipcImpl_.ipc_bases[my_pe];
|
const_cast<char *>(src_typed) - ipcImpl_.ipc_bases[my_pe];
|
||||||
ipcImpl_.ipcCopy(dest, ipcImpl_.ipc_bases[pe] + L_offset, nelems);
|
ipcImpl_.ipcCopy(dest, ipcImpl_.ipc_bases[pe] + L_offset, nelems);
|
||||||
|
ipcImpl_.ipcFence();
|
||||||
}
|
}
|
||||||
|
|
||||||
__device__ void IPCContext::putmem_nbi(void *dest, const void *source,
|
__device__ void IPCContext::putmem_nbi(void *dest, const void *source,
|
||||||
@@ -142,6 +144,7 @@ __device__ void IPCContext::putmem_wave(void *dest, const void *source,
|
|||||||
reinterpret_cast<char *>(dest) - ipcImpl_.ipc_bases[my_pe];
|
reinterpret_cast<char *>(dest) - ipcImpl_.ipc_bases[my_pe];
|
||||||
ipcImpl_.ipcCopy_wave(ipcImpl_.ipc_bases[pe] + L_offset,
|
ipcImpl_.ipcCopy_wave(ipcImpl_.ipc_bases[pe] + L_offset,
|
||||||
const_cast<void *>(source), nelems);
|
const_cast<void *>(source), nelems);
|
||||||
|
ipcImpl_.ipcFence();
|
||||||
}
|
}
|
||||||
|
|
||||||
__device__ void IPCContext::getmem_wave(void *dest, const void *source,
|
__device__ void IPCContext::getmem_wave(void *dest, const void *source,
|
||||||
@@ -151,6 +154,7 @@ __device__ void IPCContext::getmem_wave(void *dest, const void *source,
|
|||||||
const_cast<char *>(src_typed) - ipcImpl_.ipc_bases[my_pe];
|
const_cast<char *>(src_typed) - ipcImpl_.ipc_bases[my_pe];
|
||||||
ipcImpl_.ipcCopy_wave(dest, ipcImpl_.ipc_bases[pe] + L_offset,
|
ipcImpl_.ipcCopy_wave(dest, ipcImpl_.ipc_bases[pe] + L_offset,
|
||||||
nelems);
|
nelems);
|
||||||
|
ipcImpl_.ipcFence();
|
||||||
}
|
}
|
||||||
|
|
||||||
__device__ void IPCContext::putmem_nbi_wave(void *dest, const void *source,
|
__device__ void IPCContext::putmem_nbi_wave(void *dest, const void *source,
|
||||||
@@ -169,6 +173,7 @@ __device__ void IPCContext::internal_putmem(void *dest, const void *source,
|
|||||||
reinterpret_cast<char *>(dest) - Wrk_Sync_buffer_bases_[my_pe];
|
reinterpret_cast<char *>(dest) - Wrk_Sync_buffer_bases_[my_pe];
|
||||||
memcpy(Wrk_Sync_buffer_bases_[pe] + L_offset,
|
memcpy(Wrk_Sync_buffer_bases_[pe] + L_offset,
|
||||||
const_cast<void *>(source), nelems);
|
const_cast<void *>(source), nelems);
|
||||||
|
ipcImpl_.ipcFence();
|
||||||
}
|
}
|
||||||
|
|
||||||
__device__ void IPCContext::internal_getmem(void *dest, const void *source,
|
__device__ void IPCContext::internal_getmem(void *dest, const void *source,
|
||||||
@@ -177,6 +182,7 @@ __device__ void IPCContext::internal_getmem(void *dest, const void *source,
|
|||||||
uint64_t L_offset =
|
uint64_t L_offset =
|
||||||
const_cast<char *>(src_typed) - Wrk_Sync_buffer_bases_[my_pe];
|
const_cast<char *>(src_typed) - Wrk_Sync_buffer_bases_[my_pe];
|
||||||
memcpy(dest, Wrk_Sync_buffer_bases_[pe] + L_offset, nelems);
|
memcpy(dest, Wrk_Sync_buffer_bases_[pe] + L_offset, nelems);
|
||||||
|
ipcImpl_.ipcFence();
|
||||||
}
|
}
|
||||||
|
|
||||||
__device__ void IPCContext::internal_putmem_wg(void *dest, const void *source,
|
__device__ void IPCContext::internal_putmem_wg(void *dest, const void *source,
|
||||||
@@ -203,6 +209,7 @@ __device__ void IPCContext::internal_putmem_wave(void *dest,
|
|||||||
reinterpret_cast<char *>(dest) - Wrk_Sync_buffer_bases_[my_pe];
|
reinterpret_cast<char *>(dest) - Wrk_Sync_buffer_bases_[my_pe];
|
||||||
memcpy_wave(Wrk_Sync_buffer_bases_[pe] + L_offset,
|
memcpy_wave(Wrk_Sync_buffer_bases_[pe] + L_offset,
|
||||||
const_cast<void *>(source), nelems);
|
const_cast<void *>(source), nelems);
|
||||||
|
ipcImpl_.ipcFence();
|
||||||
}
|
}
|
||||||
|
|
||||||
__device__ void IPCContext::internal_getmem_wave(void *dest,
|
__device__ void IPCContext::internal_getmem_wave(void *dest,
|
||||||
@@ -212,6 +219,7 @@ __device__ void IPCContext::internal_getmem_wave(void *dest,
|
|||||||
const_cast<char *>(src_typed) - Wrk_Sync_buffer_bases_[my_pe];
|
const_cast<char *>(src_typed) - Wrk_Sync_buffer_bases_[my_pe];
|
||||||
memcpy_wave(dest, Wrk_Sync_buffer_bases_[pe] + L_offset,
|
memcpy_wave(dest, Wrk_Sync_buffer_bases_[pe] + L_offset,
|
||||||
nelems);
|
nelems);
|
||||||
|
ipcImpl_.ipcFence();
|
||||||
}
|
}
|
||||||
|
|
||||||
} // namespace rocshmem
|
} // namespace rocshmem
|
||||||
|
|||||||
Reference in New Issue
Block a user