Parallel Studioを活用したソフトウェアの並列化:AACエンコーダを高速化する
プログラムの高速化が強く求められている分野の1つに、画像処理や音声処理、動画処理といったマルチメディア処理が挙げられる。これらのプログラムは処理すべきデータ量も多く、また行う処理も非常に複雑である。そのため、PCの処理速度が向上した現在でも「時間がかかる処理」の代表であり、このような処理にこそ並列化による処理速度の高速化が期待されている。本記事ではフリーの音声エンコーダ「FAAC」をインテルの並列プログラミング支援ツール「Parallel Studio」を使って並列化し、その処理速度を高速化する試みを紹介する。
並列処理による高速化が期待されるマルチメディア処理
現在広く使われている音声符号化方式の1つに「AAC」がある。AACはMPEGによって規格化された音声圧縮方式で、高音質・高圧縮で音声・音楽を圧縮する目的で開発されている。AACは地上デジタル放送の音声圧縮方式として採用されているほか、携帯電話/携帯音楽プレーヤーなどでもサポートされるなど普及が進んでいる
今回紹介するFAACはフリーソフトウェアのAACエンコーダ/デコーダであり、エンコーダ/デコーダ部を実装したライブラリ「libfaac」と、そのコマンドラインフロントエンド「faac」などから構成されている。WindowsおよびLinux、Mac OS XやFreeBSDなどを含む各種UNIXで利用でき、ライセンスはライブラリ部がLGPL、フロントエンド部分はGPLで提供されている。ソースコードはSourceForge.netで入手可能だ(図1)。
AACのエンコード処理では、入力データに対してFFTによる直行変換や線形予測、聴覚心理モデルに基づいた量子化、ハフマン符号化といった複雑な処理を行うため、ある程度の処理時間を必要とする。たとえば、約4分のWAVE形式音楽ファイル(ファイルサイズは約40MB)を現在比較的ポピュラーであると思われるPC環境(Core 2 Duo/2.33GHz、メモリ2GB、Windows Vista Business SP2)で、faacの標準設定でエンコードしたところ、処理に必要な時間は約10秒程度だった(出力ファイルのサイズは約4.5MB)。
AACに限らず、動画や音声といったデータはそのファイルサイズが大きく、またエンコード処理も複雑であるため、並列化によってその処理を高速化する試みが行われている。たとえばAppleの音楽管理ソフト「iTunes」に搭載されているMP3エンコーダなどは並列処理に対応しており、マルチコアCPUを搭載したPCでは高速にエンコード処理を実行できる。また、フリーのMP3エンコーダ「LAME」でも並列化による高速化の試みが行われているようだ。
しかし、並列処理の実装には越えなければならないハードルも多く、一筋縄ではいかないことが多い。むやみに並列化を行ってもパフォーマンスが向上しない可能性があるほか、複数スレッドから同一のデータにアクセスすることによるデータの競合、メモリリークなどの問題が発生する可能性も増える。このような問題に対し効果的なツールが、インテルがリリースしている開発ツール「インテル Parallel Studio」(以下、Parallel Studio)である。本記事では、Parallel Studioを活用しながらfaacを並列化する試みを行う過程を紹介する。