- 博客(11)
- 资源 (1)
- 收藏
- 关注
原创 AMD KFD ioctls分析 2: alloc memory of gpu
摘要:KFD的allocmemoryformgpu功能通过ioctl为虚拟地址分配物理内存,参数包括虚拟地址、大小、GPU标识和内存类型/访问标志。该功能调用栈创建drm_gem_object并生成用户态handle,但未完成虚拟地址映射。其中amdkfd_process_info结构体管理进程级VM和BO对象,但AMD驱动中复杂的双向指针关系增加了代码复杂度。内存类型标志指定VRAM/GTT等分配区域,访问标志定义可写/可执行等属性。
2025-06-26 17:10:34
160
原创 mmap 匿名映射
mmap匿名映射是一种高效的内存管理机制,主要用于分配大块连续虚拟地址空间。其核心特点包括:1)直接分配页对齐内存(通常4KB);2)返回零初始化的连续虚拟地址空间;3)适用于大内存分配(如超过128KB)和进程间共享。与malloc相比,mmap更底层,需手动释放(munmap),但避免了内存碎片问题。典型应用包括GPU显存映射、零拷贝数据传输等高性能场景。示例代码展示了如何通过MAP_ANONYMOUS标志创建1MB匿名映射区域,并实现读写操作。该机制通过虚拟地址到物理内存的映射,为需要大块连续内存的应
2025-06-26 15:08:37
319
原创 GPU中的event机制之signal page的通俗解释
摘要:信号页的工作原理可以用餐厅订单看板来类比。信号页是GPU(服务员)和用户程序(厨师)共享的内存区域(看板),GPU通过写入特定位置(放订单纸条)来触发事件,程序定期检查(看板)并处理相应事件(做菜)。这种方式避免了直接交互,实现高效通信(0.5秒快速响应)、并行处理(多订单不冲突)和简洁协作。本质上,信号页就是让硬件和软件通过共享内存区域进行异步通信的机制。
2025-06-23 20:46:41
203
原创 CUDA 统一寻址(Unified Addressing)
本文介绍了统一内存(Unified Memory)和统一寻址(Unified Addressing)的概念及其应用。统一内存允许系统中的任何处理器访问单一内存地址空间,简化了编程。通过cudaMallocManaged()分配的内存可从CPU和GPU直接访问,省去了数据拷贝的代码。文章详细说明了统一寻址的自动映射机制,包括主机内存自动映射和对等内存自动注册,并指出需要特殊处理的非统一寻址场景(如写入合并内存)。
2025-06-19 19:27:05
226
原创 地址空间中的Aperture的通用定义与规则详解
孔径是 GPU 内存寻址的 “地址路由表”,通过基址、限制、Mtype 和 ATC 位定义了地址范围的行为规则。64KB 对齐、禁止跨孔径和重叠等规则,本质上是为了硬件高效性和系统安全性。FLAT_* 指令的硬件检测与 S_LOAD 的驱动层约束,共同确保内存访问的合法性。孔径是 GPU 内存寻址中的关键概念,用于定义一段连续的虚拟地址范围,并指定其对应的内存类型和转换规则,可以理解为一段具有特定属性的地址空间。所有孔径(包括 SUA 和 DUA)的基址和限制地址必须满足。
2025-06-18 20:08:07
765
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人