Main Conceptは、各種圧縮ビデオ向けのコーデックやエンコーダなどをサードパーティのソフトウェアベンダー(いわゆるISV)に提供するソフトウェアベンダーで、ドイツに本社を構えている。現在はDivXに買収されその子会社として運営されている。
Main Conceptのコーデックとエンコーダは、実のところその製品は多くの会社で利用されており、有名なところではAdobe FlashのMPEG-4 AVCエンコーダや、ペガシスのTMPGEnc 4 XPressのMPEG-4 AVCのエンコーダとしても採用されており、そのロゴを目にしたことがあるユーザーも少なくないだろう。
Main Conceptは、今年(2010年)の4月にCUDAに対応したMPEG-4 AVCエンコーダエンジンを発表し、市場に投入した。従来のエンコーダエンジンでは、すべての処理をCPUで行なっていた。この一部の処理をGPU側に処理させることで、エンコードの処理にかかる時間を短縮しようというのがその基本的な考えた方だ。今回講演を行なったのは製品マネージメント担当副社長のトーマス・クラマー氏で、CUDAに対応した同社のエンコードエンジンの仕組みなどについて語った。
Main Conceptの会社概要、現在はDivXの傘下にある | Main Conceptがライセンスを提供しているパートナー企業。日本のユーザーにとってはTMPGEnc 4 XPressで知られるペガシスの名前がおなじみだろう |
●GPUコンピューティングに適しているエンコードの処理
そもそもエンコード処理はGPUで処理するのに向いた作業だ。デジタルなビデオ再生というのは、1秒間に24枚ないしは30枚の静止画を連続して表示しており、その1枚(正式には1フレームと呼ぶ)やその前後のフレームを解析し、必要のない部分を削ったりして圧縮していく作業を、エンコードと呼んでいる。その時に、前後のフレームの依存関係や、各フレームを分解したブロック単位の解析作業などは細かな単位に分割でき、かつ作業も単純で並列処理が可能な場合が多いので、小さなプロセッサがたくさん内蔵されているGPUに向いている作業だと言えるのだ。
クラマー氏は、MPEG-4 AVCで利用されているH.264の圧縮方式についてまず解説した。H.264では1フレームが16×16ピクセルのマクロブロックに分解され、さらにそのマクロブロックが4×4ピクセルのスレッドブロックに分解され、さまざまな処理が行なわれる。大きく2つの処理があり、1つは前後のフレームを比較して、その重なっている部分を判別し必要のない部分を削っていく処理。もう1つが、同じフレーム内のマクロブロックで同じような色である部分を判別し、そこを削っていく処理などが行なわれるていく処理だ。
前者ではInter-Dependancies(フレーム間の依存)が問題になり、後者ではIntra-Dependancies(フレーム内での依存)が問題になり、圧縮にかかる処理時間に大きな影響を与えるという。これらの処理を効率よく行なうことが“高速な”エンコードに重要になると説明した。
●GPUに適した処理をGPUで、それ以外はCPUで処理
クラマー氏はこうしたH.264の圧縮作業にCUDAを利用することで、処理速度をCPUだけを利用した場合に比べて上げることができると説明した。
ただ、一言にCUDAを利用するといっても、いくつかの点で課題があるという。「CUDA GPUに内蔵されている数百のコアにうまくエンコードの処理を分割し割り当てる必要があるし、大量のデータをメインメモリからGPUへと転送する必要が出てくる」と述べた。つまりCPUに比べてGPUは各プロセッサがシンプルだが、数が圧倒的に多いGPUの構造に合わせた処理を割り当てる必要があるし、PCI Expressを経由してデータを大量に読み込む必要があるため、常にレイテンシが問題になり、GPUの弱点をうまく補う必要があると指摘した。
GPUの演算能力を利用してエンコードを行なうには2つのオプションがある。1つは複数フレームの並列処理に利用する場合で、もう1つがフレーム内で並列処理を行なう場合だ。
前者のメリットはシングルスレッドで実行する場合と同じクオリティが実現され、かつエンコードのプロセスを低レイテンシで行なえることだが、デメリットはすべてのGPUのプロセッサを利用することができないことだ。後者のメリットはすべてのプロセッサコアを同時に利用できる可能性があり、パラレル実行のメリットが得られることで、デメリットはレイテンシの問題が発生することと、依存の問題により実行された結果を破棄しなければならない場合があることだ。
このため、Main ConceptのMPEG-4 AVCエンコーダではCPUとGPUに得意な処理を割り当てて処理を行なっている。GPUに割り当てているのは、フレームの圧縮作業のうち、フレーム間の依存性を予測する作業を担当させ、CPUにはフレーム内の依存性を予測する作業と動き補償とDCT変換を行なう可変長符号化(Entropy Encoding)の作業を割り当てているという。
GPUの作業は、マクロブロック単位で行なわれる。先述のように、H.264では、16×16ピクセルのマクロブロックの内部が4×4ピクセルのスレッドブロックになっているが、4ピクセル単位で1スレッドに割り当て、1つのマクロブロックが64スレッドに分割し、GPUへ投入する。その後、GPUに投入された各スレッドは、動き補正、DCT変換、ベクトル量子化などの処理が行なわれることになる。
なお、ソースの種類によっては、デコードやスケーリングなどの処理もGPUを利用して行なわれるという。NVIDIAのGPUの場合にはPureVideo HDというエンジンを持っており、DXVA経由でそれらを利用することでCPUに負荷をかけることなく動画のデコードやスケーリングなども行なうことが可能であるとのことだ。
●Core i7-980XとQuadro 6000の比較で3.9倍速を実現
Main ConceptのMPEG-4 AVCエンコーダエンジンは、CUDAに対応したGeForce、Quadro、Teslaの各GPU上で利用することができる。なお、対応しているのはCUDAだけでなく、OpenCLでも利用することが可能であるという。ただし、「CUDAへの最適化はかなり進んでいるが、OpenCLに関してはまだ実装したばかりで、性能はCUDAのようにはでない」とのことで、現時点ではCUDAを利用した方が性能的には有利であるとのことだった。また、複数GPU環境にも対応しているほか、OSに関してもWindowsのほか、Mac OS X(10.4以上)、Linux(Ubuntu 9かそれ以上)に対応しているという。
気になる性能だが、Core i7-980X Extreme Edition(3.33GHz)と比較で、Quadro FX 3800(192SP)で2.2倍、Quadro FX 4800(192SP)で2.4倍、Quadro 4000(256SP、Fermi)で2.5倍、Quadro 4000(352SP、Fermi)で3.3倍、Quadro 6000(448SP、Fermi)で3.9倍という結果が公表された。GPUを使っているのだから、もう少し性能が向上してよい気もするが、とりあえず最初の実装と言うことで、今後まだまだ最適化が進んでいくということだった。
冒頭でも述べたとおり、Main Conceptではエンドユーザーに対して自社でソフトウェアを提供するのではなく、ISVに対してソースコードなどの形でライセンス提供する形をとっている。そうした意味では、いつ市場に登場するかはISV次第ということができる。日本のユーザーにとっては、Main ConceptのMPEG-4 AVCエンコーダが使われている製品で最も身近なものが、ペガシスのTMPGEnc 4 XPressであるのは論を待たないと思うので、同社の製品のアップデートや次世代製品などでCUDA対応のエンコーダエンジンが採用されることを期待したいところだ。
(2010年 9月 28日)
[Reported by 笠原 一輝]