マルチスレッド数(2)
投稿ツリー
-
マルチスレッド数(2) (品川地蔵, 2021/10/30 11:52)
- depth:
- 0
前の投稿
-
次の投稿
|
親投稿
-
子投稿なし
|
投稿日時 2021/10/30 11:52 | 最終変更
品川地蔵
投稿数: 353

マルチスレッド数については以前にも書いていますが、Apple silicon (M1) マックも出ており、少し状況も変わってきているので再度書いておきます。またプログラムの処理も以前とは少し変更しています。
地図ウインドウの描画を始めとして、各種画像の作成や、ベクターモード等高線の描画など、マルチスレッドを利用しています。処理を分割して同時処理をし、全体の処理にかかる時間を短くするというものです。スレッド数はシステムから報告される論理cpu数に基づいて決めています。この値はターミナルコマンドで sysctl -n hw.logicalcpu と打ち込んだ時の結果と同じ値です。M1マックでは7か8、M1 pro と M1 Max では10ですね。この値は、故障したり、過熱したりすると一部が止められて削減されることがあります。
さて、スレッド数ですが、論理cpu数が4以下の時はその値を、4を越える時は [(論理cpu数 - 4) / 2 + 4] を設定しています。したがってApple siliconマックではスレッド数は5から7となります。アクティビティモニタで表示されるスレッド数は、メインスレッドとシステムフレームワークで使うスレッドが追加されるので、数個大きな値が表示されます。時間のかかる処理の時にアクティビティモニタで確認してみれば、スレッド数x100%前後で動いているのが見えるかと思います。
このスレッド数の設定はIntel cpuマックの実績に基いています。ほとんどの場合スレッド数が4を超えるとメモリアクセスの競合で速度が上がらないか、返って遅くなるからです。しかしApple siliconマックでは状況が異なるようです。手持ちのM1 MacBook Air はcore数8なのでスレッド数6で動きますが、これを7や8に上げても比例はしませんが速度が上がりました。メモリアクセス周りがだいぶ改善されているのでしょうか。M1 pro や M1 max ではメモリアクセス速度がだいぶアップしているということなので、スレッド数を10まで上げても効果が期待できるかもしれません。しかし、最新マックを導入予定はないので、自分では確認できません。
そこで隠し機能でこのスレッド数を指定できるようにしてあるので、試せる方に測定して見て報告でもいただけるとありがたいです。遠距離の展望図とか、図法画像でベクトル等高線を描くとか時間のかかる処理でないと測定が難しいですね。システムの処理も並行して動くのでばらつきも出ますしね。
ターミナルコマンドで次のように指定します。
defaults write jp.jizoh.GeoJizoh4 NumberOfTasks 8
これはジオ地蔵でスレッド数を8と指定するものです。最後の数字が指定するスレッド数で、0から16の範囲で指定します。0 はデフォルトに戻すものです。もちろん論理cpu数を超えて指定するのは意味がありません。遅くなるだけです。
defaults delete jp.jizoh.GeoJizoh4 NumberOfTasks
としてもデフォルトに戻ります。
数を増やして速くなるかどうかを確認する、逆に小さく指定してどうかと確認できます。時間がかかっても良いからスレッド数を減らして過熱を抑えるという使い方もありますね。
jp.jizoh.GeoJizoh4 は SimpleDEMViewer の場合は jp.jizoh.SDVr7 、SimpleDEMViewerASの場合は jp.jizoh.SDVrAS となります。
なおこの指定はジオ地蔵4.1、SimpleDEMViewer 7.1、AS 2.1から有効になっています。
地図ウインドウの描画を始めとして、各種画像の作成や、ベクターモード等高線の描画など、マルチスレッドを利用しています。処理を分割して同時処理をし、全体の処理にかかる時間を短くするというものです。スレッド数はシステムから報告される論理cpu数に基づいて決めています。この値はターミナルコマンドで sysctl -n hw.logicalcpu と打ち込んだ時の結果と同じ値です。M1マックでは7か8、M1 pro と M1 Max では10ですね。この値は、故障したり、過熱したりすると一部が止められて削減されることがあります。
さて、スレッド数ですが、論理cpu数が4以下の時はその値を、4を越える時は [(論理cpu数 - 4) / 2 + 4] を設定しています。したがってApple siliconマックではスレッド数は5から7となります。アクティビティモニタで表示されるスレッド数は、メインスレッドとシステムフレームワークで使うスレッドが追加されるので、数個大きな値が表示されます。時間のかかる処理の時にアクティビティモニタで確認してみれば、スレッド数x100%前後で動いているのが見えるかと思います。
このスレッド数の設定はIntel cpuマックの実績に基いています。ほとんどの場合スレッド数が4を超えるとメモリアクセスの競合で速度が上がらないか、返って遅くなるからです。しかしApple siliconマックでは状況が異なるようです。手持ちのM1 MacBook Air はcore数8なのでスレッド数6で動きますが、これを7や8に上げても比例はしませんが速度が上がりました。メモリアクセス周りがだいぶ改善されているのでしょうか。M1 pro や M1 max ではメモリアクセス速度がだいぶアップしているということなので、スレッド数を10まで上げても効果が期待できるかもしれません。しかし、最新マックを導入予定はないので、自分では確認できません。
そこで隠し機能でこのスレッド数を指定できるようにしてあるので、試せる方に測定して見て報告でもいただけるとありがたいです。遠距離の展望図とか、図法画像でベクトル等高線を描くとか時間のかかる処理でないと測定が難しいですね。システムの処理も並行して動くのでばらつきも出ますしね。
ターミナルコマンドで次のように指定します。
defaults write jp.jizoh.GeoJizoh4 NumberOfTasks 8
これはジオ地蔵でスレッド数を8と指定するものです。最後の数字が指定するスレッド数で、0から16の範囲で指定します。0 はデフォルトに戻すものです。もちろん論理cpu数を超えて指定するのは意味がありません。遅くなるだけです。
defaults delete jp.jizoh.GeoJizoh4 NumberOfTasks
としてもデフォルトに戻ります。
数を増やして速くなるかどうかを確認する、逆に小さく指定してどうかと確認できます。時間がかかっても良いからスレッド数を減らして過熱を抑えるという使い方もありますね。
jp.jizoh.GeoJizoh4 は SimpleDEMViewer の場合は jp.jizoh.SDVr7 、SimpleDEMViewerASの場合は jp.jizoh.SDVrAS となります。
なおこの指定はジオ地蔵4.1、SimpleDEMViewer 7.1、AS 2.1から有効になっています。
--
## 品川地蔵 ##