---
title: 编译选项分析法
description: "编译器对精度有很大的影响，有些编译选项为了性能会牺牲掉精度，或者同一编译选项在不同的编译器上的实现是不一致的。本节介绍如何找到影响计算结果的编译选项。"
url: https://www.hikunpeng.com/document/detail/zh/perftuning/computp-wp/kunpengcomputp_19_0016.html
sourcePath: /source/zh/perftuning/computp-wp/kunpengcomputp_19_0016.html
indexId: 2179a6e16be489438e80563f3e0fee090593aeb79e6fc83f27ae80588b7986f060
---
# 编译选项分析法

编译器对精度有很大的影响，有些编译选项为了性能会牺牲掉精度，或者同一编译选项在不同的编译器上的实现是不一致的。本节介绍如何找到影响计算结果的编译选项。

#### 前提条件

两个平台初始时结果不一致，但在不添加任何编译选项时，两个平台的输出结果是完全一致的。如果存在数学库导致的差异，可以统一使用开源数学库SLEEF暂时屏蔽，使用方法请参考开源数学库SLEEF使用方法。

下面以WRF 3.4.1为例。

- 鲲鹏使用毕昇编译器，初始编译选项：

```
FCBASEOPTS_NO_G = -w
```


- x86使用ICC编译器，初始编译选项：

```
FCBASEOPTS_NO_G = -w -ftz -align all -fno-alias -fp-model precise
```


1. 两个平台去掉FCBASEOPTS_NO_G的编译选项。
其计算结果是完全一致的。

  - 鲲鹏编译选项：

```
FCBASEOPTS_NO_G =
```


  - x86编译选项：

```
FCBASEOPTS_NO_G =
```


2. 逐步增加剩余编译选项。

  a. 增加-w，两个平台计算结果仍旧一致。

    - 鲲鹏编译选项：

```
FCBASEOPTS_NO_G = -w
```


    - x86编译选项：

```
FCBASEOPTS_NO_G = -w
```


  b. 增加-ftz，两个平台计算结果出现差异。

    - 鲲鹏编译选项：

```
FCBASEOPTS_NO_G = -w
```


    - x86编译选项：

```
FCBASEOPTS_NO_G = -w -ftz
```


  c. 先屏蔽-ftz编译选项，继续增加剩余编译选项。最终确认无新的编译选项会影响结果。
3. 针对找出影响计算结果的-ftz编译选项，分析其产生差异的原因和修改方法。
