(57)【要約】【課題】パイプ・アンド・フィルタによるパイプライン処理を行うシステムにおいて、メモリを効率よく使用し、かつシステムのパフォーマンスの向上を図る。【解決手段】パイプおよびフィルタを備えたパイプライン１０と、このパイプライン１０に対してデータ処理に使用されるメモリを割り当てるメモリ・コントローラ２０を備える。メモリ・コントローラ２０は、パイプライン１０にメモリを割り当てる場合に、メモリの空き容量が、処理を実行中に各フィルタの処理対象であるデータがパイプに保持されている状態である最適状態を実現するメモリ容量である最適容量以上である場合は、最適容量を割り当てる。また、メモリの空き容量が、最適容量よりも少なく、かつ各フィルタの処理に必要なメモリ容量の総和である保障メモリ容量以上である場合は、保障メモリ容量を割り当てる。【選択図】図１
2012059152.tif 000002
【特許請求の範囲】
【請求項１】
データ処理を行うシステムにおいて、
データに対して一連の処理を行う１または複数のデータ処理手段と、
前記データ処理手段に対してデータ処理に使用されるメモリを割り当てるメモリ割り当て手段とを備え、
前記データ処理手段は、
処理対象のデータを入力する入力手段と、
入力されたデータに対して前記一連の処理を構成する個別の処理を行う１または複数の個別処理手段と、
前記一連の処理が行われたデータを出力する出力手段と、
前記入力手段、前記個別処理手段および前記出力手段の間でのデータの受け渡しに用いられるバッファ手段とを備え、
前記メモリ割り当て手段は、データ処理を実行しようとする前記データ処理手段にメモリを割り当てる場合に、
メモリの空き容量が、当該データ処理手段が処理を実行中に全ての前記個別処理手段の処理対象であるデータが前記バッファ手段に保持されている状態である最適状態を実現するメモリ容量である最適容量以上である場合は、当該最適容量を当該データ処理手段に割り当て、
メモリの空き容量が、前記最適容量よりも少なく、かつ前記個別処理手段の処理に必要なメモリ容量の総和である保障メモリ容量以上である場合は、当該保障メモリ容量を当該データ処理手段に割り当てる、
システム。
【請求項２】
前記メモリ割り当て手段は、
メモリの空き容量がデータ処理を実行しようとする前記データ処理手段の保障メモリ容量よりも少ない場合、既に処理を実行している他のデータ処理手段のうち保障メモリ容量以上のメモリ容量を割り当てられているデータ処理手段に当該保障メモリ容量を超える分のメモリを開放させ、得られたメモリの空き容量が当該データ処理を実行しようとするデータ処理手段の保障メモリ容量以上となったならば、当該保障メモリ容量を当該データ処理手段に割り当てる、
請求項１に記載のシステム。
【請求項３】
前記メモリ割り当て手段は、
データ処理を実行しようとする前記データ処理手段に前記最適容量が設定されていない場合、前記保障メモリ容量以上のメモリを当該データ処理手段に割り当てられるだけのメモリの空き容量があるならば、当該空き容量に応じて定められるメモリ容量を当該データ処理手段に割り当てる、
請求項１または請求項２に記載のシステム。
【請求項４】
前記メモリ割り当て手段は、
前記データ処理手段による処理の実行時のメモリの使用状態が前記最適状態となっているか否かを判断し、判断結果に基づき前記最適容量を動的に設定する、
請求項１乃至請求項３のいずれかに記載のシステム。
【請求項５】
前記メモリ割り当て手段は、
前記データ処理手段による処理の実行時のメモリの使用状態として、一の前記個別処理手段から前記バッファ手段へのデータの書き込みにおける待ち状態および後続の前記個別処理手段による当該バッファ手段からのデータの読み込みにおける待ち状態が一定以上の頻度で発生する場合に、当該最適状態となるまで当該バッファ手段として用いられるメモリの割り当てを増加する、
請求項４に記載のシステム。
【請求項６】
前記メモリ割り当て手段は、
前記データ処理手段による処理の実行時のメモリの使用状態が前記最適状態にある場合、予め定められた規則に従って、前記個別処理手段に順次着目し、着目した当該個別処理手段により読み込まれるデータを保持する前記バッファ手段として用いられるメモリの割り当てを減少させる処理を、当該最適状態が維持される限り継続して行う、
請求項４に記載のシステム。
【請求項７】
データ処理を行うシステムにおいて、
データに対して一連の処理を行う１または複数のデータ処理手段と、
前記データ処理手段に対してデータ処理に使用されるメモリを割り当てるメモリ割り当て手段とを備え、
前記データ処理手段は、
処理対象のデータを入力する入力手段と、
入力されたデータに対して前記一連の処理を構成する個別の処理を行う１または複数の個別処理手段と、
前記一連の処理が行われたデータを出力する出力手段と、
前記入力手段、前記個別処理手段および前記出力手段の間でのデータの受け渡しに用いられるバッファ手段とを備え、
前記メモリ割り当て手段は、データ処理を実行しようとする前記データ処理手段にメモリを割り当てる場合に、
データ処理を実行しようとする前記データ処理手段に、当該データ処理手段が処理を実行中に全ての前記個別処理手段の処理対象であるデータが前記バッファ手段に保持されている状態である最適状態を実現するメモリ容量である最適容量が設定されており、かつメモリの空き容量が当該最適容量以上である場合は、当該最適容量を当該データ処理手段に割り当て、
データ処理を実行しようとする前記データ処理手段に前記最適容量が設定されているが、メモリの空き容量が当該最適容量よりも少なく、かつ前記個別処理手段の処理に必要なメモリ容量の総和である保障メモリ容量以上である場合は、当該保障メモリ容量を当該データ処理手段に割り当て、
データ処理を実行しようとする前記データ処理手段に前記最適容量が設定されておらず、前記保障メモリ容量以上のメモリを当該データ処理手段に割り当てられるだけのメモリの空き容量がある場合は、当該空き容量に応じて定められるメモリ容量を当該データ処理手段に割り当て、
メモリの空き容量がデータ処理を実行しようとする前記データ処理手段の前記保障メモリ容量よりも少ない場合は、当該データ処理手段にメモリを割り当てず、
前記データ処理手段による処理の実行時のメモリの使用状態が前記最適状態となっているか否かを判断し、判断結果に基づき前記最適容量を動的に設定する、
システム。
【請求項８】
データに対して一連の処理を行うデータ処理手段と、
前記データ処理手段に対してデータ処理に使用されるメモリを割り当てるメモリ割り当て手段とを備え、
前記データ処理手段は、
処理対象のデータを入力する入力手段と、
入力されたデータに対して前記一連の処理を構成する個別の処理を行う１または複数の個別処理手段と、
前記一連の処理が行われたデータを出力する出力手段と、
前記入力手段、前記個別処理手段および前記出力手段の間でのデータの受け渡しに用いられるバッファ手段と
を備えたシステムにおける前記データ処理手段にメモリを割り当てる方法において、
データ処理を実行しようとする前記データ処理手段に、当該データ処理手段が処理を実行中に全ての前記個別処理手段の処理対象であるデータが前記バッファ手段に保持されている状態である最適状態を実現するメモリ容量である最適容量が設定されているか否かを判断するステップと、
前記最適容量が設定されている場合に、メモリの空き容量に応じて、当該最適容量または前記個別処理手段の処理に必要なメモリ容量の総和である保障メモリ容量を、データ処理を実行しようとする前記データ処理手段に割り当てるステップと、
前記最適容量が設定されていない場合に、メモリの空き容量に応じて、前記保障メモリ容量以上のメモリ容量をデータ処理を実行しようとする前記データ処理手段に割り当て、当該データ処理手段による処理の実行時のメモリの使用状態に基づいて当該データ処理手段の前記最適容量を設定するステップと、
を含む、方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、パイプ・アンド・フィルタによるパイプライン処理にてデータ処理を行うシステムおよびシステムにメモリを割り当てる方法に関する。
【背景技術】
【０００２】
データ処理のアーキテクチャ・パターンのひとつに、パイプ・アンド・フィルタと呼ばれるパターンがある。パイプ・アンド・フィルタによれば、データを入力し、処理し、出力する機能を持ったフィルタと呼ばれるソフトウェア部品をパイプでつなぐことにより、つながれたフィルタがデータを順次処理するパイプライン処理が実現される（以下、ひとつのパイプライン処理を行うためのフィルタ群および各フィルタをつなぐパイプの集合（Pipes & Filters）をパイプラインと呼ぶ）。所望のフィルタを所望の順番でつなぐことにより、様々な処理を行うことができ、複雑な処理も容易に構成することができる。
【０００３】
ここで、フィルタは、パイプライン処理におけるデータ処理を行う主体であり、個々のフィルタの処理は、プログラム制御されたＣＰＵ（Central Processing Unit）等の処理機能により実行される。ひとつのパイプラインを構成する各フィルタの処理は、単一のＣＰＵやコアで実行される必要はなく、フィルタごとに異なるコアで実行されても良い。パイプは、ひとつのフィルタの出力（標準出力）を後続する他のフィルタの入力（標準入力）につなげるものであり、ＲＡＭ（Random Access Memory）等のメモリにより実現される機能である。
【０００４】
実際のシステムでは、複数のパイプラインを用意し、種々の処理を並列に実行する場合がある。一方、ハードウェア資源の制約等のために、パイプライン処理に使用できるメモリの容量が制限される場合がある。したがって、パイプライン処理を行うシステムでは、各パイプラインおよびこれを構成する各フィルタに対してメモリをどのように割り当てるかが、システムの性能に大きく影響する。
【０００５】
特許文献１には、パイプ・アンド・フィルタのアーキテクチャにおけるメモリの割り当てに関する従来技術として、パイプライン処理に対してメモリを動的に割り当てる技術が開示されている。同文献に開示された従来技術では、一のパイプライン処理を実行するためにメモリの作業領域が不足している場合に、他のパイプラインに割り当てられている作業領域またはその一部を開放して、不足している一のパイプラインに割り当てる。
【先行技術文献】
【特許文献】
【０００６】
【特許文献１】特開２０１０−６８４８６号公報
【発明の概要】
【発明が解決しようとする課題】
【０００７】
実際のデータ処理では、複数のパイプラインを同時に実行する場合がある。この場合、同時に実行されるフィルタの各々が必要とするメモリ容量の総和に相当する容量を、同時実行される複数のパイプライン処理全体のために確保する必要がある。
【０００８】
また、個々のパイプラインに着目すると、パイプラインを構成する各パイプに対するメモリの割り当ては、各フィルタの前後（入力側および出力側）のデータ量に対応するだけの容量を確保する必要がある。
【０００９】
複数のパイプラインを同時に実行する場合の対応として、従来は、同時に実行することが可能なフィルタの組み合わせを予め定義し、各組み合わせにおける各フィルタ専用のメモリ領域を確保することが行われていた。
【００１０】
しかし、予め定義されたフィルタの組み合わせに基づいてメモリ領域を確保する場合、実際には同時に実行されていないパイプラインにおけるフィルタ用のメモリ領域が確保されることが起こり得る。この場合、無駄な（使用されない）メモリ領域の確保が固定的に行われてしまう。そのため、パイプライン処理全体に割り当てられたメモリの容量には余裕があるにも関わらず、実行可能なフィルタの数や種類が制限されてしまうという問題があった。
【００１１】
また、上記の方法によりパイプライン処理で使用するメモリ領域を確保する場合、システム全体ではパイプライン処理で使用可能な（他の処理で使用されない）メモリの空き領域があるにも関わらず、パイプライン処理では予め設定されたメモリしか使用することができない。そのため、システム全体でもメモリの使用に無駄が発生してしまうという問題があった。
【００１２】
また、従来、個々のパイプラインにおける各パイプに対するメモリの割り当ては、特定のパイプに偏ることがないように、パイプごとに確保すべきメモリを予め定義しておき、この定義に従ってメモリ領域を確保することが行われていた。
【００１３】
しかし、上記の方法により各パイプで使用するメモリ領域を確保する場合、特定の実行条件を設定し、その条件でのパフォーマンス（メモリ使用量、実行速度）の最適化などを図ってチューニングを行うことが望ましい。この場合、仕様変更などによる振舞いの変化がある度にチューニングを行うことが必要となる。また、設定した実行条件と異なる状況で使用された場合は、最適なパフォーマンスを得ることができないという問題があった。
【００１４】
本発明は、上記の課題に鑑み、パイプ・アンド・フィルタによるパイプライン処理を行うシステムにおいて、メモリを効率よく使用し、かつシステムのパフォーマンスの向上を図ることを目的とする。
【課題を解決するための手段】
【００１５】
上記の目的を達成するため、本発明は、次のようなシステムとして実現される。このシステムは、データに対して一連の処理を行う１または複数のデータ処理手段と、このデータ処理手段に対してデータ処理に使用されるメモリを割り当てるメモリ割り当て手段とを備える。そして、データ処理手段は、処理対象のデータを入力する入力手段と、入力されたデータに対して一連の処理を構成する個別の処理を行う１または複数の個別処理手段と、一連の処理が行われたデータを出力する出力手段と、入力手段、個別処理手段および出力手段の間でのデータの受け渡しに用いられるバッファ手段とを備える。そして、メモリ割り当て手段は、データ処理を実行しようとするデータ処理手段にメモリを割り当てる場合に、メモリの空き容量が、データ処理手段が処理を実行中に全ての個別処理手段の処理対象であるデータがバッファ手段に保持されている状態である最適状態を実現するメモリ容量である最適容量以上である場合は、最適容量をデータ処理手段に割り当てる。また、メモリの空き容量が、最適容量よりも少なく、かつ個別処理手段の処理に必要なメモリ容量の総和である保障メモリ容量以上である場合は、保障メモリ容量をデータ処理手段に割り当てる。
【００１６】
より好ましくは、メモリ割り当て手段は、メモリの空き容量がデータ処理を実行しようとするデータ処理手段の保障メモリ容量よりも少ない場合、既に処理を実行している他のデータ処理手段のうち保障メモリ容量以上のメモリ容量を割り当てられているデータ処理手段に保障メモリ容量を超える分のメモリを開放させ、得られたメモリの空き容量がデータ処理を実行しようとするデータ処理手段の保障メモリ容量以上となったならば、保障メモリ容量をデータ処理手段に割り当てる。
【００１７】
さらに好ましくは、メモリ割り当て手段は、データ処理を実行しようとするデータ処理手段に最適容量が設定されていない場合、保障メモリ容量以上のメモリをデータ処理手段に割り当てられるだけのメモリの空き容量があるならば、空き容量に応じて定められるメモリ容量をデータ処理手段に割り当てる。
【００１８】
さらに好ましくは、メモリ割り当て手段は、データ処理手段による処理の実行時のメモリの使用状態が最適状態となっているか否かを判断し、判断結果に基づき最適容量を動的に設定する。
より詳細には、メモリ割り当て手段は、データ処理手段による処理の実行時のメモリの使用状態として、一の個別処理手段からバッファ手段へのデータの書き込みにおける待ち状態および後続の個別処理手段によるバッファ手段からのデータの読み込みにおける待ち状態が一定以上の頻度で発生する場合に、最適状態となるまでバッファ手段として用いられるメモリの割り当てを増加する。
あるいは、メモリ割り当て手段は、データ処理手段による処理の実行時のメモリの使用状態が最適状態にある場合、予め定められた規則に従って、個別処理手段に順次着目し、着目した個別処理手段により読み込まれるデータを保持するバッファ手段として用いられるメモリの割り当てを減少させる処理を、最適状態が維持される限り継続して行う。
【００１９】
また、上記の目的を達成する本発明のシステムは、データ処理を行うシステムにおいて、  データに対して一連の処理を行う１または複数のデータ処理手段と、データ処理手段に対してデータ処理に使用されるメモリを割り当てるメモリ割り当て手段とを備える。そして、データ処理手段は、処理対象のデータを入力する入力手段と、入力されたデータに対して一連の処理を構成する個別の処理を行う１または複数の個別処理手段と、一連の処理が行われたデータを出力する出力手段と、入力手段、個別処理手段および出力手段の間でのデータの受け渡しに用いられるバッファ手段とを備える。そして、メモリ割り当て手段は、データ処理を実行しようとするデータ処理手段にメモリを割り当てる場合に、データ処理を実行しようとするデータ処理手段に、データ処理手段が処理を実行中に全ての個別処理手段の処理対象であるデータがバッファ手段に保持されている状態である最適状態を実現するメモリ容量である最適容量が設定されており、かつメモリの空き容量が当該最適容量以上である場合は、最適容量を当該データ処理手段に割り当てる。また、データ処理を実行しようとするデータ処理手段に最適容量が設定されているが、メモリの空き容量が最適容量よりも少なく、かつ個別処理手段の処理に必要なメモリ容量の総和である保障メモリ容量以上である場合は、保障メモリ容量をデータ処理手段に割り当てる。また、データ処理を実行しようとするデータ処理手段に最適容量が設定されておらず、保障メモリ容量以上のメモリをデータ処理手段に割り当てられるだけのメモリの空き容量がある場合は、空き容量に応じて定められるメモリ容量をデータ処理手段に割り当てる。また、メモリの空き容量がデータ処理を実行しようとするデータ処理手段の保障メモリ容量よりも少ない場合は、データ処理手段にメモリを割り当てない。そして、データ処理手段による処理の実行時のメモリの使用状態が最適状態となっているか否かを判断し、判断結果に基づき最適容量を動的に設定する。
【００２０】
さらにまた、上記の目的を達成する本発明は、次のような方法として実現される。この方法は、データに対して一連の処理を行うデータ処理手段と、データ処理手段に対してデータ処理に使用されるメモリを割り当てるメモリ割り当て手段とを備え、データ処理手段は、処理対象のデータを入力する入力手段と、入力されたデータに対して一連の処理を構成する個別の処理を行う１または複数の個別処理手段と、一連の処理が行われたデータを出力する出力手段と、入力手段、個別処理手段および出力手段の間でのデータの受け渡しに用いられるバッファ手段とを備えたシステムにおけるデータ処理手段にメモリを割り当てる方法である。そして、データ処理を実行しようとするデータ処理手段に、データ処理手段が処理を実行中に全ての個別処理手段の処理対象であるデータがバッファ手段に保持されている状態である最適状態を実現するメモリ容量である最適容量が設定されているか否かを判断するステップと、最適容量が設定されている場合に、メモリの空き容量に応じて、最適容量または個別処理手段の処理に必要なメモリ容量の総和である保障メモリ容量を、データ処理を実行しようとするデータ処理手段に割り当てるステップと、最適容量が設定されていない場合に、メモリの空き容量に応じて、保障メモリ容量以上のメモリ容量をデータ処理を実行しようとするデータ処理手段に割り当て、データ処理手段による処理の実行時のメモリの使用状態に基づいてデータ処理手段の最適容量を設定するステップと、を含む。
【００２１】
さらに本発明は、コンピュータを制御して上述したシステムの各機能を実現するプログラム、またはコンピュータに上記の方法における各ステップに対応する処理を実行させるプログラムとしても実現される。このプログラムは、磁気ディスクや光ディスク、半導体メモリ、その他の記録媒体に格納して配布したり、ネットワークを介して配信したりすることにより、提供することができる。
【発明の効果】
【００２２】
本発明によれば、パイプ・アンド・フィルタによるパイプライン処理を行うシステムにおいて、メモリを効率よく使用し、かつシステムのパフォーマンスの向上を図ることができる。
【図面の簡単な説明】
【００２３】
【図１】本実施形態のメモリ管理システムの機能構成を示す図である。
【図２】本実施形態におけるパイプラインの機能構成を示すブロック図である。
【図３】本実施形態のメモリ・コントローラの機能構成を示すブロック図である。
【図４】本実施形態におけるパイプラインへのメモリの割り当て方法を示すフローチャートである。
【図５】本実施形態の保障メモリ・バンド幅の決定方法を説明する図である。
【図６】本実施形態の平滑化法による最適容量の決定手順を示すフローチャートである。
【図７】図５に示したパイプラインを例として、平滑化法により最適容量を決定する様子を示す図である。
【図８】本実施形態の追加法による最適容量の決定手順を示すフローチャートである。
【図９】本実施形態のメモリ管理システムを実現するのに好適なコンピュータのハードウェア構成の一例を示す図である。
【発明を実施するための形態】
【００２４】
以下、添付図面を参照して、本発明の実施形態について詳細に説明する。
＜保障メモリ・バンド幅および最適容量の導入＞
本実施形態では、パイプラインに対するメモリの割り当て制御を、個々のパイプラインに保障される最低量を表す保障メモリ・バンド幅と、最適状態という二つの概念を用いて動的に行う。
【００２５】
保障メモリ・バンド幅とは、各パイプラインに割り当てられるメモリの最低量（下限）であり、パイプラインごとに定義される。各パイプラインにおける保障メモリ・バンド幅は、各パイプラインを構成する各フィルタにおけるデータの入出力に必要な最低限のメモリ容量の総量である。この容量は、各フィルタの前後で使用されるメモリの比率（以下、保障比率と呼ぶ）に基づいて計算される。保障メモリ・バンド幅の詳細な決定方法は後述する。
【００２６】
保障メモリ・バンド幅は、パイプラインに割り当てられるメモリの最低保障量であるので、各パイプラインの実行時には、そのパイプラインに対して定義されている保障メモリ・バンド幅が確保できることが必要である。言い換えれば、保障メモリ・バンド幅が確保できることが確認されたならば、そのパイプラインを実行することができる。また、保障メモリ・バンド幅は、パイプラインに割り当てられるメモリの最低量であるので、メモリの空き容量が存在するならば、許容される範囲で、保障メモリ・バンド幅以上のメモリをパイプラインに割り当てて良い。
【００２７】
新たにパイプラインを実行しようとする際に、メモリの空き容量が、実行しようとするパイプラインの保障メモリ・バンド幅に不足している場合、実行中のパイプラインが使用しているメモリのうち、その実行中のパイプラインの保障メモリ・バンド幅を超える分が開放される。そして、実行しようとするパイプラインの保障メモリ・バンド幅の確保が可能となったならば、そのパイプラインの使用メモリが確保されて、パイプラインの実行が開始される。
【００２８】
最適状態とは、パイプラインを構成する各フィルタが処理を行う際に、そのフィルタの入力側のメモリ（パイプ）に必ずデータが存在する状態である。ここで、各フィルタの処理に要する時間は、一般に、同じデータ量であっても、処理の種類によってフィルタごとに異なる。そのため、最適状態が実現されている場合の各フィルタの前後で使用されるメモリの比率（以下、最適比率と呼ぶ）は、保障メモリ・バンド幅の計算に用いられる保障比率と同一とは限らない。また、比率の値が同一である場合でも、具体的に割り当てられるメモリ容量は同一とは限らない。
【００２９】
この最適状態であれば、各フィルタは、処理を実行する際に処理対象のデータを直ちに読み込むことができるので、待ち状態となることなく処理を実行することができる。言い換えれば、ひとつのパイプラインに対して最適状態を実現する最小のメモリ容量以上にメモリを割り当てても、無駄な空き容量が増すだけである。そこで、本実施形態では、各パイプラインに関して最適状態となる最小のメモリ容量（以下、最適容量と呼ぶ）が求まった後は、最適容量を、各パイプラインに割り当てられるメモリの上限とする。すなわち、パイプライン処理で使用可能なメモリに余裕がある場合でも、各パイプラインの最適容量を超えるメモリが割り当てられることはない。
【００３０】
ところで、各フィルタの処理に要する時間は、処理の内容、処理対象となるデータの複雑さや属性等によって異なる。そのため、最適状態は、パイプラインを構成するフィルタの種類および数によって異なる他、同じパイプラインであっても、各フィルタに処理されるデータの種類、量、属性等に基づいて動的に変化する。したがって、一定の条件に基づき（例えば一定期間ごと、一定量の処理を行った後など）、各フィルタの最適比率および各パイプラインの最適容量を繰り返し求め、設定しなおすことが望ましい。最適比率および最適容量の詳細な決定方法は後述する。
【００３１】
以上のように、本実施形態では、各パイプラインに割り当てられるメモリ容量として、保障メモリ・バンド幅と、最適容量を設定する。そして、処理を実行させようとするパイプラインに対し、パイプライン処理に使用可能な（すなわち、パイプライン処理全体に対して割り当てられた）メモリのうち、そのパイプラインの保障メモリ・バンド幅または最適容量を割り当てる。また上記のように、保障メモリ・バンド幅はパイプラインの構成（フィルタの種類および数）に応じて固定的に定まる値であるが、最適容量は動的に変化する値である。
【００３２】
＜システムの機能構成＞
以下、本実施形態を実現するシステムの機能構成を説明する。
図１は、本実施形態のメモリ管理システムの機能構成を示す図である。
図１に示すように、本実施形態のメモリ管理システムは、パイプライン（パイプ・アンド・フィルタ）１０と、メモリ・コントローラ２０と、システム・メモリ管理機構３０とを備える。パイプライン１０は、処理対象のデータに対してフィルタを組み合わせて設定された一連の処理を行う。メモリ・コントローラ２０は、各パイプライン１０におけるメモリの取得および開放を制御する。システム・メモリ管理機構３０は、本実施形態のメモリ管理システムを含む情報処理システム全体で使用されるメモリを管理し、メモリ領域の取得および開放についての実処理を行う。
【００３３】
メモリ・コントローラ２０は、このシステム・メモリ管理機構３０に対して要求を行うことにより、パイプライン処理で使用されるメモリの取得および開放を制御する。すなわち、メモリ・コントローラ２０およびシステム・メモリ管理機構３０でメモリ割り当ての実処理までを含むメモリ割り当て手段として機能する。また、特に図示していないが、図１に示すメモリ管理システムを含む情報処理システムは、各パイプライン１０の実行を制御するシステム制御部を備えている。すなわち、このシステム制御部が、外部からのリクエストを受け付ける等の起動条件に応じて、該当するパイプライン１０を動作させ、処理を実行させる。
【００３４】
図２は、本実施形態におけるパイプライン１０の機能構成を示すブロック図である。
パイプライン１０は、データ処理手段であり、ひとつの入力（Sink In）１１と、ひとつ以上のフィルタ１２と、ひとつの出力（Sink Out）１３と、入力１１、出力１３および各フィルタ１２をつなぐパイプ１４とを備える。
【００３５】
入力１１は、記憶装置等からファイルを読み込んでパイプライン１０による処理の対象であるデータを取得する。図２に示すように、本実施形態の入力１１は、メモリ取得部１１１と、データ処理部１１２とを備える。
【００３６】
メモリ取得部１１１は、メモリ・コントローラ２０に対してリクエストを行い、パイプライン１０の先頭のフィルタ１２にデータを受け渡すために使用するメモリを取得する。このメモリは、入力１１の直後のパイプ１４として用いられる。メモリの取得は、後述するメモリ・トークンを用いて行われる。
【００３７】
データ処理部１１２は、ファイルを読み込んで処理対象のデータを取得する。そして、取得したデータを直後のパイプ１４に送る。データをパイプ１４に送るとは、メモリ取得部１１１により取得されたメモリにデータを出力（標準出力）することを意味する。入力１１にて読み込まれたデータは、これ以降、一定の長さ（ブロック・サイズ）のデータ・ブロックの単位で、パイプ１４を介して受け渡しされる。データ・ブロックのサイズは、システムの仕様や処理対象であるデータの種類等に応じて、適宜設定される。
【００３８】
フィルタ１２は、データに対してパイプライン１０にて実行されるべき個別の処理を行う個別処理手段である。図２に示すように、本実施形態のフィルタ１２は、メモリ使用登録部１２１と、メモリ取得部１２２と、メモリ開放部１２３と、データ処理部１２４とを備える。なお、図２においては、ひとつのフィルタ１２に対してのみ、詳細な機能構成を記載しているが、実際にはパイプライン１０を構成する各フィルタ１２が同様の機能構成を備える。
【００３９】
メモリ使用登録部１２１は、メモリ・コントローラ２０にアクセスし、そのフィルタ１２におけるメモリの使用に関する情報を送る。メモリ使用登録部１２１がメモリ・コントローラ２０に送る情報としては、具体的には、入力側のメモリにデータが存在するか、出力側のメモリに空き容量が存在するか等の情報である。詳しくは後述するが、この情報は、メモリ・コントローラ２０において最適容量を求めるために用いられる。
【００４０】
メモリ取得部１２２は、メモリ・コントローラ２０に対してリクエストを行い、そのフィルタ１２で使用するメモリ（処理後のデータを書き込むためのメモリ）を取得する。このメモリは、メモリを取得したフィルタ１２の直後のパイプ１４として用いられる。メモリの取得は、入力１１のメモリ取得部１１１と同様に、後述するメモリ・トークンを用いて行われる。また、メモリ取得部１２２は、入力側のパイプ１４から処理対象のデータを受け取る。パイプ１４からデータを受け取るとは、そのフィルタ１２の直前のフィルタ１２または入力１１によりメモリへ出力されたデータを読み込む（標準入力する）ことを意味する。
【００４１】
メモリ開放部１２３は、メモリ・コントローラ２０に対してリクエストを行い、入力側のメモリ（メモリ取得部１２２によるデータの読み込みの対象となったメモリ）を開放する。メモリの開放は、メモリの取得の場合と同様に、後述するメモリ・トークンを用いて行われる。
【００４２】
データ処理部１２４は、メモリ取得部１２２が受け取ったデータを処理する。そして、処理結果のデータを直後のパイプ１４に送る。すなわち、メモリ取得部１２２により取得されたメモリにデータを出力（標準出力）する。
【００４３】
出力１３は、そのパイプライン１０を構成する１または複数のフィルタ１２によって処理されたデータを、ファイルとして記憶装置等に出力する。本実施形態の出力１３は、メモリ開放部１３１と、データ処理部１３２とを備える。
【００４４】
メモリ開放部１３１は、メモリ・コントローラ２０に対してリクエストを行い、出力１３へのデータの受け渡しに使用されたメモリを開放する。このメモリは、パイプライン１０の最後のフィルタ１２と出力１３との間のパイプ１４として用いられたメモリである。メモリの開放は、メモリの取得の場合と同様に、後述するメモリ・トークンを用いて行われる。
【００４５】
データ処理部１３２は、直前のパイプ１４から処理が行われたデータを受け取る。すなわち、パイプライン１０を構成するフィルタ１２のうち、最後のフィルタ１２によってメモリへ出力されたデータを読み込む（標準入力）。そして、読み込んだデータを特定のデータ形式に変換し、パイプライン１０による処理結果として出力する。
【００４６】
パイプ１４は、フィルタ１２どうしの間、入力１１とフィルタ１２との間、フィルタ１２と出力１３との間でのデータの受け渡しを担うバッファ手段である。すなわち、パイプ１４は、前段のフィルタ１２または入力１１から出力（標準出力）されたデータを保持する。そして、パイプ１４に保持されたデータは、後段のフィルタ１２または出力１３により読み込まれる（標準入力）。
【００４７】
図３は、メモリ・コントローラ２０の機能構成を示すブロック図である。
メモリ・コントローラ２０は、登録情報管理部２１と、メモリ割り当て情報管理部２２と、システム・メモリ情報管理部２３と、メモリ割り当て制御部２４と、最適化部２５とを備える。
【００４８】
登録情報管理部２１は、システムに用意されている各フィルタ１２に関して、保障比率を登録して管理する。この保障比率は、フィルタ１２が実行する処理の種類に応じて異なる。具体的には、例えば、１データ・ブロックを４データ・ブロックに変換する処理を行うフィルタ１２の保障比率は、１：４となる。同様に、４データ・ブロックを２データ・ブロックに変換する処理を行うフィルタ１２の保障比率は、４：２となる。登録情報管理部２１は、各フィルタ１２のメモリ使用登録部１２１から、そのフィルタ１２の保障比率の情報を取得する。
【００４９】
また、登録情報管理部２１は、フィルタ１２の最適比率が設定された場合は、この最適比率も登録して管理する。この最適比率は、パイプライン１０の最適状態の変動に応じて設定し直される。最適比率が変更されると、登録情報管理部２１の登録内容は、改めて設定された最適比率に更新される。
【００５０】
これらの情報は、後述のメモリ・トークンの発行、パイプライン１０の保障メモリ・バンド幅や最適容量の計算等に用いられる。そして、登録情報管理部２１は、パイプライン１０ごとの保障メモリ・バンド幅および最適容量を登録して管理する。
【００５１】
さらに登録情報管理部２１は、パイプライン１０の入力１１のメモリ取得部１１１および各フィルタ１２のメモリ取得部１２２に対し、メモリ・トークンを発行する。具体的には、まず登録情報管理部２１は、各フィルタ１２のメモリ使用登録部１２１から識別情報（ＩＤ）を取得する。この識別情報は、個々のフィルタ１２および各フィルタ１２が所属するパイプライン１０を識別するための情報を含む。次に登録情報管理部２１は、取得した識別情報により特定されるフィルタ１２に関して管理している登録情報とその識別情報とを結びつけてメモリ・トークンを生成し、その識別情報を送ったフィルタ１２に返送する。
【００５２】
さらに、登録情報管理部２１は、各パイプライン１０の先頭に位置するフィルタ１２の識別情報によって特定されるそのフィルタ１２の保障比率に基づき、そのフィルタ１２の入力側（すなわち入力１１の出力側）で必要となるメモリ容量を特定する。そして、パイプライン１０の識別情報と特定したメモリ容量とを結びつけてメモリ・トークンを生成し、そのパイプライン１０の入力１１に送る。なお、フィルタ１２と同様に、各パイプライン１０の入力１１のメモリ取得部１１１から登録情報管理部２１へ識別情報を送信し、登録情報管理部２１から入力１１へメモリ・トークンを返送するようにしても良い。
【００５３】
メモリ割り当て情報管理部２２は、各フィルタ１２に割り当てた（フィルタ１２が使用している）メモリの情報を管理する。具体的には、フィルタ１２がメモリ・トークンを用いて取得したメモリの容量、領域等の情報が管理される。メモリ割り当て情報管理部２２に管理される情報は、フィルタ１２がメモリを取得したり開放したりする度に更新される。入力１１がメモリを取得した場合、出力１３がメモリを開放した場合も同様である。
【００５４】
システム・メモリ情報管理部２３は、システム全体のメモリの情報を管理する。具体的には、システム全体によるメモリの使用状況を示す情報が管理される。パイプライン処理で使用されるメモリは、メモリ・コントローラ２０の制御の下、システム・メモリ管理機構３０により取得および開放が行われる。したがって、フィルタ１２や入力１１、出力１３がメモリを取得したり開放したりすると、システム・メモリ情報管理部２３の情報も更新される。
【００５５】
メモリ割り当て制御部２４は、パイプライン１０の入力１１、フィルタ１２、出力１３からのメモリ・トークンを受け付けて、システム・メモリ管理機構３０に対して要求を行うことにより、実処理におけるメモリの取得および開放を制御する。フィルタ１２等がメモリ・トークンを用いてメモリの取得を要求しても、メモリの空き容量が不足しているために必要なメモリの割り当てを行うことができず、待ち状態となる場合がある。このような待ち状態の発生は、パイプライン１０に対する最適容量を求める際に参酌される。なお、待ち状態の発生についての情報は、メモリの空き状態の情報等として登録情報管理部２１に管理される。
【００５６】
最適化部２５は、各パイプライン１０における入力１１、フィルタ１２、出力１３の最適容量を計算する。計算された最適容量は、登録情報管理部２１に登録される。そして、メモリ割り当て制御部２４がフィルタ１２等にメモリを割り当てる際に参酌される。
【００５７】
＜パイプライン１０へのメモリの割り当て方法＞
次に、本実施形態におけるパイプライン１０へのメモリの割り当て方法を説明する。
パイプライン１０の処理が実行される前に、初期動作として、各パイプライン１０の入力１１およびフィルタ１２が登録情報管理部２１からメモリ・トークンを取得しているものとする。
【００５８】
パイプライン１０を実行しようとする場合、そのパイプライン１０にメモリを割り当てる際の基本的な考え方は、以下のとおりである。
Ａ：パイプライン１０に対して最適容量が設定されている場合
（１）最適容量を割り当てることが可能であれば、最適容量を割り当てる。
（２）最適容量を割り当てることができない場合（メモリの空き容量が最適容量よりも少ない場合）、保障メモリ・バンド幅を割り当てる。
（３）保障メモリ・バンド幅を割り当てることができない場合（メモリの空き容量が保障メモリ・バンド幅よりも少ない場合）、保障メモリ・バンド幅よりも多いメモリを割り当てられている他のパイプライン１０からメモリを開放させる。実行中の全てのパイプライン１０が保障メモリ・バンド幅を割り当てられている場合は、いずれかのパイプライン１０の処理が終了してメモリが開放されるのを待つ。
Ｂ：パイプライン１０に対して最適容量が設定されていない場合
（１）保障メモリ・バンド幅以上を割り当てることが可能であれば、所定の規則に基づいてメモリを割り当てる（最低でも保障メモリ・バンド幅が割り当てられる）。
（２）保障メモリ・バンド幅を割り当てることができない場合（メモリの空き容量が保障メモリ・バンド幅よりも少ない場合）、保障メモリ・バンド幅よりも多いメモリを割り当てられている他のパイプライン１０からメモリを開放させる。実行中の全てのパイプライン１０が保障メモリ・バンド幅を割り当てられている場合は、いずれかのパイプライン１０の処理が終了してメモリが開放されるのを待つ。
【００５９】
図４は、本実施形態におけるパイプライン１０へのメモリの割り当て方法を示すフローチャートである。
所定の起動条件に応じて、システム制御部により、あるパイプライン１０の実行指示が行われると（ステップ４０１）、メモリ・コントローラ２０のメモリ割り当て制御部２４は、まず、そのパイプライン１０に最適容量が設定されているか否かを判断する（ステップ４０２）。最適容量が設定されている場合、次にメモリ割り当て制御部２４は、パイプライン１０に最適容量を割り当てることが可能か否かを判断する（ステップ４０３）。具体的には、パイプライン処理に使用可能なメモリのうち、空き容量が、そのパイプライン１０の最適容量以上であるか否かが判断される。最適容量を割り当てることが可能であれば、メモリ割り当て制御部２４は、そのパイプライン１０に最適容量を割り当てる（ステップ４０４）。ここで、メモリの空き容量が最適容量よりも多い場合であっても、最適容量以上のメモリを割り当てることはない。
【００６０】
一方、メモリの空き容量が最適容量よりも少ない場合、次にメモリ割り当て制御部２４は、パイプライン１０に保障メモリ・バンド幅を割り当てることが可能か否かを判断する（ステップ４０５）。具体的には、最適容量の場合と同様に、メモリの空き容量が、そのパイプライン１０の保障メモリ・バンド幅以上であるか否かが判断される。保障メモリ・バンド幅を割り当てることが可能であれば、メモリ割り当て制御部２４は、そのパイプライン１０に保障メモリ・バンド幅を割り当てる（ステップ４０６）。
【００６１】
メモリの空き容量が保障メモリ・バンド幅よりも少ない場合、次にメモリ割り当て制御部２４は、他のパイプライン１０が使用しているメモリを開放することが可能か否かを判断する（ステップ４０７）。ここで、他のパイプライン１０からメモリを開放可能な場合とは、他のパイプライン１０に保障メモリ・バンド幅を超えるメモリが割り当てられている場合である。この場合、メモリ割り当て制御部２４は、他のパイプライン１０に割り当てたメモリをそのパイプライン１０の保障メモリ・バンド幅に変更し、余ったメモリを開放させる（ステップ４０８）。この後、メモリ割り当て制御部２４は、ステップ４０５に戻り、改めて、実行しようとするパイプライン１０に保障メモリ・バンド幅を割り当てることが可能か否かを判断する。
【００６２】
メモリを開放可能な他のパイプライン１０が存在しない場合（すなわち、全てのパイプライン１０が保障メモリ・バンド幅を割り当てられている場合）、メモリ割り当て制御部２４は、いずれかのパイプライン１０の処理が終了してメモリが開放されるのを待つ（ステップ４０９）。そして、ステップ４０５に戻り、改めて、実行しようとするパイプライン１０に保障メモリ・バンド幅を割り当てることが可能か否かを判断する。
【００６３】
実行しようとするパイプライン１０に最適容量が設定されていない場合（ステップ４０２でＮｏ）、次にメモリ割り当て制御部２４は、パイプライン１０に保障メモリ・バンド幅以上のメモリを割り当てることが可能か否かを判断する（ステップ４１０）。メモリの空き容量が保障メモリ・バンド幅よりも少ない場合、メモリ割り当て制御部２４は、他のパイプライン１０が使用しているメモリを開放することが可能か否かを判断する（ステップ４０７）。そして、他のパイプライン１０からメモリを開放させるか（ステップ４０８）、他のパイプライン１０の処理が終了してメモリが開放された後（ステップ４０９）、実行しようとするパイプライン１０に保障メモリ・バンド幅を割り当てることが可能か否かを判断する（ステップ４０５）。
【００６４】
一方、パイプライン１０に保障メモリ・バンド幅以上のメモリを割り当てることが可能な場合（ステップ４１０でＹｅｓ）、メモリ割り当て制御部２４は、予め定められた方法で、パイプライン１０にメモリを割り当てる（ステップ４１１）。このとき、メモリの空き容量によっては、保障メモリ・バンド幅以上のメモリが割り当てられる。ステップ４１１におけるメモリの割り当て方法の詳細については後述する。
【００６５】
以上のようにしてパイプライン１０および各フィルタ１２へのメモリの割り当てを行うことにより、新たにパイプライン１０を実行しようとする場合、少なくとも保障メモリ・バンド幅が割り当てられる。また、保障メモリ・バンド幅に相当する空き容量が存在しない場合、保障メモリ・バンド幅以上のメモリを割り当てられて動作している他のパイプライン１０が存在すれば、かかる他のパイプライン１０にメモリを開放させて保障メモリ・バンド幅で動作させることにより、空き容量を確保し、新たに実行しようとするパイプライン１０に割り当てることができる。したがって、本実施形態では、各パイプライン１０に、そのパイプライン１０の保障メモリ・バンド幅を割り当てて、可能な限り多くのパイプライン１０を並列に動作させることが可能となる。
【００６６】
また、新たに実行しようとするパイプライン１０に最適容量が設定されており、かつその最適容量分の空き容量が存在する場合には、そのパイプライン１０に最適容量が割り当てられる。これにより、いずれのフィルタ１２においてもメモリ不足を起因として処理が止まることがなく、パイプライン１０を効率良く動作させることが可能となる。さらに、最適容量は、最適状態を実現する最小のメモリ容量であるので、パイプライン１０に対して必要以上のメモリが無駄に割り当てられることがない。そのため、各パイプライン１０が最適状態で動作している場合であっても、より多くのパイプライン１０を並列に動作させることが可能となる。
【００６７】
＜保障メモリ・バンド幅の決定方法＞
次に、保障メモリ・バンド幅の決定方法について詳細に説明する。
図５は、本実施形態における保障メモリ・バンド幅の決定方法を説明する図である。
図５には、パイプライン１０の一部である３つのフィルタ１２と、各フィルタ１２の入力側および出力側のデータとが記載されている。図５において、データ量はデータ・ブロックの個数で表現されている。これは、上述したように、パイプライン１０におけるフィルタ１２間のデータのやりとりがデータ・ブロック単位で行われることに基づく。また、以下の説明において、３つのフィルタ１２を区別する場合は、図示のようにａ〜ｃの添字を付加する。
【００６８】
図５を参照すると、フィルタ１２ａは、入力側と出力側のメモリ使用量の保障比率が１：４である。すなわち、フィルタ１２ａによる処理が行われると、１データ・ブロックのデータが４データ・ブロックのデータに変換される。同様に、フィルタ１２ｂは、入力側と出力側のメモリ使用量の保障比率が４：２である。すなわち、フィルタ１２ｂによる処理が行われると、４データ・ブロックのデータが２データ・ブロックのデータに変換される。フィルタ１２ｃは、入力側と出力側のメモリ使用量の保障比率が１：２である。すなわち、フィルタ１２ｃによる処理が行われると、１データ・ブロックのデータが２データ・ブロックのデータに変換される。
【００６９】
パイプライン１０による処理を実行するためには、少なくとも、そのパイプライン１０を構成する全てのフィルタ１２が使用できるだけのメモリを確保する必要がある。例えば、パイプライン１０を構成するフィルタ１２が図５に示す３つのフィルタ１２ａ、１２ｂ、１２ｃであった場合、各フィルタ１２に割り当てられるメモリは次のようになる。すなわち、フィルタ１２ａの入力側では１データ・ブロック分のデータ量に対応するメモリを必要とする。フィルタ１２ａの出力側（フィルタ１２ｂの入力側）では、４データ・ブロック分のデータ量に対応するメモリを必要とする。フィルタ１２ｂの出力側（フィルタ１２ｃの入力側）では、２データ・ブロック分のデータ量に対応するメモリを必要とする。フィルタ１２ｃの出力側では、２データ・ブロック分のデータ量に対応するメモリを必要とする。
【００７０】
ここで、フィルタ１２ｃの処理が行われるためには、入力側に１データ・ブロック分のデータ量に対応するメモリがあれば良い。しかし、フィルタ１２ｂ、１２ｃ間のパイプ１４にデータを送るために、フィルタ１２ｂの出力側で必要とされるメモリを確保する必要があるため、２データ・ブロック分のメモリが必要となる。すなわち、フィルタ１２ｂからは２データ・ブロックが出力され、そのうち１データ・ブロックずつが順にフィルタ１２ｃに読み込まれて処理される。したがって、パイプライン１０全体では、最低でも図示の９データ・ブロック分のデータ量に対応するメモリが必要となる。
【００７１】
以上のように、パイプライン１０が処理を実行するために必要な最低限のメモリ容量、すなわち保障メモリ・バンド幅は、そのパイプライン１０を構成する全てのフィルタ１２が必要とするメモリ容量の総和となる。ただし、フィルタ１２の出力側のメモリは直後のフィルタ１２の入力側のメモリと共通である。そして、前方のフィルタ１２の出力側と後方のフィルタ１２の入力側とで必要とするメモリ容量が異なる場合は、大きい方のメモリ容量が選択される。
【００７２】
＜最適状態と最適容量＞
次に、最適状態と最適容量について説明する。
上記の保障メモリ・バンド幅は、パイプライン１０が使用できるメモリの最低量であるので、メモリの空き容量に余裕があれば、保障メモリ・バンド幅を超えるメモリをパイプライン１０に割り当てて良い。パイプライン１０に保障メモリ・バンド幅のメモリが割り当てられている場合、そのパイプライン１０は処理を実行することは可能であるが、必ずしも効率良く動作することはできない。例えば、パイプライン１０を構成するフィルタ１２のうち特定のフィルタ１２での処理に長時間を要し、直後のフィルタ１２が処理を実行できずに入力待ち（すなわち特定のフィルタ１２で処理されたデータがパイプ１４に出力されるのを待つ状態）となる可能性がある。したがって、メモリに余裕があれば、各パイプライン１０に割り当てられるメモリは多い方が良い。パイプライン１０に多くのメモリを割り当てて、各フィルタ１２の入力側のメモリ（パイプ１４）に必ずデータが存在する状態である最適状態が実現されれば、パイプライン１０の処理において高いパフォーマンスを得ることができる。
【００７３】
一方、パイプライン１０全体の処理能力に対応するメモリ容量を超えるメモリを割り当てても、最適状態は得られるものの、メモリの空き容量が増加するばかりで処理効率は向上しない。また、パイプライン１０を構成する複数のフィルタ１２のうち、特定のフィルタ１２に多くのメモリを配分して偏った割り当てを行った場合、後続のフィルタ１２群の処理が間に合わない。そのため、大量に割り当てられた特定のフィルタ１２の出力側のメモリにデータが溜まってしまい、処理効率の向上が抑制される。
【００７４】
そこで、本実施形態は、各パイプライン１０に関して、最適状態を実現する最小のメモリ容量を最適容量として、そのパイプライン１０に割り当てるメモリ容量の上限とする。そして、本実施形態は、各パイプライン１０に関して、保障メモリ・バンド幅のメモリを割り当てることができれば動作可能とし、さらにメモリに余裕がある場合には、最適容量のメモリを割り当てることとする。
【００７５】
ところで、ひとつのパイプライン１０において、最適状態が実現される各フィルタ１２の最適比率は、処理対象のデータの複雑さや属性等（例えば、画像処理を行うパイプライン１０の場合、画像（処理対象のデータ）の解像度や色数等）の条件に応じて異なる場合がある。したがって、特定の条件に対応する最適容量が決定された後、同じパイプライン１０において、処理における条件が変わることにより最適状態が維持できなくなる場合がある。本実施形態では、このような場合、新たな条件に対応する最適比率を求め、改めて最適容量を決定する。すなわち、最適容量は、実際のパイプライン１０の具体的な処理において最適状態が実現されるように、学習により動的に決定される。また、ひとつのパイプライン１０が異なる複数の条件で処理を行う場合、各条件に応じて複数の最適容量が決定される場合もあり得る。
【００７６】
なお、パイプライン１０の最適容量が決定された後、そのパイプライン１０において最適状態が維持できなくなった場合、新たな最適容量が決定されるまでの間におけるメモリの割り当ては、そのパイプライン１０に最適容量が設定されていないものとして行われる（図４のステップ４０２でＮＯと判断される）。
【００７７】
＜最適容量の決定方法＞
次に、最適容量の決定方法について説明する。
本実施形態では、最適容量の決定方法の具体例として、平滑化法と追加法の２種類の決定方法を説明する。平滑化法は、はじめに多くのメモリを割り当てて最適状態が得られた後、メモリの割り当て量を順次減らしていきながら最適状態が維持される最小のメモリ容量を求める方法である。追加法は、保障メモリ・バンド幅からメモリの割り当て量を順次増やしていきながら最適状態が得られるメモリ容量を求める方法である。
【００７８】
（１）平滑化法
図６は、平滑化法による最適容量の決定手順を示すフローチャートである。
平滑化法では、パイプライン１０を実行しようとする際、そのパイプライン１０の保障メモリ・バンド幅以上の空きメモリがある場合には、メモリ割り当て制御部２４は、まず、所定の条件に基づいて、保障メモリ・バンド幅を超えるメモリを割り当てる（ステップ６０１）。ここで、メモリを割り当てる条件としては、最適状態を実現するように十分な余裕を持たせるため、例えば、保障メモリ・バンド幅の３倍等のように設定する。また、パイプライン１０を構成する個々のフィルタ１２へのメモリの割り当ては、特定のフィルタ１２に偏ることがないように、例えば、各フィルタ１２の保障比率に基づき、出力側のメモリ容量の３倍を上限とする、というような条件を定める。
【００７９】
具体的には、例えば図５に示したパイプライン１０の場合、パイプライン１０全体に対して２７データ・ブロック分のメモリを割り当てることができる。そして、フィルタ１２ａの入力側に３データ・ブロック分、出力側に１２データ・ブロック分、フィルタ１２ｂの出力側に６データ・ブロック分、フィルタ１２ｃの出力側に６データ・ブロック分のメモリを割り当てることができる。なお、これら割り当て条件の値は例示に過ぎず、実際には、処理の内容、データのサイズや複雑さ等に応じて個別具体的に設定される。例えば、単純に保障メモリ・バンド幅の３倍のメモリ容量を割り当てただけでは最適状態を実現できない場合、保障メモリ・バンド幅の４倍以上のメモリ容量を割り当てるように条件設定を行っても良い。
【００８０】
なお、設定された条件を満たすだけのメモリの空き容量が存在しない場合、メモリ割り当て制御部２４は、空き容量分だけを割り当てれば良い。そして、さらにメモリの空き容量が発生した場合に、メモリ割り当て制御部２４は、設定された条件を満足するまで追加的にメモリを割り当てる。または、メモリ割り当て情報管理部２２により、割り当てたメモリによって最適状態が実現されたか否かを判断し、最適状態が実現されたならば、メモリ割り当て制御部２４による制御を、次の平滑化のステップへ移行しても良い。パイプライン１０に割り当てられたメモリが設定された条件を満足しない場合、各フィルタ１２のうち、いずれのフィルタ１２に対して優先的にメモリを割り当てるかを予め定めておいても良い。例えば、処理に長い時間を要するフィルタ１２の入力側に、優先的に多くのメモリを割り当てることにより、直前のフィルタ１２が処理後のデータを出力できずパイプライン１０全体の処理が止まることを回避し易くなる。
【００８１】
以上のような初期ステップにおいて最適状態が実現されたならば（ステップ６０２でＹＥＳ）、次にメモリ割り当て制御部２４は、所定の規則に基づいて割り当てたメモリ容量を順次減らしていく。割り当てたメモリ容量を減らすための規則は、適宜定め得る。一例として、図６のフローチャートは、パイプライン１０の先頭のパイプ１４に対応するメモリ（すなわち先頭のフィルタ１２の入力側（入力１１の出力側）のメモリ）から順に減らしていく手順を示している。
【００８２】
図６を参照すると、メモリ割り当て制御部２４は、まず、先頭のフィルタ１２の入力側に割り当てられたメモリを１データ・ブロック分減らす（ステップ６０３）。そして、メモリ割り当て情報管理部２２が、最適状態が維持されているか否かを判断する（ステップ６０４）。最適状態が維持されているならば、メモリ割り当て制御部２４は、先頭のフィルタ１２の入力側に割り当てられたメモリを、さらに１データ・ブロック分減らす（ステップ６０３）。ステップ６０３、６０４を繰り返し、最適状態でなくなったならば、メモリ割り当て制御部２４は、メモリの割り当てを直前の状態（すなわち最適状態が維持されていた最後の状態）に戻す（ステップ６０５）。
【００８３】
ところで、実際の処理においては、処理対象のデータ量や処理の実行タイミング等に起因して、最適状態を実現するのに十分な容量のメモリが割り当てられている場合であっても、パイプライン１０の一部のフィルタ１２において、一時的に最適状態が崩れることがあり得る。本実施形態では、このような一時的な最適状態の崩れを状態のゆらぎとして扱い、最適状態が維持されているものとする。具体的には、例えば、メモリ割り当て情報管理部２２においてフィルタ１２における一定時間のメモリの使用状況を監視し、入力側のメモリにデータが存在しないためにデータを読み込むことができない待ち状態が予め定められた上限値（例えば５００ミリ秒等）を超えなければ、最適状態が維持されているとする。あるいは、一定時間のメモリの使用状況において、入力側のメモリにデータが存在しない時間の累積値が一定の割合（例えば１０％）を超えなければ、最適状態が維持されているとするようにしても良い。
【００８４】
次に、メモリ割り当て制御部２４は、先頭のフィルタ１２の出力側に割り当てられたメモリを１データ・ブロック分減らす（ステップ６０６）。そして、メモリ割り当て情報管理部２２が、最適状態が維持されているか否かを判断する（ステップ６０７）。最適状態が維持されているならば、メモリ割り当て制御部２４は、先頭のフィルタ１２の出力側に割り当てられたメモリを、さらに１データ・ブロック分減らす（ステップ６０６）。ステップ６０６、６０７を繰り返し、最適状態でなくなったならば、メモリ割り当て制御部２４は、メモリの割り当てを直前の状態（すなわち最適状態が維持されていた最後の状態）に戻す（ステップ６０８）。
【００８５】
次に、メモリ割り当て制御部２４は、パイプライン１０において、処理対象として着目しているフィルタ１２（現在は先頭のフィルタ１２）の後段にフィルタ１２が存在するか否かを調べる（ステップ６０９）。そして、後段にフィルタ１２が存在するならば、メモリ割り当て制御部２４は、直後のフィルタ１２に着目し（ステップ６１０）、着目したフィルタ１２の出力側に割り当てられたメモリを１データ・ブロック分減らす（ステップ６０６）。以下、ステップ６０６からステップ６１０までの動作を、全てのフィルタ１２に関して繰り返す。そして、着目しているフィルタ１２の後段にフィルタ１２が存在しなくなったならば（全てのフィルタ１２に対して処理を行ったならば）、平滑化のステップを終了する。このとき、パイプライン１０に割り当てられているメモリは、最適状態が得られる最小のメモリ容量となっている。したがって、以上の動作により、パイプライン１０の最適容量が決定される。
【００８６】
なお、図６に示した動作例では、パイプライン１０の先頭のパイプ１４に対応するメモリから順に割り当てる容量を減らしたが、メモリを減らす順番は、上記動作例に限定されない。本実施形態は、最適状態を維持したまま、できるだけメモリの割当量を削減することができれば良く、他の手順によりメモリを減らす対象のフィルタ１２を特定しても構わない。
【００８７】
図７は、図５に示したパイプライン１０を例として、平滑化法により最適容量を決定する様子を示す図である。
図７（ａ）を参照すると、このパイプライン１０において、フィルタ１２ａの入力側および各フィルタ１２ａ、ｂ、ｃの出力側に、図５に示した保障メモリ・バンド幅の３倍のメモリを割り当てている。この状態で、最適状態が得られたものとする（すなわち、ステップ６０２でＹｅｓ）。
【００８８】
次に、図７（ｂ）を参照すると、フィルタ１２ａの入力側に割り当てられたメモリのうち、１データ・ブロック分が減っている。図においては、減少分のメモリが破線で示されている。この状態で、最適状態が得られたものとする（すなわち、ステップ６０４でＹｅｓ）。図７（ｃ）を参照すると、フィルタ１２ａの入力側に割り当てられたメモリのうち、さらに１データ・ブロック分が減っている。フィルタ１２ａの入力側に割り当てられたメモリは、残り１データ・ブロック分であるため、これ以上減らすことはできない。したがって、次の図７（ｄ）では、フィルタ１２ａの出力側に割り当てられたメモリが減っている。以下、同様にして、最適状態が維持されることを確認しながら、フィルタ１２ａの出力側のメモリ、フィルタ１２ｂの出力側のメモリ、フィルタ１２ｃの出力側のメモリと順に減らしていく。
【００８９】
なお、図７（ｄ）には、フィルタ１２ａの出力側のメモリが４データ・ブロック分減った様子が示されている。これは、フィルタ１２ａの保障比率が１：４であることから（図５参照）、フィルタ１２ａの出力側のメモリは、４データ・ブロック分の増減がなされた場合に、最適状態が維持されるか否かが問題となるためである。すなわち、図６に示した手順にしたがってメモリを減らす場合、図７（ｃ）の状態から図７（ｄ）の状態に至るのに、ステップ６０６、６０７の動作が４サイクル行われたことになる。
【００９０】
（２）追加法
図８は、追加法による最適容量の決定手順を示すフローチャートである。
追加法では、パイプライン１０を実行しようとする際、そのパイプライン１０の保障メモリ・バンド幅以上の空きメモリがある場合には、メモリ割り当て制御部２４は、まず、そのパイプライン１０の保障メモリ・バンド幅を割り当てる（ステップ８０１）。そして、メモリ割り当て情報管理部２２が、最適状態が実現されているか否かを判断する（ステップ８０２）。最適状態が実現されているか否かの判断においては、上記の平滑化法（図６参照）において説明したように、状態のゆらぎが考慮される。すなわち、最適化状態を崩す待ち状態の発生頻度が一定以下である場合に、最適化状態が実現されていると判断する。
【００９１】
最適状態でない場合、メモリ割り当て制御部２４は、処理の実行に待ち状態が発生しているフィルタ１２を特定し、メモリの割当量を増加させる箇所（以下、メモリ増加箇所）を決定する（ステップ８０３）。ここで、メモリ増加箇所の決定方法としては、種々の方法を取り得る。例えば、次のようにして決定することができる。
【００９２】
ひとつのフィルタ１２が処理を行う場合に、入力側のメモリにデータが存在しないためにデータを読み込むことができず、直前のフィルタ１２からのデータ出力を待つ状態が発生するものとする（出力待ち）。また、ひとつのフィルタ１２が処理を行った後のデータを出力しようとする場合に、出力側のメモリの空きが存在しないためにデータを出力することができず、直後のフィルタ１２によりデータの読み込みが行われてメモリへのデータ出力が可能となるのを待つ状態が発生するものとする（読み込み待ち）。そして、あるパイプ１４に対応するメモリに関して、その直後のフィルタ１２における出力待ちと直前のフィルタ１２における読み込み待ちが共に発生している場合に、そのパイプ１４をメモリ増加箇所として決定する。
【００９３】
次に、メモリ割り当て制御部２４は、ステップ８０３で決定したメモリ増加箇所に割り当てられたメモリを１データ・ブロック分増やす（ステップ８０４）。そして、メモリ割り当て情報管理部２２が、最適状態が実現されたか否かを判断する（ステップ８０２）。ステップ８０２からステップ８０４までの動作を繰り返し、パイプライン１０の全体にわたって出力待ちおよび読み込み待ちの両方が発生している箇所が解消され、最適状態が実現されたならば、メモリ割り当て制御部２４の処理を終了する。このとき、パイプライン１０に割り当てられているメモリは、最適状態が得られる最小のメモリ容量となっている。したがって、以上の動作により、パイプライン１０の最適容量が決定される。
【００９４】
ここで、メモリ増加箇所の決定方法について、さらに説明する。
実際の処理においては、処理対象のデータ量や処理の実行タイミング等に起因して、最適容量が割り当てられている場合であっても、パイプライン１０の一部のフィルタ１２において、一時的に出力待ちや読み込み待ちが発生することがあり得る。そこで、例えば、メモリ割り当て情報管理部２２においてフィルタ１２における一定時間のメモリの使用状況を監視し、データの出力時に出力待ちが発生する確率およびデータの読み込み時に読み込み待ちが発生する確率が一定以上（例えば４０％以上）である場合に、該当箇所をメモリ増加箇所とすることが考えられる。このようにすれば、データ処理の実行時における様々な条件の変動によって一時的に出力待ちや読み込み待ちが発生する場合のような、いわば状態のゆらぎに対して過敏に対応することを回避することができる。
【００９５】
なお、上記のメモリ増加箇所の決定方法は例示に過ぎない。本実施の形態は、保障メモリ・バンド幅から初めて最適状態が得られるまで、いずれかのフィルタ１２に割り当てられるメモリを順次増加していけば良く、他の手順によりメモリ増加箇所を決定しても構わない。
【００９６】
＜ハードウェアの構成例＞
最後に、本実施形態のメモリ管理システムを含む情報処理システムを実現するのに好適なコンピュータのハードウェア構成について説明する。
図９は、このようなコンピュータのハードウェア構成の一例を示す図である。
図９に示すコンピュータ１００は、演算手段であるＣＰＵ（Central Processing Unit）１００ａと、主記憶手段であるメモリ１００ｃを備える。また、外部デバイスとして、磁気ディスク装置（ＨＤＤ：Hard Disk Drive）１００ｇ、ネットワーク・インタフェース・カード１００ｆ、ビデオ・カード１００ｄおよび表示装置１００ｊ、音声機構１００ｈ、キーボードやマウス等の入力デバイス１００ｉ等を備える。
【００９７】
図９に示す構成例では、メモリ１００ｃおよびビデオ・カード１００ｄは、システム・コントローラ１００ｂを介してＣＰＵ１００ａに接続されている。また、ネットワーク・インタフェース・カード１００ｆ、磁気ディスク装置１００ｇ、音声機構１００ｈおよび入力デバイス１００ｉは、Ｉ／Ｏコントローラ１００ｅを介してシステム・コントローラ１００ｂと接続されている。各構成要素は、システム・バスや入出力バス等の各種のバスによって接続される。なお、図９は、本実施例が適用されるのに好適なコンピュータのハードウェア構成を例示するに過ぎない。本実施例はパイプ・アンド・フィルタによるパイプライン処理を行う情報処理システムに広く適用できるものであり、図示の構成においてのみ本実施例が実現されるのではない。例えば、パイプライン処理は、ストリーミング画像の表示装置や印刷機器等の組み込み機器における利用も多く、そのような組み込み機器のコンピュータにおいても本実施形態は適用し得る。
【００９８】
図９において、磁気ディスク装置１００ｇにはＯＳやアプリケーション・ソフトのプログラムが格納されている。そして、これらのプログラムがメモリ１００ｃに読み込まれてＣＰＵ１００ａに実行されることにより、図１に示した各パイプライン１０の入力１１、フィルタ１２、出力１３、メモリ・コントローラ２０の各機能、システム・メモリ管理機構３０を含む各種の機能が実現される。
【００９９】
また、図９には、ひとつのコンピュータの構成例を記載したが、実際のシステムにおいては、複数のコンピュータにより、パイプライン１０、メモリ・コントローラ２０、システム・メモリ管理機構３０等が個別に構成される場合もある。さらに、パイプライン１０における各フィルタ１２を、複数のコンピュータを用いて構成しても良い。複数のコンピュータにて本実施形態の情報処理システムを実現した場合、メモリ・コントローラ２０の機能を備えたサーバ・コンピュータを用意して、メモリの管理および割り当て制御を統括的に行っても良い。
【符号の説明】
【０１００】
１０…パイプライン（パイプ・アンド・フィルタ）、１１…入力（Sink In）、１２…フィルタ、１３…出力（Sink Out）、１４…パイプ、２０…メモリ・コントローラ、２１…登録情報管理部、２２…メモリ割り当て情報管理部、２３…システム・メモリ情報管理部、２４…メモリ割り当て制御部、２５…最適化部、３０…システム・メモリ管理機構、１１１、１２２…メモリ取得部、１１２、１２４、１３２…データ処理部、１２１…メモリ使用登録部、１２３、１３１…メモリ開放部
【図１】
2012059152.tif 000003
【図２】
2012059152.tif 000004
【図３】
2012059152.tif 000005
【図４】
2012059152.tif 000006
【図５】
2012059152.tif 000007
【図６】
2012059152.tif 000008
【図７】
2012059152.tif 000009
【図８】
2012059152.tif 000010
【図９】
2012059152.tif 000011