update from v0.1 to v1.0
[weak_simulation_stab_extent.git] / timing_t_enforceddelta.bash
diff --git a/timing_t_enforceddelta.bash b/timing_t_enforceddelta.bash
new file mode 100644 (file)
index 0000000..7026a10
--- /dev/null
@@ -0,0 +1,127 @@
+#!/bin/bash
+# Bash script to get some timing analysis
+
+# Runtime for different t's
+
+# number of runs to run in parallel
+maxthreads=10
+# NOTE: that this is not the same as running weaksim in parallel! For that you need to set OMP_NUM_THREADS appropriately (see README.txt)
+# Note that setting OMP_NUM_THREADS>1 will lead to more pessimistic runtime analysis, due to parallelization overhead, though the runs should complete faster!
+
+## For the most accurate time analysis, run with
+## export OMP_NUM_THREADS=1
+## export OMP_PROC_BIND=false
+#export OMP_NUM_THREADS=6
+#export OMP_PROC_BIND=true
+export OMP_NUM_THREADS=1
+export OMP_PROC_BIND=false
+
+delta=0.1
+deltasquared=`bc -l <<< $delta^2`
+
+numruns=10 #1000
+
+#for t in 4 8
+for t in 8
+#for t in 16
+#for t in 32
+#for t in 2 4 8 #16 #32
+#for t in 8 16 32
+do
+    #delta=`bc -l <<< 10^-$deltapower`
+    echo "t=$t"
+    # alpha is the fraction of t supplemental states that we will take to keep the cost the same
+    # alpha = delta*xi^t/t
+    #echo "0.25*$delta*1.17^$t/$t"
+    #alpha=`bc -l <<< 0.25*$delta*1.17^$t/$t`
+    #%echo "alpha=$alpha"
+    TIMEFORMAT='%3R';
+    #number of runs
+    for (( i=1; i<=$numruns; i++ ))
+    do
+       # Generate two t-Pauli measurements
+       ./randominputcommutingHermitianPauli2 $t $t 1000 | head -n $[2*$t+4] > inputPauli_$[i].txt
+       sleep 1
+    done
+    for (( i=1; i<=$numruns; i++ ))
+    do
+       # Exact measurements
+       ./multipauli < inputPauli_$[i].txt | tail -1 | cut -d ' ' -f 1 > tmp_$[t]_exact_$[i].txt &
+       #seed=`od -A n -t d -N 4 /dev/urandom |tr -d ' '|tr -d '-'`
+       #./weaksim 0.001 0.25 2 $seed < inputPauli_$[i].txt | tail -1 | cut -d ' ' -f 3 > tmp_$[t]_exact_$[i].txt &
+       #./weaksim 0.01 0.25 2 $seed < inputPauli_$[i].txt | tail -1 | cut -d ' ' -f 3 > tmp_$[t]_exact_$[i].txt &
+       # minus one below so as not to count grep search job
+       numthreads=$[`ps -aux | grep multipauli | wc -l`-1]
+       #numthreads=$[`ps -aux | grep weaksim | wc -l`-1]
+       while [ $numthreads -gt $[$maxthreads-1] ]
+       do
+           sleep 10
+           numthreads=$[`ps -aux | grep multipauli | wc -l`-1]
+           #numthreads=$[`ps -aux | grep weaksim | wc -l`-1]
+       done
+    done
+    
+    for (( i=1; i<=$numruns; i++ ))
+    do
+       echo "run: $i"
+       
+       approxerror=1.0
+       approxcoherror=1.0
+
+       samplePrefactor=0.001
+       seed=`od -A n -t d -N 4 /dev/urandom |tr -d ' '|tr -d '-'`
+       while (( $(echo "$approxerror > $deltasquared" |bc -l) )); do
+           echo "samplePrefactor=$samplePrefactor"
+           ( time ( ./weaksim $delta 0.25 0 $seed $samplePrefactor < inputPauli_$[i].txt >> tmp_$[t]_iid_$[i].txt ) ) 2> tmp_$[t]_iid_$[i]_timing.txt
+
+           exactanswer=`tail -1 tmp_$[t]_exact_$[i].txt`
+           approxanswer=`tail -1 tmp_$[t]_iid_$[i].txt | cut -d ' ' -f 3`
+           approxerror=`bc -l <<< "sqrt(($exactanswer-$approxanswer)^2)"`
+           echo $approxerror
+           samplePrefactor=`bc -l <<< "scale=4;($samplePrefactor*1.1)/1"`
+       done
+       samplePrefactor=`bc -l <<< "scale=4;($samplePrefactor/1.1)/1"`
+       echo "samplePrefactor used=$samplePrefactor"
+       echo $approxerror >> tmp_$[t]_iid_$[i]_error.txt
+
+       samplePrefactor=0.001
+       while (( $(echo "$approxcoherror > $deltasquared" |bc -l) )); do
+           echo "samplePrefactor=$samplePrefactor"
+           ( time ( ./weaksim $delta 0.25 2 $seed $samplePrefactor < inputPauli_$[i].txt >> tmp_$[t]_t_$[i].txt ) ) 2> tmp_$[t]_t_$[i]_timing.txt
+
+           exactanswer=`tail -1 tmp_$[t]_exact_$[i].txt`
+           approxcoherentanswer=`tail -1 tmp_$[t]_t_$[i].txt | cut -d ' ' -f 3`
+           approxcoherror=`bc -l <<< "sqrt(($exactanswer-$approxcoherentanswer)^2)"`
+           echo $approxcoherror
+           samplePrefactor=`bc -l <<< "scale=4;($samplePrefactor*1.1)/1"`
+       done
+       samplePrefactor=`bc -l <<< "scale=4;($samplePrefactor/1.1)/1"`
+       echo "samplePrefactor used=$samplePrefactor"
+       echo $approxcoherror >> tmp_$[t]_t_$[i]_error.txt
+
+    done
+
+    for (( i=1; i<=$numruns; i++ ))
+    do
+       rm tmp_$[t]_exact_$[i].txt;
+       rm tmp_$[t]_iid_$[i].txt;
+       rm tmp_$[t]_t_$[i].txt;
+       rm inputPauli_$[i].txt;
+       #echo "*******************" >> tmp_$[t]_iid.txt
+       #echo "*******************" >> tmp_$[t]_t.txt
+       #   sleep 1
+    done
+    echo "Longest runtime:" >> tmp_$[t]_iid.txt
+    cat tmp_$[t]_iid_[1-9]*_timing.txt | sort -n | tail -2 >> tmp_$[t]_iid.txt
+    rm tmp_$[t]_iid_[1-9]*_timing.txt
+    echo "Longest runtime:" >> tmp_$[t]_t.txt
+    cat tmp_$[t]_t_[1-9]*_timing.txt | sort -n | tail -2 >> tmp_$[t]_t.txt
+    rm tmp_$[t]_t_[1-9]*_timing.txt
+    echo "Largest error:" >> tmp_$[t]_iid.txt
+    cat tmp_$[t]_iid_[1-9]*_error.txt | sort -n | tail -1 >> tmp_$[t]_iid.txt
+    rm tmp_$[t]_iid_[1-9]*_error.txt
+    echo "Largest error:" >> tmp_$[t]_t.txt
+    cat tmp_$[t]_t_[1-9]*_error.txt | sort -n | tail -1 >> tmp_$[t]_t.txt
+    rm tmp_$[t]_t_[1-9]*_error.txt
+    echo "delta=$delta done!"
+done