From ef216b5755f9bae751946e8dec11f4305ca266d8 Mon Sep 17 00:00:00 2001 From: weigoo Date: Tue, 10 May 2022 15:09:55 +0800 Subject: [PATCH] =?UTF-8?q?=E5=A2=9E=E5=8A=A0=E7=B2=BE=E5=BA=A6=E5=88=86?= =?UTF-8?q?=E6=9E=90=E5=B7=A5=E5=85=B7?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- software/utils/hawkeye/arm/autocompare.sh | 129 ++++++++++++++++++ software/utils/hawkeye/arm/autocopy.sh | 9 ++ software/utils/hawkeye/arm/autofind.sh | 85 ++++++++++++ software/utils/hawkeye/arm/autologgin.sh | 12 ++ software/utils/hawkeye/arm/expect.sh | 50 +++++++ software/utils/hawkeye/arm/hawkeye.sh | 51 +++++++ software/utils/hawkeye/arm/printresult.sh | 51 +++++++ .../utils/hawkeye/lib/aarch64/libprint_md5.so | Bin 0 -> 74552 bytes .../utils/hawkeye/lib/x86/libprint_md5.so | Bin 0 -> 20520 bytes software/utils/hawkeye/readme.txt | 31 +++++ software/utils/hawkeye/x86/autocompare.sh | 105 ++++++++++++++ software/utils/hawkeye/x86/env.sh | 18 +++ software/utils/hawkeye/x86/expect.sh | 50 +++++++ 13 files changed, 591 insertions(+) create mode 100644 software/utils/hawkeye/arm/autocompare.sh create mode 100644 software/utils/hawkeye/arm/autocopy.sh create mode 100644 software/utils/hawkeye/arm/autofind.sh create mode 100644 software/utils/hawkeye/arm/autologgin.sh create mode 100644 software/utils/hawkeye/arm/expect.sh create mode 100644 software/utils/hawkeye/arm/hawkeye.sh create mode 100644 software/utils/hawkeye/arm/printresult.sh create mode 100644 software/utils/hawkeye/lib/aarch64/libprint_md5.so create mode 100644 software/utils/hawkeye/lib/x86/libprint_md5.so create mode 100644 software/utils/hawkeye/readme.txt create mode 100644 software/utils/hawkeye/x86/autocompare.sh create mode 100644 software/utils/hawkeye/x86/env.sh create mode 100644 software/utils/hawkeye/x86/expect.sh diff --git a/software/utils/hawkeye/arm/autocompare.sh b/software/utils/hawkeye/arm/autocompare.sh new file mode 100644 index 0000000..66dfb31 --- /dev/null +++ b/software/utils/hawkeye/arm/autocompare.sh @@ -0,0 +1,129 @@ +#!/bin/sh + +GDB=${GDB:-/usr/bin/gdb} +program=$1 #wrf.exe +breakpoint=$2 +breakpointend=$3 + +remotebreakpoint=$4 +remotebreakpointend=$5 +x86_ip=$6 +x86_password=$7 +x86_workdir=$8 +workdir=$9 +filepath=${10} + +echo $1 $2 $3 $4 $5 +./autologgin.sh $x86_ip $x86_password " +cd $x86_workdir +rm -f ./tmp/args/* +source env.sh +./autocompare.sh $program $remotebreakpoint $remotebreakpointend $workdir $filepath +exit +" +#./autocopy.sh $x86_ip $x86_password $x86_workdir/printmd5_remote.txt ./tmp > /dev/null +./autocopy.sh $x86_ip $x86_password $x86_workdir/tmp/args/ ./tmp > /dev/null + +# grid size is different between x86 and arm +rm -f ./tmp/args/grid + +#get args +($GDB -quiet ${program} << EOF +l $breakpoint,$breakpointend +EOF +) > ./tmp/gdb.txt + +# delete the content after the ! +sed -i 's/!.*$//g' ./tmp/gdb.txt +gdbtxt=$(cat ./tmp/gdb.txt) +func=${gdbtxt#*(gdb)} +func=${func/(gdb)*} +funcname=${func#*CALL} +funcname=${funcname/(*} +funcname=$(echo $funcname | sed 's/ //g') +args_string=${func#*(} +args_string=${args_string%)*} +args_string=$(echo $args_string | sed 's/ [0-9]*//g') + +zero=0 +bracketnum=0 +argswithspace='' +for i in `seq ${#args_string}` +do + var=${args_string:$i-1:1} + if [[ $bracketnum == $zero ]] && [[ $var = ',' ]] + then + argswithspace=$argswithspace' ' + elif [[ $var = ' ' ]] || [[ $var = '&' ]] + then + argswithspace=$argswithspace + else + argswithspace=$argswithspace$var + fi + + if [[ $var == '(' ]] + then + ((bracketnum++)) + fi + if [[ $var == ')' ]] + then + ((bracketnum--)) + fi +done + +args=(${argswithspace}) +argsnum=${#args[@]} + +for(( i=0;i<${#args[@]};i++)) +do + # delete string constant args + var=${args[i]} + char1="\'" + char2="\"" + if [[ ${var:0:1} == $char1 ]] || [[ ${var:0:1} == $char2 ]] + then + unset args[i] + fi + + if [[ $var == "grid" ]] || [[ $var == "t0" ]] || [[ $var == "g" ]] || [[ $var == "p0" ]] + then + unset args[i] + fi + + + # use the value on the right of the equal. + char3="=" + if [[ $var == *$char3* ]] + then + twoargs=(${var//=/ }) + args[i]=${twoargs[1]} + fi +done + +#for var in ${args[@]} +#do +# echo $var +#done + +if [ $argsnum == $zero ] +then + echo "error:can't get any args, please enter the correct funtion line number" + exit +fi +echo "info:function name is "$funcname", args is "${args[*]} + +#loop print args md5 value +mkdir -p ./tmp/$workdir"/"$funcname + +echo "$filepath" >> printmd5.txt +echo "$funcname" >> printmd5.txt + +if [ "`ls -A ./tmp/args`" != "" ] +then + ./expect.sh ${args[*]} $program $breakpoint +fi + +rm -f ./tmp/args/* +cat printmd5.txt >> ./tmp/arm_result.txt +echo "#" >> ./tmp/arm_result.txt +mv printmd5.txt ./tmp/$workdir"/"$funcname"/"$funcname".txt" diff --git a/software/utils/hawkeye/arm/autocopy.sh b/software/utils/hawkeye/arm/autocopy.sh new file mode 100644 index 0000000..37f394b --- /dev/null +++ b/software/utils/hawkeye/arm/autocopy.sh @@ -0,0 +1,9 @@ +#!/usr/bin/expect + +set ip [lindex $argv 0] +set password [lindex $argv 1] +set src [lindex $argv 2] +set dst [lindex $argv 3] +spawn scp -rp root@$ip:$src $dst +expect "*password:" {send "$password\r"} +interact diff --git a/software/utils/hawkeye/arm/autofind.sh b/software/utils/hawkeye/arm/autofind.sh new file mode 100644 index 0000000..8773c88 --- /dev/null +++ b/software/utils/hawkeye/arm/autofind.sh @@ -0,0 +1,85 @@ +#!/bin/sh + +program=$1 #wrf.exe +filepath1=$2 +filepath2=$2 +num1=$3 +num2=$4 + +x86_ip=$5 +x86_password=$6 +x86_workdir=$7 +workdir=$8 + +filename1=${filepath1##*/} +filename2=${filepath2##*/} + +rm -f ./tmp/1.txt ./tmp/2.txt ./tmp/3.txt ./tmp/4.txt ./tmp/5.txt + +$(cat -n $filepath1 | head -n ${num2} | tail -n +${num1} | grep -w CALL | grep -v ! | grep -v wrf_debug > ./tmp/1.txt) +$(cat -n $filepath2 | head -n ${num2} | tail -n +${num1} | grep -w CALL | grep -v ! | grep -v wrf_debug > ./tmp/2.txt) + +while true +do + + firstline=$(sed -n "1p" ./tmp/1.txt) + if [ "$firstline" == "" ] + then + break + fi + + functionname=${firstline#*CALL} + functionname=${functionname/(*} + $(grep -wi $functionname ./tmp/1.txt | cut -f1 -dC | sed -n "1p" > ./tmp/3.txt) + $(grep -wi $functionname ./tmp/2.txt | cut -f1 -dC | sed -n "1p" > ./tmp/4.txt) + + $(paste ./tmp/3.txt ./tmp/4.txt >> ./tmp/5.txt) + $(sed -i "/$functionname/d" ./tmp/1.txt) + $(sed -i "/$functionname/d" ./tmp/2.txt) +done + +linenum=1 +while true +do + breaknum=$(sed -n "${linenum}p" ./tmp/5.txt) + if [ "$breaknum" == "" ] + then + break + fi + breaknums=(${breaknum}) + if [ "${breaknums[0]}" == "" ] || [ "${breaknums[1]}" == "" ] + then + ((linenum++)) + continue + fi + ((linenum++)) + + end0=${breaknums[0]} + while true + do + func=$(sed -n "${end0}p" $filepath1) + spec="&" + if [[ ${func} == *$spec* ]] + then + ((end0++)) + else + break + fi + done + + end1=${breaknums[1]} + while true + do + func=$(sed -n "${end1}p" $filepath2) + spec="&" + if [[ ${func} == *$spec* ]] + then + ((end1++)) + else + break + fi + done + echo $program $filename1:${breaknums[0]} $filename1:$end0 $filename2:${breaknums[1]} $filename2:$end1 $workdir + ./autocompare.sh $program $filename1:${breaknums[0]} $filename1:$end0 $filename2:${breaknums[1]} $filename2:$end1 $x86_ip $x86_password $x86_workdir $workdir $filepath1 +done + diff --git a/software/utils/hawkeye/arm/autologgin.sh b/software/utils/hawkeye/arm/autologgin.sh new file mode 100644 index 0000000..97240ba --- /dev/null +++ b/software/utils/hawkeye/arm/autologgin.sh @@ -0,0 +1,12 @@ +#!/usr/bin/expect + +set ip [lindex $argv 0] +set password [lindex $argv 1] +set commands [lindex $argv 2] +spawn ssh root@$ip +expect { + "*yes/no" {send "yes\r"; exp_continue} + "*password:" {send "$password\r"} +} +expect "*#" {send "$commands"} +interact diff --git a/software/utils/hawkeye/arm/expect.sh b/software/utils/hawkeye/arm/expect.sh new file mode 100644 index 0000000..6a74169 --- /dev/null +++ b/software/utils/hawkeye/arm/expect.sh @@ -0,0 +1,50 @@ +#!/usr/bin/expect + +log_file ./tmp/expectlog.txt +set timeout -1 +set argsnum [lindex $argc] +set args [lrange $argv 0 $argc-3] +set progname [lindex $argv $argc-2] +set breakpoint [lindex $argv $argc-1] + +spawn gdb $progname +expect "(gdb)" {send "set height unlimited\n"} +expect "(gdb)" {send "set max-value-size unlimited\n"} +expect "(gdb)" {send "define printmd5\n"} +expect ">" {send "set \$i=\$argc \n"} +expect ">" {send "while \$i\n"} +expect ">" {send "set \$index=\$argc-\$i\n"} +expect ">" {send "eval \"call print_md5_float_all_c_(\$arg%d, sizeof(\$arg%d)/4, '\$arg%d', sizeof('\$arg%d'))\", \$index, \$index, \$index, \$index\n"} +expect ">" {send "set \$i=\$i-1\n"} +expect ">" {send "end\n"} +expect ">" {send "end\n"} + + +expect "(gdb)" {send "define writeargs\n"} +expect ">" {send "set \$i=\$argc \n"} +expect ">" {send "while \$i\n"} +expect ">" {send "set \$index=\$argc-\$i\n"} +expect ">" {send "eval \"call writegrid_(\$arg%d, sizeof(\$arg%d)/4, './tmp/args/\$arg%d', sizeof('./tmp/args/\$arg%d'))\", \$index, \$index, \$index, \$index\n"} +expect ">" {send "set \$i=\$i-1\n"} +expect ">" {send "end\n"} +expect ">" {send "end\n"} + +expect "(gdb)" {send "define readargs\n"} +expect ">" {send "set \$i=\$argc \n"} +expect ">" {send "while \$i\n"} +expect ">" {send "set \$index=\$argc-\$i\n"} +expect ">" {send "eval \"call readgrid_(\$arg%d, sizeof(\$arg%d)/4, './tmp/args/\$arg%d', sizeof('./tmp/args/\$arg%d'))\", \$index, \$index, \$index, \$index\n"} +expect ">" {send "set \$i=\$i-1\n"} +expect ">" {send "end\n"} +expect ">" {send "end\n"} + +expect "(gdb)" {send "b $breakpoint \n"} +expect "(gdb)" {send "r \n"} +expect "(gdb)" {send "shell echo before invoke funcion\n"} +#expect "(gdb)" {send "writeargs $args\n"} +expect "(gdb)" {send "readargs $args\n"} +expect "(gdb)" {send "printmd5 $args\n"} +expect "(gdb)" {send "n \n"} +expect "(gdb)" {send "shell echo after invoke funcion\n"} +expect "(gdb)" {send "printmd5 $args\n"} +expect "(gdb)" {send "q\n"} diff --git a/software/utils/hawkeye/arm/hawkeye.sh b/software/utils/hawkeye/arm/hawkeye.sh new file mode 100644 index 0000000..96da2ec --- /dev/null +++ b/software/utils/hawkeye/arm/hawkeye.sh @@ -0,0 +1,51 @@ +#!/bin/sh + +program=$1 #wrf.exe +srcdir=$2 +filename=$3 +num1=$4 +num2=$5 +x86_ip=$6 +x86_password=$7 +x86_workdir=$8 +workdir=$9 +workdir=${workdir:="md5"} +loop=${10} +loop=${loop:=1} + +filepath=$(find $srcdir -name $filename) +mkdir -p tmp/x86/md5 +./autofind.sh $program $filepath $num1 $num2 $x86_ip $x86_password $x86_workdir $workdir +./autocopy.sh $x86_ip $x86_password $x86_workdir/tmp/md5/* ./tmp/x86/md5 > /dev/null + +while [ $loop -gt 0 ] +do + ((loop--)) + for file in ./tmp/$workdir/* + do + if [[ $file == *".txt" ]] + then + continue + fi + echo "file:"$file + x86_file="./tmp/x86/"${file#*tmp/} + diff=$(diff $file $x86_file) + if [[ "$diff" != "" ]] + then + funcname=$(sed -n "1p" $file/*.txt) + filepath=$(grep -wrn "SUBROUTINE $funcname" --exclude="*.F" $srcdir | cut -f1-2 -d:) + if [[ "$filepath" == "" ]] + then + continue + fi + + filepath=(${filepath}) + filename=$(echo ${filepath[0]} | cut -f1 -d:) + filename=${filename##*/} + num1=$(echo ${filepath[0]} | cut -f2 -d:) + num2=$(echo ${filepath[1]} | cut -f2 -d:) + ./hawkeye.sh $program $srcdir $filename $num1 $num2 $x86_ip $x86_password $x86_workdir $workdir"/"$funcname $loop + fi + done +done + diff --git a/software/utils/hawkeye/arm/printresult.sh b/software/utils/hawkeye/arm/printresult.sh new file mode 100644 index 0000000..d852d5b --- /dev/null +++ b/software/utils/hawkeye/arm/printresult.sh @@ -0,0 +1,51 @@ +#!/bin/sh + +srcdir=$1 +cd tmp +for file in `find md5 -name "*.txt"` +do + if [[ $file != *".txt" ]] + then + continue + fi + filediff=$(diff $file "./x86/"$file) + if [[ $filediff != "" ]] + then + funcname=$(sed -n "1p" $file) + filepath=$(grep -wrn "SUBROUTINE $funcname" --exclude="*.F" $srcdir | cut -f1-2 -d:) + if [[ "$filepath" == "" ]] + then + continue + fi + test="/" + filetmp='' + for i in `seq ${#file}` + do + var=${file:$i-1:1} + if [[ $var == $test ]] + then + filetmp=$filetmp' ' + else + filetmp=$filetmp$var + fi + done + args=(${filetmp}) + argsnum=${#filetmp[@]} + call='' + for(( i=1;i<${#args[@]}-1;i++)) + do + if [[ $call == '' ]] + then + call=${args[i]} + else + call=$call" --> "${args[i]} + fi + done + + filepath=(${filepath}) + echo "存在精度差异的函数:"$funcname "("${filepath[0]}")" + echo "函数调用关系:"$call + echo "" + call='' + fi +done diff --git a/software/utils/hawkeye/lib/aarch64/libprint_md5.so b/software/utils/hawkeye/lib/aarch64/libprint_md5.so new file mode 100644 index 0000000000000000000000000000000000000000..ce01eefafdceabbb8f11c9e8f1d09c208d5a2c00 GIT binary patch literal 74552 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 Q_3%<IKkO6TLI3~& literal 0 HcmV?d00001 diff --git a/software/utils/hawkeye/lib/x86/libprint_md5.so b/software/utils/hawkeye/lib/x86/libprint_md5.so new file mode 100644 index 0000000000000000000000000000000000000000..6e84d8eb93d9fd80075b4f51b958a2112bef56f4 GIT binary patch literal 20520 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 sAPg9C-dvCFM(0ItPv&s>1C=rtPHEI|d@v3(%7G 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 ./tmp/gdb.txt + +# delete the content after the & +sed -i 's/!.*$//g' ./tmp/gdb.txt +gdbtxt=$(cat ./tmp/gdb.txt) +func=${gdbtxt#*(gdb)} +func=${func/(gdb)*} +funcname=${func#*CALL} +funcname=${funcname/(*} +funcname=$(echo $funcname | sed 's/ //g') +args_string=${func#*(} +args_string=${args_string%)*} +args_string=$(echo $args_string | sed 's/ [0-9]*//g') + +zero=0 +bracketnum=0 +argswithspace='' +for i in `seq ${#args_string}` +do + var=${args_string:$i-1:1} + if [[ $bracketnum == $zero ]] && [[ $var = ',' ]] + then + argswithspace=$argswithspace' ' + elif [[ $var = ' ' ]] || [[ $var = '&' ]] + then + argswithspace=$argswithspace + else + argswithspace=$argswithspace$var + fi + + if [[ $var == '(' ]] + then + ((bracketnum++)) + fi + if [[ $var == ')' ]] + then + ((bracketnum--)) + fi +done + +args=(${argswithspace}) +argsnum=${#args[@]} + +for(( i=0;i<${#args[@]};i++)) +do + # delete string constant args + var=${args[i]} + char1="\'" + char2="\"" + if [[ ${var:0:1} == $char1 ]] || [[ ${var:0:1} == $char2 ]] + then + unset args[i] + fi + + if [[ $var == "grid" ]] || [[ $var == "t0" ]] || [[ $var == "g" ]] || [[ $var == "p0" ]] + then + unset args[i] + fi + + + # use the value on the right of the equal. + char3="=" + if [[ $var == *$char3* ]] + then + twoargs=(${var//=/ }) + args[i]=${twoargs[1]} + fi +done + +#for var in ${args[@]} +#do +# echo $var +#done + +if [ $argsnum == $zero ] +then + echo "error:can't get any args, please enter the correct funtion line number" + exit +fi +echo "info:function name is "$funcname", args is "${args[*]} + +#loop print args md5 value +mkdir -p ./tmp/$workdir"/"$funcname +mkdir -p ./tmp/args +echo "$filepath" >> printmd5.txt +echo "$funcname" >> printmd5.txt +./expect.sh ${args[*]} $program $breakpoint +cat printmd5.txt >> ./tmp/x86_result.txt +echo "#" >> ./tmp/x86_result.txt +mv printmd5.txt ./tmp/$workdir"/"$funcname"/"$funcname".txt" diff --git a/software/utils/hawkeye/x86/env.sh b/software/utils/hawkeye/x86/env.sh new file mode 100644 index 0000000..c0be7de --- /dev/null +++ b/software/utils/hawkeye/x86/env.sh @@ -0,0 +1,18 @@ +#!/bin/bash + +# Configuring Environment Variables for the program Running of the x86 Server + +# wrf Environment Variables: +#cd /path/to/IntelOneAPI-install +#source setvars.sh +#export WRFIO_NCD_LARGE_FILE_SUPPORT=1 +#export NETCDF=/path/to/netcdf/ +#export HDF5=/path/to/hdf5/ +#export PNETCDF=/path/to/pnetcdf/ +#export CPPFLAGS="-I$HDF5/include -I$PNETCDF/include -I$NETCDF/include" +#export LDFLAGS="-L$HDF5/lib -L$PNETCDF/lib -L$NETCDF/lib -lnetcdf -lnetcdff -lpnetcdf -lhdf5_hl -lhdf5 -lz" + +#export LD_LIBRARY_PATH=/path/to/hdf5/lib/:/path/to/netcdf/lib/:/path/to/pnetcdf/lib/:$LD_LIBRARY_PATH +#export I_MPI_OFI_PROVIDER=shm +#cd - + diff --git a/software/utils/hawkeye/x86/expect.sh b/software/utils/hawkeye/x86/expect.sh new file mode 100644 index 0000000..80bff7d --- /dev/null +++ b/software/utils/hawkeye/x86/expect.sh @@ -0,0 +1,50 @@ +#!/usr/bin/expect + +log_file ./tmp/expectlog.txt +set timeout -1 +set argsnum [lindex $argc] +set args [lrange $argv 0 $argc-3] +set progname [lindex $argv $argc-2] +set breakpoint [lindex $argv $argc-1] + +spawn gdb $progname +expect "(gdb)" {send "set height unlimited\n"} +expect "(gdb)" {send "set max-value-size unlimited\n"} +expect "(gdb)" {send "define printmd5\n"} +expect ">" {send "set \$i=\$argc \n"} +expect ">" {send "while \$i\n"} +expect ">" {send "set \$index=\$argc-\$i\n"} +expect ">" {send "eval \"call print_md5_float_all_c_(\$arg%d, sizeof(\$arg%d)/4, '\$arg%d', sizeof('\$arg%d'))\", \$index, \$index, \$index, \$index\n"} +expect ">" {send "set \$i=\$i-1\n"} +expect ">" {send "end\n"} +expect ">" {send "end\n"} + + +expect "(gdb)" {send "define writeargs\n"} +expect ">" {send "set \$i=\$argc \n"} +expect ">" {send "while \$i\n"} +expect ">" {send "set \$index=\$argc-\$i\n"} +expect ">" {send "eval \"call writegrid_(\$arg%d, sizeof(\$arg%d)/4, './tmp/args/\$arg%d', sizeof('./tmp/args/\$arg%d'))\", \$index, \$index, \$index, \$index\n"} +expect ">" {send "set \$i=\$i-1\n"} +expect ">" {send "end\n"} +expect ">" {send "end\n"} + +expect "(gdb)" {send "define readargs\n"} +expect ">" {send "set \$i=\$argc \n"} +expect ">" {send "while \$i\n"} +expect ">" {send "set \$index=\$argc-\$i\n"} +expect ">" {send "eval \"call readgrid_(\$arg%d, sizeof(\$arg%d)/4, './tmp/args/\$arg%d', sizeof('./tmp/args/\$arg%d'))\", \$index, \$index, \$index, \$index\n"} +expect ">" {send "set \$i=\$i-1\n"} +expect ">" {send "end\n"} +expect ">" {send "end\n"} + +expect "(gdb)" {send "b $breakpoint \n"} +expect "(gdb)" {send "r \n"} +expect "(gdb)" {send "shell echo before invoke funcion\n"} +expect "(gdb)" {send "writeargs $args\n"} +#expect "(gdb)" {send "readargs $args\n"} +expect "(gdb)" {send "printmd5 $args\n"} +expect "(gdb)" {send "n \n"} +expect "(gdb)" {send "shell echo after invoke funcion\n"} +expect "(gdb)" {send "printmd5 $args\n"} +expect "(gdb)" {send "q\n"} -- Gitee