我與設在這裏的教程沿着以下:http://opencl.codeplex.com/wikipage?title=OpenCL%20Tutorials%20-%201OpenCL - 是否可以在內核中調用另一個函數?
他們列出的內核是這樣的,它計算在輸出變量兩個數字,並將其存儲的總和:
__kernel void vector_add_gpu (__global const float* src_a,
__global const float* src_b,
__global float* res,
const int num)
{
/* get_global_id(0) returns the ID of the thread in execution.
As many threads are launched at the same time, executing the same kernel,
each one will receive a different ID, and consequently perform a different computation.*/
const int idx = get_global_id(0);
/* Now each work-item asks itself: "is my ID inside the vector's range?"
If the answer is YES, the work-item performs the corresponding computation*/
if (idx < num)
res[idx] = src_a[idx] + src_b[idx];
}
1)說例如,所執行的操作比總結要複雜得多 - 這是保證其功能的事情。我們稱之爲ComplexOp(in1,in2,out)。我將如何去實現這個函數,使vector_add_gpu()可以調用和使用它?你能舉出例子代碼嗎?
2)現在讓我們以極端的例子爲例,現在我想調用一個通用函數來處理這兩個數字。我如何設置它以便內核可以傳遞一個指向這個函數的指針並根據需要調用它?
只是一個評論。這是OpenCL而不是CUDA。您不必強制使用多個工作組大小。我經常看到thouse醜陋的'如果(idx
DarkZeros