estoy siguiendo, junto con un tutorial que se encuentra aquí: http://opencl.codeplex.com/wikipage?title=OpenCL%20Tutorials%20-%201OpenCL: ¿es posible invocar otra función desde dentro de un kernel?
El kernel que han enumerado es esto, que calcula la suma de dos números y lo almacena en la variable de salida:
__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) Di por ejemplo, que la operación realizada fue mucho más compleja que una sumatoria, algo que garantiza su propia función. Vamos a llamarlo ComplexOp (in1, in2, out). ¿Cómo podría implementar esta función para que vector_add_gpu() pueda llamarla y usarla? ¿Puedes dar un código de ejemplo?
2) Ahora tomemos el ejemplo al extremo, y ahora quiero llamar a una función genérica que opera en los dos números. ¿Cómo podría configurarlo para que se le pueda pasar al núcleo un puntero a esta función y llamarlo según sea necesario?
Sólo un comentario. Esto es OpenCL no CUDA. No está obligado a usar múltiples tamaños de grupos de trabajo. Veo muy a menudo por feo 'if (idx
DarkZeros