https://github.com/ROCm/hip-tests/tree/develop/samples/0_Intro/square用hipcc编译时告警及错误处理

187 篇文章 1 订阅
11 篇文章 0 订阅

告警及错误

~/hip-tests/samples/0_Intro/square$ /opt/rocm/bin/hipcc  square.cpp -o square.out
/opt/rocm-6.0.2//bin/rocm_agent_enumerator:95: SyntaxWarning: invalid escape sequence '\w'
  @staticVars(search_name=re.compile("gfx[0-9a-fA-F]+(:[-+:\w]+)?"))
/opt/rocm-6.0.2//bin/rocm_agent_enumerator:152: SyntaxWarning: invalid escape sequence '\A'
  line_search_term = re.compile("\A\s+Name:\s+(amdgcn-amd-amdhsa--gfx\d+)")
/opt/rocm-6.0.2//bin/rocm_agent_enumerator:154: SyntaxWarning: invalid escape sequence '\A'
  line_search_term = re.compile("\A\s+Name:\s+(gfx\d+)")
/opt/rocm-6.0.2//bin/rocm_agent_enumerator:175: SyntaxWarning: invalid escape sequence '\w'
  target_search_term = re.compile("1002:\w+")
ld.lld: error: unable to find library -lstdc++
clang: error: linker command failed with exit code 1 (use -v to see invocation)

告警的处理

告警的python版本是3.12.1,切换到3.10.14版本环境时,不再告警。

文心一言

这些SyntaxWarning警告是由于在Python字符串中使用了反斜杠\作为转义字符,但后面跟的字符(如\w\A)在Python字符串中并不是有效的转义序列。然而,这些警告并不是直接由你的HIP代码产生的,而是由ROCm安装中的某个Python脚本(在这个例子中是rocm_agent_enumerator)产生的。

在Python 3中,字符串字面量默认是Unicode字符串(即str类型),并且反斜杠\是转义字符。为了匹配正则表达式的特殊字符,比如\w(匹配任何字母数字字符和下划线)或\A(匹配字符串的开头),你通常需要在原始字符串(raw string)前加上r,或者在反斜杠前再加一个反斜杠来进行转义,比如\\w

但是,你提到的在不同Python版本环境下这些警告的出现和消失,很可能是由于这两个Python版本对无效转义序列的默认处理方式不同。从Python 3.6开始,Python对无效转义序列的默认警告行为有所改变,可能会在某些情况下更加严格。

要解决这个问题,你有几个选项:

  1. 更新ROCm安装:检查是否有ROCm的更新版本,它可能已经修复了这个问题。

  2. 修改脚本:如果你有权限,你可以直接修改rocm_agent_enumerator脚本,将字符串更改为原始字符串(在字符串前加上r),或者对无效转义序列进行正确的转义。

  3. 忽略警告:如果这些警告不影响程序的运行,并且你确定这些脚本在运行时能够正常工作,你可以选择忽略这些警告。但是,这通常不是一个好的做法,因为警告可能指向潜在的问题。

  4. 使用不同的Python环境:如果你需要继续在当前环境下工作,并且无法更新ROCm或修改相关脚本,你可以考虑使用没有产生这些警告的Python环境。

  5. 报告问题:如果你认为这是ROCm的一个bug,你可以向ROCm的开发者报告这个问题。

最后,虽然这些警告可能看起来令人不安,但它们通常不会阻止程序继续运行(除非它们被转换为错误)。然而,最好还是解决它们,以确保代码的健康和可维护性。

讯飞星火

是的,这个警告是由于Python版本的问题导致的。在Python 3.12.1中,正则表达式模块(re)对某些转义序列的处理与Python 3.10.14有所不同。在这个例子中,'\w'、'\A'等转义序列在Python 3.12.1中被认为是无效的,而在Python 3.10.14中则没有问题。

为了解决这个问题,你可以尝试将代码中的这些无效转义序列替换为有效的转义序列。例如,将'\w'替换为'[a-zA-Z0-9_]',将'\A'替换为'^'。修改后的代码如下:

@staticVars(search_name=re.compile("gfx[0-9a-fA-F]+(:[-+:[a-zA-Z0-9_]+)?"))
line_search_term = re.compile("^[ \t]+Name:[ \t]+(amdgcn-amd-amdhsa--gfx\d+)")
line_search_term = re.compile("^[ \t]+Name:[ \t]+(gfx\d+)")
target_search_term = re.compile("1002:[a-zA-Z0-9_]+")

这样修改后,代码应该可以在Python 3.12.1环境中正常运行,不再出现警告。

DeepSeek

这些警告看起来像是Python正则表达式中的转义序列问题。在Python中,正则表达式字符串应该使用原始字符串语法(在字符串前面加上r)来避免转义字符的问题。例如,r"\A\s+Name:\s+(amdgcn-amd-amdhsa--gfx\d+)"

在你的情况下,警告提示\w\A是无效的转义序列。\w通常表示任何字母数字字符或下划线,而\A表示字符串的开始。这些应该是有效的正则表达式元字符,而不是需要转义的字符。

在你的Python 3.12.1环境中出现这些警告,而在Python 3.10.14环境中没有,这可能是因为Python 3.12.1对正则表达式的解析更加严格,或者是因为Python 3.12.1中的某些默认行为发生了变化。

为了解决这个问题,你可以尝试以下几个步骤:

  1. 确保在正则表达式字符串前面加上r,使其成为原始字符串。

  2. 检查正则表达式是否正确,特别是转义序列是否正确。

  3. 如果正则表达式是正确的,那么可能是Python 3.12.1的一个bug,你可以尝试查找相关的bug报告或更新到最新的Python版本。

  4. 如果问题仍然存在,你可以尝试在Python 3.12.1环境中使用warnings模块来抑制这些警告,或者在编译时使用-W ignore选项来忽略它们。

请注意,Python 3.12.1并不是一个官方发布的版本,截至我的知识更新日期(2023年),Python 3.10.x是较新的稳定版本。如果你使用的是一个非官方的或预发布的Python版本,那么可能会遇到一些未解决的问题或bug。建议使用官方支持的Python版本进行开发。

kimi

在Python中,正则表达式中的反斜杠\是一个特殊字符,用于引入特殊字符或转义其他特殊字符。在Python 3.11及以后的版本中,识别正则表达式的语法做了一些更改,这可能导致在不同版本的Python中,相同的正则表达式被解释的方式不同。

在你提供的错误信息中,\w\A是正则表达式中的两个特殊序列:

  • \w 匹配任何字母数字字符,包括下划线 _
  • \A 匹配字符串的开头。

在Python 3.10及之前的版本中,这些序列被正确理解为正则表达式的一部分。但在Python 3.11及以后的版本中,字符串前缀r(原始字符串)不再是默认行为,这意味着在字符串中,反斜杠\不再是默认的转义字符,除非字符串是使用原始字符串(即以rR开头的字符串)。

错误信息中的SyntaxWarning是由于在解析正则表达式时,Python解释器期望反斜杠是一个转义字符,但由于默认行为的改变,它没有被正确转义,导致了语法警告。

为了解决这个问题,你可以采取以下措施之一:

  1. 升级Python版本:如果你的代码需要在Python 3.11或更高版本上运行,确保所有的正则表达式都使用原始字符串,即在字符串前加上r前缀,例如r"\w"

  2. 修改代码以兼容新版本:如果升级Python版本不是一个选项,你需要修改代码,确保在正则表达式中使用双反斜杠\\来代替单反斜杠\,以此来明确转义字符。

  3. 环境管理:如果你有多个Python版本,确保你的项目环境使用的是正确的Python版本,并且所有的依赖和代码都与该版本兼容。

在Python 3.12.1环境中没有这个警告,很可能是因为在该环境中使用的正则表达式符合新版本的语法要求,或者该环境中的代码已经针对新版本的特性做了适配。

Comate

是的,这个警告确实是由于 Python 版本问题引起的。在 Python 3.12 中,正则表达式中的反斜杠(\)被视为特殊字符,需要转义。而在早期版本的 Python 中,反斜杠的处理方式可能略有不同,所以你在 Python 3.10.14 环境中没有看到这个警告。

要解决这个问题,你有两个选择:

  1. 降级 Python 版本:如果你的代码在其他 Python 版本中运行良好,并且没有遇到其他与版本相关的问题,你可以考虑将 Python 版本降级到没有警告的版本(例如 Python 3.10.14)。但这不是一个长期的解决方案,因为新版本的 Python 通常包含安全修复和性能改进。

  2. 修复正则表达式:更好的解决方案是修复正则表达式中的反斜杠问题。在正则表达式中,如果你想要匹配反斜杠本身,你应该使用双反斜杠(\)来转义它。对于你的例子中的正则表达式,应该进行如下修改:

    • 将 "\w" 改为 "\\w"
    • 将 "\A" 改为 "\\A"

你可以尝试找到引发警告的代码文件(可能是 /opt/rocm-6.0.2/bin/rocm_agent_enumerator),并尝试修改其中的正则表达式,以解决警告问题。但请注意,在修改系统文件之前,最好备份原始文件,以防止出现不可预知的问题。

如果你不方便直接修改系统文件,你还可以考虑向 ROCm 项目的维护者报告这个问题,并提供一个修复方案,以便他们在未来的版本中修复这个问题。

希望这可以帮助你解决问题!如果你有其他疑问或需要进一步的帮助,请随时提问。

通义灵码

是的,这个问题很可能是由于Python版本引起的。在Python 3.6及更高版本中,对字符串中的不合法转义序列进行了更严格的检查。在你的例子中,\w\A这些正则表达式中的转义序列在Python 3.12.1环境中被认为是无效的,因为它们没有对应的特殊含义。在Python 3.10.14环境下,可能这些警告没有被严格处理或者已经被修正。

要解决这个警告,你可以更新正则表达式中的转义序列,如下所示:

  1. \w 应该被替换为 [\w] 或 [a-zA-Z0-9_],因为它在Python中用于匹配字母、数字和下划线。
  2. \A 是开始标记,但在Python中通常用 ^ 表示字符串或行的开始。

例如,re.compile("gfx[0-9a-fA-F]+(:[-+:\w]+)?") 可以改为 re.compile("gfx[0-9a-fA-F]+(:[-+:[\w]]+)?")

确保所有正则表达式中的类似转义序列都被正确更新,这将消除Python 3.12.1中的警告。如果你没有权限修改这些文件,你可能需要联系库的维护者,让他们知道这个问题并请求他们更新代码。

错误的处理

编译时候加-v参数:

~/hip-tests/samples/0_Intro/square$ /opt/rocm/bin/hipcc  square.cpp -o square.out -v

可以看到最后链接时候的信息:

 "/opt/rocm-6.0.2//llvm/bin/ld.lld" -z relro --hash-style=gnu --eh-frame-hdr -m elf_x86_64 -dynamic-linker /lib64/ld-linux-x86-64.so.2 -o square.out /lib/x86_64-linux-gnu/crt1.o /lib/x86_64-linux-gnu/crti.o /opt/rocm-6.0.2/lib/llvm/lib/clang/17.0.0/lib/linux/clang_rt.crtbegin-x86_64.o -L/usr/lib/gcc/x86_64-linux-gnu/12 -L/usr/lib/gcc/x86_64-linux-gnu/12/../../../../lib64 -L/lib/x86_64-linux-gnu -L/lib/../lib64 -L/usr/lib/x86_64-linux-gnu -L/usr/lib/../lib64 -L/lib -L/usr/lib --enable-new-dtags /tmp/square-33ba8d.o -L/opt/rocm-6.0.2/lib -rpath /opt/rocm-6.0.2/lib -lamdhip64 -lstdc++ -lm /opt/rocm-6.0.2/lib/llvm/lib/clang/17.0.0/lib/linux/libclang_rt.builtins-x86_64.a -lgcc_s -lc /opt/rocm-6.0.2/lib/llvm/lib/clang/17.0.0/lib/linux/libclang_rt.builtins-x86_64.a -lgcc_s /opt/rocm-6.0.2/lib/llvm/lib/clang/17.0.0/lib/linux/clang_rt.crtend-x86_64.o /lib/x86_64-linux-gnu/crtn.o
ld.lld: error: unable to find library -lstdc++
clang: error: linker command failed with exit code 1 (use -v to see invocation)

找到动态链接库libstdc++.so,将它复制到/opt/rocm-6.0.2/lib目录,错误解决。

Square.md

hip-tests/samples/0_Intro/square at rocm-6.0.x · ROCm/hip-tests (github.com)

Simple test below is an example, shows how to use hipify-perl to port CUDA code to HIP:

  • Add hip/bin path to the PATH
$ export PATH=$PATH:[MYHIP]/bin
  • Define environment variable
$ export HIP_PATH=[MYHIP]
  • Build executible file
$ cd ~/hip/samples/0_Intro/square
$ make
/opt/rocm/hip/bin/hipify-perl square.cu > square.cpp
/opt/rocm/hip/bin/hipcc  square.cpp -o square.out
/opt/rocm/hip/bin/hipcc -use-staticlib  square.cpp -o square.out.static
  • Execute file
$ ./square.out
info: running on device Navi 14 [Radeon Pro W5500]
info: allocate host mem (  7.63 MB)
info: allocate device mem (  7.63 MB)
info: copy Host2Device
info: launch 'vector_square' kernel
info: copy Device2Host
info: check result
PASSED!
~/hip-tests/samples/0_Intro/square$ /opt/rocm/bin/hipcc  square.cpp -o square.out
~/hip-tests/samples/0_Intro/square$ ./square.out 
info: running on device AMD Radeon PRO W7900
info: allocate host mem (  7.63 MB)
info: allocate device mem (  7.63 MB)
info: copy Host2Device
info: launch 'vector_square' kernel
info: copy Device2Host
info: check result
PASSED!

  • 30
    点赞
  • 22
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

109702008

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

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

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

打赏作者

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

抵扣说明:

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

余额充值