ROCm rocr-libhsakmt分析系列9-5: queue测试用例DisableCpQueueByUpdateWithNullAddress 功能详解

前文AMD rocr-libhsakmt分析系列8-3: queue内核实现讲述了queue的实现,本文是测试用例的功能分析。

1. 功能概述

这个测试函数用于测试通过更新队列参数来禁用和重新启用CP(Command Processor)队列的功能。该测试验证了队列禁用后不会执行新提交的命令包,以及重新启用后能够正常执行命令。

2 关键实现分析

2.1 初始化阶段
int gpuNode = pTestParamters->gpuNode;
HsaMemoryBuffer destBuf(PAGE_SIZE, gpuNode, false);
destBuf.Fill(0xFFFFFFFF);
PM4Queue queue;
  • 获取GPU节点ID
  • 创建一个页面大小的内存缓冲区,用于测试写入操作
  • 将缓冲区填充为 0xFFFFFFFF 作为初始值
  • 创建PM4队列(PM4是AMD GPU的命令包格式)
2.2 队列创建和事件设置
ASSERT_SUCCESS_GPU(queue.Create(gpuNode), gpuNode);
HsaEvent *event;
ASSERT_SUCCESS_GPU(CreateQueueTypeEvent(false, false, gpuNode, &event), gpuNode);
  • 在指定GPU节点上创建队列
  • 创建用于同步的HSA事件
2.3 第一次测试:正常队列操作
queue.PlaceAndSubmitPacket(PM4WriteDataPacket(destBuf.As<unsigned int*>(), 0, 0));
queue.Wait4PacketConsumption(event);
WaitOnValue(destBuf.As<unsigned int*>(), 0);
  • 提交一个写入命令包,将值 0 写入缓冲区
  • 等待命令包执行完成
  • 验证写入成功(缓冲区值从 0xFFFFFFFF 变为 0
2.4 禁用队列测试
destBuf.Fill(0xFFFFFFFF);
EXPECT_SUCCESS_GPU(queue.Update(BaseQueue::DEFAULT_QUEUE_PERCENTAGE, BaseQueue::DEFAULT_PRIORITY, true), gpuNode);
queue.PlaceAndSubmitPacket(PM4WriteDataPacket(destBuf.As<unsigned int*>(), 1, 1));
Delay(2000);
EXPECT_EQ_GPU(destBuf.As<unsigned int*>()[0], 0xFFFFFFFF, gpuNode);
  • 重新填充缓冲区为 0xFFFFFFFF
  • 关键:调用 queue.Update() 的第三个参数为 true,这会禁用队列
  • 提交一个新的写入命令包(写入值 1
  • 等待2秒
  • 验证:缓冲区值仍为 0xFFFFFFFF,说明命令包没有执行(队列被成功禁用)
2.5 重新启用队列测试
EXPECT_SUCCESS_GPU(queue.Update(BaseQueue::DEFAULT_QUEUE_PERCENTAGE, BaseQueue::DEFAULT_PRIORITY, false), gpuNode);
queue.Wait4PacketConsumption(event);
WaitOnValue(destBuf.As<unsigned int*>(), 1);
  • 调用 queue.Update() 的第三个参数为 false,重新启用队列
  • 等待之前提交的命令包执行完成
  • 验证缓冲区值变为 1,说明队列重新启用后,之前暂停的命令包得到执行
2.6 清理资源
hsaKmtDestroyEvent(event);
EXPECT_SUCCESS_GPU(queue.Destroy(), gpuNode);
  • 销毁事件对象
  • 销毁队列

3. 测试意义

这个测试验证了KFD(Kernel Fusion Driver)中队列管理的重要功能:

  1. 动态队列控制:能够在运行时禁用和启用队列

  2. 命令包排队机制:禁用期间提交的命令包会被暂停,而不是丢失

  3. 状态恢复:重新启用后,暂停的命令包能够继续执行

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

DeeplyMind

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值