マルチコアCPUのための最適化-スレッド間の連携

マルチコアの性能を十分に引き出すためには、処理を複数のスレッドに分割すると共に、それぞれのスレッドが並列して動作するようにスレッドの独立性を高める必要があります。いくつか基本となるスレッド間の連携方法を紹介します。
コマンダー
ほぼどのような形の処理にも適用することができます。
ひとつの制御スレッドと、複数の作業スレッドからなります。制御スレッドからキューを通して処理の要求を作業スレッドに送ります。各作業スレッドはキューから作業内容を取得し、その結果を制御スレッドに返します。
CPUコア数と同じ数の作業スレッドを作ることでCPUを有効的に使用することができます。作業スレッドの数が増えると制御スレッドの負荷が高くなり、制御スレッドの動作速度が律速となります。
パイプライン
マルチメディアなどストリームデータの処理に適しています。
一連の処理を、前段、中段、後段のように複数の段階に分割し、それぞれの段階をスレッドにします。前段の処理が終了したら処理結果を中段に送り、前段は次のデータの処理を開始します。中段も同様に処理が終了したら処理結果を後段におくり、前段から次のデータを受け取って処理を開始します。
適当な処理単位で旨く分割することができれば、CPUコア数の増加に応じて処理速度を高めていくことができます。しかし処理を均等に分割することが難しく、もっとも負荷の大きい段階が律速となります。

コメントを残す

メールアドレスが公開されることはありません。