#!/bin/bash # Authors: Nishant Kumar. # Copyright: # Copyright (c) 2018 Microsoft Research # Permission is hereby granted, free of charge, to any person obtaining a copy # of this software and associated documentation files (the "Software"), to deal # in the Software without restriction, including without limitation the rights # to use, copy, modify, merge, publish, distribute, sublicense, and/or sell # copies of the Software, and to permit persons to whom the Software is # furnished to do so, subject to the following conditions: # The above copyright notice and this permission notice shall be included in all # copies or substantial portions of the Software. # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR # IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, # FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE # AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER # LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, # OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE # SOFTWARE. NUMIMAGES=96 NUMPROCESSES=16 PERPROCESSIMAGES=$((NUMIMAGES / NUMPROCESSES)) ScalesToTest=(18 19 20 21 22 23 24 25 26 27) NetworkName="ResNet" RANDOMSUBSETFILEIDX="./ImageNet_ValData/Random_Img_Idx.txt" PreProcessedFilesDirectory="../Networks/$NetworkName/AccuracyAnalysisHelper/PreProcessedImages" PorthosDir="../../SecureNN" mapfile -t randomIndices < "$RANDOMSUBSETFILEIDX" mkdir -p InferenceOutputs mkdir -p InferenceErrors declare -a pids for curScale in "${ScalesToTest[@]}"; do echo -e "******************SCALE = $curScale************************\n\n" echo -e "Replacing this scale factor in globals.h." sed -i -r 's/#define FLOAT_PRECISION .*/#define FLOAT_PRECISION '"${curScale}"'/' src/globals.h echo -e "Doing make..." make -j > /dev/null echo -e "make done. Continuing..." ModelFilePath="../Athos/Networks/$NetworkName/AccuracyAnalysisHelper/$NetworkName"'_'"img_input_weights_float_scaled"'_'"$curScale.inp" echo -e "Using model path = $ModelFilePath." imgCounter=0 while [ "${imgCounter}" -ne "${NUMIMAGES}" ]; do echo -e "########Starting imgCounter = $imgCounter." for ((curProcessNum=0;curProcessNum<$NUMPROCESSES;curProcessNum++)); do echo -e "Running Porthos for imgCounter = $imgCounter, actual img idx = ${randomIndices[${imgCounter}]}." imgFileName="$PreProcessedFilesDirectory/ImageNum"'_'"${randomIndices[${imgCounter}]}"'_'"scaled"'_'"${curScale}.inp" stdoutFilesSuffix="./InferenceOutputs/stdout"'_'"${curScale}"'_'"${imgCounter}"'_'"proc"'_' stderrFilesSuffix="./InferenceErrors/stderr"'_'"${curScale}"'_'"${imgCounter}"'_'"proc"'_' ./Porthos.out 3PC 0 files/parties_localhost files/keyA files/keyAB "$curProcessNum" "${imgCounter}" < "$ModelFilePath" > "${stdoutFilesSuffix}0.outp" 2> "${stderrFilesSuffix}0.outp" & pids+=($!) ./Porthos.out 3PC 1 files/parties_localhost files/keyB files/keyAB "$curProcessNum" "${imgCounter}" < "$imgFileName" > "${stdoutFilesSuffix}1.outp" 2> "${stderrFilesSuffix}1.outp" & pids+=($!) ./Porthos.out 3PC 2 files/parties_localhost files/keyB files/keyAB "$curProcessNum" "${imgCounter}" > "${stdoutFilesSuffix}2.outp" 2> "${stderrFilesSuffix}2.outp" & pids+=($!) ((imgCounter=imgCounter+1)) if [ "${imgCounter}" -eq "${NUMIMAGES}" ]; then break fi done echo -e "--->>>All processes started. Now going into waiting for each process.<<<---" for pid in ${pids[*]}; do wait $pid done echo -e "--->>> Done waiting for all started processes. Unsetting Pids and starting next loop. <<<---" unset pids done done echo -e "--->>>All processes completed.<<<---"