hipcc编译不生成可执行文件只输出版本信息问题
这其实是hipcc脚本的一个bug。楼主今天遇到bug,死去的记忆突然攻击我,在上个月也碰到了这个问题但当时没有弄明白为啥。
使用环境变量 HIPCC_VERBOSE我们可以看到完整的
编译和链接命令流。楼主得到了以下输出:
user# HIPCC_VERBOSE=1 hipcc -o reduce_scatter_demo reduce_scatter_demo.hip -I/opt/rocm-6.1.0/include -I/opt/ompi/include -L/opt/ompi/lib -L/opt/rocm-6.1.0/lib -lrccl -lmpi --offload-arch=gfx90a
hipcc-cmd: "/opt/rocm-6.1.0/llvm/bin/clang" -isystem "/opt/rocm-6.1.0/include" --offload-arch=gfx90a -O3 -mllvm -amdgpu-early-inline-all=true -mllvm -amdgpu-function-calls=false --hip-path="/opt/rocm-6.1.0" --hip-device-lib-path="/opt/rocm-6.1.0/amdgcn/bitcode" --version --driver-mode=g++ -O3 --hip-path="/opt/rocm-6.1.0" --hip-link --rtlib=compiler-rt -unwindlib=libgcc -o "reduce_scatter_demo" -x hip reduce_scatter_demo.hip -I/opt/rocm-6.1.0/include -I/opt/ompi/include -L/opt/ompi/lib -L/opt/rocm-6.1.0/lib -lrccl -lmpi
AMD clang version 17.0.0 (https://github.com/RadeonOpenCompute/llvm-project roc-6.1.0 24103 7db7f5e49612030319346f900c08f474b1f9023a)
Target: x86_64-unknown-linux-gnu
Thread model: posix
InstalledDir: /opt/rocm-6.1.0/llvm/bin
Configuration file: /opt/rocm-6.1.0/lib/llvm/bin/clang++.cfg
HIPCC_VERBOSE=1
打印出的第一行 hipcc-cmd
,这是 hipcc
真正执行的底层命令。
hipcc-cmd: "/opt/rocm-6.1.0/llvm/bin/clang" ... --hip-device-lib-path="..." --version --driver-mode=g++ ...
可以清楚地看到,在所有编译参数的中间,hipcc
脚本自己错误地插入了一个 --version
标志。
当底层的 clang
编译器执行这个命令时,它看到了 --version
,于是就执行了它的默认行为:打印版本信息然后立即退出。它完全忽略了后面的 -o reduce_scatter_demo
、输入文件 reduce_scatter_demo.hip
以及所有链接库的请求。
检查环境变量,发现是HIPCC_COMPILE_FLAGS_APPEND
的值为 --version
。
在/opt/rocm-6.1.0/bin/hipcc.pl脚本的最后部分,它会检查 HIPCC_COMPILE_FLAGS_APPEND
和 HIPCC_LINK_FLAGS_APPEND
这两个环境变量。如果它们被设置,它们的值就会被附加到 $HIPCXXFLAGS
和 $HIPCFLAGS
变量中 。