一.export进程涉及的API
(1) hsaKmtAllocMemroy——申请一块内存对应的虚拟地址和物理地址
(2) hsaKmtMapMemoryToGPU——为虚拟地址和物理地址建立映射关系
(3) hsaKmtShareMemory——将申请的内存共享出去(创建shareHandle,通过参数返回)
(4) hsaKmtUnmapMemoryToGPU——解除虚拟地址和物理内存的映射
(5) hsaKmtFreeMemory——释放分配的虚拟地址和物理内存
二.import进程涉及的API
(1) hsaKmtRegisterSharedHandle——导入export进程创建的共享内存(通过参数传入shareHandle),并为其分配虚拟地址
(2) hsaKmtMapMemoryToGPU——为虚拟地址和共享内存建立映射关系
(3) hsaKmtUnmapMemoryToGPU —— 解除虚拟地址和共享内存的映射
(4) hsaKmtDeregisterMemory —— 释放分配的虚拟地址
三.可见ROCT进程间内存共享实现的关键是shareHandle
1.shareHandle是什么?
struct kfd_ioctl_ipc_export_handle_args {
__u64 handle; /* to KFD */
__u32 share_handle[4]; /* from KFD */
__u32 gpu_id; /* to KFD */
__u32 flags; /* to KF