提问人:Singyuk Lau 提问时间:9/6/2023 最后编辑:phuclvSingyuk Lau 更新时间:9/6/2023 访问量:110
AMD CPU 和 Intel CPU 上的浮动算术差异
Difference of floating arithmetics on AMD CPUs and Intel CPUs
问:
我是计算科学专业的学生。当我在 AMD CPU 上处理混合精度项目时,我发现单精度数据的行为与双精度数据类似。有时,单精度数据比双精度数据花费更多的计算时间。但 Intel CPU 上的混合精度计算按预期执行。
一个简化的例子:
double a = 1.0/3.0, c = 5.0/7.0;
float b = 1.0/3.0, d = 5.0/7.0;
double time4d = omp_get_wtime();
for(int i = 0;i < 10000000;i ++)
{
a = a + c;
}
std::cout << omp_get_wtime() - time4d << std::endl;
double time4f = omp_get_wtime();
for(int i = 0;i < 10000000;i ++)
{
b = float(b) + float(d);
}
std::cout << omp_get_wtime() - time4f << std::endl;
我正在使用带有以下标志的 g++:
-o main -fopenmp -O0 -ffloat-store
在配备 AMD EPYC 7713 64 核处理器的服务器上,输出为:
0.0388171
0.0388219
但是,在配备 Intel(R) Xeon(R) Gold 6136 CPU 的服务器上,输出为:
0.0424005
0.0244199
我想知道我是否错过了一些标志或操作,使单精度无法像预期的那样在 AMD CPU 上运行。是什么导致了这种现象?此外,如何使混合精度计算在 AMD CPU 上工作?
答: 暂无答案
评论
-O0 -ffloat-store
基本上会导致未优化的,甚至是“悲观”的构建,对吗?恕我直言,对未优化的代码进行基准测试是没有意义的。你想完成什么?-O3
-fp-model=precise
-ffast-math
-O0
-O0
-O2
-O3
-flto