HIP Logging

HIP(Heterogeneous-compute Interface for Portability)提供了一种日志记录机制,可以帮助追踪 HIP API 和运行时代码的执行情况。

一、HIP Logging Level

日志级别可以通过环境变量 AMD_LOG_LEVEL 来设置。默认情况下,HIP 日志是禁用的。以下是可用的日志级别枚举:

enum LogLevel {
  LOG_NONE = 0,   // 不记录任何日志
  LOG_ERROR = 1,   // 仅记录错误信息
  LOG_WARNING = 2, // 记录错误和警告信息
  LOG_INFO = 3,    // 记录错误、警告和一般信息
  LOG_DEBUG = 4    // 记录所有信息,包括调试信息
};
二、HIP Logging Mask

日志掩码用于控制记录 HIP 应用程序执行期间不同功能类型的日志。以下是可用的日志掩码枚举:

enum LogMask {
  LOG_API = 0x00000001,     // API调用
  LOG_CMD = 0x00000002,     // 内核和拷贝命令以及屏障
  // ... 其他日志掩码选项
  LOG_ALWAYS = 0xFFFFFFFF, // 即使掩码标志为零也总是记录
};

一旦设置了 AMD_LOG_LEVEL,日志掩码将默认设置为 0x7FFFFFFF。然而,根据不同的日志记录功能需求,也可以通过环境变量 AMD_LOG_MASK 来定义日志掩码。

三、HIP Logging Command

HIP 定义了一个 ClPrint 宏来打印日志信息:

#define ClPrint(level, mask, format, ...) 
  do { 
    if (AMD_LOG_LEVEL >= level) { 
      if (AMD_LOG_MASK & mask || mask == amd::LOG_ALWAYS) { 
        if (AMD_LOG_MASK & amd::LOG_LOCATION) { 
          amd::log_printf(level, __FILENAME__, __LINE__, format, ##__VA_ARGS__); 
        } else { 
          amd::log_printf(level, "", 0, format, ##__VA_ARGS__); 
        } 
      } 
    } 
  } while (false)

在这个宏中:

  • level 指定日志级别。
  • mask 指定日志掩码。
  • format 是日志消息的格式字符串。
  • __VA_ARGS__ 是格式字符串中占位符的参数。

示例用法

在 HIP 代码中,根据需要使用适当的输入变量调用 ClPrint() 函数,例如:

ClPrint(amd::LOG_INFO, amd::LOG_INIT, "Initializing HSA stack.");

这行代码将在日志级别至少为 LOG_INFO 且启用了 LOG_INIT 掩码时,打印出初始化 HSA 栈的信息。

四、Examples

  • 5
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值