DPCT1104

メッセージ

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

説明

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

修正方法の提案

ユーザーは、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 const void *image = loadFile("module.ptx"); 
2 cuModuleLoadData(&module, image);

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

1 const void *image = loadFile("module.ptx"); 
2 module = dpct::load_kernel_library(image);

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

1 const void *image = loadFile("library.so"); 
2 module = dpct::load_kernel_library(image);