並列プログラミング手法について質問です。
具体的に、100dot X 100dotのイメージデータ2つのを重ね合わせる処理を実現したいです。
単純に考えると前面に表示するAイメージと背面に表示するBイメージを以下のように
比較すると、重ね合わせができると思います。
Aイメージ Aimg[100][100];
Bイメージ Bimg[100][100];
重ね合わせた結果 Cimg[100][100];
for (y=0; y<100; y++) { //y座標
for (x=0; x<100; x++) { //x座標
if (Aimg[y][x] != 透過) {
Cimg[y][x] = Aimg[y][x];
}
else {
Cimg[y][x] = Bimg[y][x];
}
}
}
これをマルチコア、マルチスレッド、その他の技術を使い、より高速に実現する方法はあるでしょうか?
CPUの数、GPUの有無など、条件付でも何でもいいので、より高速にする手段をご存知の方、ご教授いただけるでしょうか?
私の調べた限り、並列処理を行うのに、
・OpenCL
・ARM neon
・ループカウンタはデクリメントにする。
というのが、有効みたいでした。
そもそも画像処理を行うには、
・OpenGL
・OpenVG
が有効みたいです。
ループカウンタをデクリメントにするのは多少効果がありましたが、他は
やり方が良くなかったのか、あまり効果が見られませんでした。
ちなみに、32ms定期で処理が必要です。
恐らく、一回の実行に最低限、数ms必要になる、などの条件がボトルネックになっていると思いますが、その辺の改善策、その他の手法をご存知の方はご教授ください。
また、パフォーマンスのブラッシュアップ手法も募集しております。