计算精度分析工具用于定位x86和鲲鹏指令引起的Fortran语言精度差异问题。
支持:
暂不支持:
定位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)上执行编译插桩操作,执行完成后再进行日志差异分析操作。
参数 |
参数选项 |
参数说明 |
---|---|---|
-h/--help |
- |
获取帮助信息。 |
-instrument/--instrument |
- |
必选参数,指定编译插桩模式。 |
-c/--commands |
COMMANDS |
必选参数,源码的构建命令,若存在多个构建命令需使用英文分号分隔并用英文双引号包住,命令中如有空格,也需要用英文双引号包住。 例如:"make all"或"cd /home/test;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。
|
--set-timeout |
- |
任务超时时间,单位为分钟,若执行时间超过超时时间则退出执行。默认无超时时间,任务将持续执行直到结束。 |
参数 |
参数选项 |
参数说明 |
---|---|---|
-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。
|
--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 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/ |
export LD_LIBRARY_PATH=/Path_to_Devkit_CLI/advisor/devkitplugins/affinity/tools/compileopt/libcruiser/gfortran_lib:$LD_LIBRARY_PATH
flang:
export LD_LIBRARY_PATH=/Path_to_Devkit_CLI/advisor/devkitplugins/affinity/tools/compileopt/libcruiser/flang_lib:$LD_LIBRARY_PATH
export CRUISER_LOG=/LOGPATH/
“/LOGPATH/”:生成的日志文件存放路径。
./myprogram
运行可执行文件后若有以下输出信息,表示日志文件所在路径磁盘空间已不满足1G,请清理磁盘空间。
1 | [ERROR] Insufficient disk space in /home/test1/, please clean up the disk. |
myprogram:生成的可执行文件。
生成日志时请注意磁盘空间大小。
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 | 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 |