Describe the bug
in ucx/src/uct/cuda/cuda_ipc/cuda_ipc_md.c line: 240
when get mem IPC handle:
cuIpcGetMemHandle(&key->ph.handle.legacy, (CUdeviceptr)addr));
the second param should not ’addr‘, but ‘key->d_bptr’,
because key->d_bptr is mean allocated device memory base ptr
in document says
dptr
- Base pointer to previously allocated device memory
'addr' however may represent to baseaddr+offset ,
then cuIpcGetMemHandle return is undefined,may result to cumemcpy bug
BTW,I have a test to validate what would return when addr is base + offset
allocation base=0x7e3e4de00000 size=1048576
offset address=0x7e3e4de80000 offset=524288
cuMemGetAddressRange(offset address): base=0x7e3e4de00000 size=1048576
cuIpcGetMemHandle(base): CUDA_SUCCESS (0), no error
cuIpcGetMemHandle(base + offset): CUDA_SUCCESS (0), no error
both calls succeeded; opaque handles are identical
which mean pass base address or base + offset both will return same base handle
SO at the semantic level here should pass key->d_bptr,though now pass 'addr' may not lead to mismatch
Describe the bug
in ucx/src/uct/cuda/cuda_ipc/cuda_ipc_md.c line: 240
when get mem IPC handle:
cuIpcGetMemHandle(&key->ph.handle.legacy, (CUdeviceptr)addr));
the second param should not ’addr‘, but ‘key->d_bptr’,
because key->d_bptr is mean allocated device memory base ptr
in document says
'addr' however may represent to baseaddr+offset ,
then cuIpcGetMemHandle return is undefined,may result to cumemcpy bug
BTW,I have a test to validate what would return when addr is base + offset
which mean pass base address or base + offset both will return same base handle
SO at the semantic level here should pass key->d_bptr,though now pass 'addr' may not lead to mismatch