イメージ上にフィルタを実行しています。垂直パスとそれに続く水平パスを実行します。このタスクの機能は両方のパスで同じですが、引数値のみが変更されます。私はループで関数を呼び出しています。その関数の演算をベクトル化するには、2つのパスに対して別々の関数呼び出しを書く必要があります。ループは水平パスと垂直パスのために別々になりました。この変更のために「if条件」が追加されました。計算がベクトル化されても、カーネルの実行に時間がかかります。私はコードを何度も実行しており、ベクトル化されたコードで取られた平均時間は元のコードよりも長くなっています。それは "if条件"がコードに組み込まれているためですか?"条件が" OpenCLのカーネル実行のパフォーマンスに影響を与える場合は?
オリジナルコード
global int* a;
for(int i = 0; i < 4; i++)
{
filter(a + i, b, c);
}
修正コード
global int* a;
if(offset == 1)
for(int i = 0; i < 4; i++)
{
filter_vertical(a + i, b, c);
}
else
filter_horizontal(a, b, c);
サンプルコードの一部を表示してください。 'if'文の使い方は、答えを変えるかもしれません。 –