DPCT1124#

メッセージ#

<API 名> は非同期 memcpy API に移行されます。元の API は同期的である可能性がありますが、オペランドのメモリーのタイプに依存することから、同期動作を確実にするため memcpy API のイベントの戻り時に wait() を呼び出す必要がある場合があります。

詳細な説明#

一部の CUDA* 非同期 API は、ホストと同期している可能性があります。たとえば、非同期 memcpy API は、デバイスメモリーとページング可能なホストメモリー間とのデータ転送、ホストメモリー間とのデータ転送、固定メモリーを含むデータ転送の 3 つのケースで同期される可能性があります。

修正方法の提案#

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

1  cudaMemcpyAsync(host_dst, host_src, size, cudaMemcpyHostToHost);

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

1  /* 
2  DPCT1124:0: cudaMemcpyAsync is migrated to asynchronous memcpy API.While the 
3  origin API might be synchronous, it depends on the type of operand memory, so 
4  you may need to call wait() on event return by memcpy API to ensure 
5  synchronization behavior.
6  */ 
7  dpct::get_in_order_queue().memcpy(host_dst, host_src, size);

上記は次のように書き換える必要があります。

1  dpct::get_in_order_queue().memcpy(host_dst, host_src, size).wait();