Come gestisci la tua fonte OpenCL?

3

Ho difficoltà a decidere come gestire il mio codice sorgente OpenCL in modo che il mio programma possa compilarlo in fase di runtime. Sembrano esserci due diverse strategie. Puoi crearli nella tua sorgente C come stringhe (non mi piace molto questo approccio dato che sembra un modo orribile per scrivere codice). Il secondo approccio sembra essere la lettura dei file .cl in fase di runtime utilizzando stdio e quindi la loro compilazione. Questo è quello che ho fatto. L'unico problema che ho con questo è che aggiunge una dipendenza al mio programma (preferirei che fosse contenuto in un singolo file eseguibile). Inoltre, sembra che sia necessario eseguire il mio programma nella stessa directory dei file .cl in modo che possano essere trovati. Posso pensare ad alcune soluzioni a questo ma mi chiedo solo come lo fate voi ragazzi?

Infine, ho appena provato a scrivere uno script python che viene eseguito prima della compilazione e genera un file di intestazione contenente stringhe corrispondenti a ciascun file .cl. In questo modo il codice sorgente di Cl può essere scritto separatamente e incluso. Il problema che ho con questo è che non sono sicuro di come gestire include all'interno della sorgente opencl. Come gestite il vostro codice sorgente opencl?

    
posta chasep255 21.03.2016 - 17:40
fonte

1 risposta

4

Potresti anche incorporare la sorgente OpenCL nel tuo eseguibile. Basta convertire un piccolo script (magari con l'aiuto di hexdump (1) .. .) che file in un enorme file C come

 const char myopenclsource[] = { 0x2f, 0x2f, 0x20, 0x4d, 0x75, 
   /// etc
 };

(ovviamente la fonte OpenCL potrebbe essere facilmente trovata dall'eseguibile binario, ad esempio usando stringhe (1) su Linux)

Quindi, dovrai modificare la procedura di creazione, ad es. aggiungi alcune linee al tuo Makefile .

Alcune implementazioni di OpenCL potrebbero anche accettare il codice SPIR (che potresti anche incorporare allo stesso modo, tuttavia è meno facile decodificare per gli umani, e probabilmente è leggermente più veloce da caricare nella GPU mediante implementazioni).

    
risposta data 21.03.2016 - 19:32
fonte

Leggi altre domande sui tag