初心者がマルチコアソフト開発に初挑戦(5)

今回からジョブ(タスク)による並列処理化を行います。

この並列化処理は一定量データの列を用意し、そのデータ列を処理する複数ジョブ(タスク)を立ち上げて、並列で実行します。

例えて言うなら、折り紙の山から4人が10枚ずつ取りながら競って鶴を折るような作業になります。

 

 

ジョブを行う関数は、逐次処理プログラムの内側のループ処理を行うようにしました。

そして、外側のループ処理はジョブデータの配列を表すようにしました。

並列動作するジョブ関数はpthreadとして4つ動作させました。

EMC組み込みマルチコアサミット2020、セミナー資料より

main関数は、最初にジョブ関数が使用するデータ列を作成します。

その後、ジョブ関数を4つ、スレッドとして動作させ、最後に4つのジョブ関数が処理を終えるのを待ちます。

  • 緑色の部分がデータ列を作る処理
  • 紫色はスレッド共有変数をアクセスする際に行う排他処理用ミューテックス変数の初期化処理
  • 黄色はジョブ関数のスレッド起動処理(オレンジ色がジョブ関数名)
  • 黄緑色はスレッド関数の終了を待つ処理

EMC組み込みマルチコアサミット2020、セミナー資料より

thread_jobget_jobsubの各関数は以下のような構造です。 

  • オレンジ色はthread_jobに関する箇所
  • 黄色はget_jobに関する箇所
  • 灰色はsubに関する箇所

 

EMC組み込みマルチコアサミット2020、セミナー資料より

 

次回ジョブ(タスク)並列の動作結果や高速化の改善等について記載します。