C 11 はロックフリーの std::atomic
x86_64 は、lock- を使用して実行される double に対する次のアトミック操作をサポートしています。無料命令:
残念ながら、キャッシュ コヒーレンシ システム全体で 128b または 256b ベクトル ストアまたはロードのアトミック性を保証する方法はありません。ただし、整列されたベクトルの場合は、ティアリングのリスクなしに共有二重配列でのベクトルのロードとストアを安全に使用できます。
アトミック 16B ロードが必要な場合、唯一のオプションは、desired=expected を指定して lock cmpxchg16b を使用することです。成功すると、既存の値がそれ自体に置き換えられます。失敗すると、古いコンテンツが取得されます。この「ロード」は読み取り専用メモリ上で失敗するため、この操作を実行する関数にポインタを渡すときは注意してください。
アトミック 16B ストアと RMW は両方とも、明白な方法でロック cmpxchg16b を使用できます。これにより、特に cmpxchg16b の再試行が複数回行われる場合、純粋なストアは通常のベクター ストアよりもはるかに高価になります。ただし、アトミック RMW はすでに高価です。
16B オブジェクトをアトミックに更新できますが、8B の半分を個別に読み取ることができます。ただし、コンパイラーはこれを表現する明確な方法を提供しておらず、コンパイラー開発者による継続的な検討のため、cmpxchg16b のインライン化は信頼できません。
以上がx86_64 は Double および SSE/AVX ベクトルに対するアトミック操作をサポートしていますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。