将
cmath
和 AMD 数学库链接到 C++ 时,观察到 AMD 数学库替换了 cmath
中的所有函数。
在使用GDB调试时,发现以下输出证明了上述说法。
Gdb 的命令行输出:
附上用于检查上述语句的代码片段。
#include "amdlibm.h"
#include "math.h"
namespace amdfunc {
void sqrttest() {
printf("Calling amd func\n");
double val = 22.34;
double val1;
double val2;
for (int i = 0; i < 5000000000; i++) {
val1 = amd_sqrt(val);
}
}
}
namespace normalfunc {
void sqrttest() {
printf("Calling cmath func\n");
double val = 22.34;
double val1;
double val2;
for (int i = 0; i < 5000000000; i++) {
val1 = sqrt(val);
}
}
}
int main() {
normalfunc::sqrttest();
amdfunc::sqrttest();
}
命令行:使用以下命令链接库并编译代码。
g++ test.cpp -g -o testinglib -L/usr/lib/x86_64-linux-gnu -L/usr/lib -I/usr/include -I/home/test/include -Wl,-rpath,/home/test/lib /home/test/lib/libalm.so -lm
我们在编译时重新排序了库,发现了同样的错误。 附上我们使用文件的 AMD 数学库链接 https://www.amd.com/en/developer/aocl/libm.html
编译并运行可执行文件
这是预期行为
AOCL-LibM 是一个 C 库,您可以 链接到您的应用程序以替换编译器提供的数学函数。
文档第 67 页
https://www.amd.com/content/dam/amd/en/documents/pdfs/developer/aocl/aocl-v4.0-ga-user-guide.pdf