今回からジョブ(タスク)による並列処理化を行います。
この並列化処理は一定量データの列を用意し、そのデータ列を処理する複数ジョブ(タスク)を立ち上げて、並列で実行します。
例えて言うなら、折り紙の山から4人が10枚ずつ取りながら競って鶴を折るような作業になります。
ジョブを行う関数は、逐次処理プログラムの内側のループ処理を行うようにしました。
そして、外側のループ処理はジョブデータの配列を表すようにしました。
並列動作するジョブ関数はpthreadとして4つ動作させました。
EMC組み込みマルチコアサミット2020、セミナー資料より
main関数は、最初にジョブ関数が使用するデータ列を作成します。
その後、ジョブ関数を4つ、スレッドとして動作させ、最後に4つのジョブ関数が処理を終えるのを待ちます。
- 緑色の部分がデータ列を作る処理
- 紫色はスレッド共有変数をアクセスする際に行う排他処理用ミューテックス変数の初期化処理
- 黄色はジョブ関数のスレッド起動処理(オレンジ色がジョブ関数名)
- 黄緑色はスレッド関数の終了を待つ処理
EMC組み込みマルチコアサミット2020、セミナー資料より
thread_job・get_job・subの各関数は以下のような構造です。
- オレンジ色はthread_jobに関する箇所
- 黄色はget_jobに関する箇所
- 灰色はsubに関する箇所
EMC組み込みマルチコアサミット2020、セミナー資料より
次回は、ジョブ(タスク)並列の動作結果や高速化の改善等について記載します。
コメントをお書きください