(57)【特許請求の範囲】
【請求項１】
複数のカノニカルイメージングファンクションを生成するための装置であって、
カノニカルイメージングファンクションテンプレートを提供するためのロジックと、
１または複数のモノリシックイメージングファンクションからセットのカノニカルイメージングファンクションを形成するためのロジックであって、前記セットのカノニカルイメージングファンクションの各々は前記カノニカルイメージングファンクションテンプレートに従うロジックと、
前記セットのカノニカルイメージングファンクションの１または複数のカノニカルイメージングファンクションを融合イメージングファンクションに融合するためのロジックと
を備える装置。
【請求項２】
各カノニカルイメージングファンクションが、完全なファンクションの１または複数のセクションとして定義されており、前記完全なファンクションを作成すべく、各ファンクションセクションが結合される、請求項１に記載の装置。
【請求項３】
前記セットのカノニカルイメージングファンクションの各カノニカルイメージングファンクションが、セットの共有される固有のセクションとしてのグループに結合される、請求項２に記載の装置。
【請求項４】
セットのカノニカルイメージングファンクションを形成することは、前記カノニカルイメージングファンクションテンプレートを使用し、前記セットのカノニカルイメージングファンクションを共に単一の合成ファンクションに自動的にコンパイルするためのロジックを有する、請求項１から３のいずれか一項に記載の装置。
【請求項５】
前記装置は、複数の融合イメージングファンクションを新規コードに自動的にコンパイルまたは変換するためのロジックを有し、
前記新規コードは実行可能なものであるか、あるいは、別の高水準言語または中間言語にさらに変換またはコンパイル可能なものであるか、あるいは対象のマシンのマシンコードにアセンブル可能なものである、請求項１から４のいずれか一項に記載の装置。
【請求項６】
前記カノニカルイメージングファンクションテンプレートが、セットのカノニカルイメージングファンクションからのファンクションプリアンブルを含む開始ファンクションセクションと、セットのカノニカルイメージングファンクションからのデータ読み取り、計算、およびデータ書き込み操作の複数のセクションを含むべく構成された共通ループセクションと、セットのカノニカルイメージングファンクションからのファンクションポストアンブルを含む終了ファンクションセクションとを有する、請求項１から５のいずれか一項に記載の装置。
【請求項７】
さらに、前記カノニカルイメージングファンクションテンプレートが、パラメータチェッカセクション、メモリ割当セクション、ループ次元セクション、メモリ解放セクション、ステータスレポータセクション、セットのカノニカルファンクションで定義された他の複数のファンクションセクション、あるいはこれらの任意の組み合わせのうちの少なくとも１つを有する、請求項６に記載の装置。
【請求項８】
前記複数のカノニカルイメージングファンクションを融合することは、前記カノニカルイメージングファンクションテンプレートを使用し、前記セットのカノニカルイメージングファンクションの１または複数のカノニカルイメージングファンクションを結合することを有する、請求項１から７のいずれか一項に記載の装置。
【請求項９】
前記装置がプリントデバイスである、請求項１から８のいずれか一項に記載の装置。
【請求項１０】
前記装置がイメージキャプチャメカニズムである、請求項１から８のいずれか一項に記載の装置。
【請求項１１】
複数のカノニカルイメージングファンクションを生成するためのシステムであって、
複数のイメージングファンクションを含むコードを実行するプロセッサと、
１または複数のモノリシックイメージングファンクションから形成されるセットのカノニカルイメージングファンクションとを備え、
前記セットのカノニカルイメージングファンクションの各々はカノニカルイメージングファンクションテンプレートに従い、前記セットのカノニカルイメージングファンクションの１または複数のカノニカルイメージングファンクションが融合イメージングファンクションに融合される、システム。
【請求項１２】
各カノニカルイメージングファンクションが、完全なファンクションの１または複数のセクションとして定義されており、前記完全なファンクションを作成すべく、各ファンクションセクションが共に結合される、請求項１１に記載のシステム。
【請求項１３】
前記セットのカノニカルイメージングファンクションの各カノニカルイメージングファンクションが、セットの共有される固有のセクションとしてのグループに共に結合される、請求項１１に記載のシステム。
【請求項１４】
セットのカノニカルイメージングファンクションを形成することは、前記カノニカルイメージングファンクションテンプレートを使用し、前記セットのカノニカルイメージングファンクションを単一の合成ファンクションに自動的にコンパイルするためのロジックを有する、請求項１１から１３のいずれか一項に記載のシステム。
【請求項１５】
複数の融合イメージングファンクションが新規コードに自動的にコンパイルまたは変換され、
前記新規コードは実行可能なものであるか、あるいは、別の高水準言語または中間言語にさらに変換またはコンパイル可能なものであるか、あるいは対象のマシンのマシンコードにアセンブル可能なものである、請求項１１から１４のいずれか一項に記載のシステム。
【請求項１６】
前記カノニカルイメージングファンクションテンプレートが、セットのカノニカルイメージングファンクションからのファンクションプリアンブルを含む開始ファンクションセクションと、セットのカノニカルイメージングファンクションからのデータ読み取り、計算、およびデータ書き込み操作の複数のセクションを含むべく構成された共通ループセクションと、セットのカノニカルイメージングファンクションからのファンクションポストアンブルを含む終了ファンクションセクションとを有する、請求項１１から１５のいずれか一項に記載のシステム。
【請求項１７】
さらに、前記カノニカルイメージングファンクションテンプレートが、パラメータチェッカセクション、メモリ割当セクション、ループ次元セクション、メモリ解放セクション、ステータスレポータセクション、セットのカノニカルファンクションで定義された他の複数のファンクションセクション、あるいはこれらの任意の組み合わせのうちの少なくとも１つを有する、請求項１６に記載のシステム。
【請求項１８】
前記複数のカノニカルイメージングファンクションを融合することは、前記カノニカルイメージングファンクションテンプレートを使用し、前記セットのカノニカルイメージングファンクションの１または複数のカノニカルイメージングファンクションを結合することを有する、請求項１１から１７のいずれか一項に記載のシステム。
【請求項１９】
少なくとも１つのプログラムであって、前記少なくとも１つのプログラムはデバイス上での実行に応じ、前記デバイスに対し、
複数のモノリシックイメージングファンクションからセットのカノニカルイメージングファンクションを形成させる手順であって、前記セットのカノニカルイメージングファンクションの各々はカノニカルイメージングファンクションテンプレートに従う手順と、
前記セットのカノニカルイメージングファンクションの１または複数のカノニカルイメージングファンクションを融合イメージングファンクションに融合させる手順とを備えるプログラム。
【請求項２０】
さらに、デバイス上での実行時、前記デバイスに対し、前記複数のカノニカルイメージングファンクションのデータ読み取り、計算、およびデータ書き込みの複数の操作を前記融合イメージングファンクションの外側ループに配置させる手順を備える、請求項１９に記載のプログラム。
【請求項２１】
さらに、デバイス上での実行時、前記デバイスに対し、前記融合イメージングファンクションを実行させる手順を備える、請求項１９に記載のプログラム。
【請求項２２】
請求項１９から２１のいずれか１項に記載のプログラムを格納する機械可読記憶媒体。
【発明の詳細な説明】
【技術分野】
【０００１】
複数の本技術は、概してイメージ処理に関する。具体的には、複数の本技術は、複数のカノニカルイメージングファンクションを使用し、複数のイメージ処理パイプラインを最適化するための装置に関する。
【背景技術】
【０００２】
複数のイメージ処理パイプラインは通常、複数のイメージピクセルにわたる並列実行を利用する、多くのデータ並列段階で構成されるが、上記段階はしばしばメモリ帯域幅の制限を受け、すなわち、上記段階は複数のメモリアクセス（読み込みおよび格納）操作の見地からは非効率であり得る。特に、複数の冗長なメモリコピーを除去およびメモリトラフィックを低減させるべく、複数のパイプラインの複数の内側ループを最適化することで、パイプラインパフォーマンスにおける前進が一部実現されている。しかしながら、そのような複数の最適化は、処理されるべき特定の複数のイメージングアルゴリズムに加え、対象のコンピューティングまたは処理アーキテクチャに関する知識を持つプログラマのスキルを必要とする、複数の手動処理である。さらに、上記の最適化は概して、複数のコンピューティングアーキテクチャまたは処理アーキテクチャにわたり、移植できない。
【発明の概要】
【０００３】
添付の複数の図面を参照すると、以下の詳細な説明がより良く理解できる。図面には、本開示の発明主題に係る多くの目的および特徴に関する複数の具体例が含まれる。
【図面の簡単な説明】
【０００４】
【図１Ａ】複数の実施形態に係るモノリシックファンクションのブロック図である。
【図１Ｂ】複数の実施形態に係るカノニカルイメージングファンクションテンプレートまたはクラスのブロック図である。
【図２】複数の実施形態に係る融合カノニカルイメージングファンクションのブロック図である。
【図３】複数の実施形態に係る複数のカノニカルイメージングファンクションを融合する方法を示す処理フロー図である。
【図４】複数の実施形態で使用され得るコンピューティングデバイスのブロック図である。
【図５】複数の実施形態に係る、複数のカノニカルイメージングファンクションを融合する方法のための複数の命令を格納する有形の非一時的コンピュータ可読媒体のブロック図である。
【発明を実施するための形態】
【０００５】
上述したように、複数のイメージ処理パイプラインを手動で最適化することは、時間がかかり、そのような最適化は、複数のコンピューティングアーキテクチャまたは処理アーキテクチャにわたり移植できない。結果として、複数のイメージ処理パイプラインを最適化することにコスト制約がかかり得る。
【０００６】
複数の本技術の複数の実施形態は、カノニカルイメージングファンクションテンプレートまたはクラスを提供する。一連のカノニカルイメージングファンクションが、複数のモノリシックイメージングファンクションから形成される。複数のカノニカルイメージングファンクションは、カノニカルイメージングファンクションテンプレートに従う。複数のカノニカルイメージングファンクションは、融合イメージングファンクションに融合される。
【０００７】
以下の詳細な説明および特許請求の範囲において、「結合された」および「接続された」という用語がそれらの派生語とともに使用される可能性がある。これらの用語は、互いの複数の同義語として意図されていないと理解されるべきである。むしろ、複数の特定の実施形態において、「接続された」は、２またはそれより多い要素が互いに直接物理的に接触、または電気的に接触していることを示すために使用される可能性がある。「結合された」は、２またはそれより多い要素が直接物理的に接触、または電気的に接触していることを意味する可能性がある。しかしながら「結合された」はまた、２またはそれより多い要素が互いに直接接触していないけれども、互いに連携またはやり取りすることを意味する可能性がある。
【０００８】
一部の実施形態は、１つのハードウェア、ファームウェア、およびソフトウェアのいずれか、あるいはそれらの組み合わせの中で実装できる。一部の実施形態はまた、機械可読媒体内に格納された複数の命令として実装でき、それらの命令は、本明細書に記載の複数の操作を実行すべく、コンピューティングプラットフォームによって読み取りおよび実行され得る。機械可読媒体は、コンピュータ等の機械によって読み取り可能な形式で情報を格納または送信するための任意のメカニズムを含んでよい。例えば、機械可読媒体は、中でも、読み取り専用メモリ（ＲＯＭ）、ランダムアクセスメモリ（ＲＡＭ）、磁気ディスク記憶媒体、光学記憶媒体、複数のフラッシュメモリデバイスを含んでよい。
【０００９】
一実施形態は、一実装例または一実施例である。明細書における「１つの実施形態」、「一実施形態」、「一部の実施形態」「様々な実施形態」あるいは「他の複数の実施形態」という言及は、それら実施形態に関連して記載された特定の機能、構造、または特性は、複数の本発明に係る少なくとも一部の実施形態に含まれるが、必ずしもすべての実施形態に含まれるわけではないことを意味する。「１つの実施形態」、「一実施形態」または「一部の実施形態」という様々な言及が、必ずしも同一の実施形態を指しているわけではない。１つの実施形態に帰属する複数の要素または態様は、別の実施形態の複数の要素または態様と組み合わせることができる。
【００１０】
本明細書に記載および示されるすべてのコンポーネント、機能、構造、特性が、特定の一実施形態または複数の実施形態に含まれる必要はない。例えば、本明細書が、あるコンポーネント、ある機能、ある構造、ある特性が「含まれてよい（ｍａｙ）」「含まれるかもしれない（ｍｉｇｈｔ）」「含まれ得る（ｃａｎ）」「含まれる可能性がある（ｃｏｕｌｄ）」と記載している場合、その特定のコンポーネント、機能、構造、特性が含まれることは必須ではない。本明細書または特許請求の範囲が、「１つ（ａ）」または「１つ（ａｎ）」の要素に言及している場合、それは当該要素の１つのみがあることを意味しない。本明細書または特許請求の範囲が、「１つの追加の」要素に言及している場合、それは当該追加の要素の２個以上があることを除外しない。
【００１１】
一部の実施形態は特定の複数の実装に照らし記載されているが、一部の実施形態に係る他の複数の実装が可能であることに留意されたい。さらに、複数の図面に図示された、および／または本明細書に記載された複数の回路素子または他の複数の機能に関する複数の配置および／または順序は、図示および記載された特定の方法で配置される必要はない。一部の実施形態において、多くの他の配置が可能である。
【００１２】
図示された複数の要素が異なるおよび／または同一であること示すべく、図示された各システムにおいて、場合によっては、複数の要素はそれぞれ同一の参照番号または異なる参照番号を有することがある。しかしながら、要素は、異なる複数の実装を有し、図示または本明細書に記載されたいくつかまたは全てのシステムと動作するに十分な柔軟性を有し得る。複数の図に示された様々な要素は、同一または異なる可能性がある。どの要素が第１の要素と称され、どれが第２の要素と呼ばれるかは恣意的なものである。
【００１３】
図１Ａは、モノリシックイメージングファンクション１００を示す。ファンクション１００はコンピュータ可読コードの単一ブロックまたは単体として構築され、その実行時、複数の例示のルーチン１０２から１２０を実行する。具体的に言うと、イメージングファンクション１００は、パラメータチェッカ１０２、メモリ割当１０４、ループ次元１０６、および外側ループ１０８を含む。外側ループ１０８は、データ読み取りオプティマイザ１１０、計算１１２、データ書き込みオプティマイザ１１４を含む。イメージングファンクション１００はさらに、メモリ解放１１６およびステータスレポータ１２０を含む。
【００１４】
パラメータチェッカ１０２はその実行時、イメージングファンクション１００によって要求される入力データを読み取り、あるいは受信する。メモリ割当１０４はイメージングファンクション１００によって要求または作成されたデータを格納するのに必要とされ得るメモリを割り当てる。イメージングファンクション１００への入力データは、入力イメージデータバッファまたは他のコンピュータ可読メモリから読み取られたイメージデータを含んでよい。ループ次元１０６は、外側ループ１０８の複数のパラメータまたは次元を示し得る。複数の実施形態において、ループ次元１０６は、外側ループ１０８によって処理されるべきイメージのピクセルまたは領域の数を示してよい。外側ループ１０８は、外側ループ１０８内の複数のルーチンの実行を、例えば、複数のカウンタおよび他の外側ループコントロールデータを増分あるいは維持するといったやり方で、管理する。複数の実施形態において、外側ループ１０８は、外側ループ１０８内で、イメージのどの部分（どのピクセルまたは領域）が処理中であるか、あるいは次に処理されるかを追跡する。
【００１５】
外側ループ１０８内で、データ読み取りオプティマイザ１１０は、イメージングファンクション１００の外側ループ１０８によって読み取りおよび操作される、あるいは処理されるイメージデータのキャッシングおよびｌｏｏｋ−ａｈｅａｄバッファリングを行う。計算１１２ルーチンは、イメージデータに対し、１または複数の計算を行う。複数の実施形態において、計算１１２ルーチンは、イメージデータに対し、フィルタ、畳み込み、あるいは修正またはエンハンスを行ってよい。データ書き込みオプティマイザ１１４は、計算１１２を含む外側ループ１０８内の複数の操作結果のデータの書き込み処理を最適化する。
【００１６】
外側ループ１０８が完了すると、他の複数のファンクションによってまたは他の複数の目的のために利用可能とすべく、メモリ解放１１６がその実行時、前にイメージングファンクション１００に割り当てられていたメモリを解放あるいは消去する。ステータスレポータ１２０は、イメージングファンクション１００の実行に関するステータスまたは他の情報を提供する。
【００１７】
図１Ｂは、例示的なカノニカルイメージングファンクションクラスまたはテンプレート１４０を示す。複数の実施形態において、カノニカルイメージングファンクションテンプレート１４０は、例えば、ソースコード、Ｃ＋＋等の高級プログラミング言語、または他の好適なコンピュータ可読コードまたはプログラミング言語などのコンピュータ可読コードに具現化される。カノニカルイメージングファンクションテンプレート１４０は、一連の標準パーツを含むテンプレートまたはクラスを定義する。カノニカルイメージングファンクションは、テンプレートまたはクラスを基に構築され得る。複数のカノニカルイメージングファンクションを使用して、各イメージングファンクションを設計することで、複数のファンクションの複数のセットを最適化された複数の合成ファンクションに容易に結合できる。というのは、複数のカノニカルファンクションの複数の共通セクションは、合成ファンクションの作成、各カノニカルファンクションの複数の固有の処理要素を単一の合成ファンクションに合成させるという結合処理から、括り出せるからである。このように、各ファンクションの複数の共通要素は、外側ループ、ファンクションプリアンブル、またはファンクションポストアンブル内で一度共有される。関数プリアンブルは、ファンクションの開始部分であり、一方、ファンクションポストアンブルは、ファンクションの終了部分である。データ処理を設定または調整すべく、両方の部分が使用されてよい。さらに、複数の処理要素およびアルゴリズム要素といった、各カノニカルファンクションの固有の複数の要素は、図２に示すように合成ファンクション内に保持される。具体的に言うと、複数の実施形態において、カノニカルイメージングファンクションテンプレート１４０は、パラメータチェッカ１４２、メモリ割当１４４、ループ次元１４６、外側ループ１４８、データ読み取りオプティマイザ１５０、計算１５２データ書き込みオプティマイザ１５４、メモリ解放１５６、およびステータスレポータ１６０を含む。
【００１８】
本明細書に示される複数の現在の実施形態は、本発明のすべての方法を示していない。例えば、解決される課題のニーズによって、複数の実施形態は、追加のアプリケーション固有の複数のカノニカルセクションを定義してよい。例えば、イメージ読み取りセクション、イメージカラー訂正セクション、イメージカラー変換セクション、イメージ幾何学的訂正セクション等がカノニカルイメージングファンクション内に含まれてよい。複数のカノニカルイメージングファンクションは必要に応じて、他の複数の課題領域に拡張されてよく、特にＣ＋＋プログラミング言語およびＪＡＶＡ（登録商標）プログラミング言語といった複数のオブジェクト指向のプログラミング方法に適している。これらの言語によって、カノニカルイメージングファンクションテンプレートを複数の追加の特定のカノニカルセクションを含むべく拡張可能なベースクラスとして使用され得るようになる。
【００１９】
テンプレート１４０のパラメータチェッカ１４２は、コードを保持または融合すべく構成される。このコードはその実行時、読み取られまたは書き込まれ得る複数のパラメータをチェックし、あるいは融合カノニカルイメージングファンクションによって使用される入力または出力データを受信する複数のパラメータをチェックするものである。同様に、テンプレート１４０のメモリ割当１４４は、コードを保持または融合すべく構成される。このコードはその実行時、融合イメージングファンクションによって使用されるデータを格納すべく使用され得るメモリを割り当てるものである。入力データは、入力イメージデータバッファまたは他のコンピュータ可読メモリから読み取られたイメージデータを含んでよい。ループ次元１４６は、融合イメージングファンクションの外側ループの複数のパラメータまたは次元を示すコードを保持または融合すべく構成される。複数の実施形態において、ループ次元１４６は、融合イメージングファンクションの外側ループによって処理される、イメージの複数のピクセルまたは領域の数を示すコードを含んでよい。外側ループ１４８は、融合イメージングファンクションの実行を管理するコードを保持または融合すべく構成される。上記管理は例えば、複数のカウンタおよび他の外側ループコントロールデータをインクリメントあるいは維持することで行う。複数の実施形態において、外側ループ１４８はイメージ内の位置を追跡する（例えば、どのピクセルまたは領域が処理中または次に処理されるかといったこと）。データ読み取りオプティマイザ１５０は、コードを保持または融合すべく構成される。このコードはその実行時、融合イメージングファンクションの外側ループ１４８によって、読み取られ、操作され、または処理されるイメージデータのキャッシュおよびｌｏｏｋ−ａｈｅａｄバッファリングを行う。計算１５２は、その実行時にイメージデータに対し、１または複数の計算、処理、または複数のアルゴリズム要素を実行するコードを保持または融合すべく構成される。データ書き込みオプティマイザ１５４は、その実行時に、融合イメージングファンクションの操作結果のデータを書き込む処理を最適化するコードを保持または融合すべく構成される。メモリ解放１５６はコードを保持または融合すべく構成される。このコードはその実行時、メモリが他の複数のファンクションによって、または他の複数の目的のために利用可能になるよう、前に融合イメージングファンクションに割り当てられていたメモリを解放あるいは消去するものである。ステータスレポータ１６０は、その実行時、融合イメージングファンクションの実行に関する状況または他の情報を提供するコードを保持または融合すべく構成される。
【００２０】
カノニカルイメージングファンクションテンプレート１４０はクラスであり、個々のまたは一連のカノニカルイメージングファンクションはクラスを基に構築され得る。従って、そのように構築された個別の複数のカノニカルイメージングファンクションは、カノニカルイメージングファンクションクラスの複数のインスタンスである。よって、カノニカルイメージングファンクションクラスの複数のインスタンスはモノリシックファンクションのように、個別に実行可能である。あるいは、カノニカルイメージングファンクションクラスの複数のインスタンスは融合イメージングファンクションに結合される。この点については具体的に後述する。
【００２１】
図２は、例示のカノニカルイメージングファンクション２１０Ａ、２１０Ｂおよび２１０Ｃを結合することで形成される、例示の融合イメージングファンクション２００を示す。２１０Ａ、２１０Ｂおよび２１０Ｃの各々は、カノニカルイメージングファンクションクラス１４０の複数のインスタンスである。  具体的には、融合ファンクション２００は、ファンクション２１０Ａ、２１０Ｂ、２１０Ｃのパラメータチェッカ２１２Ａ、２１２Ｂ、２１２Ｃを融合ファンクション２００に融合することで部分的に形成される。同様に、融合ファンクション２００はさらに、ファンクション２１０Ａ、２１０Ｂ、２１０Ｃのメモリ割当２１４Ａ、２１４Ｂ、２１４Ｃを融合ファンクション２００に融合することで部分的に形成される。関数２１０Ａ、２１０Ｂ、２１０Ｃのループ次元２１６Ａ、２１６Ｂ、２１６Ｃもまた、親ループ次元２３６として融合ファンクション２００に融合される。関数２１０Ａ、２１０Ｂ、２１０Ｃの外側ループ２１８Ａ、２１８Ｂ、２１８Ｃもまた、融合ファンクション２００に融合され、親外側ループ２３８を形成する。親外側ループ２３８は、親データ読み取りオプティマイザ２４０を含み、親データ読み取りオプティマイザ２４０は、ファンクション２１０Ａ、２１０Ｂ、２１０Ｃのデータ読み取りオプティマイザ２２０Ａ、２２０Ｂ，２２０Ｃおよび計算操作２２２Ａ、２２２Ｂ、２２２Ｃを融合ファンクション２００に結合する。親外側ループルーチン２３８はまた、親データ書き込みオプティマイザ２４４を含み、親データ書き込みオプティマイザ２４４は、ファンクション２１０Ａ、２１０Ｂ、２１０Ｃのデータ書き込みオプティマイザ２２４Ａ、２２４Ｂ、２２４Ｃを融合ファンクション２００に結合する。融合ファンクション２００はさらに、ファンクション２１０Ａ、２１０Ｂ、２１０Ｃのメモリ解放２２６Ａ、２２６Ｂ、２２６Ｃおよびステータスレポータ２３０Ａ、２３０Ｂ、２３０Ｃを含む。従って、記載の実施形態において、３つの例示的なカノニカルファンクションが、１つの例示的な融合ファンクション２００に結合されている。
【００２２】
本明細書に記載されたように、例示的なファンクション２１０Ａ、２１０Ｂ、２１０Ｃの各々が融合ファンクション２００に融合されると、対応する複数のモノリシックファンクションの個々（融合されていない）に比較し、効率性および／またはパフォーマンスにおいて著しい前進が実現され得る。具体的に言うと、融合ファンクション２００によって実現される効率性および／またはパフォーマンス向上は、少なくとも部分的に次のことから生じる。すなわち、親外側ループ２３８が一度のみ処理されるのに対し、各ファンクションのそれぞれのデータ読み取り操作およびデータ書き込み操作を含め、複数の個別のファンクションの個々の外側ループはそれぞれ処理される必要がある。従って、複数のファンクション間での冗長なデータのアクセスおよび／または受け渡しの必要性が、融合ファンクション２００を用いることで、大きく低減される。
【００２３】
図３は、複数の実施形態に係る、複数のカノニカルイメージングファンクション３００を融合する方法の処理フロー図である。ブロック３１０で、一連のカノニカルイメージングファンクションが作成される。複数の実施形態において、図２に照らし上述したように、当該一連のカノニカルイメージングファンクションを構築すべく、カノニカルイメージングファンクションクラスまたはテンプレート１４０が使用されてよい。
【００２４】
ブロック３２０で、ブロック３１０において作成される所望の一連のまたはサブセットのカノニカルイメージングファンクションがそこで融合され、融合イメージングファンクションを形成する。この融合イメージングファンクションは、複数の実施形態において、融合イメージングファンクション２００に関し上述した通りである。一連のカノニカルイメージングファンクションを融合イメージングファンクションに融合するプロセスは、複数の実施形態において、例えば、ファンクションコンポーザによって自動的に実行されてよく、プログラマまたは他の人間による手動の介入が必要ない点に留意されたい。複数の実施形態において、融合イメージングファンクションのコンパイル中、複数のカノニカルイメージングファンクションの様々な属性のどれが融合されるべきかを判断すべく、ブロック３２０における融合はコンパイラを使用して実行されてよい。この例では、コンパイラは所定の一連のカノニカルイメージングファンクションの複数のどの属性が互いに対応しているか、および従ってどの属性が互いに融合されるべきかを示してよい。さらに、複数の実施形態において、プログラマが、互いに融合されるべき複数のカノニカルイメージングファンクションの複数の属性を示してよい。
【００２５】
複数の実施形態において、複数のモノリシックイメージングファンクションの対応ライブラリと比較して、効率性およびパフォーマンスが大きく向上された最適化された複数のイメージングパイプラインを作成すべく、１または複数の融合イメージングファンクションを作成するためのカノニカルイメージングテンプレートまたはクラス１４０を使用し、拡張現実ライブラリが記述されてよい。ここで上記のモノリシックファンクションは、ＶＣＡ（Ｖｉｓｕａｌ  Ｃｏｍｐｕｔｅ  Ａｃｃｅｌｅｒａｔｏｒ）ライブラリまたはインテルのＩＰＰ（Ｉｎｔｅｇｒａｔｅｄ  Ｐｅｒｆｏｒｍａｎｃｅ  Ｐｒｉｍｉｔｉｖｅｓ）ライブラリなど、複数の従来型ライブラリに格納されたものである。複数の融合イメージングファンクションのこのようなライブラリが、コンピュータビジョン、プリントおよび／またはカメライメージング、およびグラフィック処理を含む、様々なイメージングアプリケーションで使用されてよい。
【００２６】
さらに、複数の実施形態において、コードを複数の融合されたカノニカルイメージングファンクションにコンパイルまたは変換すべく、本明細書に記載の複数の技術が使用され得る。特に、複数のカノニカルイメージングファンクションテンプレートによって、コンパイラまたはトランスレータが、結合されたカノニカルイメージングファンクションをアセンブルし、これらイメージングファンクションに応じた、複数のデータプリフェッチ、読み取り、または書き込みを処理する新規コードを生成するのを可能にする。複数の実施形態において、コードは、プログラマが複数のカノニカルイメージングファンクションを高水準のコードに結合できるような、高水準言語であってよい。さらに、複数の実施形態において、コードは、コードのコンパイル時、コンパイラが複数のイメージングファンクションをコードに自動的に融合する、中水準のコードであってよい。コンパイラは、カノニカルイメージングファンクションテンプレートを使用し、複数のイメージングファンクションを自動的に融合してよい。さらに、複数の実施形態において、コードは、複数のイメージングファンクションがランタイム時、アセンブリレベルまたはネイティブコードに融合される、アセンブリレベルまたはネイティブコードであってよい。本発明に係る複数の技術は、複数のイメージングファンクションを使用して記載されているが、複数のカノニカルファンクションを生成すべく、ファンクションの種類が使用されてよい。
【００２７】
図４は、複数の実施形態で使用され得るコンピューティングデバイス４００のブロック図である。コンピューティングデバイス４００は、例えば、中でも、ラップトップコンピュータ、デスクトップコンピュータ、タブレットコンピュータ、モバイルデバイス、またはサーバであってよい。コンピューティングデバイス４００は、格納された複数の命令を実行すべく構成された中央処理装置（ＣＰＵ）４０２およびＣＰＵ４０２によって実行可能な複数の命令を格納するメモリデバイス４０４を含む。ＣＰＵは、バス４０６によってメモリデバイス４０４に結合されてよい。また、ＣＰＵはキャッシュ４０８を含む。複数の実施形態において、ＣＰＵキャッシュ４０８のサイズによって、自動パイプライン合成は最適化されてよい。さらに、ＣＰＵ４０２はシングルコアプロセッサ、マルチコアプロセッサ、コンピューティングクラスタ、あるいは任意の数の他の構成であってよい。さらに、コンピューティングデバイス４００は２個以上のＣＰＵ４０２を含んでよい。本明細書に記載の自動パイプライン合成を有効にすべく、ＣＰＵ４０２によって実行される複数の命令が使用されてよい。
【００２８】
コンピューティングデバイス４００はまた、グラフィック処理ユニット（ＧＰＵ）４０８を含んでよい。図示の通り、ＣＰＵ４０２はバス４０６を介してＧＰＵ４０８に結合されてよい。ＧＰＵ４０８は、コンピューティングデバイス４００内において、任意の数のグラフィック処理を実行すべく構成されてよい。例えば、ＧＰＵ４０８は、複数のグラフィックイメージ、複数のグラフィックフレーム、複数のビデオ等がコンピューティングデバイス４００のユーザに対し表示されるよう、レンダリングまたは操作されるべく構成されてよい。いくつかの実施形態では、ＧＰＵ４０８は多数のグラフィックエンジン（不図示）を含み、その場合、各グラフィックエンジンは特定の複数のグラフィックタスクを実行、または特定の複数のタイプのワークロードを実行すべく構成される。ＧＰＵはまた、キャッシュ４１０を含む。複数の実施形態において、自動パイプライン合成はＣＰＵキャッシュ４１０のサイズに応じて最適化されてよい。
【００２９】
メモリデバイス４０４はランダムアクセスメモリ（ＲＡＭ）、読み取り専用メモリ（ＲＯＭ）、フラッシュメモリ、または任意の他の好適な複数のメモリシステムを含むことができる。例えば、メモリデバイス４０４はダイナミックランダムアクセスメモリ（ＤＲＡＭ）を含んでよい。メモリデバイス４０４は複数のアプリケーションプログラミングインタフェース（ＡＰＩ）４１２を含んでよい。アプリケーションプログラミングインタフェース４１２は、ユーザがカノニカルイメージングテンプレートまたはクラスを構築可能にし、さらにユーザが複数の本実施形態に係るカノニカルイメージングクラスを使用し、一連のカノニカルイメージングファンクションを構築可能にすべく構成される。
【００３０】
コンピューティングデバイス４００は、イメージキャプチャメカニズム４１４を含む。複数の実施形態において、イメージキャプチャメカニズム４１４はカメラ、立体カメラ、赤外線センサ等である。イメージキャプチャメカニズム４１４は、処理されるべきイメージ情報をキャプチャすべく使用される。従って、コンピューティングデバイス４００はまた１または複数のセンサを含んでよい。
【００３１】
ＣＰＵ４０２は、コンピューティングデバイス４００を１または複数のＩ／Ｏデバイス４２２に接続すべく構成された入出力デバイスインタフェース４２０にバス４０６を介して接続されてよい。Ｉ／Ｏデバイス４２２は、例えば、キーボードおよびポインティングデバイスを含んでよく、ポインティングデバイスはとりわけタッチパッドまたはタッチスクリーンを含んでよい。Ｉ／Ｏデバイス４２２は、コンピューティングデバイス４００の複数のビルトインコンポーネントであってよく、あるいはＩ／Ｏデバイス４２２は、コンピューティングデバイス４００に外部接続された複数のデバイスであってよい。
【００３２】
ＣＰＵ４０２はまた、コンピューティングデバイス４００を、ディスプレイデバイス４１８に接続すべく構成されたディスプレイインタフェース４１６にバス４０６を介してリンクされてよい。ディスプレイデバイス４２２は、コンピューティングデバイス４００のビルトインコンポーネントであるディスプレイスクリーンを含んでよい。ディスプレイデバイス４２２はまた、中でも、コンピューティングデバイス４００に外部接続されたコンピュータモニタ、テレビ受像機、またはプロジェクタを含んでよい。
【００３３】
コンピューティングデバイスはまた、記憶デバイス４２４を含む。記憶デバイス４２４は、ハードドライブ、光学式ドライブ、サムドライブ、複数のドライブのアレイ、あるいはこれら任意の組み合わせ等の物理メモリである。記憶デバイス４２４はまた、複数のリモート記憶ドライブを含んでよい。記憶デバイス４２４は、コンピューティングデバイス４００上で実行すべく構成された任意の数のアプリケーション４２６を含む。複数のアプリケーション４２６は、複数の３Ｄステレオカメライメージおよび複数のステレオディスプレイ用の複数の３Ｄグラフィックを含む、複数のメディアおよびグラフィックを結合すべく使用されてよい。複数の例において、アプリケーション４２６は、カノニカルイメージングテンプレート１４０等のカノニカルイメージングテンプレートまたはクラスを使用し、一連のカノニカルイメージングファンクションを構築し、かつ、複数の実施形態に係る融合イメージングファンクション２００等の融合イメージングファンクションを構築すべく、使用されてよい。
【００３４】
コンピューティングデバイス４００はまた、バス４０６を介してコンピューティングデバイス４００をネットワーク４３０に接続すべく構成されたネットワークインタフェースコントローラ（ＮＩＣ）４２８を含んでよい。ネットワーク４３０は、中でも、広域ネットワーク（ＷＡＮ）、ローカルエリアネットワーク（ＬＡＮ）、またはインターネットであってよい。
【００３５】
いくつかの実施形態では、アプリケーション４２６はイメージデータを処理でき、かつ、処理されたデータをプリントエンジン４３２に送信できる。プリントエンジン４３２は、イメージデータを処理してよく、イメージデータをプリントデバイス４３４に送信してよい。プリントデバイス４３４は、複数のプリンタ、複数のファックス送受信機、およびプリントオブジェクトモジュール４３６を使用し、イメージデータを印刷できる他の複数のプリントデバイスを含むことができる。複数の実施形態において、プリントエンジン４３２はネットワーク４３０経由で、データをプリントデバイス４３４に送信してよい。
【００３６】
図４のブロック図は、コンピューティングデバイス４００が図４に示されたすべてのコンポーネントを含むことを意味することを意図しない。さらに、コンピューティングデバイス４００は、特定の実装の詳細に応じ、図４に不図示の任意の数の追加のコンポーネントを含んでよい。
【００３７】
図５は、有形な非一時的コンピュータ可読媒体５００を示すブロック図である。非一時的コンピュータ可読媒体５００は、カノニカルイメージングテンプレート１４０等のカノニカルイメージングテンプレートまたはクラスを使用し、一連のカノニカルイメージングファンクションを自動作成し、複数の実施形態に係る融合イメージングファンクション２００等の融合イメージングファンクションを構築するコードを格納する。有形な非一時的コンピュータ可読媒体５００は、コンピュータバス５０４を通して、プロセッサ５０２によってアクセスされてよい。さらに、有形な非一時的コンピュータ可読媒体５００は、プロセッサ５０２に方法３００を含む、本明細書に記載の複数の方法を実行するよう命令すべく構成されたコードを含んでよい。
【００３８】
図５に示される通り、本明細書に記載の様々なソフトウェアコンポーネントが有形な非一時的コンピュータ可読媒体５００上に格納されてよい。例えば、モジュール５１０はカノニカルイメージングクラスまたはテンプレート１４０を使用し、一連のカノニカルイメージングファンクションを作成すべく構成されてよい。モジュール５２０は、モジュール５１０によって作成された一連のカノニカルイメージングファンクションまたは当該一連のカノニカルイメージングファンクションのサブセットを自動的に、融合イメージングファンクション２００等の融合イメージングファンクションに融合すべく構成されてよい。モジュール５３０は、融合イメージングファンクションを実行すべく構成されてよい。
【００３９】
図５のブロック図は、有形な非一時的コンピュータ可読媒体５００が、図５に示されるすべてのコンポーネントを含むことを意味するよう意図されていない。さらに、有形な非一時的コンピュータ可読媒体５００は特定の実装の詳細に応じ、図５に不図示の任意の数の追加のコンポーネントを含んでよい。
【００４０】
以下の例は、単一のモノリシックファンクションに代わる、一連の仮想ファンクションとして実装されたカノニカルイメージングクラスまたはテンプレートのＣ＋＋実装を示す。これにより、各ファンクションが別々に選ばれ、融合イメージングファンクションに融合されることを可能にする。
【００４１】
//
//単一のモノリシックファンクションの代わりに、このクラスに、
//複数のカノニカルファンクションが一連の仮想ファンクションとして実装されている。
//この方法により、各ファンクションが別々に選ばれ、複数の合成ファンクションに融合されるようにできる。//
class CanonicalFunction{inline virtual void parameterChecker(parameterList_t parameters);
inline virtual void memoryAllocator(parameterList_t, parameters);
inline virtual void loopDimensions(parameterList_t, parameters);
inline virtual void outerLoop(parameterList_t, parameters);
inline virtual void dataReadOptimizer(parameterList_t parameters);
inline virtual void compute(parameterList_t parameters);
inline virtual void dataWriteOptimizer(parameterList_t parameters);
inline virtual void memoryDeallocator(parameterList_t parameters);
//
//ファンクションstatusReporter()は、複数の状況コードの一覧またはアレイである。
//すべてのファンクションはそれらの状況コードを一覧に追加してよい。
//
inline virtual void statusReporter(parameterList_t parameters);}
class CanonicalFunction ComposedFunction
{
//
//ここで、他のファンクションから合成ファンクションが作成される。
//
};
class Composer
{
ComposedFunction composedFunction;
//
//このファンクションは、一覧のカノニカルファンクションから融合コードを生成する。
//
void generateCode(void *code);
//
//このコンポーザは、一覧のCanonicalFunctionの複数の推測から、コードを生成する。
//親ファンクションは外側ループ次元を定義するfunctionList[0]である。
//
Composer(CanonicalFunction *functionList)
{
enum { PARENT_FUNCTION = 0};
for (int x = 1; functionList[x] != 0; x++)
{
generateCode(functionList[x]->parameterChecker());
generateCode(functionList[x]->memoryAllocator());
}
//親ファンクション
generateCode(functionList[PARENT_FUNCTION]->loopRange());
generateCode(functionList[PARENT_FUNCTION]->outerLoop());
generateCode(functionList[PARENT_FUNCTION]->dataReadOptimizer());
for (int x = 0; functionList[x] != 0; x++)
{
generateCode(functionList[x]->compute());  
}
//親ファンクション
generateCode(functionList[PARENT_FUNCTION]->dataWriteOptimizer());
for (int x = 0; functionList[x] != 0; x++)
{
generateCode(functionList[x]->memoryDeallocator());
generateCode(functionList[x]->statusReporter());
}
}
};
【００４２】
以下の例は、カノニカルイメージングクラスまたはテンプレート１４０を使用する、一連の３つのカノニカルイメージングファンクション（CONVOLUTION、MEDIAN_FILTER、およびCOLOR_FILTER）の実装を示す。
class CanonicalFunction CONVOLUTION
{
inline void parameterChecker(parameterList_t parameters){ /* . . . code */ }
inline void memoryAllocator(parameterList_t, parameters){ /* . . . code */ }
inline void loopDimensions(parameterList_t, parameters){ /* . . . code */ }
inline void outerLoop(parameterList_t, parameters) { /* . . . code */ }
inline void dataReadOptimizer(parameterList_t parameters) { /* . . . code */ }
inline void compute(parameterList_t parameters) { /* . . . code */ }
inline void dataWriteOptimizer(parameterList_t parameters) { /* . . . code */ }
inline void memoryDeallocator(parameterList_t parameters) { /* . . . code */ }
inline void statusReporter(parameterList_t parameters) { /* . . . code */ }
}
Class Canonical Function MEDIAN_FILTER
{
. . .
}
Class Canonical Function COLOR_FILTER
{
. . .
}
【００４３】
例１  複数のカノニカルイメージングファンクションを生成するための装置が本明細書に記載される。上記装置は、カノニカルイメージングファンクションテンプレートを提供するためのロジック、および１または複数のモノリシックイメージングファンクションから一連のカノニカルイメージングファンクションを形成するためのロジックを含む。上記複数のカノニカルイメージングファンクションの各々はカノニカルイメージングファンクションテンプレートに従う。上記装置はまた、上記一連のカノニカルイメージングファンクションの１または複数のカノニカルイメージングファンクションを融合イメージングファンクションに融合するためのロジックを含む。
【００４４】
各カノニカルイメージングファンクションは、完全なファンクションの１または複数のセクションとして定義されてよく、各ファンクションセクションは完全なファンクションを作成すべく、結合される。さらに、上記一連のカノニカルイメージングファンクションの各カノニカルイメージングファンクションは、一連の共有される固有のセクションとしてのグループに結合されてよい。一連のカノニカルイメージングファンクションを形成することは、カノニカルイメージングファンクションテンプレートを使用し、一連のカノニカルイメージングファンクションを単一の合成ファンクションに自動的にコンパイルするためのロジックを含んでよい。さらに、１または複数のカノニカルイメージングファンクションを単一の合成ファンクションに融合することは、複数の融合イメージングファンクションを新規コードに自動的にコンパイルまたは変換するためのロジックを含んでよい。このコードは実行可能なものであるか、あるいはさらに別の高水準言語または中間言語に変換またはコンパイル可能であるか、あるいは対象のマシンのマシンコードにアセンブル可能なものであってよい。カノニカルイメージングファンクションテンプレートは、一連の合成カノニカルファンクションからのファンクションプリアンブルを含む開始ファンクションセクションを含んでよい。また、カノニカルイメージングファンクションテンプレートは、一連のカノニカルイメージングファンクションからのデータ読み取り、計算、およびデータ書き込み操作の複数のセクションを含むべく構成された共通ループセクションを含んでよい。カノニカルイメージングファンクションテンプレートは、一連のカノニカルファンクションセクションからのファンクションポストアンブルを含む終了ファンクションセクションを含んでよい。また、カノニカルイメージングファンクションテンプレートはさらに、パラメータチェッカセクション、メモリ割当セクション、ループ次元セクション、メモリ解放セクション、ステータスレポータセクション、一連のカノニカルファンクションで定義された他の複数のファンクションセクション、あるいはこれらの任意の組み合わせのうちの少なくとも１つを含んでよい。複数のカノニカルイメージングファンクションを融合することは、カノニカルイメージングテンプレートを使用し、一連のカノニカルイメージングファンクションの１または複数のカノニカルイメージングファンクションを結合することを含んでよい。上記装置は、プリントデバイスまたはイメージキャプチャメカニズムであってよい。
【００４５】
例２  本明細書には、複数のカノニカルイメージングファンクションを生成するためのシステムが記載される。上記システムはプロセッサを含み、プロセッサは複数のイメージングファンクションを備えるコードを実行する。システムはまた、１または複数のモノリシックイメージングファンクションから形成される一連のカノニカルイメージングファンクションを含み、上記複数のカノニカルイメージングファンクションの各々は、カノニカルイメージングファンクションテンプレートに従う。  上記一連のカノニカルイメージングファンクションの１または複数のカノニカルイメージングファンクションは、イメージングファンクションに融合される。
【００４６】
各カノニカルイメージングファンクションは、完全なファンクションの１または複数のセクションとして定義されてよく、各ファンクションセクションは完全なファンクションを作成すべく、結合される。上記一連のカノニカルイメージングファンクションの各カノニカルイメージングファンクションはまた、一連の共有される固有のセクションとしてのグループに結合されてよい。一連のカノニカルイメージングファンクションは、カノニカルイメージングファンクションテンプレートを使用し、一連のカノニカルイメージングファンクションを単一の合成ファンクションに自動的にコンパイルすることによって形成されてよい。さらに、１または複数のカノニカルイメージングファンクションを単一の合成ファンクションに融合することは、複数の融合イメージングファンクションを新規コードに自動的にコンパイルまたは変換することを含んでよい。ここで、新規コードは実行可能なものであるか、あるいはさらに別の高水準言語または中間言語に変換またはコンパイル可能なものであるか、あるいは対象のマシンのマシンコードにアセンブル可能なものであってよい。カノニカルイメージングファンクションテンプレートは、一連の合成カノニカルファンクションからのファンクションプリアンブルを含む開始ファンクションセクション、一連のカノニカルファンクションからのデータ読み取り、計算、データ書き込み操作の複数のセクションを含むべく構成された共通ループセクション、および一連のカノニカルファンクションセクションからのファンクションポストアンブルを含む終了ファンクションセクションを含んでよい。また、カノニカルイメージングファンクションテンプレートはさらに、パラメータチェッカセクション、メモリ割当セクション、ループ次元セクション、メモリ解放セクション、ステータスレポータセクション、一連のカノニカルファンクションで定義された他の複数のファンクションセクション、あるいはこれらの任意の組み合わせのうちの少なくとも１つを含んでよい。複数のカノニカルイメージングファンクションを融合することは、カノニカルイメージングテンプレートを使用し、一連のカノニカルイメージングファンクションの１または複数のカノニカルイメージングファンクションを結合することを含んでよい。
【００４７】
例３  本明細書には、少なくとも１つのマシン可読媒体が記載される。  非一時的マシン可読媒体は、デバイス上での実行に応じ、デバイスに対し、複数のモノリシックイメージングファンクションから一連のカノニカルイメージングファンクションを形成させ、上記複数のカノニカルイメージングファンクションの各々はカノニカルイメージングファンクションテンプレートに従っており、かつ、上記一連のカノニカルイメージングファンクションの１または複数のカノニカルイメージングファンクションを融合イメージングファンクションに融合させる複数の命令を有する。
【００４８】
非一時的マシン可読媒体はさらに、デバイス上での実行時、デバイスに対し、複数のカノニカルイメージングファンクションのデータ読み取り、計算、およびデータ書き込みの複数の操作を融合イメージングファンクションの外側ループに配置させる複数の命令を含んでよい。また、非一時的マシン可読媒体はさらに、デバイス上での実行時、デバイスに対し、融合イメージングファンクションを実行させる複数の命令を含んでよい。
【００４９】
上記の説明において、開示された発明主題の様々な態様が記載された。本発明主題の深い理解に供すべく、特定の複数の番号、複数のシステムおよび構成が説明目的で記載された。しかしながら、本開示の利益を有する当業者にとって、本発明主題は特定の詳細がなくても、実施できるのは明らかである。他の複数の例において、本開示の発明主題を不明瞭にしないよう、周知の複数の機能、コンポーネントまたはモジュールは省略、簡略化、結合、あるいは分離された。
【００５０】
本開示の発明主題の様々な実施形態は、ハードウェア、ファームウェア、ソフトウェア、またはこれらの組み合わせとして実装されてよい。また、本開示の発明主題の様々な実施形態は、プログラムコードへの参照またはプログラムコードとの連携によって記述されてよい。そのようなプログラムコードとしては、複数の命令、複数のファンクション、複数の手順、複数のデータ構造、ロジック、複数のアプリケーションプログラム、設計のシミュレーション、エミュレーション、および製作のための複数の設計表現または複数のフォーマット等がある。これらはマシンによりアクセスされると、マシンに複数のタスクを実行させ、複数の抽象的なデータ型または複数の低水準ハードウェアコンテキストを定義させ、あるいは結果を生成させることになる。
【００５１】
複数のシミュレーションについて、プログラムコードは、ハードウェア記述言語または別の機能記述言語を使用してハードウェアを示してよい。ハードウェア記述言語または別の機能記述言語は基本的に、設計されるハードウェアの予期される実行方法のモデルを提供するものである。プログラムコードは、コンパイル可能および／または解釈可能なアセンブリまたは機械言語、またはデータであってよい。さらに、当技術分野において、いずれの形態においても、動作を実行するまたは結果を生じさせる、ソフトウェアについて言及するのは一般的である。そのような複数の表現は単に、プロセッサに動作を実行させ、または結果を生成させる、処理システムによるプログラムコードの実行を言及する簡潔な方法にすぎない。
【００５２】
プログラムコードは、例えば揮発性および／または不揮発性メモリに格納されてよい。そのようなメモリとしては、ソリッドステートメモリ、複数のハードドライブ、複数のフロッピディスク、複数の光ストレージ、複数のテープ、フラッシュメモリ、複数のメモリスティック、複数のデジタルビデオディスク、複数のデジタル多目的ディスク（ＤＶＤ）等に加え、機械アクセス可能な生物学的状態記憶ストレージ等のさらに特殊な媒体を含む、複数の記憶デバイスおよび／または関連付けられた機械可読媒体または機械アクセス可能媒体がある。機械可読媒体は、複数のアンテナ、複数の光ファイバ、複数の通信インタフェース等、機械によって読み取り可能な形式で情報を格納、送信、受信する任意の有形なメカニズムを含んでよい。プログラムコードは、複数のパケット、シリアルデータ、パラレルデータ等の形態で送信されてよく、圧縮形式または暗号化形式で使用されてよい。
【００５３】
プログラムコードは、複数のモバイルコンピュータまたは据置コンピュータ、複数の携帯情報端末、複数のセットトップボックス、複数の携帯電話とポケベル、および他の複数の電子デバイス等の複数のプログラム可能なマシン上で実行される複数のプログラムに実装されてよい。各マシンはプロセッサ、プロセッサにより読み取り可能な揮発性および／または不揮発性メモリ、少なくとも１つの入力デバイスおよび／または１または複数の出力デバイスを含む。記載された複数の実施形態を実行し、かつ、出力情報を生成させるべく、プログラムコードは入力デバイスを使用して入力されたデータに適用されてよい。出力情報は１または複数の出力デバイスに適用されてよい。当業者は、本開示の発明主題に係る複数の実施形態は、複数のマルチプロセッサシステムまたはマルチコアプロセッサシステム、複数のミニコンピュータ、複数のメインフレームコンピュータに加え、複数のパーベイシブコンピュータまたは複数の小型コンピュータまたは任意のデバイスに仮想的に埋め込み可能な複数のプロセッサを含む、様々なコンピュータシステム構成とともに実施できることがわかる。本開示の発明主題に係る複数の実施形態は、また複数のタスクが通信ネットワークを介してリンクされた複数のリモート処理デバイスによって実行され得る、複数の分散コンピューティング環境において実施できる。
【００５４】
複数の操作はシーケンシャルプロセスとして記述可能であるが、これら操作の一部は実際には並列で、同時に、および／または分散環境において、並びに複数のシングルプロセッサマシンまたはマルチプロセッサマシンによってアクセスされるためローカルおよび／またはリモートに格納されたプログラムコードとともに実行可能である。さらに、いくつかの実施形態では、本開示の主題の精神を逸脱することなく、複数の操作の順序を変更可能である。プログラムコードは、複数の埋め込みコントローラによってまたは複数の埋め込みコントローラとの連携で使用されてよい。
【００５５】
本開示の発明主題は、例示の複数の実施形態に照らし記載されたが、この記載は限定的意味で解釈されることを意図していない。本発明主題に係る他の実施形態に加え、例示の複数の実施形態に対する様々な修正は、本開示の発明主題が属する技術分野の当業者にとって明らかであり、これら修正は本開示の発明主題の範囲内に属するとみなされる。
本実施形態の例を下記の各項目として示す。
［項目１］
複数のカノニカルイメージングファンクションを生成するための装置であって、
カノニカルイメージングファンクションテンプレートを提供するためのロジックと、
１または複数のモノリシックイメージングファンクションからセットのカノニカルイメージングファンクションを形成するためのロジックであって、前記セットのカノニカルイメージングファンクションの各々は前記カノニカルイメージングファンクションテンプレートに従うロジックと、
前記セットのカノニカルイメージングファンクションの１または複数のカノニカルイメージングファンクションを融合イメージングファンクションに融合するためのロジックと
を備える装置。
［項目２］
各カノニカルイメージングファンクションが、完全なファンクションの１または複数のセクションとして定義されており、前記完全なファンクションを作成すべく、各ファンクションセクションが結合される、項目１に記載の装置。
［項目３］
前記セットのカノニカルイメージングファンクションの各カノニカルイメージングファンクションが、セットの共有される固有のセクションとしてのグループに結合される、項目２に記載の装置。
［項目４］
セットのカノニカルイメージングファンクションを形成することは、前記カノニカルイメージングファンクションテンプレートを使用し、前記セットのカノニカルイメージングファンクションを共に単一の合成ファンクションに自動的にコンパイルするためのロジックを有する、項目１から３のいずれか一項に記載の装置。
［項目５］
前記１または複数のカノニカルイメージングファンクションを単一の合成ファンクションに融合することは、複数の融合イメージングファンクションを新規コードに自動的にコンパイルまたは変換するためのロジックを有し、
前記新規コードは実行可能なものであるか、あるいは、別の高水準言語または中間言語にさらに変換またはコンパイル可能なものであるか、あるいは対象のマシンのマシンコードにアセンブル可能なものである、項目１から４のいずれか一項に記載の装置。
［項目６］
前記カノニカルイメージングファンクションテンプレートが、セットの合成カノニカルファンクションからのファンクションプリアンブルを含む開始ファンクションセクションと、セットのカノニカルイメージングファンクションからのデータ読み取り、計算、およびデータ書き込み操作の複数のセクションを含むべく構成された共通ループセクションと、セットのカノニカルファンクションセクションからのファンクションポストアンブルを含む終了ファンクションセクションとを有する、項目１から５のいずれか一項に記載の装置。
［項目７］
さらに、前記カノニカルイメージングファンクションテンプレートが、パラメータチェッカセクション、メモリ割当セクション、ループ次元セクション、メモリ解放セクション、ステータスレポータセクション、セットのカノニカルファンクションで定義された他の複数のファンクションセクション、あるいはこれらの任意の組み合わせのうちの少なくとも１つを有する、項目６に記載の装置。
［項目８］
前記複数のカノニカルイメージングファンクションを融合することは、前記カノニカルイメージングファンクションテンプレートを使用し、前記セットのカノニカルイメージングファンクションの１または複数のカノニカルイメージングファンクションを結合することを有する、項目１から７のいずれか一項に記載の装置。
［項目９］
前記装置がプリントデバイスである、項目１から８のいずれか一項に記載の装置。
［項目１０］
前記装置がイメージキャプチャメカニズムである、項目１から８のいずれか一項に記載の装置。
［項目１１］
複数のカノニカルイメージングファンクションを生成するためのシステムであって、
複数のイメージングファンクションを含むコードを実行するプロセッサと、
１または複数のモノリシックイメージングファンクションから形成されるセットのカノニカルイメージングファンクションとを備え、
前記セットのカノニカルイメージングファンクションの各々はカノニカルイメージングファンクションテンプレートに従い、前記セットのカノニカルイメージングファンクションの１または複数のカノニカルイメージングファンクションがイメージングファンクションに融合される、システム。
［項目１２］
各カノニカルイメージングファンクションが、完全なファンクションの１または複数のセクションとして定義されており、前記完全なファンクションを作成すべく、各ファンクションセクションが共に結合される、項目１１に記載のシステム。
［項目１３］
前記セットのカノニカルイメージングファンクションの各カノニカルイメージングファンクションが、セットの共有される固有のセクションとしてのグループに共に結合される、項目１１に記載のシステム。
［項目１４］
セットのカノニカルイメージングファンクションを形成することは、前記カノニカルイメージングファンクションテンプレートを使用し、前記セットのカノニカルイメージングファンクションを単一の合成ファンクションに自動的にコンパイルするためのロジックを有する、項目１１から１３のいずれか一項に記載のシステム。
［項目１５］
前記１または複数のカノニカルイメージングファンクションを単一の合成ファンクションに融合することは、複数の融合イメージングファンクションを新規コードに自動的にコンパイルまたは変換することを有し、
前記新規コードは実行可能なものであるか、あるいは、別の高水準言語または中間言語にさらに変換またはコンパイル可能なものであるか、あるいは対象のマシンのマシンコードにアセンブル可能なものである、項目１１から１４のいずれか一項に記載のシステム。
［項目１６］
前記カノニカルイメージングファンクションテンプレートが、セットの合成カノニカルファンクションからのファンクションプリアンブルを含む開始ファンクションセクションと、セットのカノニカルイメージングファンクションからのデータ読み取り、計算、およびデータ書き込み操作の複数のセクションを含むべく構成された共通ループセクションと、セットのカノニカルファンクションセクションからのファンクションポストアンブルを含む終了ファンクションセクションとを有する、項目１１から１５のいずれか一項に記載のシステム。
［項目１７］
さらに、前記カノニカルイメージングファンクションテンプレートが、パラメータチェッカセクション、メモリ割当セクション、ループ次元セクション、メモリ解放セクション、ステータスレポータセクション、セットのカノニカルファンクションで定義された他の複数のファンクションセクション、あるいはこれらの任意の組み合わせのうちの少なくとも１つを有する、項目１６に記載のシステム。
［項目１８］
前記複数のカノニカルイメージングファンクションを融合することは、前記カノニカルイメージングファンクションテンプレートを使用し、前記セットのカノニカルイメージングファンクションの１または複数のカノニカルイメージングファンクションを結合することを有する、項目１１から１７のいずれか一項に記載のシステム。
［項目１９］
少なくとも１つのプログラムであって、前記少なくとも１つのプログラムはデバイス上での実行に応じ、前記デバイスに対し、
複数のモノリシックイメージングファンクションからセットのカノニカルイメージングファンクションを形成させる手順であって、前記セットのカノニカルイメージングファンクションの各々はカノニカルイメージングファンクションテンプレートに従う手順と、
前記セットのカノニカルイメージングファンクションの１または複数のカノニカルイメージングファンクションを融合イメージングファンクションに融合させる手順とを備えるプログラム。
［項目２０］
さらに、デバイス上での実行時、前記デバイスに対し、前記複数のカノニカルイメージングファンクションのデータ読み取り、計算、およびデータ書き込みの複数の操作を前記融合イメージングファンクションの外側ループに配置させる手順を備える、項目１９に記載のプログラム。
［項目２１］
さらに、デバイス上での実行時、前記デバイスに対し、前記融合イメージングファンクションを実行させる手順を備える、項目１９に記載のプログラム。
【図１Ａ】
0006038346.tif 000002
【図１Ｂ】
0006038346.tif 000003
【図２】
0006038346.tif 000004
【図３】
0006038346.tif 000005
【図４】
0006038346.tif 000006
【図５】
0006038346.tif 000007