DPCT1078#

メッセージ#

強力なメモリー順序制限が必要な場合は、正当性のため、memory_order::acq_relmemory_order::seq_cst に置き換えることを検討してください。

詳細な説明#

memory_order::acq_rel は、ほとんどのプログラムにおいてメモリーを同期するのに役立つ軽量のフェンスです。正当性を保証するため、プログラムが逐次一貫性のあるメモリー順序を必要とする場合は、memory_order::acq_relmemory_order::seq_cst に置き換えます。

修正方法の提案#

より厳密なメモリーの順序付けが必要な場合、memory_order::acq_relmemory_order::seq_cst に置き換えます。

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

1  __device__ void foo_dev() { 
2   ...
3   __threadfence(); 
4   ... 
5  }

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

1  void foo_dev() {
2   ... 
3   /* 
4   DPCT1078:0: Consider replacing memory_order::acq_rel with 
5   memory_order::seq_cst for correctness if strong memory order restrictions are 
6   needed.
7   */ 
8   sycl::atomic_fence(sycl::memory_order::acq_rel, sycl::memory_scope::device); 
9   ... 
10 }

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

1  void foo_dev() {
2   ... 
3   // Assuming strong memory order restrictions are need here 
4   sycl::atomic_fence(sycl::memory_order::seq_cst, sycl::memory_scope::device); 
5   ... 
6  }