Visual Studio 2022 version 17.14、Arm64アトミック操作効率化の新スイッチ/forceInterlockedFunctions導入

text: XEXEQ編集部
(記事は執筆時の情報に基づいており、現在では異なる場合があります)


記事の要約

  • Visual Studio 2022 version 17.14で/forceInterlockedFunctionsスイッチが導入された
  • Arm64アーキテクチャにおけるアトミック操作の効率化を実現する
  • Armv8.0ではデフォルトで有効、Armv8.1+では無効

Visual Studio 2022 version 17.14の新機能/forceInterlockedFunctionsスイッチ

Microsoftは2025年5月13日、Visual Studio 2022 version 17.14において、Arm64アーキテクチャ向けの新しいコンパイラスイッチ/forceInterlockedFunctionsを導入した。このスイッチは、CPUのサポートに基づいてArmv8.1+ Large System Extension (LSE)アトミック命令を選択するアウトオブラインアトミックの生成とリンクを行うのだ。

Armv8.0では、このスイッチはデフォルトで有効になっている。これは、Armv8.0のインターロック型組み込み関数が、フォワードプログレスを保証しない排他的命令(LoadExcl/StoreExcl)を使用するため、パフォーマンスの問題を引き起こす可能性があるためだ。Armv8.1+では、このスイッチはデフォルトで無効になっている。

このスイッチを使用することで、_InterlockedAdd64などのインターロック型組み込み関数の性能が向上し、livelockの問題を回避できるようになる。具体的には、ldaxrとstlxr命令がbl _InterlockedAdd64命令に置き換えられるのだ。

Arm64ECバージョンでは、このオプションはデフォルトで有効になっている。Arm64とx64のメモリモデルの違いに対処するために、アウトライン化が役立つため、Arm64ECではこのオプションを無効にすることは推奨されない。

/forceInterlockedFunctionsスイッチの影響を受けるインターロック型組み込み関数

操作 8 16 32 64 128 ポインタ
Add None None Full Full None None
And Full Full Full Full None None
CompareExchange Full Full Full Full Full Full
Decrement None Full Full Full None None
Exchange Full Full Full Full None Full
ExchangeAdd Full Full Full Full None None
Increment None Full Full Full None None
Or Full Full Full Full None None
Xor Full Full Full Full None None
bittestandset None None Full Full None None
bittestandreset None None Full Full None None

Arm64アトミック命令とLSE

このスイッチは、Arm64アーキテクチャにおけるアトミック操作の効率化に焦点を当てている。特に、Armv8.1+ Large System Extension (LSE)アトミック命令の利用が重要だ。

  • LSE命令は、従来の命令よりも高速で効率的なアトミック操作を実現する
  • LSE命令を使用することで、パフォーマンスの向上とlivelockの発生率の低減が期待できる
  • Armv8.0とArmv8.1+ではアトミック命令の実装が異なるため、このスイッチによる挙動の違いが生じる

LSEの利用は、マルチスレッドプログラミングにおいて重要な役割を果たす。より高速で信頼性の高いアトミック操作は、並列処理の効率向上に大きく貢献するのだ。

Visual Studio 2022 version 17.14 /forceInterlockedFunctionsスイッチに関する考察

Visual Studio 2022 version 17.14で導入された/forceInterlockedFunctionsスイッチは、Arm64アーキテクチャにおけるアトミック操作のパフォーマンス向上に大きく貢献するだろう。特に、Armv8.0におけるlivelock問題の軽減は大きなメリットだ。しかし、LSE命令への依存性が高まるため、LSEをサポートしない古いCPUではパフォーマンスが低下する可能性もある。

今後、LSEのサポート状況や、このスイッチによるパフォーマンスへの影響を継続的に監視する必要がある。また、このスイッチの挙動に関するドキュメントの充実も重要となるだろう。開発者にとって、明確で分かりやすい情報提供は、スムーズな開発プロセスに不可欠だ。

将来的には、より高度なアトミック操作や、異なるアーキテクチャへの対応も期待される。クロスプラットフォーム開発における互換性とパフォーマンスの両立は、常に課題であり続けるだろう。Microsoftには、開発者にとって使いやすい環境を提供し続けてほしい。

参考サイト

  1. ^ Microsoft Dev Blogs. 「Introducing the /forceInterlockedFunctions switch for ARM64 - C++ Team Blog」. https://devblogs.microsoft.com/cppblog/introducing-the-forceinterlockedfunctions-switch-for-arm64/, (参照 25-05-15).
  2. 3715
  3. Microsoft. https://www.microsoft.com/ja-jp

※上記コンテンツはAIで確認しておりますが、間違い等ある場合はコメントよりご連絡いただけますと幸いです。

「プログラミング」に関するコラム一覧「プログラミング」に関するニュース一覧
プログラミングに関する人気タグ
プログラミングに関するカテゴリ
ブログに戻る

コメントを残す

コメントは公開前に承認される必要があることにご注意ください。