2013-04-05 10 views
5

L'API du pilote CUDA permet de charger le fichier contenant le code PTX à partir du système de fichiers. On fait généralement les suivantes:Transmission directe du programme PTX au pilote 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); 

Dans le cas où on génère les fichiers PTX lors de l'exécution (à la volée) en passant par le fichier IO semble être une perte (puisque le pilote doit charger le à nouveau).

Existe-t-il un moyen de transmettre directement le programme PTX au pilote CUDA (par exemple en tant que chaîne C)?

Répondre

4

Taken de l'exemple ptxjit CUDA:

définir le programme PTX comme une chaîne C comme

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\ 
"; 

puis

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

et enfin

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

Utilisez la fonction cuModuleLoadDataEx pour charger la source PTX à partir d'une chaîne terminée par NULL.