嗨,我使用的是 CAPS OpenACC 编译器,但编译器似乎无法将函数链接到标准 math.h。
实际上,在我的例子中,我在加速循环中的代码中使用了 sqrt 函数。当我编译代码时,抛出以下错误:
/tmp/cc8L0aKZ.o:compute_fluxes_XrxAnW.translated.i:function _flux_function_central: error: undefined reference to 'sqrt'
有人得到一些解决方案吗?
谢谢!
所有加速器代码都必须使用常规指令进行标记。否则编译器不会为它生成设备代码。PGI 有一篇文章解释了如何处理这个问题。
您可以阅读这篇文章,或者尝试在代码中添加以下内容和其他顶级声明:
#pragma acc routine(sqrt) seq
请重试
caps capsmc --openacc-target CUDA --io-report -Xnvcc -arch=sm_13 -c --force gcc -std=c99 -L/usr/include/math.h **-lm** compute_fluxes.c -o cf.13
(-lm
实际上与标准数学库链接)