我想實現OpenCL中豪斯多夫距離和下面的內核構成了它的基礎還是我相信它,因爲我還是要完全實現它。這就是說,我可以得到一些建議,或者有沒有一種方法來優化這個內核?基本上,我怎麼能去掉了其中調用輔助函數內核函數循環.....我如何進一步優化該內核的OpenCL
的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
}
本質上講,我想在這裏做的是用輸入緩衝區'b'中的每個元素減去輸入緩衝區'a'中的每個元素。複雜性將是O(n )。
順便說一句,這種幼稚的做法本身產生2.5秒內的結果。這需要幾分鐘的時間才能完成執行。
我建議刪除函數調用來幫手,並使其內聯。此外,使用編譯指示展開for循環,讓GPU更有效地利用ILP。 – ahmad
感謝您的意見...... – Yash