アプリケーションを C++ から SYCL* に移行する場合、この問題が暗黙的に存在する可能性があります。関数に引数を私規則は、C++ で定義されています。関数に読み取り専用のパラメーターが必要である場合、それらは const 参照として送信されますが、読み取り/書き込みが必要なパラメーターには const は含まれません。アルゴリズムがバッファーを構築する際に const 参照を使用すると、SYCL* アルゴリズムでは2次的な問題が生じます。データを使用するために必要なアクセサーのタイプは、バッファーの構築時には不明であるため、インテル® oneAPI DPC++/C++ コンパイラーは保守的にバッファーの作成中に const 参照のコピーを作成します。大きな配列では発生するコストは小さくはありません。すべてのデータが共有メモリーを介して通信され、データポインターをホストポインターにコピーする必要がないため、この問題は CPU デバイスのみに影響します。
va_const.cpp の例はこの問題を示しており、確認すべきアプリケーションのバッファーコピーが分かります。

このコピーを排除するには、次に示すようにコードを変更する必要があります。
// 古いコード: // 関数プロトタイプは、読み取り専用バッファーに const として渡されます。
// これは C++ で推奨される実用的な方法です。
//
// void vec_add(queue &q, const float A[], const float B[], ...){
void vec_add(queue &q, float A[], float B[], float C[],
const int size) {
...
}