Ich fange gerade an, OpenCL zu lernen. Ich versuche ein Gefühl dafür zu bekommen, welche Leistungsgewinne zu erwarten sind, wenn man Funktionen/Algorithmen auf die GPU verschiebt.Was ist die trivialste Funktion, die von einer Berechnung auf einer GPU profitieren würde?
Die grundlegendste Kernel in den meisten Anleitungen gegeben ist ein Kernel, die zwei Reihen von Zahlen nimmt und summiert den Wert an den entsprechenden Indizes und fügt sie zu einem dritten Array, etwa so:
__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];
}
ich davon aus bin dass man es niemals rechtfertigen könnte, dies auf der GPU zu berechnen, die Speicherübertragung würde die Zeit, die es erfordert, dies auf der CPU nach Größenordnungen zu berechnen, ausnutzen (ich könnte mich dabei irren, daher diese Frage).
Was ich frage mich ist, was wäre das einfachste Beispiel, wo Sie erhebliche Beschleunigung erwarten würden, wenn Sie einen OpenCL-Kernel anstelle der CPU verwenden?
Link ist unterbrochen. – user