Ho visto in un post qui che possiamo chiamare una funzione da un kernel OpenCL. Ma nella mia situazione, ho bisogno di quella funzione complessa per essere parallelizzata (gestita da tutti i thread disponibili), quindi devo fare di quella funzione anche un kernel e chiamarlo subito come funzione dal kernel principale? o qual è la soluzione possibile per questa situazione? Grazie in anticipoChiamare il kernel OpenCL da un altro kernel OpenCL
risposta
Puoi chiamare le funzioni di aiuto dal tuo kernel e saranno parallelizzate nello stesso modo del kernel, immaginandole come inline all'interno del codice del tuo kernel. Quindi, ogni elemento di lavoro invocherà la funzione di supporto per il set di lavoro che gestisce.
float4 helper_function(float4 input)
{
return input.x + input.y + input.z + input.w;
}
__kernel kernel_function(const float4* arr, float4* out)
{
id = get_global_id(0);
out[id] = helper_function(arr[id]);
}
Se ho compreso correttamente la tua domanda, vuoi eseguire un passaggio completo separato su un buffer all'interno del kernel. Non penso che sia possibile all'interno del kernel, quindi dovresti creare il codice per il passaggio "interno" come un kernel separato e anche chiamare quel kernel separatamente dal tuo codice host. L'output da quel kernel non deve essere riletto alla memoria dell'host, ma può rimanere nella memoria del dispositivo tra le chiamate del kernel.
OpenCL 2.0 spec ha aggiunto una nuova funzionalità per il paralelismo dinamico.
6.13.17 Enqueuing Kernels
OpenCL 2.0 allows a kernel to independently enqueue to the same device, without host
interaction. ...
Nell'esempio sotto my_func_B enqueus my_func_A sul dispositivo:
kernel void
my_func_A(global int *a, global int *b, global int *c)
{
...
}
kernel void
my_func_B(global int *a, global int *b, global int *c)
{
ndrange_t ndrange;
// build ndrange information
...
// example – enqueue a kernel as a block
enqueue_kernel(get_default_queue(), ndrange, ^{my_func_A(a, b, c);});
...
}
- 1. Come compilare il kernel OpenCL in bitstream?
- 2. OpenCL - è possibile richiamare un'altra funzione all'interno di un kernel?
- 3. Misurare il tempo di esecuzione di OpenCL kernel
- 4. Come avviare il kernel OpenCL personalizzato in OpenCV (3.0.0) OCL?
- 5. Ottimizzazione del codice del kernel in opencl per una GPU
- 6. Creare dinamiche di array locali all'interno del kernel OpenCL
- 7. Come passare e accedere ai vettori C++ al kernel OpenCL?
- 8. OpenCL Performance Optimization
- 9. C'è un modo per srotolare i loop in un kernel OpenCL di AMD con il compilatore?
- 10. Intel OpenCL vs. Khronos OpenCL
- 11. OpenCL scalare vs vettore
- 12. OpenCL distribution
- 13. Incorpora V8 nell'applicazione OpenCL?
- 14. Come posso forzare il compilatore OpenCL di Apple per ricompilare un kernel memorizzato nella cache?
- 15. Come posso eseguire il debug di un kernel OpenCL in Xcode 4.1?
- 16. Eventi OpenCL e code comandi
- 17. Come configurare Xcode per eseguire il codice OpenCL e come verificare i kernel prima di creare
- 18. Come faccio a sapere se il mio kernel OpenCL è in esecuzione su GPU?
- 19. Corruzione della memoria con clEnqueueWriteBuffer - OpenCL
- 20. bruteforce a OpenCL (porto da CUDA) non funziona
- 21. Come utilizzare la memoria locale in OpenCL?
- 22. come comunicare i programmi - kernel kernel kernel monolitico kernel exo
- 23. Confronto prestazioni CUDA vs OpenCL
- 24. Come determinare la dimensione massima delle immagini che posso tranquillamente passare al/dal kernel OpenCL?
- 25. L'esecuzione del kernel OpenCL non viene avviata fino a quando clFinish o clWaitForEvents non si chiama
- 26. I tipi di vettore OpenCL usano SIMD
- 27. OpenCL - Perché utilizzare READ_ONLY o WRITE_ONLY Buffer
- 28. Abysmal OpenCL Prestazioni ImageSampling contro OpenGL TextureSampling
- 29. Come utilizzare async_work_group_copy in OpenCL?
- 30. CL_INVALID_KERNEL_NAME errore quando uso cl_khr_fp64 in un kernel
aggiunta a risposta sramij, chiamare un altro kernel kernel è chiamato Dynamic parallelismo. per questo è necessario il dispositivo che supporta OpenCL 2.0. può fare riferimento a http://stackoverflow.com/questions/12913640/opencl-dynamic-parallelism-gpu-spawned-threads – Meluha