Parallel Studioを活用したソフトウェアの並列化:AACエンコーダを高速化する 2ページ

Parallel Studioによる並列化

 faacはWindowsやLinux、Mac OS XなどさまざまなOS上でコンパイル/実行できるが、今回はParallel Studioを使用するため、Windows環境でVisual Studio 2008を使用して開発を行った。ベースとしたfaacのバージョンは1.28である。配布されているfaacのソースコードにはVisual Studio向けのプロジェクトファイルも付属しており、これを利用することでWindows環境でも簡単にコンパイルが可能だ(図2)。

図2 faacにはVisual Studio向けのプロジェクトファイルも付属する
図2 faacにはVisual Studio向けのプロジェクトファイルも付属する

 今回使用したParallel Studioは、自動並列化/最適化機能を備えたコンパイラやマルチスレッド対応デバッガ、パフォーマンス計測ツール、メモリ/スレッドに関する正当性チェッカなどから構成される開発支援ツールである。詳しくは過去の記事を参照してほしいが、ここでは下記の目的にParallel Studioを使用した。

  • 自動最適化によるパフォーマンス向上
  • 処理に時間のかかっている個所(ホットスポット)の検出
  • マルチスレッド化によって発生する、スレッド間でのデータ競合などの検出
  • メモリリークや不正なメモリの検出

インテル コンパイラーでコンパイルするだけでもパフォーマンスが向上

 Parallel Studioの「インテル Parallel Composer」コンポーネントには、強力な最適化機能で知られるインテル コンパイラーが含まれており、このコンパイラを利用するだけでパフォーマンスの向上が期待できる。Parallel Studioでは、Visual StudioのIDEからボタン1つで自動的にインテル コンパイラーでソフトウェアをコンパイルできるようになり、またGUIによるコンパイルオプション設定が可能だ。

 ソースコードの修正を行う前にまずはインテル コンパイラーでfaacをコンパイルしたところ、これだけでも大幅なパフォーマンス向上が確認できた(表1)。なお、ここでは約4分のWAVE形式音声ファイル(約40MB)を、faacのデフォルト設定でエンコードした際にかかった時間でその処理速度を比較している(表2)。

表1 コンパイラによる処理時間の違い
コンパイラ 処理時間
Visual C++ 10.7秒
インテル コンパイラー 8.8秒
表2 今回のテストに使用した条件
構成要素 構成
CPU Core 2 Duo E6550(2.33GHz)
メモリ 2GB
OS Windows Vista Business SP1
HDD SEAGATE ST3250310AS(250GB)
入力ファイル WAVE形式、約4分(40MB)
faacのコマンドラインオプション なし(デフォルト設定)

 なお、実行ファイルのパフォーマンスは、コンパイラの設定(コンパイルオプション)でも大きく変化する。ここでは、Visual C++およびインテル コンパイラーで最も強力と思われる最適化設定を用いてプログラムをコンパイルしている(図3、4)。

図3 Visual C++のコンパイル設定
図3 Visual C++のコンパイル設定
図4 インテル コンパイラーのコンパイル設定
図4 インテル コンパイラーのコンパイル設定