2013-04-05 13 views
5

L'API del driver CUDA consente di caricare il file contenente il codice PTX dal file system. Uno di solito fa il seguente:Passaggio diretto del programma PTX al driver CUDA

CUmodule module; 
CUfunction function; 

const char* module_file = "my_prg.ptx"; 
const char* kernel_name = "vector_add"; 

err = cuModuleLoad(&module, module_file); 
err = cuModuleGetFunction(&function, module, kernel_name); 

Nel caso in cui si genera il file PTX durante il runtime (al volo) passando attraverso il file IO sembra essere uno spreco (dal momento che il conducente deve caricarlo di nuovo di nuovo).

C'è un modo per passare direttamente il programma PTX al driver CUDA (ad esempio come una stringa C)?

risposta

4

presi dall'esempio ptxjit CUDA:

Definire il programma PTX come stringa C come

char myPtx32[] = "\n\ 
    .version 1.4\n\ 
    .target sm_10, map_f64_to_f32\n\ 
    .entry _Z8myKernelPi (\n\.param .u32 __cudaparm__Z8myKernelPi_data)\n\ 
    {\n\ 
    .reg .u16 %rh<4>;\n\ 
    .reg .u32 %r<8>;\n\ 

    // Other stuff 

    .loc 28  18  0\n\ 
    exit;\n\ 
    }\n\ 
"; 

poi

cuModuleLoadDataEx(phModule, myPtx32, 0, 0, 0); 

infine

cuModuleLoadDataEx(phModule, myPtx, 0, 0, 0); 
0

Utilizzare la funzione cuModuleLoadDataEx per caricare l'origine PTX da una stringa con terminazione NULL.

Problemi correlati