と(Xubuntu 18.04のデフォルト)bash
のパフォーマンスを比較しています。dash
sh
- 私は
sh
それが良いと期待しています。bash
- ビット単位の移動が除算演算子より高速であると予想します。
しかし、不一致が発生しました。
λ hyperfine --export-markdown a.md -w 3 ./*
Benchmark #1: ./calc-div.bash
Time (mean ± σ): 2.550 s ± 0.033 s [User: 2.482 s, System: 0.068 s]
Range (min … max): 2.497 s … 2.595 s 10 runs
Benchmark #2: ./calc-div.sh
Time (mean ± σ): 2.063 s ± 0.016 s [User: 2.063 s, System: 0.000 s]
Range (min … max): 2.043 s … 2.100 s 10 runs
Benchmark #3: ./calc-shift.bash
Time (mean ± σ): 3.312 s ± 0.034 s [User: 3.255 s, System: 0.057 s]
Range (min … max): 3.274 s … 3.385 s 10 runs
Benchmark #4: ./calc-shift.sh
Time (mean ± σ): 2.087 s ± 0.046 s [User: 2.086 s, System: 0.001 s]
Range (min … max): 2.058 s … 2.211 s 10 runs
Summary
'./calc-div.sh' ran
1.01 ± 0.02 times faster than './calc-shift.sh'
1.24 ± 0.02 times faster than './calc-div.bash'
1.61 ± 0.02 times faster than './calc-shift.bash'
注文する | 方法] | 分] | 最大[秒] | 比較的 |
---|---|---|---|---|
./calc-div.bash |
2.550±0.033 | 2,497 | 2.595 | 1.24±0.02 |
./calc-div.sh |
2.063±0.016 | 2.043 | 2.100 | 1.00 |
./calc-shift.bash |
3.312±0.034 | 3.274 | 3.385 | 1.61±0.02 |
./calc-shift.sh |
2.087±0.046 | 2.058 | 2.211 | 1.01±0.02 |
私がテストしたスクリプトは次のとおりです。
div.bashの計算
#!/usr/bin/env bash
for i in {1..1000000}; do
_=$(( i / 1024 ))
done
計算されたiv.sh
i=1
while [ $i -le 1000000 ]; do
_=$(( i / 1024 ))
i=$(( i + 1 ))
done
Shift.bash 計算
for i in {1..1000000}; do
_=$(( i >> 10 ))
done
Shift.sh 計算
#!/usr/bin/env sh
i=1
while [ $i -le 1000000 ]; do
_=$(( i >> 10 ))
i=$(( i + 1 ))
done
5000000の場合、違いはより顕著です。
注文する | 方法] | 分] | 最大[秒] | 比較的 |
---|---|---|---|---|
./calc-div.bash |
13.333±0.202 | 12.870 | 13.584 | 1.23±0.02 |
./calc-div.sh |
10.830±0.119 | 10.750 | 11.150 | 1.00 |
./calc-shift.bash |
17.361±0.357 | 16.995 | 18.283 | 1.60±0.04 |
./calc-shift.sh |
11.226±0.351 | 10.834 | 11.958 | 1.04±0.03 |
Summary
'./calc-div.sh' ran
1.04 ± 0.03 times faster than './calc-shift.sh'
1.23 ± 0.02 times faster than './calc-div.bash'
1.60 ± 0.04 times faster than './calc-shift.bash'
ご覧のとおり、bash
sum のdash
場合、除算演算子は同等の右ビット単位の移動よりも高速です。