(57)【要約】【課題】ＣＰＵおよびＧＰＵをフレキシブルに用いて、画像の処理を効率的に行うことのできる情報処理装置を提供する。【解決手段】エフェクトの処理を実行する主体として、ＣＰＵ、ＧＰＵ、およびその両方のいずれかを選択し、ＣＰＵとＧＰＵの両方が選択された場合、画像を２つの領域に分割し、分割された２つの領域それぞれの画像に対するエフェクトの処理をＣＰＵとＧＰＵに分担して実行させるようにＣＰＵを動作させるエフェクトプログラム選択起動部を設ける。エフェクトプログラム選択起動部は、画像の全体に対するエフェクト処理がユーザによって選択された場合に、その画像の全体に対するエフェクト処理を実行する主体として、ＣＰＵとＧＰＵの両方を選択し、それぞれに割り当てる処理面積の最適な割合を決定する。【選択図】図７
2012003619.tif 000002
【特許請求の範囲】
【請求項１】
画像の処理を実行可能な第１のプロセッシング・ユニットと、
前記画像の処理を当該画像を区分する単位毎に並列に実行可能な第２のプロセッシング・ユニットと、
前記画像の処理を実行する主体として、前記第１のプロセッシング・ユニット、前記第２のプロセッシング・ユニット、およびその両方のいずれかを選択し、前記第１のプロセッシング・ユニットと前記第２のプロセッシング・ユニットの両方が選択された場合、前記画像を第１の領域と第２の領域とに分割し、分割された前記第１の領域および前記第２の領域それぞれの画像に対する処理を前記第１のプロセッシング・ユニットと前記第２のプロセッシング・ユニットに分担して実行させるように制御を行う制御手段と
を具備する情報処理装置。
【請求項２】
請求項１に記載の情報処理装置であって、
前記制御手段は、前記画像の全体に対する処理を行う場合に、前記画像の処理を実行する主体として前記第１のプロセッシング・ユニットと前記第２のプロセッシング・ユニットの両方を選択する
情報処理装置。
【請求項３】
請求項２に記載の情報処理装置であって、
前記制御手段は、前記第１のプロセッシング・ユニットによる前記第１の領域に対する第１の処理時間と前記第２のプロセッシング・ユニットによる前記第２の領域に対する第２の処理時間とが等しくもしくは略等しくなるように、前記第１の領域および前記第２の領域それぞれの面積を決定する
情報処理装置。
【請求項４】
請求項３に記載の情報処理装置であって、
前記第１のプログラムユニットによる前記画像の処理で用いられる第１のメモリと、
前記第２のプログラムユニットによる前記画像の処理で用いられる第２のメモリとをさらに具備し、
前記制御手段は、前記第１の領域および前記第２の領域それぞれの画像の対する処理を前記第１のプロセッシング・ユニットと前記第２のプロセッシング・ユニットに分担して実行させる場合を想定した前記第２のメモリの予測使用量を計算し、前記計算された前記第２のメモリの予測使用量が閾値に達した場合、前記予測使用量が当該第２のメモリにおいて前記第２のプロセッシング・ユニットにより使用可能な容量内に収まるように、前記決定された前記第１の領域および前記第２の領域それぞれの面積を修正する
情報処理装置。
【請求項５】
請求項４に記載の情報処理装置であって、
前記制御手段は、前記第２のメモリの予測使用量が当該第２のメモリの容量を超えない場合、前記第１のプロセッシング・ユニットの稼働率を取得し、この稼働率が閾値に達していない場合に、前記主体として選択された前記第１のプロセッシング・ユニットと前記第２のプロセッシング・ユニットに前記第１の領域および前記第２の領域それぞれの画像に対する処理を分担して実行させる
情報処理装置。
【請求項６】
請求項５に記載の情報処理装置であって、
前記制御手段は、前記画像の一部に対して処理を行う場合、前記第１のプロセッシング・ユニットにより前記画像の一部に対して処理を行う場合を想定した予測処理時間と前記第２のプロセッシング・ユニットにより前記画像の一部に対して処理を行う場合を想定した予測処理時間を算出し、当該予測処理時間が短い方のプロセッシング・ユニットを前記画像の一部に対する処理を実行する主体として選択する
情報処理装置。
【請求項７】
請求項６に記載の情報処理装置であって、
前記制御手段は、前記第２のプロセッシング・ユニットが前記主体として選択された場合、前記第２のプロセッシング・ユニットにより前記画像の一部に対して処理を行う場合を想定した前記第２のメモリの予測使用量を計算し、前記計算された前記第２のメモリの予測使用量が前記閾値に達していない場合、前記第２のプロセッシング・ユニットに前記画像の一部に対して処理を実行させる
情報処理装置。
【請求項８】
請求項７に記載の情報処理装置であって、
前記制御手段は、前記第１のプロセッシング・ユニットが前記主体として選択された場合、前記第１のプロセッシング・ユニットの稼働率を取得し、この稼働率が閾値に達していない場合に、前記第１のプロセッシング・ユニットに前記画像の一部に対して処理を実行させる
情報処理装置。
【請求項９】
請求項１ないし８に記載のいずれかの情報処理装置であって、
前記制御手段は、前記第１のプロセッシング・ユニットと、この第１のプロセッシング・ユニットを前記制御手段として機能させるプログラムにより構成される
情報処理装置。
【請求項１０】
画像の処理を実行可能な第１のプロセッシング・ユニットと、
前記画像の処理を当該画像を区分する単位毎に並列に実行可能な第２のプロセッシング・ユニットとを具備する情報処理装置の制御方法であって、
制御手段が、画像の処理を実行する主体として、前記第１のプロセッシング・ユニット、前記第２のプロセッシング・ユニット、およびその両方のいずれかを選択し、前記第１のプロセッシング・ユニットと前記第２のプロセッシング・ユニットの両方が選択された場合、前記画像を第１の領域と第２の領域とに分割し、分割された前記第１の領域および前記第２の領域それぞれの画像に対する処理を前記第１のプロセッシング・ユニットと前記第２のプロセッシング・ユニットに分担して実行させる
情報処理装置の制御方法。
【請求項１１】
画像の処理を実行可能な第１のプロセッシング・ユニットと、
前記画像の処理を当該画像を区分する単位毎に並列に実行可能な第２のプロセッシング・ユニットとを具備するコンピュータを動作させるプログラムであって、
前記画像の処理を実行する主体として、前記第１のプロセッシング・ユニット、前記第２のプロセッシング・ユニット、およびその両方のいずれかを選択し、前記第１のプロセッシング・ユニットと前記第２のプロセッシング・ユニットの両方が選択された場合、前記画像を第１の領域と第２の領域とに分割し、分割された前記第１の領域および前記第２の領域それぞれの画像に対する処理を前記第１のプロセッシング・ユニットと前記第２のプロセッシング・ユニットに分担して実行させるように制御を行う制御手段として
前記コンピュータを機能させるプログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、画像の処理に用いることができる情報処理装置、情報処理装置の制御方法、およびプログラムに関する。
【背景技術】
【０００２】
近年、汎用のコンピュータ・ハードウェアの高性能化・高機能化により、以前は専用のハードウエアでのみ実装可能であった画像処理が、汎用のコンピュータ・ハードウェアを利用して行うことが可能となってきた。コンピュータ・ハードウェアのうち、特にＣＰＵの高速化、メインメモリとして用いられるメモリの高速化は目覚しく、これらの成果は大容量の画像データに対して様々かつ複雑なエフェクト処理を実用的に満足のできる時間で処理することを可能とした。
【０００３】
画像処理のさらなる高速化は、並列演算処理に特化して設計された演算処理装置であるＧＰＵ（Ｇｒａｐｈｉｃｓ Ｐｒｏｃｅｓｓｉｎｇ Ｕｎｉｔ）の導入によって可能である。ＧＰＵによる並列演算処理は、特に画像処理のように一部の演算結果が全体に影響しない処理において、その高性能を発揮し得る。ＧＰＵによる並列演算処理は、複数の演算ユニットに同じ命令を発行することで、各演算ユニットがそれぞれ独立して同じ命令を実行するというメカニズムによって実現されるのに対し、ＣＰＵでは複数の演算ユニットにそれぞれ異なる命令が発行されることで、各演算ユニットがそれぞれ異なる命令を実行する。このためＣＰＵは逐次型処理に適したものと言える。
【０００４】
また最近では、ＧＰＵを、画像処理のみならず、他の数値演算にも利用できるようにしたＧＰＧＰＵ（Ｇｅｎｅｒａｌ−Ｐｕｒｐｏｓｅ ｃｏｍｐｕｔｉｎｇ ｏｎ Ｇｒａｐｈｉｃｓ Ｐｒｏｃｅｓｓｉｎｇ Ｕｎｉｔｓ）という技術分野が存在する。
【０００５】
特許文献１には、ＣＰＵとＧＰＵとでワークユニットを処理する際の負荷の分散について記載されている。具体的には、ＧＰＵが複数の光線と少なくとも一つのグラフィックオブジェクトを境界付ける表面のセットとの交差を並列に計算し、ＣＰＵが複数の光線のうち少なくとも幾つかとグラフィカルオブジェクトとの交差を計算するとされている。しかし、特許文献１には、画像の処理をＣＰＵとＧＰＵで分散して実行する点、ＣＰＵおよびＧＰＵの負荷状況を考慮して最適な画像処理の主体を選択する点などについて記載されていない。
【先行技術文献】
【特許文献】
【０００６】
【特許文献１】特表２００８−５１３８９０号公報（段落[００２７]）
【発明の概要】
【発明が解決しようとする課題】
【０００７】
上記のように、近年、ＣＰＵは、その高速化によって画像処理に対しても実用上十分なレスポンスを持つものとなってきた。このことは、これまでＧＰＵのみに依存してきた画像の処理を、ＣＰＵとＧＰＵで分担して行うことによって、ＧＰＵ単体で行う場合よりも結果的に高速に行うことができる可能性が増大したと言うことができる。また、仮に画像の処理をＣＰＵとＧＰＵで分担して行うことがスペック的に最速であったとしても、ＣＰＵ、ＧＰＵの負荷状態やそれぞれのメモリの使用状態によってはＧＰＵ単独で行う方が高速である場合もあるなど、画像の処理をＣＰＵとＧＰＵで分担して行うことが速度上必ずしも最適とはいえない。
【０００８】
以上のような事情に鑑み、本発明の目的は、ＣＰＵおよびＧＰＵをフレキシブルに用いて、画像の処理を効率的に行うことのできる情報処理装置、情報処理装置の制御方法、およびプログラムを提供することにある。
【課題を解決するための手段】
【０００９】
上記目的を達成するため、本発明の一形態に係る情報処理装置は、画像の処理を実行可能な第１のプロセッサユニットと、前記画像の処理を当該画像を区分する単位毎に並列に実行可能な第２のプロセッサユニットと、前記画像の処理を実行する主体を、前記第１のプロセッシング・ユニット、前記第２のプロセッシング・ユニット、およびその両方のいずれかを選択し、前記第１のプロセッシング・ユニットと前記第２のプロセッシング・ユニットの両方が選択された場合、前記画像を第１の領域と第２の領域とに分割し、分割された前記第１の領域および前記第２の領域それぞれの画像に対する処理を前記第１のプロセッシング・ユニットと前記第２のプロセッシング・ユニットに分担して実行させるように制御を行う制御手段とを具備する。
【００１０】
本発明では、第１のプロセッシング・ユニット、第２のプロセッシング・ユニット、およびその両方の中から画像の処理を実行する主体が適宜選択されることで、各プロセッシング・ユニットの負荷状況や画像の処理の条件などに合わせて、画像の処理を効率的に行うことができる。
【００１１】
制御手段は、画像の全体に対する処理を行う場合に、画像の処理を実行する主体として第１のプロセッシング・ユニットと第２のプロセッシング・ユニットの両方を選択する。画像処理の負荷は処理する画素数つまり画像の面積に対して比例する。したがって、画像の全体に対する処理を行う場合には、第１のプロセッシング・ユニットと第２のプロセッシング・ユニットの両方を用いることで、画像の処理を高速化できる。
【００１２】
制御手段は、第１のプロセッシング・ユニットによる第１の領域に対する第１の処理時間と第２のプロセッシング・ユニットによる第２の領域に対する第２の処理時間とが等しくもしくは略等しくなるように、第１の領域および第２の領域それぞれの面積を決定する。これにより、それぞれの領域に対する処理は同じもしくは略同じタイミングで終了し、結果的に最速の時間で画像処理を完了させることができる。
【００１３】
また、本発明の情報処理装置は、前記第１のプログラムユニットによる前記画像の処理で用いられる第１のメモリと、前記第２のプログラムユニットによる前記画像の処理で用いられる第２のメモリとをさらに具備し、前記制御手段は、前記第１の領域および前記第２の領域それぞれの画像の対する処理を前記第１のプロセッシング・ユニットと前記第２のプロセッシング・ユニットに分担して実行させる場合を想定した前記第２のメモリの予測使用量を計算し、前記計算された前記第２のメモリの予測使用量が閾値に達した場合、前記予測使用量が当該第２のメモリにおいて前記第２のプロセッシング・ユニットにより使用可能な容量内に収まるように、前記決定された前記第１の領域および前記第２の領域それぞれの面積を修正するようにしてもよい。これにより、第２のプログラムユニットによる画像の処理で用いられる第２のメモリの使用状態を考慮しつつ、画像に対する処理を各プロセッシング・ユニットに分担して良好に実行させることができる。
【００１４】
前記制御手段は、前記第２のメモリの予測使用量が当該第２のメモリの容量を超えない場合、前記第１のプロセッシング・ユニットの稼働率を取得し、この稼働率が閾値に達していない場合に、前記主体として選択された前記第１のプロセッシング・ユニットと前記第２のプロセッシング・ユニットに前記第１の領域および前記第２の領域それぞれの画像に対する処理を分担して実行させるようにしてもよい。これにより、第１のプロセッシング・ユニットの稼働率を考慮しつつ、画像に対する処理を各プロセッシング・ユニットに分担して良好に実行させることができる。
【００１５】
前記制御手段は、前記画像の一部に対して処理を行う場合、前記第１のプロセッシング・ユニットにより前記画像の一部に対して処理を行う場合を想定した予測処理時間と前記第２のプロセッシング・ユニットにより前記画像の一部に対して処理を行う場合を想定した予測処理時間を算出し、当該予測処理時間が短い方のプロセッシング・ユニットを前記画像の一部に対する処理を実行する主体として選択するようにしてもよい。
【００１６】
制御手段は、前記第２のプロセッシング・ユニットが前記主体として選択された場合、前記第２のプロセッシング・ユニットにより前記画像の一部に対して処理を行う場合を想定した前記第２のメモリの予測使用量を計算し、前記計算された前記第２のメモリの予測使用量が前記閾値に達していない場合、前記第２のプロセッシング・ユニットに前記画像の一部に対して処理を実行させるようにしてもよい。これにより、第２のプログラムユニットによる画像の処理で用いられる第２のメモリの使用状態を考慮しつつ、画像の一部に対する処理を第２のプロセッシング・ユニットに実行させることができる。
【００１７】
さらに制御手段は、前記第１のプロセッシング・ユニットが前記主体として選択された場合、前記第１のプロセッシング・ユニットの稼働率を取得し、この稼働率が閾値に達していない場合に、前記第１のプロセッシング・ユニットに前記画像の一部に対して処理を実行させるようにしてもよい。これにより、第１のプログラムユニットの稼働率を考慮しつつ、画像の一部に対する処理を第１のプロセッシング・ユニットに実行させることができる。
【００１８】
本発明の他の形態に係る情報処理装置の制御方法は、画像の処理を実行可能な第１のプロセッシング・ユニットと、前記画像の処理を当該画像を区分する単位毎に並列に実行可能な第２のプロセッシング・ユニットとを具備する情報処理装置の制御方法であって、制御手段が、画像の処理を実行する主体を前記第１のプロセッシング・ユニット、前記第２のプロセッシング・ユニット、およびその両方のいずれかを選択し、前記第１のプロセッシング・ユニットと前記第２のプロセッシング・ユニットの両方が選択された場合、前記画像を第１の領域と第２の領域とに分割し、分割された前記第１の領域および前記第２の領域それぞれの画像に対する処理を前記第１のプロセッシング・ユニットと前記第２のプロセッシング・ユニットに分担して実行させるというものである。
【００１９】
本発明の他の形態に係るプログラムは、画像の処理を実行可能な第１のプロセッシング・ユニットと、前記画像の処理を当該画像を区分する単位毎に並列に実行可能な第２のプロセッシング・ユニットとを具備するコンピュータを動作させるプログラムであって、前記画像の処理を実行する主体を、前記第１のプロセッシング・ユニット、前記第２のプロセッシング・ユニット、およびその両方のいずれかを選択し、前記第１のプロセッシング・ユニットと前記第２のプロセッシング・ユニットの両方が選択された場合、前記画像を第１の領域と第２の領域とに分割し、分割された前記第１の領域および前記第２の領域それぞれの画像に対する処理を前記第１のプロセッシング・ユニットと前記第２のプロセッシング・ユニットに分担して実行させるように制御を行う制御手段として前記コンピュータを機能させるものである。
【発明の効果】
【００２０】
以上のように、本発明によれば、ＣＰＵおよびＧＰＵをフレキシブルに用いて、画像の処理を効率的に行うことができる。
【図面の簡単な説明】
【００２１】
【図１】本発明の一実施形態に係る情報処理装置の構成を示す図である。
【図２】図１の情報処理装置における画像処理プログラムの実行形態を示す図である。
【図３】エフェクトプログラムセットの構成を示す図である。
【図４】ＧＰＵプログラムの挙動の一例を示す図である。
【図５】ＣＰＵ／ＧＰＵ制御プログラムによる画像の領域の分割について説明する図である。
【図６】ＣＰＵ／ＧＰＵ制御プログラムの制御を説明する図である。
【図７】エフェクトプログラム選択起動部の構成を示すブロック図である。
【図８】エフェクトプログラム選択起動部の動作の手順を示すフローチャートである。
【図９】本発明の第２の実施形態に係るエフェクトプログラム選択起動部の構成を示すブロック図である。
【図１０】図９のエフェクトプログラム選択起動部の動作の手順を示すフローチャートである。
【発明を実施するための形態】
【００２２】
以下、図面を参照しながら、本発明の実施形態を説明する。
＜第１の実施形態＞
［情報処理装置］
本実施形態は、ＣＰＵ（Ｃｅｎｔｒａｌ Ｐｒｏｃｅｓｓｉｎｇ Ｕｎｉｔ）とＧＰＵ（Ｇｒａｐｈｉｃｓ Ｐｒｏｃｅｓｓｉｎｇ Ｕｎｉｔ）を搭載したコンピュータ上で、画像処理プログラムを実行させることにより、画像データに対して例えばエフェクト処理などの画像処理を行うことのできる情報処理装置に関するものである。
【００２３】
図１は、本発明の一実施形態に係る情報処理装置の構成を示す図である。
同図に示すように、この情報処理装置１０は、ＣＰＵ部１１、ＧＰＵ部１２、記憶装置１３、表示インターフェース部１４、操作インターフェース部１５、これらを相互に接続するバス１７を備える。
【００２４】
ＣＰＵ部１１は、ＣＰＵ１１１（第１のプロセッシング・ユニット）とメモリ（以下「ＣＰＵメモリ１１２」と記述する。）（第１のメモリ）を有し、ＣＰＵメモリ１１２に格納されたＣＰＵ用の画像処理プログラムを実行させることによってＣＰＵメモリ１１２上で各種の演算処理に関する命令を実行する。ＣＰＵ部１１は、操作インターフェース部１５に接続された操作入力装置１８を通じてユーザより入力された指令を解釈して画像処理プログラムの動作に反映させる。また、ＣＰＵ部１１は、ユーザからの指令などをもとに記憶装置１３から画像データを読み出し、ＣＰＵメモリ１１２に設けられた画像バッファに画像データを取り込み、この画像データに対するエフェクト等の処理を行うことができる。画像バッファの画像データは表示インターフェース部１４に供給され、ここで描画処理によって可視的な画素単位のデータとされて表示装置１９に出力される。さらにＣＰＵ部１１は、画像バッファの編集後の画像データをユーザからの指令などをもと記憶装置１３に書き込むように制御を行うことができる。
【００２５】
ＧＰＵ部１２は、ＧＰＵ１２１（第２のプロセッシング・ユニット）とメモリ（以下「ＧＰＵメモリ１２２」と記述する。）（第２のメモリ）とを有し、ＧＰＵメモリ１２２に格納されたＧＰＵ用の画像処理プログラムを実行させることによってＧＰＵメモリ１２２上で画像処理を並列に実行することが可能である。ＧＰＵ部１２は、ＣＰＵ部１１による制御によって記憶装置１３から読み出された画像データをＧＰＵメモリ１２２に設けられた画像バッファに取り込み、この画像データに対するエフェクト等の処理を、画像を区分するスレッド等の単位毎に並列に実行することができる。画像バッファの画像データは表示インターフェース部１４に供給され、ここで描画処理によって可視的な画素単位のデータとされて表示装置１９に出力される。さらにＧＰＵ部１２は、画像バッファの例えば編集された画像データをＣＰＵ部１１からの指令などをもと記憶装置１３に書き込むように制御を行うことができる。
【００２６】
表示インターフェース部１４は、表示装置１９とのインターフェースであり、ＣＰＵ部１１および／またはＧＰＵ部１２より画像データを受け取って描画処理を行い、描画データを表示装置１９に供給する。この表示インターフェース部１４の処理は、表示インターフェース部１４内の設けられた図示しない専用のＧＰＵによって行われてもよいし、例えば、上記のＧＰＵ１２１によって行われるようにしてもよい。
【００２７】
操作インターフェース部１５は、操作入力装置１８とのインターフェースであり、操作入力装置１８から入力されたユーザからのデータおよび指令をＣＰＵ１１１に供給する処理などを行う。
【００２８】
記憶装置１３は、編集前および編集後の画像データを保存する。また、記憶装置１３には画像処理プログラムも格納されている。記憶装置１３に格納された画像処理プログラムはＣＰＵ１１１用のプログラムとＧＰＵ１２１用のプログラムを含むものである。ＣＰＵ１１１用のプログラムは、記憶装置１３からＣＰＵ部１１のＣＰＵメモリ１１２にロードされてＣＰＵ１１１により実行される。また、ＧＰＵ１２１用のプログラムは記憶装置１３からＧＰＵ部１２のＧＰＵメモリ１２２にロードされてＧＰＵ１２１により実行される。
【００２９】
［画像処理プログラムの構成と実行形態］
図２は、本実施形態の情報処理装置１０における画像処理プログラムの実行形態を示す図である。同図に示すように、画像処理プログラムの実行形態は、Ｉ／Ｏプログラム２１と、Ｉ／Ｏプログラム２１に接続された１以上のエフェクト・プラグイン・プログラム２２とからなる。ここで、１以上のエフェクト・プラグイン・プログラム２２はそれぞれユーザによって適宜選択されたエフェクトの種類に対応する。
【００３０】
Ｉ／Ｏプログラム２１は画像データの入出力制御を行うプログラムである。より詳細には、Ｉ／Ｏプログラム２１は、図1の記憶装置１３から画像データを読み出し、接続されたエフェクト・プラグイン・プログラム２２に転送する。Ｉ／Ｏプログラム２１は、エフェクト・プラグイン・プログラム２２よりエフェクト処理された画像データを受け取り、記憶装置１３に書き戻したり、表示インターフェース部１４を介して表示装置１９に出力したりする。
【００３１】
Ｉ／Ｏプログラム２１には、ユーザによってそれぞれ適宜選択された種類のエフェクトに対応する１以上のエフェクト・プラグイン・プログラム２２がシリアルに接続される。具体的には、最上流のエフェクト・プラグイン・プログラム２２はＩ／Ｏプログラム２１より画像データを受け取ってエフェクト処理を実行し、その結果を１つ下流側のエフェクト・プラグイン・プログラム２２に受け渡す。最上流および最下流以外のエフェクト・プラグイン・プログラム２２は、１つ上流側のエフェクト・プラグイン・プログラム２２より画像データを受け取ってエフェクト処理を実行し、その結果を１つ下流側のエフェクト・プラグイン・プログラム２２に受け渡す。最下流のエフェクト・プラグイン・プログラム２２は、１つ上流側のエフェクト・プラグイン・プログラム２２より画像データを受け取ってエフェクト処理を実行し、その結果をＩ／Ｏプログラム２１に受け渡す。このように本実施形態では、エフェクト・プラグイン・プログラム２２の間で直接、画像データを受け渡すこととしたが、Ｉ／Ｏプログラム２１を介して隣のエフェクト・プラグイン・プログラム２２との間で画像データを受け渡すようにしてもよい。
【００３２】
一方、記憶装置１３にはエフェクトの種類毎にエフェクトプログラムセット２４が格納されている。それぞれのエフェクトプログラムセット２４は、図３に示すように、画像データに対するエフェクト処理をＣＰＵ１１１に実行させるためのＣＰＵプログラム２４１、そのエフェクト処理をＧＰＵ１２１に実行させるためのＧＰＵプログラム２４２、そのエフェクト処理の実行をＣＰＵ１１１とＧＰＵ１２１とに分担して行う制御のためのＣＰＵ／ＧＰＵ制御プログラム２４３とで構成される。これらのＣＰＵプログラム２４１、ＧＰＵプログラム２４２、ＣＰＵ／ＧＰＵ制御プログラム２４３を特に区別しない場合には「エフェクトプログラム」と記述する。
【００３３】
ＣＰＵプログラム２４１は、画像データに対するエフェクト処理をＣＰＵ１１１に実行させるためのプログラムである。より詳細には、ＣＰＵプログラム２４１は、
（１）Ｉ／Ｏプログム２１または１つ上流側に接続されたエフェクト・プラグイン・プログラム２２からＣＰＵメモリ１１２上の画像バッファを受け取る。
（２）エフェクト処理をＣＰＵ１１１に実行させる。
（３）エフェクト処理の結果を画像バッファに書き出す。
（４）その画像バッファを１つ下流側に接続されたエフェクト・プラグイン・プログラム２２に渡すか、Ｉ／Ｏプログラム２１に戻す。
などの処理手順を含む。
【００３４】
ＧＰＵプログラム２４２は、画像データに対するエフェクト処理をＧＰＵ１２１に実行させるためのプログラムである。より詳細には、ＧＰＵプログラム２４２は、
（１）ＣＰＵメモリ１１２からＧＰＵメモリ１２２へ画像データを取り込むか、１つ上流側に接続されたエフェクト・プラグイン・プログラム２２からＧＰＵメモリ１２２上の画像バッファを受け取る。
（２）エフェクト処理をＧＰＵ１２１に実行させる。
（３）エフェクト処理の結果を画像バッファに書き出す。
（４）その画像バッファを１つ下流側に接続されたエフェクト・プラグイン・プログラム２２に渡すか、ＧＰＵメモリ１２２上の画像データをＣＰＵメモリ１１２に転送する。
などの処理手順を含む。
【００３５】
また、ＧＰＵプログラム２４２は、ＧＰＵ１２１のみでエフェクト処理を完結させるのではなく、図４に示すように、補助的に演算の一部をＣＰＵ１１１に依頼し、その演算結果をＣＰＵメモリ１１２からＧＰＵメモリ１２１に取り込むように作成される場合もある。その具体例として、デフォーカス等のフィルタ処理がある。ＧＰＵ１２１の高速性は、単純な積和演算を大量に行う処理で発揮され、条件分岐などの逐次型処理では活かされない。例えば、デフォーカス処理は、デフォーカス用のフィルタの生成とフィルタの画像への畳み込みの二段階の処理になる。デフォーカス用のフィルタの生成は、せいぜい数百タップ程度と積和演算の数は少ないが、虹彩の形状や、角度といったパラメータ依存の条件分岐が多い。このようなデフォーカス処理の場合、ＣＰＵ１１１でフィルタの生成を行い、フィルタを画像に畳み込む処理をＧＰＵ１２１で行うことによって、ＧＰＵ１２１の高速性が活かされ、処理効率を向上させることができる。一方、例えば、画素に均一に重みをかける移動平均型のフィルタ処理のように条件分岐のないフィルタ処理に関しては、フィルタの生成は不要であることから、ＧＰＵ１２１のみで処理が完結する。このように、ＧＰＵプログラム２４２は、ＧＰＵ１２１のみで処理が完結するものと、ＧＰＵ１２１に逐次型の演算の処理の一部を依頼するように作成されたものとがある。
【００３６】
ＣＰＵ／ＧＰＵ制御プログラム２４３は、ユーザによって選択されたエフェクト処理の実行をＣＰＵ１１１とＧＰＵ１２１とに分担させるエフェクトプログラムである。例えば、図５および図６に示すように、ＣＰＵ／ＧＰＵ制御プログラム２４３は、画像を２つの領域に分割し、分割された領域毎の演算をＣＰＵ１１１とＧＰＵ１２１とに分担させるように、ＣＰＵプログラム２４１とＧＰＵプログラム２４２にそれぞれの領域の情報を供給する。また、ＣＰＵ／ＧＰＵ制御プログラム２４３は、ＣＰＵ１１１とＧＰＵ１２１によるそれぞれの処理結果を同期させ結合して全画面の処理結果を形成する。
【００３７】
図２に戻って、エフェクトプログラム選択起動部２３（制御手段）は、ユーザにより選択された種類のエフェクトに対応するエフェクトプログラムセット２４の中から所定のアルゴリズムに従って少なくとも１つのエフェクトプログラムを呼び出し、Ｉ／Ｏプログラム２１に上記のエフェクト・プラグイン・プログラム２２として接続するようにＣＰＵ１１１を動作させるプログラムである。
【００３８】
すなわち、図２の画像処理プログラムの実行形態では、まず、ユーザによって選択された画像データがＩ／Ｏプログラム２１によって記憶装置１３から読み出される。次に、ユーザによって選択されたエフェクトに対応するエフェクトプログラムセット２４の中から、エフェクトプログラム選択起動部２３が所定のアルゴリズムに従って少なくとも１つのエフェクトプログラムを呼び出し、Ｉ／Ｏプログラム２１にエフェクト・プラグイン・プログラム２２として接続する。かくして、Ｉ／Ｏプログラム２１に接続された１以上のエフェクト・プラグイン・プログラム２２によって、画像データに対するエフェクト処理が実行される。エフェクト処理が施された画像データは、Ｉ／Ｏプログラム２１によって表示インターフェース部１４に出力され、表示装置１９に可視的な画像となって表示される。さらに、Ｉ／Ｏプログラム２１はユーザからの指令に応じて、エフェクト処理が施された画像データを記憶装置１３に書き戻す。
【００３９】
［エフェクトプログラム選択起動部２３］
次に、エフェクトプログラム選択起動部２３の詳細を説明する。
図７は、エフェクトプログラム選択起動部２３の構成を示すブロック図である。
同図に示すように、エフェクトプログラム選択起動部２３は、全画面処理判定部２３１、処理面積演算部２３２、ＣＰＵ処理時間予測部２３３、ＧＰＵ処理時間予測部２３４、ＣＰＵ処理時間保持部２３５、ＧＰＵ処理時間保持部２３６、処理面積割り当て算出部２３７、プログラム判定部２３８、負荷判定部２３９、負荷情報更新部２３９Ａ、プログラム読み出し部２３９Ｂを有する。
【００４０】
全画面処理判定部２３１は、ユーザによって選択されたエフェクトの種類や処理対象の領域を指定する情報の有無などから、そのエフェクトの処理が画像データの全画素に施される処理か一部に施される処理かを判定する。
【００４１】
処理面積演算部２３２は、エフェクトをかける処理領域の面積（＝処理画素数）を算出する。
【００４２】
ＣＰＵ処理時間保持部２３５は、複数の種類のエフェクトについて予め実験的に測定しておいた１画素あたりのＣＰＵ処理時間を保持する部分である。
【００４３】
ＧＰＵ処理時間保持部２３６は、複数の種類のエフェクトについて予め実験的に測定しておいた１画素あたりのＧＰＵ処理時間を保持する部分である。
【００４４】
ＣＰＵ処理時間予測部２３３は、画像データの一部に対してエフェクトの処理が施される場合に用いられる。ＣＰＵ処理時間予測部２３３は、ＣＰＵ処理時間保持部２３５に保持されているＣＰＵ処理時間を用いて、そのエフェクト処理をＣＰＵ１１１で行う場合に必要な時間を「ＣＰＵ予測処理時間」として算出する。
【００４５】
ＧＰＵ処理時間予測部２３４は、画像データの一部に対してエフェクトの処理が施される場合に用いられる。ＧＰＵ処理時間予測部２３４は、ＧＰＵ処理時間保持部２３６に保持されているＧＰＵ処理時間を用いて、そのエフェクト処理をＧＰＵ１２１で行う場合に必要な時間を「ＧＰＵ予測処理時間」として算出する。
【００４６】
プログラム判定部２３８は、ＣＰＵ処理時間予測部２３３により算出されたＣＰＵ予測処理時間とＧＰＵ処理時間予測部２３４により算出されたＧＰＵ予測処理時間とをもとに、エフェクトプログラムセット２４中のＣＰＵプログラム２４１およびＧＰＵプログラム２４２のうち一方をＩ／Ｏプログラム２１に接続する候補として判定する。また、プログラム判定部２３８は、全画面処理判定部２３１によって画像データの全画素に施されるエフェクト処理が判定された場合に、エフェクトプログラムセット２４内の各エフェクトプログラムをＩ／Ｏプログラム２１に接続する候補として判定する。
【００４７】
処理面積割り当て算出部２３７は、エフェクトプログラムセット２４がＩ／Ｏプログラム２１に接続される候補として判定された場合に用いられる。処理面積割り当て算出部２３７は、エフェクトプログラムセット２４の中のＣＰＵ／ＧＰＵ制御プログラム２４３により１つの画像データのエフェクト処理がＣＰＵ１１１とＧＰＵ１２１を使って分担して行われるときの、それぞれの処理面積の最適な割合を算出し、その情報をＣＰＵ／ＧＰＵ制御プログラム２４３に通知する。
【００４８】
負荷情報更新部２３９Ａは、Ｉ／Ｏプログラム２１へのエフェクトプログラムの接続状況をもとに、ＣＰＵ１１１およびＧＰＵ１２１の稼動率、ＧＰＵメモリ１２２の使用量を負荷情報として管理する。
【００４９】
負荷判定部２３９は、負荷情報更新部２３９Ａにて管理された負荷情報を用いて、エフェクトプログラムが接続された場合を仮定したＣＰＵ部１１およびＧＰＵ部１２それぞれの負荷情報を予測する。そして、負荷判定部２３９は、その予測結果をもとにプログラム判定部２３８による接続候補の選択結果に対して見直しを要求したり、その接続候補の選択結果をそのままプログラム読み出し部２３９に通知したりする。
【００５０】
プログラム読み出し部２３９は、負荷判定部２３９より供給された接続候補の情報をもとに、記憶装置１３から、ユーザにより選択されたエフェクトの種類の対応するエフェクトプログラムセット２４中の少なくとも一部のプログラムを読み出してＩ／Ｏプログラム２１にエフェクト・プラグイン・プログラム２２として接続する。
【００５１】
［エフェクトプログラム選択起動部２３の動作］
次に、エフェクトプログラム選択起動部２３の動作を説明する。
図８はエフェクトプログラム選択起動部２３の動作の手順を示すフローチャートである。
なお、動作の説明は、
１．接続候補としてのエフェクトプログラムを判定する動作
２．ＧＰＵプログラム２４２が接続候補として選択された場合の動作
３．ＣＰＵプログラム２４１が接続候補として判定された後の動作
４．エフェクトプログラムセット２４が接続候補として判定された場合の動作
の順で行う。
【００５２】
［１．接続候補としてのエフェクトプログラムを判定する動作］
まず、Ｉ／Ｏプログラム２１に接続される候補としてのエフェクトプログラムを判定する動作から説明する。
【００５３】
全画面処理判定部２３１によって、ユーザにより選択されたエフェクトが画像の全画素に施される処理であるか、画像の一部に対して行われる処理であるかどうかが判定される（ステップＳ１０１）。
【００５４】
ここで、当該エフェクトが画像の一部に対して行われる処理である場合に続く動作を説明する（ステップＳ１０１のＮ）。この場合、ＣＰＵ１１１とＧＰＵ１２１それぞれの処理時間の予測が次のように行われる。まず、処理面積演算部２３２が、処理面積（＝処理画素数）を算出する（ステップＳ１０２）。
【００５５】
次に、ＣＰＵ処理時間予測部２３３が、ＣＰＵ処理時間保持部２３５に保持されているＣＰＵ処理時間とステップＳ１０２で算出された処理画素数から下式（１）を用いて、当該エフェクトの処理をＣＰＵ１１１で行う場合に必要な時間を「ＣＰＵ予測処理時間」として算出する（ステップＳ１０３）。
ＣＰＵ予測処理時間＝（１画素あたりのＣＰＵ処理時間）×（処理画素数）    ・・・（１）
【００５６】
次に、ＧＰＵ処理時間予測部２３４が、ＧＰＵ処理時間保持部２３６に保持されているＧＰＵ処理時間とステップＳ１０２で算出された処理画素数から下式（２）を用いて、当該エフェクトの処理をＧＰＵ１２１で行う場合に必要な時間を「ＧＰＵ予測処理時間」として算出する（ステップＳ１０４）。
ＧＰＵ予測処理時間＝(ＣＰＵ−ＧＰＵ間の転送時間)＋(１画素あたりのＧＰＵ処理時間×処理画素数）    ・・・（２）
【００５７】
ＣＰＵ処理時間保持部２３５およびＧＰＵ処理時間保持部２３６にそれぞれ保持されている１画素あたりの処理時間は、全ての種類のエフェクトに対して予め実験的に測定して保存しておいた情報である。また、１画素あたりの処理時間は、１画素あたりの処理を、演算命令（加算・減算・乗算・除算の四則演算、ロード・ストア、条件分岐命令、シフト演算・論理演算）に分解し、その命令数とＣＰＵ１１１およびＧＰＵ１２１の動作周波数から概算によって算出することも可能である。また、式（２）における「ＣＰＵ−ＧＰＵ間の転送時間」についても、扱う全画像のサイズ、フォーマットごとの「ＣＰＵ−ＧＰＵ間の転送時間」を予め測定して保存しておいた結果を、ＧＰＵ予測処理時間の計算時に用いればよい。また、「ＣＰＵ−ＧＰＵ間の転送時間」は、ＣＰＵ−ＧＰＵ間のバス１７の帯域と画像のデータ量から算出することも可能である。
【００５８】
なお、実際の画像処理演算では、厳密には「１画素あたりの演算時間×処理画素数」に加えて「画素のインクリメントにかかる演算時間」や「処理する画素とそうでない画素を判定する条件分岐の演算時間」等が存在する。しかし、演算時間に占める割合としては、上記により計算されるＣＰＵ予測処理時間およびＧＰＵ予測処理時間が支配的であることから、これらのＣＰＵ予測処理時間およびＧＰＵ予測処理時間で近似することが可能である。
【００５９】
次に、プログラム判定部２３８が、ＣＰＵ予測処理時間とＧＰＵ予測処理時間をもとに、ＣＰＵプログラム２４１とＧＰＵプログラム２４２のどちらを接続候補とするかを判定する。具体的には、プログラム判定部２３８は、予測処理時間が短い方のエフェクトプログラムを接続候補として判定する。例えば、ＧＰＵ予測処理時間がＣＰＵ予測処理時間より短い場合（ステップＳ１０５のＹ）、プログラム判定部２３８はＧＰＵプログラム２４２を接続候補として判定する（ステップＳ１０６）。逆に、ＧＰＵ予測処理時間がＣＰＵ予測処理時間以上である場合（ステップＳ１０５のＮ）、プログラム判定部２３８はＣＰＵプログラム２４１を接続候補として判定する（ステップＳ１１２）。
【００６０】
ところで、ＧＰＵ予測処理時間がＣＰＵ予測処理時間より短くなるケースとして、画像の大部分の領域に例えば数百タップの積和演算を均一にかけるエフェクト処理などを挙げることができる。これは、ＧＰＵ１２１が画素毎にスレッドを設定して並列に処理を行うことができることに拠る。逆に、画像のごく一部の領域にエフェクトをかける場合にはＧＰＵ１２１の特性が十分活かされない。さらに実際には、ＧＰＵ１２１の処理時間は、演算時間のみならず、ＣＰＵ−ＧＰＵ間の画像データの転送時間を伴う。このため、例えば、４０９６×２１６０（画素）などの比較的サイズの大きい画像中のごく一部に、例えば色変換のように演算量の小さい処理をＧＰＵ１２１により行う場合、全体の処理時間における画像データの転送時間の支配率が高くなり、ＣＰＵ１１１によりそのエフェクト処理を行った場合よりも時間がかかることがある。
【００６１】
動作の説明に戻る。ＣＰＵプログラム２４１とＧＰＵプログラム２４２との間で接続候補としてのエフェクトプログラムが判定される動作までを説明したが、この時点では、そのエフェクトプログラムが実際にＩ／Ｏプログラム２１にエフェクト・プラグイン・プログラム２２として接続されたわけではない。この後、接続候補として判定されたエフェクトプログラムがＩ／Ｏプログラム２１に接続された場合を想定したＣＰＵ部１１およびＧＰＵ部１２の負荷状況をもとに、そのエフェクトプログラムの接続の可否が負荷判定部２３９によって判定される。次に、この動作について説明する。
【００６２】
［２．ＧＰＵプログラム２４２が接続候補として選択された場合の動作］
まず、ステップＳ１０６において、接続候補としてＧＰＵプログラム２４２が選択された場合について説明する。
【００６３】
負荷判定部２３９は、そのＧＰＵプログラム２４２がＩ／Ｏプログラム２１に接続された場合を想定したＧＰＵメモリ１２２の予測使用量（以下「ＧＰＵメモリ予測使用量」と記述する。）を算出する。ＧＰＵメモリ予測使用量の算出は、例えは、次式（３）によって行われる（ステップＳ１０７）。
ＧＰＵメモリ予測使用量＝（既に接続されたエフェクトで使用される総メモリ量）+ (追加エフェクトで使用する画像メモリの個数）×（画像メモリサイズ）    ・・・（３）
【００６４】
負荷判定部２３９は、取得したＧＰＵメモリ予測使用量が予め決められた閾値に達しているかどうかを判定する（ステップＳ１０８）。ここで、ＧＰＵメモリ予測使用量の閾値とは、ＧＰＵメモリ１２２の枯渇状態を判定するために予め決められた値である。
【００６５】
ＧＰＵメモリ予測使用量が予め決められた閾値に達していない場合（ステップＳ１０８のＹ）、負荷判定部２３９は、プログラム判定部２３８によって接続候補として判定されたＧＰＵプログラム２４２の読み出しをプログラム読み出し部２３９に依頼する。プログラム読み出し部２３９は、この依頼を受けると、負荷情報更新部２３９ＡにＧＰＵプログラム２４２の追加に伴う負荷情報の更新を依頼する。負荷情報更新部２３９Ａは、この依頼に応じて、ＧＰＵメモリ１２２の負荷情報（使用量）を更新する（ステップＳ１０９）。この後、プログラム読み出し部２３９は、プログラム判定部２３８により接続候補として判定されたＧＰＵプログラム２４２を記憶装置１３から読み出し、Ｉ／Ｏプログラム２１にエフェクト・プラグイン・プログラム２２として接続する（ステップＳ１１０）。
【００６６】
また、ステップＳ１０８の判定において、ＧＰＵメモリ予測使用量が予め決められた閾値に達している場合（ステップＳ１０８のＮ）、負荷判定部２３９は、接続候補としてのエフェクトプログラムを、ＧＰＵプログラム２４２からＣＰＵプログラム２４１に切り替える（ステップＳ１１１のＮの場合）。この後に続く動作として、ＣＰＵプログラム２４１に接続候補を切り替えた場合を想定したＣＰＵ１１１の稼働率を考慮した当該ＣＰＵプログラム２４１の接続の可否の判定が負荷判定部２３９によって行われる。なお、この動作の詳細は、ステップＳ１１２にて、接続候補としてＣＰＵプログラム２４１が選択された場合の後に続く動作と同じであるので、後でその説明を行うこととする。また、ＧＰＵメモリ予測使用量が予め決められた閾値以上である場合で（ステップＳ１０８のＮ）、なおかつＣＰＵプログラム２４１の接続が不可と判定された経緯がある場合には（ステップＳ１１１のＹ）、負荷判定部２３９は、接続候補としてのエフェクトプログラムを、ＧＰＵプログラム２４２からエフェクトプログラムセット２４に切り替える。この後に続く動作は、後述するステップＳ１１６において、接続候補としてエフェクトプログラムセット２４が選択された場合の後に続く動作と同じであるので、後でその説明を行うこととする。
［３．ＣＰＵプログラム２４１が接続候補として判定された場合の動作］
【００６７】
次に、ステップＳ１１２において、接続候補としてＣＰＵプログラム２４１が判定された後の動作を説明する。
【００６８】
負荷判定部２３９は、現在のＣＰＵ１１１の稼働率を取得する（ステップＳ１１３）。ＣＰＵ１１１の稼働率は、例えは、本情報処理装置に実装されたＯＳ（Ｏｐｅｒａｔｉｎｇ Ｓｙｓｔｅｍ）がもつＣＰＵ稼動率監視機能などから取得することが可能である。
【００６９】
負荷判定部２３９は、ＣＰＵ１１１の稼働率が予め決められた閾値に達しているかどうかを判定する（ステップＳ１１４）。ＣＰＵ稼働率の閾値は、情報処理装置の全体的な動作の効率、安定性などを考慮して設計的に決められた値である。ＣＰＵ１１１の稼働率が予め決められた閾値に達していない場合には（ステップＳ１１４のＹ）、負荷判定部２３９は、プログラム判定部２３８によって接続候補として判定されたＣＰＵプログラム２４１の読み出しをプログラム読み出し部２３９に依頼する。プログラム読み出し部２３９は、この依頼を受けると、プログラム判定部２３８により接続候補として判定されたＣＰＵプログラム２４１を記憶装置１３から読み出し、Ｉ／Ｏプログラム２１にエフェクト・プラグイン・プログラム２２として接続する（ステップＳ１１０）。
【００７０】
ＣＰＵ１１１の稼働率が予め決められた閾値に達している場合で（ステップＳ１１４のＮＯ）、なおかつＧＰＵプログラム２４２の接続が不可と判定された経緯がある場合には（ステップＳ１１５のＹ）、負荷判定部２３９は、エフェクトプログラムの追加が不可であるとして、エフェクト追加不可コードを図示しないグラフィカル・ユーザ・インターフェース部に通知する（ステップＳ１２４）。グラフィカル・ユーザ・インターフェース部は、表示装置１９（図１）の画面を通して、ユーザからの、処理対象である画像データの選択、画像データにかけるエフェクトの選択、各種パラメータの入力などを受け付けて、その応答をユーザに返す処理などを行うプログラムである。グラフィカル・ユーザ・インターフェース部は、負荷判定部２３９からのエフェクト追加不可コードを受け取ると、ユーザによって選択されたエフェクトを追加できない旨を表示装置１９（図１）の画面を通してユーザに通知する。また、この際、負荷判定部２３９からプログラム読み出し部２３９に、エフェクトプログラムの読み出しの依頼を出さないように振る舞うことで、Ｉ／Ｏプログラム２１にエフェクトプログラムが新たに接続されることなく、処理が終了する。
【００７１】
また、ステップＳ１１４の判定において、ＣＰＵ１１１の稼働率が予め決められた閾値に達している場合で（ステップＳ１１４のＮＯ）、なおかつＧＰＵプログラム２４２の接続が不可と判定された経緯がない場合は（ステップＳ１１５のＮ）、ステップＳ１０６に移行し、接続候補がＣＰＵプログラム２４１からＧＰＵプログラム２４２に切り替えられる。この後に続く動作は既に説明した通りである。
【００７２】
［４．エフェクトプログラムセット２４が接続候補として判定された場合の動作］
次に、ステップＳ１０１において、全画面処理判定部２３１によってエフェクトの処理が画像の全画素に施される処理であることが判定された場合について説明する（ステップＳ１０１のＹ）。この場合、全画面処理判定部２３１は、プログラム判定部２３８に対し、ユーザにより選択されたエフェクトに対応するエフェクトプログラムセット２４（ＣＰＵプログラム２４１、ＧＰＵプログラム２４２、ＣＰＵ／ＧＰＵ制御プログラム２４３）を接続候補として判定するように指示する（ステップＳ１１６）。
【００７３】
次に、全画面処理判定部２３１は処理面積割り当て算出部２３７を起動する。処理面積割り当て算出部２３７は、ＣＰＵ１１１とＧＰＵ１２１とで当該エフェクトの処理を分担して行うためのＣＰＵ１１１およびＧＰＵ１２１それぞれの処理面積の割り当てを行う（ステップＳ１１７）。これらの処理面積の割り当ては、具体的には、次のようにして行われる。以後の説明において、ＣＰＵ１１１に割り当てられる処理面積を「ＣＰＵ処理面積」、ＧＰＵ１２１に割り当てられる処理面積を「ＧＰＵ処理面積」と記述する。
【００７４】
処理面積割り当て算出部２３７は、ＣＰＵ処理時間予測部２３３とＧＰＵ処理時間予測部２３４に対し、ＣＰＵ予測処理時間とＧＰＵ予測処理時間の算出をそれぞれ依頼する。ＣＰＵ処理時間予測部２３３は、この依頼に従って、ＣＰＵ処理時間保持部２３５に保持されているＣＰＵ処理時間と画像の全画素数から式（１）を用いてＣＰＵ予測処理時間を算出する。同様にＣＰＵ処理時間予測部２３３は、ＧＰＵ処理時間保持部２３６に保持されているＧＰＵ処理時間と画像の全画素数から式（２）を用いてＧＰＵ予測処理時間を算出する。
【００７５】
処理面積割り当て算出部２３７は、ＣＰＵ処理時間予測部２３３とＧＰＵ処理時間予測部２３４によってそれぞれ算出されたＣＰＵ予測処理時間とＧＰＵ予測処理時間とがほぼ等しくなる割合を求める。処理面積割り当て算出部２３７は、求めた割合で全処理面積（全画素数）をＣＰＵ処理面積とＧＰＵ処理面積とに分配し、それぞれの処理面積の情報を処理面積割当情報として保持する（ステップＳ１１７）。処理面積割り当て算出部２３７に保持された処理面積割当情報は、後でプログラム読み出し部２３９Ｂによって記憶装置１３から読み出されてＩ／Ｏプログラム２１に接続されたＣＰＵ／ＧＰＵ制御プログラム２４３に通知されることとなる。
【００７６】
処理面積割り当て算出部２３７にＣＰＵ処理面積およびＧＰＵ処理面積の割当情報が保持された後、接続候補として判定されたエフェクトプログラムセット２４が接続された場合を想定したＣＰＵ１１１の稼動率をもとに、そのエフェクトプログラムセット２４の接続の可否が負荷判定部２３９によって判定される。次に、この動作について説明する。
【００７７】
負荷判定部２３９は、当該エフェクトプログラムセット２４中のＧＰＵプログラム２４２がＩ／Ｏプログラム２１に接続された場合を想定したＧＰＵメモリ予測使用量を算出する。ＧＰＵメモリ予測使用量の算出は次式（４）によって行われる（ステップＳ１１８）。
【００７８】
ＧＰＵメモリ予測使用量＝（既に接続されたエフェクトで使用される総メモリ量）＋（追加エフェクトで使用される画像メモリの個数）×（画像メモリサイズ）×（ＧＰＵ処理面積）／（全画面面積）    ・・・（４）
【００７９】
次に、負荷判定部２３９は、算出されたＧＰＵメモリ予測使用量が予め決められた閾値に達しているかどうかを判定する（ステップＳ１１９）。ＧＰＵメモリ予測使用量が予め決められた閾値に達していない場合（ステップＳ１１９のＹ）、負荷判定部２３９は、ステップＳ１１３と同様にＣＰＵ１１１の稼働率を取得する（ステップＳ１２０）。続いて負荷判定部２３９は、ステップＳ１１４と同様に、ＣＰＵ１１１の稼働率が予め決められた閾値に達しているかどうかを判定する（ステップＳ１２１）。
【００８０】
ＣＰＵ１１１の稼働率が予め決められた閾値に達していない場合には（ステップＳ１２１のＹ）、負荷判定部２３９は、当該エフェクトプログラムセット２４の接続が可能であることを判定して、当該エフェクトプログラムセット２４の読み出しをプログラム読み出し部２３９に依頼する。プログラム読み出し部２３９は、この依頼に従って、当該エフェクトプログラムセット２４を記憶装置１３から読み出し、Ｉ／Ｏプログラム２１にエフェクト・プラグイン・プログラム２２として接続する（ステップＳ１１０）。この後、Ｉ／Ｏプログラム２１に接続されたＣＰＵ／ＧＰＵ制御プログラム２４３に、処理面積割り当て算出部２３７に保持された割当情報が通知される。これにより、ユーザによって選択されたエフェクト処理がＣＰＵ１１１とＧＰＵ１２１とで分担して行われる環境が構築される。
【００８１】
次に、ステップＳ１１９において、ＧＰＵメモリ予測使用量が予め決められた閾値に達している場合を説明する（ステップＳ１１９のＮ）。この場合、ステップＳ１１７に戻り、処理面積割り当て算出部２３７によってＣＰＵ処理面積およびＧＰＵ処理面積の割り当ての修正が行われる（ステップＳ１１７）。この割り当ての修正は次のように行われる。
【００８２】
まず、処理面積割り当て算出部２３７は、ＧＰＵ処理面積の修正値を次式（５）により計算する。
ＧＰＵ処理面積の修正値＝（（ＧＰＵで使用できる総メモリ量）−（既に接続されたエフェクトで使用される総メモリ量））／（１画素あたりのメモリ使用量）    ・・・（５）
そして処理面積割り当て算出部２３７は、全画面面積からＧＰＵ処理面積の修正値を減算した結果をＣＰＵ処理面積の修正値とする。
【００８３】
この後、負荷判定部２３９は、ＧＰＵ処理面積の修正値と上記の式（４）を用いて、当該エフェクトプログラムセット２４に含まれるＧＰＵプログラム２４２がＩ／Ｏプログラム２１に接続された場合を想定したＧＰＵメモリ予測使用量を算出する（ステップＳ１１８）。負荷判定部２３９は、この結果求められたＧＰＵメモリ予測使用量が予め決められた閾値に達しているかどうかを判定する（ステップＳ１１９）。ＧＰＵメモリ予測使用量が閾値に達している場合で（ステップＳ１１９のＮ）、なおかつＣＰＵ処理面積およびＧＰＵ処理面積の割り当てが修正された経緯がある場合は（ステップＳ１２２のＹＥＳ）、負荷判定部２３９はエフェクトプログラムの接続が不可であるとしてエフェクト追加不可コードを図示しないグラフィカル・ユーザ・インターフェース部に通知する（ステップＳ１２４）。この後に続く動作は前述と同じである。
【００８４】
以上のように、本実施形態では、エフェクトを画像の全画素に対してかける場合つまり最も負荷の大きいエフェクト処理を行う場合には、ＣＰＵプログラム２４１、ＧＰＵプログラム２４２、ＣＰＵ／ＧＰＵ制御プログラム２４３で構成されるエフェクトプログラムセット２４がＩ／Ｏプログラム２１に接続される。これにより画像全体に対するエフェクト処理がＣＰＵ１１１とＧＰＵ１２１とで分担して行われる。したがって、画像の全画素に対するエフェクト処理の速度向上を期待できる。
【００８５】
また、本実施形態では、プログラム判定部２３８が、エフェクトを画像の一部の領域に対してかける場合には、ＣＰＵプログラム２４１とＧＰＵプログラム２４２とで予測処理時間が短い方のエフェクトプログラムを接続候補として選択することで、エフェクト処理の高速化を図ることができる。
【００８６】
さらに、本実施形態では、ＧＰＵプログラム２４２が接続候補として選択された場合、負荷判定部２３９が、ＧＰＵプログラム２４２が接続された場合を想定したＧＰＵメモリ予測使用量を算出し、これが予め決められた閾値に達しているかどうかを判定する。達していなければＧＰＵプログラム２４２がそのままＩ／Ｏプログラム２１にエフェクト・プラグイン・プログラム２２として接続される。また、閾値に達している場合には、接続候補がＣＰＵプログラム２４１に切り替えられる。そして、負荷判定部２３９はＣＰＵ稼働率が予め決められた閾値に達しているかどうかを判定し、閾値に達していなければ、ＣＰＵプログラム２４１をＩ／Ｏプログラム２１にエフェクト・プラグイン・プログラム２２として接続する。このようにすることで、ＧＰＵメモリの枯渇時にあってもエフェクト処理の実行を高い確率で保証することができる。
【００８７】
さらに、本実施形態では、ＣＰＵプログラム２４１が接続候補として判定された場合、負荷判定部２３９が、ＣＰＵプログラム２４１が接続された場合を想定したＣＰＵ稼働率を算出し、これが予め決められた閾値に達しているかどうかを判定する。達していなければＣＰＵプログラム２４１がそのままＩ／Ｏプログラム２１にエフェクト・プラグイン・プログラム２２として接続される。また、閾値に達している場合には、接続候補がＧＰＵプログラム２４２に切り替えられる。そして、負荷判定部２３９はＧＰＵメモリ予測使用量が予め決められた閾値に達しているかどうかを判定し、閾値に達していなければ、ＧＰＵプログラム２４２をＩ／Ｏプログラム２１にエフェクト・プラグイン・プログラム２２として接続する。このようにすることで、ＣＰＵ稼働率に余裕がない時にあってもエフェクト処理の実行を高い確率で保証することができる。
【００８８】
また、本実施形態では、エフェクトプログラムセット２４が接続候補として判定された場合、ＣＰＵ予測処理時間とＧＰＵ予測処理時間とがほぼ等しくなる割合で全処理面積（全画素数）をＣＰＵ処理面積とＧＰＵ処理面積とに分配する。これにより、ＣＰＵ１１１とＧＰＵ１２１それぞれのもつ能力の範囲でエフェクト処理をほぼ最速に行うことができる。
【００８９】
さらに、本実施形態では、接続候補として判定されたエフェクトプログラムセット２４が接続された場合を想定したＧＰＵメモリ予測使用量が閾値に達している場合に、処理面積割り当て算出部２３７が、ＣＰＵ処理面積およびＧＰＵ処理面積の割り当てをＧＰＵメモリの空き容量を考慮した値に修正する。これにより、ＧＰＵメモリ１２２の空き容量に余裕が無くなってきた状況にあっても、ＣＰＵ１１１とＧＰＵ１２１とでのエフェクト処理の分担をして高速に行うことができる。
【００９０】
＜第２の実施形態＞
上記の第１の実施形態では、ＣＰＵ処理時間保持部２３５に保持されているＣＰＵ処理時間と処理画素数からＣＰＵ予測処理時間を求めるとともに、ＧＰＵ処理時間保持部２３６に保持されているＧＰＵ処理時間と処理画素数からＧＰＵ予測処理時間を求め、予測処理時間が短い方のエフェクトプログラムを接続候補として判定することとした。
第２の実施形態では、ＣＰＵプログラム２４１およびＧＰＵプログラム２４２によるそれぞれのエフェクト処理時間の計測結果から、より高速な方のエフェクトプログラムが接続候補として判定される。
【００９１】
図９は第２の実施形態のエフェクトプログラム選択起動部２３ａの構成を示すブロック図である。図１０はエフェクトプログラム選択起動部２３ａの動作の手順を示すフローチャートである。
【００９２】
このエフェクトプログラム選択起動部２３ａにおいて、ＣＰＵ処理時間予測部２３３ａは、画像データの一部に対してエフェクトの処理が施される場合に、記憶装置１３からＣＰＵプログラム２４１を読み出し、ＣＰＵプログラム２４１の処理時間を実際に計測する。一方、ＧＰＵ処理時間予測部２３４ａは、画像データの一部に対してエフェクトの処理が施される場合に、記憶装置１３からＧＰＵプログラム２４２を読み出し、ＧＰＵプログラム２４２の処理時間を計測する。ここで、ＣＰＵ処理時間予測部２３３ａおよびＧＰＵ処理時間予測部２３４ａは、Ｉ／Ｏプログラム２１から与えられる実際の画像データに対してエフェクト処理を行うことによって処理時間を計測してもよいが、必ずしも実際の画像データを用いる必要はない。すなわち、処理時間の計算に際して、ＣＰＵメモリ１１２、ＧＰＵメモリ１２２に格納されているデータは問わない。
【００９３】
プログラム判定部２３８は、このようにして計測されたＣＰＵプログラム２４１とＧＰＵプログラム２４２とで処理時間が短い方のエフェクトプログラムを接続候補として判定する。その他の構成および動作は第１の実施形態と同じである。このような構成を採用することによっても、第１の実施形態と同様の効果を得ることができる。
【００９４】
なお、本発明は以上説明した実施の形態には限定されるものではなく、本発明の技術思想の範囲内で種々の変形が可能である。
【符号の説明】
【００９５】
１０…情報処理装置
１３…記憶装置
２１…Ｉ／Ｏプログラム
２２…エフェクト・プラグイン・プログラム
２３…エフェクトプログラム選択起動部
２４…エフェクトプログラムセット
１１１…ＣＰＵ
１１２…ＣＰＵメモリ
１２１…ＧＰＵ
１２２…ＧＰＵメモリ
２３１…全画面処理判定部
２３２…処理面積演算部
２３３…ＣＰＵ処理時間予測部
２３４…ＧＰＵ処理時間予測部
２３５…ＣＰＵ処理時間保持部
２３６…ＧＰＵ処理時間保持部
２３７…処理面積割り当て算出部算出部
２３８…プログラム判定部
２３９…負荷判定部
２３９Ａ…負荷情報更新部
２３９Ｂ…プログラム読み出し部
２４１…ＣＰＵプログラム
２４２…ＧＰＵプログラム
２４３…ＧＰＵ制御プログラム
【図１】
2012003619.tif 000003
【図２】
2012003619.tif 000004
【図３】
2012003619.tif 000005
【図４】
2012003619.tif 000006
【図５】
2012003619.tif 000007
【図６】
2012003619.tif 000008
【図７】
2012003619.tif 000009
【図８】
2012003619.tif 000010
【図９】
2012003619.tif 000011
【図１０】
2012003619.tif 000012