DPCT1097#

メッセージ#

関数 <backward function name> には、関数 <forward function name> からの中間結果を保存するためにワークスペースが必要になる場合があります。デフォルトでは、engine_ext のワークスペースがソースデータのポインターに従って選択されますが、これは正しくない可能性があり、ワークスペースのデータ競合を引き起こす可能性があります。このコードを書き換える必要があります。

説明#

フォワード関数で生成された dnnl::memory オブジェクトを、バックエンド関数に手動で渡すことができます。

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

1 cudnnLRNCrossChannelForward(handle, ...); 
2 ... 3 cudnnLRNCrossChannelBackward(handle, ...);

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

1 handle.lrn_forward(...); 
2 ... 3 handle.lrn_backward(...);

このコードを以下のように手動で調整します。

1 dnnl::memory workspace; 
2 handle.lrn_forward(..., &workspace); 
3 ... 4 handle.lrn_backward(..., &workspace);

修正方法の提案#

オリジナルコードを調整する必要があります。