Ecco il ciclo che voglio convertire in openCL.openCL riduzione e passaggio array 2d
for(n=0; n < LargeNumber; ++n) {
for (n2=0; n2< SmallNumber; ++n2) {
A[n]+=B[n2][n];
}
Re+=A[n];
}
Ed ecco quello che ho finora, anche se, so che non è corretto e manca alcune cose.
__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];
}
Sono un principiante assoluto per questo tipo di cose. Prima di tutto so che non posso passare un doppio puntatore globale a un kernel openCL. Se puoi, aspetta un paio di giorni prima di pubblicare la soluzione, voglio capirlo da solo, ma se puoi aiutarmi a indicarmi la direzione giusta sarei grato.
"Non riesco a passare un doppio puntatore globale a un kernel openCL" La tua scelta di parole mi ha confuso. Puoi passare un puntatore doppio (ad esempio "__global double * A"). Non è possibile passare un puntatore 2D (ad esempio "__global int ** B"). – vocaro
Hai considerato la suddivisione del programma in due kernel separati (eseguiti in sequenza), uno per il loop interno e uno per il loop esterno? – vocaro