per un progetto universitario sto lavorando con OpenCL e, per iniziare, sto facendo un po' di test per verificare quante cose effettivamente si possano fare. Nel fare questi test mi sono imbattuto in un problema abbastanza grande, il non poter passare array di puntatori al kernel. Ho pensato quindi di passare come parametro un array di strutture, ognuna delle quali contiene un array di caratteri ed un intero che ne determina la lunghezza effettiva. Mi trovo però nella situazione di dover lavorare sulle "stringhe" effettive, quindi creare internamente al kernel un array di caratteri che copra soltanto i primi n caratteri dell'array (dove n è la lunghezza). Però a quanto pare OpenCL vuole che la dimensione del nuovo array sia costante. Per cercare di essere più chiaro vi scrivo il breve codice :
Kernel:
Codice: Seleziona tutto
typedef struct word{
char word[100];
int len;
}word_t;
__kernel void prova(__global word_t *data, __global res_t *result)
{
size_t id=get_global_id(0);
int size=0;
int i=0;
size=data[id].len;
char word[size];
//lavoro con la word che ho costruito
}
La mia domanda è : c'è un metodo che finora non ho trovato per ovviare a questo problema? Oppure, in alternativa, avete qualche suggerimento alternativo su come passare eventualmente un lungo array di char e poi splittarlo?
Spero di essere stato sufficientemente chiaro, se poi dovessi aver tralasciato qualche informazione chiedete pure.
Grazie