MCPcopy Create free account
hub / github.com/ROCm/clr / IpcCreate

Method IpcCreate

rocclr/device/device.cpp:1028–1063  ·  view source on GitHub ↗

================================================================================================

Source from the content-addressed store, hash-verified

1026
1027// ================================================================================================
1028bool Device::IpcCreate(void* dev_ptr, size_t* mem_size, char* handle, size_t* mem_offset) const {
1029 amd::Memory* amd_mem_obj = amd::MemObjMap::FindMemObj(dev_ptr);
1030 if (amd_mem_obj == nullptr) {
1031 DevLogPrintfError("Cannot retrieve amd_mem_obj for dev_ptr: 0x%x", dev_ptr);
1032 return false;
1033 }
1034
1035 // Get the original pointer from the amd::Memory object
1036 void* orig_dev_ptr = nullptr;
1037 if (amd_mem_obj->getSvmPtr() != nullptr) {
1038 orig_dev_ptr = amd_mem_obj->getSvmPtr();
1039 } else if (amd_mem_obj->getHostMem() != nullptr) {
1040 orig_dev_ptr = amd_mem_obj->getHostMem();
1041 } else {
1042 ShouldNotReachHere();
1043 }
1044
1045 // Check if the dev_ptr is lesser than original dev_ptr
1046 if (orig_dev_ptr > dev_ptr) {
1047 // If this happens, then revisit FindMemObj logic
1048 DevLogPrintfError("Original dev_ptr: 0x%x cannot be greater than dev_ptr: 0x%x", orig_dev_ptr,
1049 dev_ptr);
1050 return false;
1051 }
1052
1053 // Calculate the memory offset from the original base ptr
1054 *mem_offset = reinterpret_cast<address>(dev_ptr) - reinterpret_cast<address>(orig_dev_ptr) +
1055 amd_mem_obj->getOffset();
1056
1057 *mem_size = amd_mem_obj->getSize();
1058
1059 auto dev_mem = static_cast<device::Memory*>(amd_mem_obj->getDeviceMemory(*this));
1060 auto result = dev_mem->ExportHandle(handle);
1061
1062 return result;
1063}
1064
1065// ================================================================================================
1066bool Device::IpcAttach(const char* handle, size_t mem_size, size_t mem_offset, unsigned int flags,

Callers 2

hipIpcGetMemHandleFunction · 0.80
hipMemPoolExportPointerFunction · 0.80

Calls 6

getSvmPtrMethod · 0.80
getHostMemMethod · 0.80
getOffsetMethod · 0.80
getSizeMethod · 0.45
getDeviceMemoryMethod · 0.45
ExportHandleMethod · 0.45

Tested by

no test coverage detected