Voglio creare un array locale all'interno del mio kernel OpenCL, la cui dimensione dipende da un parametro del kernel. Sembra che non sia permesso - almeno con APP AMD.dichiarazione di array di lunghezza variabile non consentita in OpenCL - perché?
La tua esperienza è diversa? Forse è solo l'APP? O c'è qualche razionale qui?
Modifica: Vorrei ora suggerire che gli array di lunghezza variabile dovrebbero essere consentiti anche nel codice lato CPU, ed è stata una richiesta sfortunata da parte del comitato standard C; ma la domanda è valida.
Questa è la soluzione che sto utilizzando, ma - poiché ciò è possibile, perché non dovrei essere in grado di allocare un array locale, dichiarando una matrice a lunghezza variabile o chiamando una funzione simile a malloc di OpenCL? – einpoklum
Penso che abbia a che fare con molti dispositivi odierni che hanno bisogno di conoscere queste informazioni in anticipo, in modo che possano validare e allocare in modo sicuro. Non conosco ancora l'architettura GCN di AMD che supporterà le chiamate malloc di gpu-side. – mfa
Se fosse permesso, dovresti essere in grado di allocare dinamicamente la memoria del dispositivo all'interno del kernel, restituire errori di allocazione, ecc ... E ciò non è possibile nella GPU. A livello di kernel tutto deve essere statico. Come hanno già detto, l'unico modo è impostarlo dal codice host. – DarkZeros