
私はコンピュータ(実際には複数台)で科学的な計算をしていますが、一度にいくつの課題を提出する必要があるかを知りたいです。 lscpuは以下を表示します:
CPU(s): 8
On-line CPU(s) list: 0-7
Thread(s) per core: 2
Core(s) per socket: 4
Socket(s): 1
あいまいさは「スレッド」です。私はオンラインで検索し、関連情報を学びました。しかし、まだ混乱しています。 (送信したジョブの数によって異なります。) 私は機械の詳細に興味がありません。たとえば、これで実行可能ファイルが作成されました。自分で実行すると10分かかります。それでは、実行する必要がある項目が800個あるとしましょう。総時間コストを削減するには、一度に4つまたは8つを実行する必要がありますか?
答え1
このPCにIntel CPUがある場合コアあたりのスレッド数最も確実なのはハイパースレッディングです。
https://en.wikipedia.org/wiki/hyperthreading
物理的に存在する各プロセッサコアに対して、オペレーティングシステムは2つの仮想(論理)コアを処理し、可能であればそれらの間のワークロードを共有します。ハイパースレッディングの主な目的は、パイプラインの独立したコマンドの数を増やすことです。これは、複数のコマンドが別々のデータに対して並列に動作するスーパースカラーアーキテクチャを利用します。
。
総時間コストを削減するには、一度に4つまたは8つを実行する必要がありますか?
時々違うよねハイパースレッディングを使用すると、一部のジョブはより速く実行され、一部のジョブはそうではありません。自分でテストしてみてください。
それでは、実行する必要がある項目が800個あるとしましょう。
私はこの問題を処理するためにGNU Parallelを使用します。
https://www.gnu.org/software/parallel/
GNU Parallelは、1つ以上のコンピュータを使用してタスクを並列に実行するためのシェルツールです。
.
処理するファイルのリストがある場合は、次の方法を使用できます。
find . | parallel -j4 yourprogram
以前のテストでハイパースレッディングがより速く実行されるように見える場合は、「4」を「8」に変更します。
編集:時々、プログラムがより速く実行されることに言及するのを忘れました。障害を負うBIOSのHT。