1#!/usr/local/bin/bash 2############################################################################### 3# Copyright (c) Intel Corporation - All rights reserved. # 4# This file is part of the LIBXSMM library. # 5# # 6# For information on the license, see the LICENSE file. # 7# Further information: https://github.com/hfp/libxsmm/ # 8# SPDX-License-Identifier: BSD-3-Clause # 9############################################################################### 10 11if [ $1 = "-h" ] 12then 13 echo "Usage: $(basename $0) matrices.txt iters numa (1-mcdram/0-DDR)" 14 exit 15fi 16 17if [[ -z "${OMP_NUM_THREADS}" ]]; then 18 echo "using defaults for OMP settings!" 19 export KMP_HW_SUBSET=1T 20 export KMP_AFFINITY=compact,granularity=fine 21 export KMP_AFFINITY=proclist=[1-67],granularity=thread,explicit,norespect 22 export OMP_NUM_THREADS=67 23else 24 echo "using environment OMP settings!" 25fi 26 27 28_fn=${1:-"deepbench_matrices.txt"} 29_it=${2:-100} 30NUMA=${3:-1} 31 32NUMACTL="${TOOL_COMMAND}" 33CPUFLAGS=$(if [ -e /proc/cpuinfo ]; then grep -m1 flags /proc/cpuinfo | cut -d: -f2-; fi) 34if [ "" != "$(echo "${CPUFLAGS}" | grep -o avx512er)" ]; then 35 if [ "0" != "$((NUMA < $(numactl -H | grep "node " | tr -s " " | cut -d" " -f2- | wc -w | tr -d " ")))" ]; then 36 NUMACTL="numactl --preferred=${NUMA} ${TOOL_COMMAND}" 37 fi 38fi 39NUMACTL="numactl --interleave=0,1" 40 41#----bgemm parameters 42_MB_="24 48 64" 43_NB_="24 48 64" 44_KB_="24 48 64 96" 45#mb1="0.1 0.2 0.3 0.4 0.5 0.8 0.16 0.32 1 2 4 8 10 16" 46#nb1="0.1 0.2 0.3 0.4 0.5 0.8 0.16 0.32 1 2 4 8 10 16" 47#kb1="0.1 0.2 0.3 0.4 0.5 0.8 0.16 0.32 1 2 4 8 10 16" 48#kb2="0.1 0.2 0.3 0.4 0.5 0.8 0.16 0.32 1 2 4 8 10 16" 49MBT=4096 50NBT=4096 51KBT=4096 52mb11="0.1" 53nb11="0.1" 54kb11="0.1" 55mb12="0.1" 56nb12="0.1" 57kb12="0.1" 58kb2="0.1 0.2 0.4 0.5 0.8 0.16 0.24 0.32" 59order="0 1 2" 60perflog="perfSweep.log" 61 62function bgemm_test { 63best="0" 64echo "M=$M N=$N K=$K it=$it" 65bin="$NUMACTL ./bgemm" 66log="$((M))_$((N))_$((K)).out" 67for _mb in $mb 68do 69 for _nb in $nb 70 do 71 for _kb in $kb 72 do 73 for _mb1 in $mb1 74 do 75 for _nb1 in $nb1 76 do 77 for _kb1 in $kb1 78 do 79 for _kb2 in $kb2 80 do 81 for _o in $order 82 do 83 _M=$M 84 _N=$N 85 _K=$K 86 if [[ "$((M % _mb))" -gt 0 ]] 87 then 88 _M=$((_mb*(M/_mb+1))) 89 fi 90 if [[ "$((N % _nb))" -gt 0 ]] 91 then 92 _N=$((_nb*(N/_nb+1))) 93 fi 94 if [[ "$((K % _kb))" -gt 0 ]] 95 then 96 _K=$((_kb*(K/_kb+1))) 97 fi 98 if [ $(bc <<< "$_mb1 < 1") -eq 1 ]; then 99 IFS="." read temp _MB1 <<< $_mb1 100 else 101 _MB1=$(($_M/$_mb1)) 102 fi 103 if [ $(bc <<< "$_nb1 < 1") -eq 1 ]; then 104 IFS="." read temp _NB1 <<< $_nb1 105 else 106 _NB1=$(($_N/$_nb1)) 107 fi 108 if [ $(bc <<< "$_kb1 < 1") -eq 1 ]; then 109 IFS="." read temp _KB1 <<< $_kb1 110 else 111 _KB1=$(($_K/$_kb1)) 112 fi 113 if [ $(bc <<< "$_kb2 < 1") -eq 1 ]; then 114 IFS="." read temp _KB2 <<< $_kb2 115 else 116 _KB2=$(($_K/$_kb2)) 117 fi 118 echo "$bin $_M $_N $_K $_mb $_nb $_kb $_o $it $_MB1 $_NB1 $_KB1 $_KB2" 119 $bin $_M $_N $_K $_mb $_nb $_kb $_o $it $_MB1 $_NB1 $_KB1 $_KB2 > /dev/null 120 $bin $_M $_N $_K $_mb $_nb $_kb $_o $it $_MB1 $_NB1 $_KB1 $_KB2 > temp.out 121 prf="$(grep "LIBXSMM" temp.out | awk {'print $2;'})" 122 cfg="$_M $_N $_K $_mb $_nb $_kb $_o $it $_MB1 $_NB1 $_KB1 $_KB2" 123 echo "$cfg $prf" >> $log 124 done 125 done 126 done 127 done 128 done 129 done 130 done 131done 132best=$(cat $log | awk ' BEGIN { val = 0 } { if ($13 > val) {val = $13; best=$0} } END { print best }') 133echo "$best" >> $perflog 134} 135 136 137function run_bsgemm { 138M=$1 139N=$2 140K=$3 141_AT=$4 142_BT=$5 143if [[ $# -gt 5 ]] 144then 145 mb=$6 146 nb=$7 147 kb=$8 148else 149 mb=24 150 nb=24 151 kb=24 152fi 153#_it=$9 154#_bin=$7 155 156if [[ "$mb" -gt "$M" ]] 157then 158 mb=$M 159else 160 mb=$_MB_ 161fi 162if [[ "$nb" -gt "$N" ]] 163then 164 nb=$N 165else 166 nb=$_NB_ 167fi 168if [[ "$kb" -gt "$K" ]] 169then 170 kb=$K 171else 172 kb=$_KB_ 173fi 174if [[ "$M" -gt "$MBT" ]]; then 175 mb1=$mb12 176else 177 mb1=$mb11 178fi 179if [[ "$N" -gt "$NBT" ]]; then 180 nb1=$nb12 181else 182 nb1=$nb11 183fi 184if [[ "$K" -gt "$KBT" ]]; then 185 kb1=$kb12 186else 187 kb1=$kb11 188fi 189_Trans=0 190if [[ "$_AT" == "T" ]] 191then 192 _Trans=1 193 echo "!!! $M $N $K $_AT $_BT - Not supported !!!, doing $N $M $K N N instead" 194 t_M=$M 195 t_mb=$mb 196 M=$N 197 N=$t_M 198 mb=$nb 199 nb=$t_mb 200fi 201if [[ "$_BT" == "T" ]] 202then 203 _Trans=2 204 echo "!!! $M $N $K $_AT $_BT - Not supported !!!, doing $M $K $N N N instead" 205 t_K=$K 206 t_kb=$kb 207 K=$N 208 N=$t_K 209 kb=$nb 210 nb=$t_kb 211fi 212 213if [[ "$M" -gt "2000" ]]; then 214 if [[ "$N" -gt "2000" ]]; then 215 if [[ "$K" -gt "2000" ]]; then 216 it=10 217 fi 218 fi 219fi 220 221if [[ "$M" -gt "4000" ]]; then 222 it=10 223fi 224 225if [[ "$N" -gt "4000" ]]; then 226 it=10 227fi 228if [[ "$K" -gt "4000" ]]; then 229 it=10 230fi 231 232bgemm_test 233echo "--------------------------------------------------------------------------------------" 234} 235 236nc=$(wc -l $_fn) 237idx=1 238 239cat $_fn | while read line 240do 241 if [ ! -z "$line" ]; then 242 echo -n "($idx/$nc)" 243 it=$_it 244 run_bsgemm $line 245 fi 246 idx=$((idx+1)) 247done 248 249