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

计算精度分析

计算精度分析工具用于定位x86和鲲鹏指令引起的Fortran语言精度差异问题。

支持:

  • 平台:支持鲲鹏、x86(Intel和AMD)。
  • 语言版本格式:支持Fortran77、90、95、03、08、18,支持fix-form、free-form。
  • 插桩对象类型:REAL与COMPLEX类型的单个变量或者可获得形状长度的数组。
  • 插桩位置:实际赋值、调用语句之后对变量插桩。
  • 编译器版本:支持GFortran-10.3.1、BiShengCompiler-4.0.0 flang。

暂不支持:

  • 某些编译器指令暂不支持,例如循环展开操作!dir$ unroll n、内联操作!DIR$ ATTRIBUTES FORCEINLINE :: XXX指令等。
  • 多节点运行环境暂不支持。
  • 无法获取长度的星号数组、指针、自定义结构体类型,以及它们的复杂嵌套表达式暂不支持插桩。
  • 由于不同Fortran编译器、同一Fortran编译器不同版本的mod文件格式存在兼容性问题,建议使用支持的编译器版本。

命令功能

定位x86和鲲鹏平台上Fortran语言的精度差异。

命令格式

编译插桩:

1
devkit advisor precision [-h | --help] {-instrument | --instrument} {-c COMMAND COMMANDS | --commands COMMANDS} {-p PROJECT | --project PROJECT} {-e ENTRY | --entry ENTRY} [-d DEPTH | --depth DEPTH] [-b BLACK_LIST | --black-list BLACK_LIST] [-L | --loops] [-l {0,1,2,3} | --log-level {0,1,2,3}] [--set-timeout TIMEOUT]

日志差异分析:

1
devkit advisor precision [-h | --help] {-analysis | --analysis} {-i INPUT_LOG | --input INPUT_LOG} [-l {0,1,2,3} | --log-level {0,1,2,3}] [--set-timeout TIMEOUT]

使用计算精度分析工具,需先在不同平台(鲲鹏、x86)上执行编译插桩操作,执行完成后再进行日志差异分析操作。

参数说明

表1 编译插桩模式参数说明

参数

参数选项

参数说明

-h/--help

-

获取帮助信息。

-instrument/--instrument

-

必选参数,指定编译插桩模式。

-c/--commands

COMMANDS

必选参数,源码的构建命令,若存在多个构建命令需使用英文分号分割并用英文双引号包住,命令中如有空格,也需要用英文双引号包住。

例如:"make all"或"cd /home/test;make"。

说明:
  • 不接受直接执行cmake命令,需预先执行。
  • 命令行工具源码构建命令不支持设置变量和export环境变量。

    例如:"CFLAGS='-O0 -g';make"或"export CFLAGS='-O0 -g';make"。

-p/--project

PROJECT

必选参数,项目源码的绝对路径。

例如:/home/test/project1/或/home/project2/。

-e/--entry

ENTRY

必选参数,指定插桩入口文件和对应的函数,该选项允许多次输入。每个文件和对应的函数需要用英文冒号“:”分隔,多个函数需要用英文逗号“,”分隔。 入口文件需输入其在项目路径下的相对路径(-p/--project指定),文件实际参与编译,不能为预处理前的源文件。函数为指定Fortran文件中存在的Mainprogram、Function或Subroutine。

例如:-e demo.f90:main -e demo2.f90:func。

-d/--depth

DEPTH

从入口函数向下连续插桩的深度,默认为0,取值范围为0至99。

-b/--black-list

BLACK_LIST

指定不参与插桩的文件,不能包含-e参数所指定的文件。

例如:"/home/test/demo1.f90;/home/test/demo2.f90"

-L/--loops

-

指定进行循环内插桩。在此选项下,插桩后运行可执行文件生成的精度日志文件大小会增加,请合理安排插桩入口(入口文件、入口函数)和深度。

-l/--log-level

0/1/2/3

设置日志级别,默认为1。

  • 0:日志级别为DEBUG。
  • 1:日志级别为INFO。
  • 2:日志级别为WARNING。
  • 3:日志级别为ERROR。

--set-timeout

-

任务超时时间,单位为分钟,若执行时间超过超时时间则退出执行。默认无超时时间,任务将持续执行直到结束。

表2 日志差异分析模式参数说明

参数

参数选项

参数说明

-h/--help

-

获取帮助信息。

-analysis/-- analysis

-

必选参数,指定日志差异分析模式。

-i/--input

INPUT_LOG

必选参数,指定日志文件,输入顺序为鲲鹏日志、x86日志(数量为2)。

例如:输入文件"/home/kp.log;/home/x86.log"或路径"/home/kp/;/home/x86/"。

-l/--log-level

0/1/2/3

设置日志级别,默认为1。

  • 0:日志级别为DEBUG。
  • 1:日志级别为INFO。
  • 2:日志级别为WARNING。
  • 3:日志级别为ERROR。

--set-timeout

-

任务超时时间,单位为分钟,若执行时间超过超时时间则退出执行。默认无超时时间,任务将持续执行直到结束。

使用示例

此处以扫描“/home/test/demo1”路径下源码文件为例,编译命令为cmake ..make,请根据实际情况进行修改。

demo1文件目录结构:

1
2
3
4
5
6
demo1
├── build
├── CMakeLists.txt
├── funcparam_utils.f90
├── shape_utils.f90
└── test.f90
  1. 分别在鲲鹏环境和x86环境的项目目录下运行编译插桩操作。
    1
    2
    3
    cd /home/test/demo1/build
    cmake ..
    devkit advisor precision -instrument -c make -p /home/test/demo1 -e test.f90:main -d 1
    

    回显信息如下:

    1
    2
    3
    4
    5
    6
    7
    Perform the instrumentation and compilation mode.
    Finish run precision check tool.
    For detail logs on the tool, see /Absolute-Path-to-DevKit-CLI/advisor/logs/preccheck.log and /home/test1/demo1/build/precision_20241106111820_6193.txt
    Please check whether error information exists in above two files to ensure that the project can run properly.
    Before running the project to get the log file, please add:
      1) the libcorrect.mod file path: export LD_LIBRARY_PATH=/Absolute-Path-to-DevKit-CLI/advisor/devkitplugins/affinity/tools/compileopt/libcruiser/gfortran_lib(or flang_lib):$LD_LIBRARY_PATH
      2) the log file path: export CRUISER_LOG=/absPATH/
    
    • 在执行编译插桩模式前,必须保证项目是未编译过的,否则在增量编译的情况下,编译命令获取不完整,会导致程序执行失败。
    • “/Path_to_Devkit_CLI/”:DevKit命令行工具路径。
    • -p指定项目源码路径(“/home/test1/demo1/”),-e参数指定项目源码路径下的插桩入口文件和对应的函数(test.f90:main)。
    • 执行编译插桩后,会在插桩入口文件所在路径下生成同名的.bak文件(test.f90.bak),会在“build”目录下生成可执行文件。
    • 编译插桩模式下txt文件中若有Error相关信息,请参见计算精度分析编译插桩模式下txt文件中显示Error的解决办法进行处理。
  2. 在鲲鹏和x86环境下重新运行编译后的可执行文件。
    1. 根据编译器类型添加对应的libcruiser库路径。
      gfortran:
      1
      export LD_LIBRARY_PATH=/Path_to_Devkit_CLI/advisor/devkitplugins/affinity/tools/compileopt/libcruiser/gfortran_lib:$LD_LIBRARY_PATH
      

      flang:

      1
      export LD_LIBRARY_PATH=/Path_to_Devkit_CLI/advisor/devkitplugins/affinity/tools/compileopt/libcruiser/flang_lib:$LD_LIBRARY_PATH
      
    2. 添加生成日志文件路径。
      1
      export CRUISER_LOG=/LOGPATH/
      

      “/LOGPATH/”:生成的日志文件存放路径。

    3. 运行可执行文件。
      1
      ./myprogram
      

      运行可执行文件后若有以下输出信息,表示日志文件所在路径磁盘空间已不满足1G,请清理磁盘空间。

      1
      [ERROR] Insufficient disk space in /home/test1/, please clean up the disk.
      

      myprogram:生成的可执行文件。

      生成日志时请注意磁盘空间大小。

    4. 查看生成的cruiser.log日志文件,日志内容如下:
      1
      2
      3
      4
      5
      6
      shape_utils.f90|absize|=|28|ins|998058|429d81ed2795e3c586906c6c335aa136
      shape_utils.f90|absize|=|28|ins|998058|429d81ed2795e3c586906c6c335aa136
      test.f90|main|absize|26|array1d|998058|22160b46bba283274412c4033f1f33fe
      shape_utils.f90|absize|=|28|ins|998058|429d81ed2795e3c586906c6c335aa136
      test.f90|main|xysize|35|x2|998058|5d5ebe7707f02dec747fd0d111d0f83c
      test.f90|main|submain|41|array1d|998058|22160b46bba283274412c4033f1f33fe
      

      日志文件中的内容解释:

      1. 第一部分:文件名。
      2. 第二部分:第三部分内容表达式语句所在的当前最小作用域名称,可能是函数、子例程或主程序。
      3. 第三部分:当插桩变量位于函数调用语句(作为函数参数)时,此处为被调用函数名;当插桩变量位于赋值语句时,此处为“=”号。
      4. 第四部分:行号。
      5. 第五部分:插桩变量名。
      6. 第六部分:线程ID。
      7. 第七部分:HASH值。
  3. 在鲲鹏或x86平台上进行日志差异分析操作。
    将鲲鹏平台上生成的cruiser.log日志文件改名为cruiser_kp.log,x86平台上生成的cruiser.log日志文件改名为cruiser_x86.log,将其放到其中一个平台上。
    1
    devkit advisor precision -analysis -i "/home/test1/cruiser_kp.log;/home/test1/cruiser_x86.log"
    

    回显信息如下:

    1
    2
    3
    4
    Perform the logs analysis mode.
    Finish run precision check tool.
    For detail logs on the tool, see /Absolute-Path-to-DevKit-CLI/advisor/logs/preccheck.log
    The analysis result is in /home/test1/demo1/build/precision_20241106113405_5b7a.txt
    
  4. 请查看3生成的txt文件,定位源码,查找精度问题。