Hyper Threading切ると逆に早くなった件
Hyper Threadingを切ると逆に早くなりました。
検証したPCは、購入したばかりのmacbook air 2020です。
Hyper Threadingを無効にする方法を以下を参照しました。
https://applech2.com/archives/20190515-how-to-disable-hyper-threading-in-mac-for-zombiload-mds.html
検証したコードは以下のような適当なpythonコードです。小数点を使用する単純処理を延々と繰り返すコードです。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 |
def main(): print("Start\n") v, c = mysqrt(2) print(f"val:{v} cnt:{c}\n") def mysqrt(x): value = 1.0 roopCount = 0 while True: roopCount += 1 chk = value * value if myabs(chk-x) < 0.000001: break if chk < x: value += 0.00000001 else: value -= 0.00000001 return [value, roopCount] def myabs(x): if x < 0: return -x return x if __name__ == "__main__": main() |
さらに上記のpythonスクリプトを10プロセス同時に立ち上げて、処理が終了する時間を計測します
1 2 3 |
SECONDS=0 time seq 1 10 | xargs -I ZZ -P 10 python3 test.py echo $SECONDS > res.txt |
さて、結果ですが、ばらつきはあるのですが、何回か実施しても、常にhyper threadingを無効にした方が、30秒ぐらい高速でした。(Hyper threadingが有効だと1分30秒ぐらい掛かる)
1 2 3 4 5 6 7 8 9 |
# hyper thread 無し # real 1m2.562s # user 4m3.011s # sys 0m0.373s # hyper thread有り #real 1m30.135s #user 10m55.161s #sys 0m2.223s |
うーん、どういう事なのでしょうか。なんか、体感的にもhyper threadingを無効にした方が気持ち、変な待ちが少ないように思えてきました。
やはり、OSが相当賢くhyper threadingのコアを意識してタスクを割り振らないと、当然、パフォーマンスとかレイテンシが悪化するのは当然のような気もします。今回の検証コードはまさにそういうパターンにヒットしたのかもしれないです。
コメントを残す