CUDA プログラミング ガイドでは、マップされた固定ホスト メモリでのアトミック操作は、「ホストまたは他のデバイスの観点からはアトミックではない」と述べられています。この文から得られるのは、ホスト メモリ領域が 1 つの GPU によってのみアクセスされる場合、マップされた固定ホスト メモリで (複数の同時カーネル内からでも) アトミックを実行しても問題ないということです。
一方、Nicholas WiltによるCUDA ハンドブックの128 ページには、次のように記載されています。
ホスト (ロックされた比較交換) またはデバイス ( ) のいずれに対しても、マップされた固定ホスト メモリでアトミックを使用しようとしないでください
atomicAdd()
。CPU 側では、ロックされた操作の相互排除を強制する機能は、PCI Express バス上の周辺機器には見えません。逆に、GPU 側では、アトミック操作は GPU のローカル メモリ コントローラーを使用して実装されるため、ローカル デバイスのメモリ ロケーションでのみ機能します。
マップされた固定ホスト メモリでCUDA カーネル内からアトミックを実行しても安全ですか? アトミックの読み取り-変更-書き込みの原子性を維持するために、PCI-e バスに依存できますか?