Передача программы PTX непосредственно драйверу CUDA

API драйвера CUDA обеспечивает загрузку файла, содержащего PTX-код, из файловой системы. Обычно делают следующее:

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);

в случае, если один генерирует файлы PTX во время выполнения (на лету), проходя через файл IO, кажется, пустой тратой (так как драйвер должен загрузить его снова).

есть ли способ передать программу PTX непосредственно драйверу CUDA (например, в виде строки C)?

2 ответов


взято с ptxjit пример CUDA:

определите программу PTX как строку C как

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

затем

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

и наконец

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

использовать cuModuleLoadDataEx функция для загрузки источника PTX из строки с нулевым завершением.