中文
注册
我要评分
文档获取效率
文档正确性
内容完整性
文档易理解
在线提单
论坛求助
鲲鹏小智

体系结构的差异

计算结果的差异往往是多方面因素引起的。当两个平台的代码实现不同时,精度差异就很容易产生。当两个平台的代码实现相同时,精度主要由体系结构、编译器、数学库、MPI的差异引起。不同平台损失精度换取速度的策略不同,会导致结果不准。相同平台修改不同编译选项,也会造成结果不一致。对于HPC应用来说还要考虑一种情况,就是不同的进程数也会造成精度差异。因为进程数不同,对应的应用网格剖分策略就不同,导致对产生的结果进行汇总时精度也不同。

从底层架构来看,鲲鹏处理器和x86的芯片架构不同,x86设计有40位和80位的浮点计算单元,而鲲鹏处理器上并没有这些计算单元。如果x86平台有使用到这些计算单元,那么两个平台的计算结果就可能不一致。目前可以在鲲鹏机器上通过软件模拟的方式来解决这类问题。例如,icc的数学库使用了powr8i4函数,该函数调用了x87的80位指令,即用80位来表示浮点数。在鲲鹏机器上可以使用支持多种精度计算的开源mpfr库来实现80位浮点数的pow运算。

  • x86设计有40位、80位的浮点计算单元,在鲲鹏处理器上并没有这些计算单元。
  • FTZ和DAZ是专门用来处理非规格浮点数的标准,并且已经固化到硬件实现。在这个标准上,鲲鹏和Intel存在差异,以计算如下值为例:
    float a= 1.09628081709e-33;  
    float b= 1.07225660031e-05; 
    float c = a * b; 

    鲲鹏结果(先执行乘法得到非规格浮点数,然后执行FTZ转化为0,最后执行舍入,结果还是0): 0

    x86结果(先执行乘法得到非规格浮点数,然后执行舍入,转化为0x800000,最后执行FTZ,结果就是0x800000): 1.17549435082e-38

搜索结果
找到“0”个结果

当前产品无相关内容

未找到相关内容,请尝试其他搜索词