スポンサード リンク

T.Ishii's Software Library

HTML5 レトロ風ゲーム館

無料ブログはココログ

« MP4変換も高速化されたが | トップページ | 雰囲気は掴めた »

まずはデータ読み込み

今は、Mac用AGMPlayerの開発フェーズで、先週はAVFoundationを使ったmp4/agm変換ツールを作成したのだが、AGMtoMP4変換では、AGMデコーダーの処理性能がボトルネックになっていたので、今週はその性能を向上させる。まずは、データ読み込み処理を変更中だ。

現行版のAGMデコーダーでは、ストレージにあるデータは、その都度、必要な部分のみ読み込んでいる。

つまり、デコード時には、まず、デコード対象のフレーム用データのみ、ストレージから読み出しているので、ストレージからの読み込み時間はデコード時間にカウントされる。

もっとも、今時のOSでは、ストレージからの読み込み時には、先読みが働くので、AGMデコーダーがストレージからデータを毎度毎度読み込んでいても、実際には、その読み込み時には、多くの場合、既にOSによってデータはメモリに読み込まれているので、このストレージ読み込み処理は大したオーバーヘッドにはなっていない筈だ。

にも関わらず、今日は、まず、データ読み込み処理を変更していたのだが、これは、AGMデコーダーの高速化の方針として、複数フレームを同時デコードさせる事で、シングルスレッド動作にならざるを得ない処理の実行時にも、マルチコアの性能を生かせる様にしようとしているからだ。

つまり、何も鑑みずに、複数フレームのデコードを同時に行おうとすると、ストレージからのデータ読み込みがシーケンシャルアクセスにならず、OSの先読みが期待できなくなる可能性もあるので、自前で先読み処理を用意している訳だ。

もっとも、ソフト自身による先読みでは、OSでの先読みとは異なり、より詳細な利用情報を参照できるので、より最適化した先読みも可能になる。

具体的には、そのデータが必要になる前に確実に先読みを行わせる事が出来るし、不用になったデータは遅滞無く削除できる。

更に、先読みしたデータはソフト上のメモリプールに存在するので、単純なポインタアクセスで参照可能な分、一々、OSに読み出し依頼する場合よりも高速にアクセス可能だ。

と、いう事で、今日は、前述の様な先読み可能なデータ読み取り処理を作成していたのだが、今日の所は、データ読み込みサイズを4MB程度ずつにする様にしてみている。

AGM-DCT+の画像データはキーフレームでも1MBも無いのが普通なので、4MB程度の先読みをしていると、複数フレームのデータが常時メモリ上にある格好になるので、複数フレームの同時デコードも行える筈なのだが、先読みメモリ内に何フレーム分のデータが存在しているかが判らないと、次の読み込みを何時やったら良いかも判らない。

なので、先読みは、単純なストレージアクセスにはしておらず、予め、全フレームデータの位置情報を元に先読みブロック定義をしていて、そのブロックで未使用のフレーム数が少なくなった時に、次のブロック読み込みをスタートさせる様になっている。

今日の時点では、まだ、実際のデコード処理では、前述のデータを使えていないのだが、明日には、少なくともデータアクセスについては、前述のコードを使える様になっている筈なので、多分、それだけでも、少しは高速化される筈ではある。

ちなみに、今回開発している高速AGMデコーダーというのは、AGMtoMP4変換の様に、AGMファイルへのアクセスがシーケンシャルで、かつ、全データにアクセスされる事を前提にしている。

つまり、一般用途で使うと余計な読み込みが発生したり、読み込んだデータを削除できず、やたらとメモリを食う格好になる可能性があるので、一般用途向けには、現行のデコーダーをそのまま使う予定だ。

逆に言うと、今回開発しているAGMデコーダーは、AGMtoMP4変換の様な変換処理用に特化できるので、様々な状況を鑑みなくて済む分、楽に高速化できる訳だ。

« MP4変換も高速化されたが | トップページ | 雰囲気は掴めた »

トラックバック

この記事のトラックバックURL:
http://app.cocolog-nifty.com/t/trackback/534482/64459302

この記事へのトラックバック一覧です: まずはデータ読み込み:

« MP4変換も高速化されたが | トップページ | 雰囲気は掴めた »

2017年10月
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30 31        

広告

プライバシーポリシー

  • 当サイトでは、第三者配信による広告(Google Adsense)サービスを利用しています。

    Google を含む第三者配信事業者は、Cookie を使用して、ユーザーのウェブサイトでの閲覧履歴に基づく広告を配信します。 Google 広告 Cookie を使用することにより、Google や Google のパートナーは当サイトや他のサイトへのアクセス情報に基づく広告をユーザーに表示できます。

    Cookieを無効にする設定およびAdsenseに関する詳細については、以下のリンクを参照下さい。

    広告 - ポリシーと規約 - Google