私はOpenCLでハウスドルフ距離を実装しようとしていますが、次のカーネルがその基礎を形成しているか、完全に実装する必要があるため、そうしていると思います。そうは言っても、私はいくつかの提案を得ることができますか、それともこのカーネルを最適化する方法はありますか?基本的に、ヘルパー関数を呼び出すカーネル関数のforループを削除するにはどうすればよいですか。
OpenCLカーネルとそのヘルパー関数:
void helper( int a_1, __global int* b_1, __global int* c_1 ){
int i = get_global_id(0);
c_1[i] = a_1 - b_1[i];
}
__kernel void test_call( __global int* a, //input buffer of size [100000, 1]
__global int* b, //input buffer of size [100000, 1]
__global int* c ){ //output buffer of size [100000, 1]
for ( int iter = 0 ; iter < 100000 ; iter++ ){
helper ( a[iter], b, c );
// once array c is obtained by calling the above function,
// it will be used in further processing that will take place inside
// this for loop itself
}
基本的に、ここで私が行おうとしているのは、入力バッファー「a」の各要素を入力バッファー「b」の各要素から減算することです。複雑さはO(n 2)になります。
ちなみに、この素朴な実装自体は2.5秒以内に結果を生成します。これのシリアル実装は、実行を完了するのに数分かかります。