DPCT1103#

メッセージ#

<式テキスト> は動的ライブラリーである必要があります。動的ライブラリーは、ラップされたカーネル関数を提供しなければなりません。

詳細な説明#

CUDA* アプリケーションは、<expression text> が CUDA* モジュール名であることを想定します。ユーザーは、CUDA* モジュールを生成した CUDA* コードが SYCL* コードに移行され、カーネル・ライブラリーを生成するためコンパイルされていることを確認する必要があります。

修正方法の提案

ユーザーは、CUDA* モジュールの生成に使用されるモジュールのソースファイルを検索し、インテル® DPC++ 互換性ツールの --extra-arg=-ptx オプションを使用して SYCL* に移行し、ラップされたカーネル関数を生成する必要があります。

dpct <モジュールのソースファイル(複数可能)> --extra-arg=--ptx

移行されたモジュールのソースファイルをコンパイルして、カーネル・ライブラリーを作成します。

Linux*:

icpx -fsycl <移行されたモジュールのソースファイル(複数可能)> -fPIC -shared -o <カーネル・ライブラリーのファイル名>

Windows*:

icpx -fsycl <移行されたモジュールのソースファイル(複数可能)> -shared -o <カーネル・ライブラリーのファイル名>

<カーネル・ライブラリーのファイル名> は、<式テキスト> が実行時に同じファイル名になるようにする必要があります。次の例では、<カーネル・ライブラリーのファイル名>library.so に設定します。

例えば、以下のオリジナル CUDA* コードについて考えてみます。

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

このコードは、以下の SYCL* コードに移行されます。

1  void 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  }

このコードは次のように書き換えられます。

1  void 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  }