Sto appena iniziando ad imparare OpenCL. Sto cercando di capire quali sono le prestazioni che si aspettano quando si spostano funzioni/algoritmi nella GPU.Qual è la funzione più banale che sarebbe utile per essere calcolata su una GPU?
Il kernel più elementare proposta nella maggior tutorial è un kernel che prende due array di numeri e somma il valore degli indici corrispondenti e li aggiunge un terzo array, in questo modo:
__kernel void
add(__global float *a,
__global float *b,
__global float *answer)
{
int gid = get_global_id(0);
answer[gid] = a[gid] + b[gid];
}
__kernel void
sub(__global float* n,
__global float* answer)
{
int gid = get_global_id(0);
answer[gid] = n[gid] - 2;
}
__kernel void
ranksort(__global const float *a,
__global float *answer)
{
int gid = get_global_id(0);
int gSize = get_global_size(0);
int x = 0;
for(int i = 0; i < gSize; i++){
if(a[gid] > a[i]) x++;
}
answer[x] = a[gid];
}
sto supponendo che non si può mai giustificare il calcolo di questo sulla GPU, il trasferimento di memoria potrebbe far pesare il tempo necessario a calcolare questo sulla CPU in base alle grandezze (potrei sbagliarmi su questo, quindi questa domanda).
Quello che mi chiedo è quale sarebbe l'esempio più banale in cui ci si aspetterebbe una significativa accelerazione quando si utilizza un kernel OpenCL invece della CPU?
Il collegamento è interrotto. – user