· 

(4)データ並列処理は結果が異なる [ はじめての並列化 ]

 

改良後のプログラム動作結果を並列化前の結果と比べると、検出件数は同じですが検出順序は異なります。

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

 

逐次処理では、乗算両辺の値による二重ループ内で処理していたので、検出結果も小さな値から順に並びました。

 

データ分割並列化では、外側のループを複数の区間に分けて同時に行うので(本環境の場合は8分割)、必ずしも左辺の小さい順に検出するとは限りません。

本例題では全ての該当データを見るけることになりましたが、1件だけ見つけたい時であれば、逐次処理と並列処理では異なるデータを見つける可能性があります。

データの並び順に検索したいのであれば、データ並列化処理は向きませんが、全体からバランスよく検索したい場合はデータ並列化処理の方が良さそうです。

 

 

高速化のためにプログラムを並列化する時にも、従来の高速化手法を使うことができます。

 

例えば本例であれば、1行だけで書かれた関数がありますが、これらの関数をマクロに書き換えることで高速化が期待できます。

 

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

 

 

次回から、ジョブ(タスク)による並列化をはじめます

 

ダウンロード
使用したプログラムソース(コンパイル方法はソースコメントを参照のこと)
1. Source_Program_1_M.c (OpenMPによる並列化に加えて、子関数をマクロ化したプログラムソース)
Source_1M.zip
zip ( 圧縮 ) ファイル 984 Bytes