x264のソースコードを読んだが、pthreadからWindowsネイティブに書き換えても、それほど早くならないだろうと思われる。原理にはこうだ。
フレームごとにスレッドをつくる。スレッドは、そのフレームのみをエンコードして終了する。スレッド数の上限に達したら、一番古いスレッドが終了するまで待つ。
メインはpthread_createと、pthread_joinだし、Condition Variableなども使っているのだが、これをVistaでサポートされたAPIに置き換えても、劇的に速度が上がったりはしないだろう。ユーザモードで実装されているからだ。OSのサポートがあれば早くなる代物でもない。
マルチスレッドのエンコード速度をこれ以上上げるためには、スレッドプールを使わなければならない。これなら、WindowsのAPIを使うことで、ネイティブで実装する利点があるかもしれない。
とはいっても、どんどんスレッドプールにポストできないので、あまりWindowsの提供しているスレッドプールAPIを使う利点が見当たらないというか。
No comments:
Post a Comment