Aquí está el bucle que quiero convertir a openCL.reducción de openCL, y paso 2d array
for(n=0; n < LargeNumber; ++n) {
for (n2=0; n2< SmallNumber; ++n2) {
A[n]+=B[n2][n];
}
Re+=A[n];
}
Y esto es lo que tengo hasta ahora, aunque, sé que no es correcto y me faltan algunas cosas.
__kernel void openCL_Kernel(__global int *A,
__global int **B,
__global int *C,
__global _int64 Re,
int D)
{
int i=get_global_id(0);
int ii=get_global_id(1);
A[i]+=B[ii][i];
//barrier(..); ?
Re+=A[i];
}
Soy un principiante completo para este tipo de cosas. Antes que nada, sé que no puedo pasar un doble puntero global a un kernel openCL. Si puede, espere unos días más o menos antes de publicar la solución, quiero resolver esto por mí mismo, pero si puede ayudarme a orientarme en la dirección correcta, le estaría agradecido.
"No puedo pasar un doble puntero global a un kernel openCL" Tu elección de palabras me confundió. Puede pasar un doble puntero (por ejemplo, "__global double * A"). No puede pasar un puntero 2D (por ejemplo, "__global int ** B"). – vocaro
¿Ha considerado dividir el programa en dos núcleos separados (ejecutados secuencialmente), uno para el bucle interno y otro para el bucle externo? – vocaro