改良後のプログラム動作結果を並列化前の結果と比べると、検出件数は同じですが検出順序は異なります。
EMC組み込みマルチコアサミット2020、セミナー資料より
逐次処理では、乗算両辺の値による二重ループ内で処理していたので、検出結果も小さな値から順に並びました。
データ分割並列化では、外側のループを複数の区間に分けて同時に行うので(本環境の場合は8分割)、必ずしも左辺の小さい順に検出するとは限りません。
本例題では全ての該当データを見るけることになりましたが、1件だけ見つけたい時であれば、逐次処理と並列処理では異なるデータを見つける可能性があります。
データの並び順に検索したいのであれば、データ並列化処理は向きませんが、全体からバランスよく検索したい場合はデータ並列化処理の方が良さそうです。
高速化のためにプログラムを並列化する時にも、従来の高速化手法を使うことができます。
例えば本例であれば、1行だけで書かれた関数がありますが、これらの関数をマクロに書き換えることで高速化が期待できます。
EMC組み込みマルチコアサミット2020、セミナー資料より
次回から、ジョブ(タスク)による並列化をはじめます。
コメントをお書きください