近年、生成AIによる画像生成やGPUによる高度な画像処理が業界の話題を独占している。多くの開発リソースがクラウドベースの処理やグラフィックスハードウェアの並列演算に向けられている。しかし、クリエイティブ産業において業界標準となっている画像編集ツールであるAdobe Photoshopでは、いまだにCPUの単一スレッド性能に依存する領域が色濃く残っている。ブラシの描画や大容量ファイルの展開といった処理は、ユーザーの直接的な操作に対する応答速度が強く求められる部分である。
これらの処理におけるわずかな遅延は、プロフェッショナルなクリエイターの作業における没入感を削ぎ、反復的な試行錯誤を阻害する。MicrosoftとAdobeの今回の協業は、こうしたエンドユーザーの遅延に敏感な操作の改善を目的として開始された。世界中で数百万人が利用する巨大なネイティブC++アプリケーションにおいて、ハードウェアの更新に頼らず、コンパイラレベルの最適化で性能を引き出すことが両社にとっての至上命題であった。
LTCGを基盤とした最適化の試み
PhotoshopのWindows版は、MicrosoftのVisual C++コンパイラ(MSVC)によってビルドされている。開発チームは当初、性能向上の基盤を構築するために、MSVCの最高性能を引き出すコンパイルモードへの移行を試みた。これには、プログラム全体の最適化やリンク時のコード生成(LTCG)を有効化する手順が含まれている。
LTCGを有効化することにより、コンパイラは個別のソースファイルという翻訳単位の壁を越えて、アプリケーション全体を見渡した最適化を実行できるようになる。この手順はビルド設定の変更であると同時に、後続の高度な最適化技術を適用するための必須の土台となった。両社のエンジニアは、まずこの基本設定を徹底することで、さらなる実行速度の改善に向けた準備を整えた。
従来のPGOが抱える開発現場の壁
基盤の構築を終えた両社は、さらなる性能向上を狙い、従来のPGO(Profile-Guided Optimization)の適用を検討した。PGOは、テスト実行から収集したデータを利用してコンパイラが頻繁に実行されるコードパスを特定し、その部分の実行効率を高める技術である。理論上、この手法を用いればアプリケーションの特性に合わせた理想的な最適化が可能になるはずであった。
しかし、Photoshopのような巨大で複雑なソフトウェアにおいて、従来のPGOの導入は開発現場のワークフローに破壊的な影響をもたらした。PGOを実行するためには、動作を記録するための特別な計測用ビルドを用意する必要がある。これによりビルド構成が非標準化してエンジニアリングの複雑性が増大した。
さらに致命的であったのは、PGOの仕組みそのものが引き起こすオーバーヘッドである。PGOによるプロファイリングの際、コードのあらゆる分岐点に計測用命令が挿入される。この計測処理自体がシステムリソースを極度に消費し、アプリケーションの動作速度を通常の数分の一にまで低下させてしまう。その結果、ユーザーが実際に体感する「数ミリ秒単位の遅延」を正確に測定することが不可能になり、最適化の指針となるデータの信頼性が根底から崩れてしまうという自己矛盾を抱えていた。自動テストなどの運用プロセスでもタイムアウトが頻発し、現実のユーザー操作を反映した有意義な学習データを収集することは困難であると判断された。
SPGOという現実解への転換
従来のPGOが抱える課題に直面したエンジニアたちは、SPGO(Sample-based Profile Guided Optimizations)という代替手段に注目した。SPGOは、開発環境で特別な計測用ビルドを動作させるのではなく、最適化済みのリリースバイナリから直接、ハードウェアのパフォーマンスサンプルを収集する技術である。
SPGOの核となるのは、最新のプロセッサに内蔵されているハードウェアパフォーマンスカウンタの活用である。OSが提供するパフォーマンスモニタリング機能を通じて、実行中のCPUから直接、命令の分岐履歴やキャッシュミスなどのハードウェアイベントを一定間隔でサンプリングする。この方式であれば、ソフトウェア側に計測用の命令を埋め込む必要がなく、数パーセント未満というごくわずかなオーバーヘッドで済む。エンジニアは最適化されていないテスト版ではなく、実際の顧客に提供されるのと同じバイナリがどのように動作しているのかを、ありのままに観測できる。
この手法の採用は、Photoshopの継続的な開発およびリリースサイクルに完全に適合した。エンジニアはソースコードを大規模に書き換える作業を回避しつつ、コンパイラからのフィードバックを利用して、MSVCの最終ビルドプロセスで生成されるコードを継続的に改善できる体制を整えた。SPGOの技術をMSVCのピークパフォーマンスモードと組み合わせることで、関数のインライン化や、実行頻度の低いコードの分離といった低レイヤーの最適化が意図通りに機能するようになった。
性能向上の具体的な成果とエコシステムへの影響
SPGOの導入により、Windows環境におけるPhotoshopの性能は明確に向上した。検証データによれば、x64システムで20パーセント、ARM64環境で13パーセントという改善が確認されている。Adobeのソフトウェア開発者であるJohn Fitzgeraldによれば、ユーザーの描画やストローク操作がより機敏になり、ファイルの展開時間や特定のフィルタの適用時間が短縮されたという。これらはクリエイターが日常的に繰り返す操作であり、応答性の向上は作業効率に直接的な恩恵をもたらす。
今回の成果は、大規模なネイティブアプリケーションにおけるパフォーマンス改善の新しい青写真を示している。Microsoftは、開発チームに持続不可能なエンジニアリングの負担を強いることなく、コンパイラ技術を現実のソフトウェア性能に変換できることを証明した。今後、Photoshopのプロファイルデータの収集範囲が拡大するにつれて、さらなる最適化の余地が広がっていく。同時に、SPGOの技術が他のWindowsアプリケーションにも波及し、ソフトウェアエコシステム全体の品質向上に寄与する道が開かれている。