Parallel Studioを活用したソフトウェアの並列化:AACエンコーダを高速化する 5ページ
インテル Parallel Inspectorによるメモリエラー/スレッドエラーの確認
以上のように並列化したプログラムは一見正しく動いているように見えるが、内部的に問題が発生している可能性もある。そのような問題を確認するため、「インテル Parallel Inspector」(以下、Parallel Inspector)を使用してエラーチェックを行った。
Parallel Inspectorでは「Memory errors」および「Threading errors」という2つのテストが用意されている。また、テストの設定画面ではその粒度を指定できるが、今回は「40x-160x」および「80x-320x」を選択した。このスライダを下げるほど厳密なテストが行えるが、その分テストに必要な時間は長くなるため、状況に応じた設定でテストを行いたい。
さて、これら2つのテストを実行したところ、いくつかのメモリリークと、いくつかのデータ競合が検出された(図11、12)。
メモリリークについては、並列化に関係のない個所で問題が検出されている。また、スレッドについては並列実行部分にいくつかのデータ競合が確認できた。今回問題が検出されたは処理中の進捗状況メッセージを表示する部分だったため処理結果には影響しなかったのだが、そのために見過ごされていた個所である。
さらなる改善点を検出
最後に、並列化を行ったfaacに対して再度Parallel Amplifierを実行し、どのようにプログラムの処理時間が変化したかを確認した(図13)。並列化後も各関数の実行時間には大きな変化はないものの、実行時間5.605秒に対して使用したCPU時間は9.849秒と、より効率よくプログラムを実行できていることが分かる。
Parallel Studioはマルチスレッドプログラミングや並列処理の実装に有用
さて、以上のようにParallel Studioはfaacの並列化を行うにあたり、パフォーマンスの計測や実装指針の決定、バグの検出などに非常に有用であった。Parallel AmplifierやParallel Inspectorは1クリックで実行でき、またコンパイラの切り替えも非常に簡単である。
今回の実装は並列化の第一歩であり、オプションの設定やMP4コンテナへの対応といった部分を実装しておらず、また音質の劣化などのの問題点も見られるため実用化までにはまだまだ遠いものの、実行時間が半分になるという非常に期待できる結果が得られた。プログラムによって並列化の難度は異なるとは思うが、並列化を行わずとも、インテル コンパイラーによる高速な実行ファイルの生成や、Parallel Inspectorによるメモリリークチェック機能などは有用だろう。Parallel Studioは現在評価版がWebサイトから無償ダウンロードできる。より高速なプログラムを作成したいという開発者の方は、ぜひ試してみてはいかがだろうか。