我有一个项目,我在Mac Mini(Core2 Duo)和2014 Macbook quadcore i7上编译。两者都运行最新版本的优胜美地。该应用程序是单线程的,我使用完全相同的cmake版本和clang(xcode)编译器编译工具和库。由于轻微的数字差异,我得到测试失败。
我想知道不一致是否来自clang编译器自动执行特定于处理器的优化(我没有在cmake中选择)?处理器之间可能有区别吗?框架是否使用特定于处理器的优化?我正在使用Accelerate框架中的BLAS / Lapack例程。它们是从SuperLU稀疏矩阵分解包中调用的。
答案 0 :(得分:2)
通常,您不应期望BLAS或LAPACK的结果可以跨机器按位重现。实现者调整以获得最佳性能有很多因素,所有这些因素导致舍入的差异很小:
这些因素中的任何一个都足以导致细微差别;综合起来,应该预期结果不会按位相同。只要两个结果都满足计算的误差范围,那就没关系。
使结果相同将需要严格限制新机器的性能,这将导致您的闪亮昂贵的硬件浪费。