2008年07月19日

PipeLine Version 0.9.0 Beta (並列処理プラグイン)



Multicore optimization idea: running consecutive filters in different threads - Doom9’s Forum



注意



  • このプラグインは、まだ開発初期段階のようです。

  • 実際に作者もテスト中にランダムクラッシュを経験したことがあるそうですので、通常のエンコードなどには使用しない方がよいと思われます。


PipeLine とは?



  • MT プラグインとは異なるアプローチで並列処理を試みるプラグイン。

    • MT ではフレームを分割するが、このプラグインでは前のフィルタからフレームを取得するために追加のスレッドを使用する。



  • 以下のように動作する(Multicore optimization idea: running consecutive filters in different threads - Doom9’s Forum より):

    1. このフィルタは、フィルタチェインの前のフィルタからフレーム取得を行うワーカースレッドを実行する。

    2. 毎回、「GetFrame」が呼び出される。リクエストがワーカースレッドに送られ、フレームをリクエストしつつ、それが利用可能になるのを待つ。



  • avs_pipeline.cpp の説明:

    • 前のフィルタからフレームを取得するのに追加のスレッドを使用する。すべての前のフィルタを独立したスレッドで実行することは、複数の CPU コア間で作業を分割することを可能にする。

    • ワーカースレッドは実際に必要になる前にフレームをリクエストする(つまり次のフィルタにまだリクエストされていないフレームを取得する)。こうして、パイプラインのように動作する。

    • パイプラインのすべてのセグメントが同じように速くないようなケースでは小さなバッファがある。

    • 複数のインスタンスを利用可能だが、ノンリニアなシークでパフォーマンスの低下を引き起こすおそれがある。





avs_pipeline.cpp より:



FilterA
PipeLine
FilterB


これを実行した場合を時間の流れでみると、以下のようになる:



--------+------------------------------------------->
Time
FilterA | gen(0)<-+ gen(1)<-+ gen(2)<-+ gen(3) ...
| | | |
--------+---------|---------|---------|------------>
FilterB | +-get(0) +-get(1) +-get(2)
| gen(0)<-+ gen(1)<-+ gen(2)<-+
--------+-------------------|---------|---------|------>
Output | req(0) req(0) +-get(0) +-get(1) .+-....
| req(1) req(2)
--------+----------------------------------------->



  • req はフレームのリクエスト、gen はフレームの生成を表しているものと思われます。

  • gen(\*) は 2 つ同時に行われる。


シンタックス



PipeLine(clip, int buffer_size)


パラメータ


  • clip: ビデオクリップ。

  • buffer_size: バッファサイズ。デフォルト: 8。


関連リンク



追記






posted by niiyan at 23:17 | Comment(0) | プラグイン | 更新情報をチェックする
この記事へのコメント
コメントを書く
お名前: [必須入力]

メールアドレス:

ホームページアドレス:

コメント: [必須入力]

認証コード: [必須入力]


※画像の中の文字を半角で入力してください。
※ブログオーナーが承認したコメントのみ表示されます。
×

この広告は180日以上新しい記事の投稿がないブログに表示されております。