私の質問は、CUDA でアトミック ロードを行う方法です。アトミック交換は、アトミックストアをエミュレートできます。同様の方法でアトミック ロードを安価にエミュレートできますか? 0 のアトミック add を使用してコンテンツをアトミックにロードできますが、読み取りのみではなくアトミックな読み取り-変更-書き込みを行うため、コストがかかると思います。
1470 次
2 に答える
2
私の知る限りでは、現在CUDA でアトミック ロードを要求する方法はありません。これは素晴らしい機能です。
2 つの準代替案があり、それぞれに長所と短所があります。
あなたが提案するように、操作なしのアトミック読み取り-変更-書き込みを使用してください。過去に似たような回答をしたことがあります。原子性とメモリの一貫性が保証されますが、不要な書き込みのコストが発生します。
実際には、アトミック ロードに 2 番目に近いのは、変数をマークすることです
volatile
が、厳密に言えばセマンティクスはまったく異なります。この言語は、ロードの原子性を保証しません(たとえば、理論的には、読み取りが中断される可能性があります) が、最新の値を取得することは保証されます。しかし実際には、@Robert Crovella のコメントに示されているように、適切に配置された最大 32 バイトのトランザクションの引き裂かれた読み取りを取得することは不可能であり、アトミックになります。
解決策 2 は一種のハッキーであり、お勧めしませんが、現時点では 1 に代わる唯一の書き込み不要の方法です。理想的な解決策は、アトミック ロードを言語で直接表現する方法を追加することです。
于 2015-09-02T01:41:07.233 に答える