I programmi OpenCL interpretati e compilati nel namespace OPCL di Colibrì possono contenere comandi   macro e direttive non presenti nella versione standard di OpenCL; Lo scopo é la semplificazione della scrittura dei programmi con l’uso di strutture e dati dell’applicazione Colibrì;

in particolare si vuole semplificare la scrittura dei kernel attraverso l’uso di macro  che risolvono ad esempio, la verbosità di alcuni argomenti al kernel, come le strutture colore e le funzioni che le manipolano e che hanno un equivalente nelle librerie di trattamento del colore in Colibri nel linguaggio c++; le macro definite nella versione OpenCL di Colibri permettono di utilizzare le stesse funzioni direttamente nel codice OpenCL da compilare.

La classe gpu_program_preprocessor è il preprocessore progettato per interpretare e risolvere  le direttive e macro nel namespace OPCL in codice compilabile OpenCL standard;

Sintassi dei comandi

tutte le direttive e  i comandi sono nella forma _$xxxxxx( a,b,c,…,n); dove

  • _$ è un prefisso identificativo sempre presente .
  •  xxxxxx è una stringa alfanumerica che identifica il comando, con il primo carattere alfabetico.
  • (a,b,c,….,n); è una sequenza di argomenti separati da virgole, racchiuse fra parentesi tonde e terminata da un punto e virgola.

Ciascun argomento presente può essere un comando o una direttiva;

La classe  gpu_program_ preprocessor attualmente riconosce i seguenti comandi:

_$programs(programs_cl)

indica la directory del progetto dove sono residenti i file di programma .cl e .h; la direttiva avrà effetto sui comandi _$include successivi, e può essere richiamata più volte. Occorre fare attenzione, perché l’uso del comando nei file inclusi in seguito può alterare la ricerca dei file successivi in modo inatteso.

se la cartella indicata non è presente viene generato un messaggio di errore ed il processo viene terminato.

in assenza di questo comando è utilizzata la cartella di default definita nell’inclusione defcl.h di Colibrì.

_$include(file1,file2,..,file_n)

É una direttiva di inclusione di file; il processore sostituisce il comando con il contenuto dei file inseriti  nell’ordine della lista. I file devono essere tutti presenti nella cartella programs_cl  del progetto.

La direttiva _$include può essere presente anche nei file della lista; se un file é presente in più direttive  _$include, viene considerato solo il primo;

il nome del file può contenere anche una  directory contenuta in program_cl, ad esempio Matrix/invert.cl  é il file invert.cl contenuto in programs_cl\Matrix.

Se uno dei file nella lista non è presente viene generato un messaggio di errore ed il processo viene terminato.

Leave a Reply

Skip to toolbar