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);
修正方法の提案#
オリジナルコードを調整する必要があります。