DPCT1103#

Message#

<expression text> should be a dynamic library. The dynamic library should supply wrapped kernel functions.

Detailed Help#

The CUDA* application expects <expression text> to be the name of a CUDA module. The user should ensure that the CUDA code that generated the CUDA module is migrated to SYCL* code and compiled to generate a kernel library.

Suggestions to Fix#

The user should find the module source files that are used to make the CUDA module and migrate them to SYCL using the --extra-arg=-ptx option of SYCLomatic to generate wrapped kernel functions:

dpct <module source file(s)> --extra-arg=--ptx

The migrated module source file(s) should be compiled to make a kernel library.

On Linux*:

icpx -fsycl <migrated module source file(s)> -fPIC -shared -o <kernel library filename>

On Windows*:

icpx -fsycl <migrated module source file(s)> -shared -o <kernel library filename>

The <kernel library filename> should be chosen so that <expression text> will have the same filename at runtime. For the following example, <kernel library filename> should be set to library.so.

For example, this original CUDA code:

1void test() {
2  CUmodule module;
3  std::string ptxFile("module.ptx");
4  cuModuleLoad(&module, ptxFile.c_str());
5}

results in the following migrated SYCL code:

1void test() {
2  dpct::kernel_library module;
3  std::string ptxFile("module.ptx");
4  /*
5  DPCT1103:0: 'ptxFile.c_str()' should be a dynamic library. The dynamic library
6  should supply wrapped kernel functions.
7  */
8  module = dpct::load_kernel_library(ptxFile.c_str());
9}

which is rewritten to:

1void test() {
2  dpct::kernel_library module;
3  // "library.so" is compiled from the SYCL code which is migrated from CUDA code
4  // used to build "module.ptx"
5  std::string libraryFile("library.so");
6  module = dpct::load_kernel_library(libraryFile);
7}