特許第6038346号(P6038346)IP Force 特許公報掲載プロジェクト 2022.1.31 β版

知財求人 - 知財ポータルサイト「IP Force」

▶ インテル・コーポレーションの特許一覧

特許6038346装置、システム、プログラム、および機械可読記憶媒体
<>
  • 特許6038346-装置、システム、プログラム、および機械可読記憶媒体 図000002
  • 特許6038346-装置、システム、プログラム、および機械可読記憶媒体 図000003
  • 特許6038346-装置、システム、プログラム、および機械可読記憶媒体 図000004
  • 特許6038346-装置、システム、プログラム、および機械可読記憶媒体 図000005
  • 特許6038346-装置、システム、プログラム、および機械可読記憶媒体 図000006
  • 特許6038346-装置、システム、プログラム、および機械可読記憶媒体 図000007
< >
(19)【発行国】日本国特許庁(JP)
(12)【公報種別】特許公報(B2)
(11)【特許番号】6038346
(24)【登録日】2016年11月11日
(45)【発行日】2016年12月7日
(54)【発明の名称】装置、システム、プログラム、および機械可読記憶媒体
(51)【国際特許分類】
   G06F 9/45 20060101AFI20161128BHJP
   G06F 9/44 20060101ALI20161128BHJP
【FI】
   G06F9/44 322G
   G06F9/44 322F
   G06F9/06 620A
【請求項の数】22
【全頁数】22
(21)【出願番号】特願2015-545532(P2015-545532)
(86)(22)【出願日】2013年12月20日
(65)【公表番号】特表2016-505944(P2016-505944A)
(43)【公表日】2016年2月25日
(86)【国際出願番号】US2013077042
(87)【国際公開番号】WO2014105724
(87)【国際公開日】20140703
【審査請求日】2015年5月27日
(31)【優先権主張番号】13/730,474
(32)【優先日】2012年12月28日
(33)【優先権主張国】US
(73)【特許権者】
【識別番号】591003943
【氏名又は名称】インテル・コーポレーション
(74)【代理人】
【識別番号】110000877
【氏名又は名称】龍華国際特許業務法人
(72)【発明者】
【氏名】クリグ、スコット エー.
【審査官】 石川 亮
(56)【参考文献】
【文献】 特開2007−304998(JP,A)
【文献】 特開平05−108322(JP,A)
【文献】 特開昭64−076322(JP,A)
(58)【調査した分野】(Int.Cl.,DB名)
G06F 9/44 − 9/45
(57)【特許請求の範囲】
【請求項1】
複数のカノニカルイメージングファンクションを生成するための装置であって、
カノニカルイメージングファンクションテンプレートを提供するためのロジックと、
1または複数のモノリシックイメージングファンクションからセットのカノニカルイメージングファンクションを形成するためのロジックであって、前記セットのカノニカルイメージングファンクションの各々は前記カノニカルイメージングファンクションテンプレートに従うロジックと、
前記セットのカノニカルイメージングファンクションの1または複数のカノニカルイメージングファンクションを融合イメージングファンクションに融合するためのロジックと
を備える装置。
【請求項2】
各カノニカルイメージングファンクションが、完全なファンクションの1または複数のセクションとして定義されており、前記完全なファンクションを作成すべく、各ファンクションセクションが結合される、請求項1に記載の装置。
【請求項3】
前記セットのカノニカルイメージングファンクションの各カノニカルイメージングファンクションが、セットの共有される固有のセクションとしてのグループに結合される、請求項2に記載の装置。
【請求項4】
セットのカノニカルイメージングファンクションを形成することは、前記カノニカルイメージングファンクションテンプレートを使用し、前記セットのカノニカルイメージングファンクションを共に単一の合成ファンクションに自動的にコンパイルするためのロジックを有する、請求項1から3のいずれか一項に記載の装置。
【請求項5】
前記装置は、複数の融合イメージングファンクションを新規コードに自動的にコンパイルまたは変換するためのロジックを有し、
前記新規コードは実行可能なものであるか、あるいは、別の高水準言語または中間言語にさらに変換またはコンパイル可能なものであるか、あるいは対象のマシンのマシンコードにアセンブル可能なものである、請求項1から4のいずれか一項に記載の装置。
【請求項6】
前記カノニカルイメージングファンクションテンプレートが、セットのカノニカルイメージングファンクションからのファンクションプリアンブルを含む開始ファンクションセクションと、セットのカノニカルイメージングファンクションからのデータ読み取り、計算、およびデータ書き込み操作の複数のセクションを含むべく構成された共通ループセクションと、セットのカノニカルイメージングファンクションからのファンクションポストアンブルを含む終了ファンクションセクションとを有する、請求項1から5のいずれか一項に記載の装置。
【請求項7】
さらに、前記カノニカルイメージングファンクションテンプレートが、パラメータチェッカセクション、メモリ割当セクション、ループ次元セクション、メモリ解放セクション、ステータスレポータセクション、セットのカノニカルファンクションで定義された他の複数のファンクションセクション、あるいはこれらの任意の組み合わせのうちの少なくとも1つを有する、請求項6に記載の装置。
【請求項8】
前記複数のカノニカルイメージングファンクションを融合することは、前記カノニカルイメージングファンクションテンプレートを使用し、前記セットのカノニカルイメージングファンクションの1または複数のカノニカルイメージングファンクションを結合することを有する、請求項1から7のいずれか一項に記載の装置。
【請求項9】
前記装置がプリントデバイスである、請求項1から8のいずれか一項に記載の装置。
【請求項10】
前記装置がイメージキャプチャメカニズムである、請求項1から8のいずれか一項に記載の装置。
【請求項11】
複数のカノニカルイメージングファンクションを生成するためのシステムであって、
複数のイメージングファンクションを含むコードを実行するプロセッサと、
1または複数のモノリシックイメージングファンクションから形成されるセットのカノニカルイメージングファンクションとを備え、
前記セットのカノニカルイメージングファンクションの各々はカノニカルイメージングファンクションテンプレートに従い、前記セットのカノニカルイメージングファンクションの1または複数のカノニカルイメージングファンクションが融合イメージングファンクションに融合される、システム。
【請求項12】
各カノニカルイメージングファンクションが、完全なファンクションの1または複数のセクションとして定義されており、前記完全なファンクションを作成すべく、各ファンクションセクションが共に結合される、請求項11に記載のシステム。
【請求項13】
前記セットのカノニカルイメージングファンクションの各カノニカルイメージングファンクションが、セットの共有される固有のセクションとしてのグループに共に結合される、請求項11に記載のシステム。
【請求項14】
セットのカノニカルイメージングファンクションを形成することは、前記カノニカルイメージングファンクションテンプレートを使用し、前記セットのカノニカルイメージングファンクションを単一の合成ファンクションに自動的にコンパイルするためのロジックを有する、請求項11から13のいずれか一項に記載のシステム。
【請求項15】
数の融合イメージングファンクション新規コードに自動的にコンパイルまたは変換され
前記新規コードは実行可能なものであるか、あるいは、別の高水準言語または中間言語にさらに変換またはコンパイル可能なものであるか、あるいは対象のマシンのマシンコードにアセンブル可能なものである、請求項11から14のいずれか一項に記載のシステム。
【請求項16】
前記カノニカルイメージングファンクションテンプレートが、セットのカノニカルイメージングファンクションからのファンクションプリアンブルを含む開始ファンクションセクションと、セットのカノニカルイメージングファンクションからのデータ読み取り、計算、およびデータ書き込み操作の複数のセクションを含むべく構成された共通ループセクションと、セットのカノニカルイメージングファンクションからのファンクションポストアンブルを含む終了ファンクションセクションとを有する、請求項11から15のいずれか一項に記載のシステム。
【請求項17】
さらに、前記カノニカルイメージングファンクションテンプレートが、パラメータチェッカセクション、メモリ割当セクション、ループ次元セクション、メモリ解放セクション、ステータスレポータセクション、セットのカノニカルファンクションで定義された他の複数のファンクションセクション、あるいはこれらの任意の組み合わせのうちの少なくとも1つを有する、請求項16に記載のシステム。
【請求項18】
前記複数のカノニカルイメージングファンクションを融合することは、前記カノニカルイメージングファンクションテンプレートを使用し、前記セットのカノニカルイメージングファンクションの1または複数のカノニカルイメージングファンクションを結合することを有する、請求項11から17のいずれか一項に記載のシステム。
【請求項19】
少なくとも1つのプログラムであって、前記少なくとも1つのプログラムはデバイス上での実行に応じ、前記デバイスに対し、
複数のモノリシックイメージングファンクションからセットのカノニカルイメージングファンクションを形成させる手順であって、前記セットのカノニカルイメージングファンクションの各々はカノニカルイメージングファンクションテンプレートに従う手順と、
前記セットのカノニカルイメージングファンクションの1または複数のカノニカルイメージングファンクションを融合イメージングファンクションに融合させる手順とを備えるプログラム。
【請求項20】
さらに、デバイス上での実行時、前記デバイスに対し、前記複数のカノニカルイメージングファンクションのデータ読み取り、計算、およびデータ書き込みの複数の操作を前記融合イメージングファンクションの外側ループに配置させる手順を備える、請求項19に記載のプログラム。
【請求項21】
さらに、デバイス上での実行時、前記デバイスに対し、前記融合イメージングファンクションを実行させる手順を備える、請求項19に記載のプログラム。
【請求項22】
請求項19から21のいずれか1項に記載のプログラムを格納する機械可読記憶媒体。
【発明の詳細な説明】
【技術分野】
【0001】
複数の本技術は、概してイメージ処理に関する。具体的には、複数の本技術は、複数のカノニカルイメージングファンクションを使用し、複数のイメージ処理パイプラインを最適化するための装置に関する。
【背景技術】
【0002】
複数のイメージ処理パイプラインは通常、複数のイメージピクセルにわたる並列実行を利用する、多くのデータ並列段階で構成されるが、上記段階はしばしばメモリ帯域幅の制限を受け、すなわち、上記段階は複数のメモリアクセス(読み込みおよび格納)操作の見地からは非効率であり得る。特に、複数の冗長なメモリコピーを除去およびメモリトラフィックを低減させるべく、複数のパイプラインの複数の内側ループを最適化することで、パイプラインパフォーマンスにおける前進が一部実現されている。しかしながら、そのような複数の最適化は、処理されるべき特定の複数のイメージングアルゴリズムに加え、対象のコンピューティングまたは処理アーキテクチャに関する知識を持つプログラマのスキルを必要とする、複数の手動処理である。さらに、上記の最適化は概して、複数のコンピューティングアーキテクチャまたは処理アーキテクチャにわたり、移植できない。
【発明の概要】
【0003】
添付の複数の図面を参照すると、以下の詳細な説明がより良く理解できる。図面には、本開示の発明主題に係る多くの目的および特徴に関する複数の具体例が含まれる。
【図面の簡単な説明】
【0004】
図1A】複数の実施形態に係るモノリシックファンクションのブロック図である。
図1B】複数の実施形態に係るカノニカルイメージングファンクションテンプレートまたはクラスのブロック図である。
図2】複数の実施形態に係る融合カノニカルイメージングファンクションのブロック図である。
図3】複数の実施形態に係る複数のカノニカルイメージングファンクションを融合する方法を示す処理フロー図である。
図4】複数の実施形態で使用され得るコンピューティングデバイスのブロック図である。
図5】複数の実施形態に係る、複数のカノニカルイメージングファンクションを融合する方法のための複数の命令を格納する有形の非一時的コンピュータ可読媒体のブロック図である。
【発明を実施するための形態】
【0005】
上述したように、複数のイメージ処理パイプラインを手動で最適化することは、時間がかかり、そのような最適化は、複数のコンピューティングアーキテクチャまたは処理アーキテクチャにわたり移植できない。結果として、複数のイメージ処理パイプラインを最適化することにコスト制約がかかり得る。
【0006】
複数の本技術の複数の実施形態は、カノニカルイメージングファンクションテンプレートまたはクラスを提供する。一連のカノニカルイメージングファンクションが、複数のモノリシックイメージングファンクションから形成される。複数のカノニカルイメージングファンクションは、カノニカルイメージングファンクションテンプレートに従う。複数のカノニカルイメージングファンクションは、融合イメージングファンクションに融合される。
【0007】
以下の詳細な説明および特許請求の範囲において、「結合された」および「接続された」という用語がそれらの派生語とともに使用される可能性がある。これらの用語は、互いの複数の同義語として意図されていないと理解されるべきである。むしろ、複数の特定の実施形態において、「接続された」は、2またはそれより多い要素が互いに直接物理的に接触、または電気的に接触していることを示すために使用される可能性がある。「結合された」は、2またはそれより多い要素が直接物理的に接触、または電気的に接触していることを意味する可能性がある。しかしながら「結合された」はまた、2またはそれより多い要素が互いに直接接触していないけれども、互いに連携またはやり取りすることを意味する可能性がある。
【0008】
一部の実施形態は、1つのハードウェア、ファームウェア、およびソフトウェアのいずれか、あるいはそれらの組み合わせの中で実装できる。一部の実施形態はまた、機械可読媒体内に格納された複数の命令として実装でき、それらの命令は、本明細書に記載の複数の操作を実行すべく、コンピューティングプラットフォームによって読み取りおよび実行され得る。機械可読媒体は、コンピュータ等の機械によって読み取り可能な形式で情報を格納または送信するための任意のメカニズムを含んでよい。例えば、機械可読媒体は、中でも、読み取り専用メモリ(ROM)、ランダムアクセスメモリ(RAM)、磁気ディスク記憶媒体、光学記憶媒体、複数のフラッシュメモリデバイスを含んでよい。
【0009】
一実施形態は、一実装例または一実施例である。明細書における「1つの実施形態」、「一実施形態」、「一部の実施形態」「様々な実施形態」あるいは「他の複数の実施形態」という言及は、それら実施形態に関連して記載された特定の機能、構造、または特性は、複数の本発明に係る少なくとも一部の実施形態に含まれるが、必ずしもすべての実施形態に含まれるわけではないことを意味する。「1つの実施形態」、「一実施形態」または「一部の実施形態」という様々な言及が、必ずしも同一の実施形態を指しているわけではない。1つの実施形態に帰属する複数の要素または態様は、別の実施形態の複数の要素または態様と組み合わせることができる。
【0010】
本明細書に記載および示されるすべてのコンポーネント、機能、構造、特性が、特定の一実施形態または複数の実施形態に含まれる必要はない。例えば、本明細書が、あるコンポーネント、ある機能、ある構造、ある特性が「含まれてよい(may)」「含まれるかもしれない(might)」「含まれ得る(can)」「含まれる可能性がある(could)」と記載している場合、その特定のコンポーネント、機能、構造、特性が含まれることは必須ではない。本明細書または特許請求の範囲が、「1つ(a)」または「1つ(an)」の要素に言及している場合、それは当該要素の1つのみがあることを意味しない。本明細書または特許請求の範囲が、「1つの追加の」要素に言及している場合、それは当該追加の要素の2個以上があることを除外しない。
【0011】
一部の実施形態は特定の複数の実装に照らし記載されているが、一部の実施形態に係る他の複数の実装が可能であることに留意されたい。さらに、複数の図面に図示された、および/または本明細書に記載された複数の回路素子または他の複数の機能に関する複数の配置および/または順序は、図示および記載された特定の方法で配置される必要はない。一部の実施形態において、多くの他の配置が可能である。
【0012】
図示された複数の要素が異なるおよび/または同一であること示すべく、図示された各システムにおいて、場合によっては、複数の要素はそれぞれ同一の参照番号または異なる参照番号を有することがある。しかしながら、要素は、異なる複数の実装を有し、図示または本明細書に記載されたいくつかまたは全てのシステムと動作するに十分な柔軟性を有し得る。複数の図に示された様々な要素は、同一または異なる可能性がある。どの要素が第1の要素と称され、どれが第2の要素と呼ばれるかは恣意的なものである。
【0013】
図1Aは、モノリシックイメージングファンクション100を示す。ファンクション100はコンピュータ可読コードの単一ブロックまたは単体として構築され、その実行時、複数の例示のルーチン102から120を実行する。具体的に言うと、イメージングファンクション100は、パラメータチェッカ102、メモリ割当104、ループ次元106、および外側ループ108を含む。外側ループ108は、データ読み取りオプティマイザ110、計算112、データ書き込みオプティマイザ114を含む。イメージングファンクション100はさらに、メモリ解放116およびステータスレポータ120を含む。
【0014】
パラメータチェッカ102はその実行時、イメージングファンクション100によって要求される入力データを読み取り、あるいは受信する。メモリ割当104はイメージングファンクション100によって要求または作成されたデータを格納するのに必要とされ得るメモリを割り当てる。イメージングファンクション100への入力データは、入力イメージデータバッファまたは他のコンピュータ可読メモリから読み取られたイメージデータを含んでよい。ループ次元106は、外側ループ108の複数のパラメータまたは次元を示し得る。複数の実施形態において、ループ次元106は、外側ループ108によって処理されるべきイメージのピクセルまたは領域の数を示してよい。外側ループ108は、外側ループ108内の複数のルーチンの実行を、例えば、複数のカウンタおよび他の外側ループコントロールデータを増分あるいは維持するといったやり方で、管理する。複数の実施形態において、外側ループ108は、外側ループ108内で、イメージのどの部分(どのピクセルまたは領域)が処理中であるか、あるいは次に処理されるかを追跡する。
【0015】
外側ループ108内で、データ読み取りオプティマイザ110は、イメージングファンクション100の外側ループ108によって読み取りおよび操作される、あるいは処理されるイメージデータのキャッシングおよびlook−aheadバッファリングを行う。計算112ルーチンは、イメージデータに対し、1または複数の計算を行う。複数の実施形態において、計算112ルーチンは、イメージデータに対し、フィルタ、畳み込み、あるいは修正またはエンハンスを行ってよい。データ書き込みオプティマイザ114は、計算112を含む外側ループ108内の複数の操作結果のデータの書き込み処理を最適化する。
【0016】
外側ループ108が完了すると、他の複数のファンクションによってまたは他の複数の目的のために利用可能とすべく、メモリ解放116がその実行時、前にイメージングファンクション100に割り当てられていたメモリを解放あるいは消去する。ステータスレポータ120は、イメージングファンクション100の実行に関するステータスまたは他の情報を提供する。
【0017】
図1Bは、例示的なカノニカルイメージングファンクションクラスまたはテンプレート140を示す。複数の実施形態において、カノニカルイメージングファンクションテンプレート140は、例えば、ソースコード、C++等の高級プログラミング言語、または他の好適なコンピュータ可読コードまたはプログラミング言語などのコンピュータ可読コードに具現化される。カノニカルイメージングファンクションテンプレート140は、一連の標準パーツを含むテンプレートまたはクラスを定義する。カノニカルイメージングファンクションは、テンプレートまたはクラスを基に構築され得る。複数のカノニカルイメージングファンクションを使用して、各イメージングファンクションを設計することで、複数のファンクションの複数のセットを最適化された複数の合成ファンクションに容易に結合できる。というのは、複数のカノニカルファンクションの複数の共通セクションは、合成ファンクションの作成、各カノニカルファンクションの複数の固有の処理要素を単一の合成ファンクションに合成させるという結合処理から、括り出せるからである。このように、各ファンクションの複数の共通要素は、外側ループ、ファンクションプリアンブル、またはファンクションポストアンブル内で一度共有される。関数プリアンブルは、ファンクションの開始部分であり、一方、ファンクションポストアンブルは、ファンクションの終了部分である。データ処理を設定または調整すべく、両方の部分が使用されてよい。さらに、複数の処理要素およびアルゴリズム要素といった、各カノニカルファンクションの固有の複数の要素は、図2に示すように合成ファンクション内に保持される。具体的に言うと、複数の実施形態において、カノニカルイメージングファンクションテンプレート140は、パラメータチェッカ142、メモリ割当144、ループ次元146、外側ループ148、データ読み取りオプティマイザ150、計算152データ書き込みオプティマイザ154、メモリ解放156、およびステータスレポータ160を含む。
【0018】
本明細書に示される複数の現在の実施形態は、本発明のすべての方法を示していない。例えば、解決される課題のニーズによって、複数の実施形態は、追加のアプリケーション固有の複数のカノニカルセクションを定義してよい。例えば、イメージ読み取りセクション、イメージカラー訂正セクション、イメージカラー変換セクション、イメージ幾何学的訂正セクション等がカノニカルイメージングファンクション内に含まれてよい。複数のカノニカルイメージングファンクションは必要に応じて、他の複数の課題領域に拡張されてよく、特にC++プログラミング言語およびJAVA(登録商標)プログラミング言語といった複数のオブジェクト指向のプログラミング方法に適している。これらの言語によって、カノニカルイメージングファンクションテンプレートを複数の追加の特定のカノニカルセクションを含むべく拡張可能なベースクラスとして使用され得るようになる。
【0019】
テンプレート140のパラメータチェッカ142は、コードを保持または融合すべく構成される。このコードはその実行時、読み取られまたは書き込まれ得る複数のパラメータをチェックし、あるいは融合カノニカルイメージングファンクションによって使用される入力または出力データを受信する複数のパラメータをチェックするものである。同様に、テンプレート140のメモリ割当144は、コードを保持または融合すべく構成される。このコードはその実行時、融合イメージングファンクションによって使用されるデータを格納すべく使用され得るメモリを割り当てるものである。入力データは、入力イメージデータバッファまたは他のコンピュータ可読メモリから読み取られたイメージデータを含んでよい。ループ次元146は、融合イメージングファンクションの外側ループの複数のパラメータまたは次元を示すコードを保持または融合すべく構成される。複数の実施形態において、ループ次元146は、融合イメージングファンクションの外側ループによって処理される、イメージの複数のピクセルまたは領域の数を示すコードを含んでよい。外側ループ148は、融合イメージングファンクションの実行を管理するコードを保持または融合すべく構成される。上記管理は例えば、複数のカウンタおよび他の外側ループコントロールデータをインクリメントあるいは維持することで行う。複数の実施形態において、外側ループ148はイメージ内の位置を追跡する(例えば、どのピクセルまたは領域が処理中または次に処理されるかといったこと)。データ読み取りオプティマイザ150は、コードを保持または融合すべく構成される。このコードはその実行時、融合イメージングファンクションの外側ループ148によって、読み取られ、操作され、または処理されるイメージデータのキャッシュおよびlook−aheadバッファリングを行う。計算152は、その実行時にイメージデータに対し、1または複数の計算、処理、または複数のアルゴリズム要素を実行するコードを保持または融合すべく構成される。データ書き込みオプティマイザ154は、その実行時に、融合イメージングファンクションの操作結果のデータを書き込む処理を最適化するコードを保持または融合すべく構成される。メモリ解放156はコードを保持または融合すべく構成される。このコードはその実行時、メモリが他の複数のファンクションによって、または他の複数の目的のために利用可能になるよう、前に融合イメージングファンクションに割り当てられていたメモリを解放あるいは消去するものである。ステータスレポータ160は、その実行時、融合イメージングファンクションの実行に関する状況または他の情報を提供するコードを保持または融合すべく構成される。
【0020】
カノニカルイメージングファンクションテンプレート140はクラスであり、個々のまたは一連のカノニカルイメージングファンクションはクラスを基に構築され得る。従って、そのように構築された個別の複数のカノニカルイメージングファンクションは、カノニカルイメージングファンクションクラスの複数のインスタンスである。よって、カノニカルイメージングファンクションクラスの複数のインスタンスはモノリシックファンクションのように、個別に実行可能である。あるいは、カノニカルイメージングファンクションクラスの複数のインスタンスは融合イメージングファンクションに結合される。この点については具体的に後述する。
【0021】
図2は、例示のカノニカルイメージングファンクション210A、210Bおよび210Cを結合することで形成される、例示の融合イメージングファンクション200を示す。210A、210Bおよび210Cの各々は、カノニカルイメージングファンクションクラス140の複数のインスタンスである。 具体的には、融合ファンクション200は、ファンクション210A、210B、210Cのパラメータチェッカ212A、212B、212Cを融合ファンクション200に融合することで部分的に形成される。同様に、融合ファンクション200はさらに、ファンクション210A、210B、210Cのメモリ割当214A、214B、214Cを融合ファンクション200に融合することで部分的に形成される。関数210A、210B、210Cのループ次元216A、216B、216Cもまた、親ループ次元236として融合ファンクション200に融合される。関数210A、210B、210Cの外側ループ218A、218B、218Cもまた、融合ファンクション200に融合され、親外側ループ238を形成する。親外側ループ238は、親データ読み取りオプティマイザ240を含み、親データ読み取りオプティマイザ240は、ファンクション210A、210B、210Cのデータ読み取りオプティマイザ220A、220B,220Cおよび計算操作222A、222B、222Cを融合ファンクション200に結合する。親外側ループルーチン238はまた、親データ書き込みオプティマイザ244を含み、親データ書き込みオプティマイザ244は、ファンクション210A、210B、210Cのデータ書き込みオプティマイザ224A、224B、224Cを融合ファンクション200に結合する。融合ファンクション200はさらに、ファンクション210A、210B、210Cのメモリ解放226A、226B、226Cおよびステータスレポータ230A、230B、230Cを含む。従って、記載の実施形態において、3つの例示的なカノニカルファンクションが、1つの例示的な融合ファンクション200に結合されている。
【0022】
本明細書に記載されたように、例示的なファンクション210A、210B、210Cの各々が融合ファンクション200に融合されると、対応する複数のモノリシックファンクションの個々(融合されていない)に比較し、効率性および/またはパフォーマンスにおいて著しい前進が実現され得る。具体的に言うと、融合ファンクション200によって実現される効率性および/またはパフォーマンス向上は、少なくとも部分的に次のことから生じる。すなわち、親外側ループ238が一度のみ処理されるのに対し、各ファンクションのそれぞれのデータ読み取り操作およびデータ書き込み操作を含め、複数の個別のファンクションの個々の外側ループはそれぞれ処理される必要がある。従って、複数のファンクション間での冗長なデータのアクセスおよび/または受け渡しの必要性が、融合ファンクション200を用いることで、大きく低減される。
【0023】
図3は、複数の実施形態に係る、複数のカノニカルイメージングファンクション300を融合する方法の処理フロー図である。ブロック310で、一連のカノニカルイメージングファンクションが作成される。複数の実施形態において、図2に照らし上述したように、当該一連のカノニカルイメージングファンクションを構築すべく、カノニカルイメージングファンクションクラスまたはテンプレート140が使用されてよい。
【0024】
ブロック320で、ブロック310において作成される所望の一連のまたはサブセットのカノニカルイメージングファンクションがそこで融合され、融合イメージングファンクションを形成する。この融合イメージングファンクションは、複数の実施形態において、融合イメージングファンクション200に関し上述した通りである。一連のカノニカルイメージングファンクションを融合イメージングファンクションに融合するプロセスは、複数の実施形態において、例えば、ファンクションコンポーザによって自動的に実行されてよく、プログラマまたは他の人間による手動の介入が必要ない点に留意されたい。複数の実施形態において、融合イメージングファンクションのコンパイル中、複数のカノニカルイメージングファンクションの様々な属性のどれが融合されるべきかを判断すべく、ブロック320における融合はコンパイラを使用して実行されてよい。この例では、コンパイラは所定の一連のカノニカルイメージングファンクションの複数のどの属性が互いに対応しているか、および従ってどの属性が互いに融合されるべきかを示してよい。さらに、複数の実施形態において、プログラマが、互いに融合されるべき複数のカノニカルイメージングファンクションの複数の属性を示してよい。
【0025】
複数の実施形態において、複数のモノリシックイメージングファンクションの対応ライブラリと比較して、効率性およびパフォーマンスが大きく向上された最適化された複数のイメージングパイプラインを作成すべく、1または複数の融合イメージングファンクションを作成するためのカノニカルイメージングテンプレートまたはクラス140を使用し、拡張現実ライブラリが記述されてよい。ここで上記のモノリシックファンクションは、VCA(Visual Compute Accelerator)ライブラリまたはインテルのIPP(Integrated Performance Primitives)ライブラリなど、複数の従来型ライブラリに格納されたものである。複数の融合イメージングファンクションのこのようなライブラリが、コンピュータビジョン、プリントおよび/またはカメライメージング、およびグラフィック処理を含む、様々なイメージングアプリケーションで使用されてよい。
【0026】
さらに、複数の実施形態において、コードを複数の融合されたカノニカルイメージングファンクションにコンパイルまたは変換すべく、本明細書に記載の複数の技術が使用され得る。特に、複数のカノニカルイメージングファンクションテンプレートによって、コンパイラまたはトランスレータが、結合されたカノニカルイメージングファンクションをアセンブルし、これらイメージングファンクションに応じた、複数のデータプリフェッチ、読み取り、または書き込みを処理する新規コードを生成するのを可能にする。複数の実施形態において、コードは、プログラマが複数のカノニカルイメージングファンクションを高水準のコードに結合できるような、高水準言語であってよい。さらに、複数の実施形態において、コードは、コードのコンパイル時、コンパイラが複数のイメージングファンクションをコードに自動的に融合する、中水準のコードであってよい。コンパイラは、カノニカルイメージングファンクションテンプレートを使用し、複数のイメージングファンクションを自動的に融合してよい。さらに、複数の実施形態において、コードは、複数のイメージングファンクションがランタイム時、アセンブリレベルまたはネイティブコードに融合される、アセンブリレベルまたはネイティブコードであってよい。本発明に係る複数の技術は、複数のイメージングファンクションを使用して記載されているが、複数のカノニカルファンクションを生成すべく、ファンクションの種類が使用されてよい。
【0027】
図4は、複数の実施形態で使用され得るコンピューティングデバイス400のブロック図である。コンピューティングデバイス400は、例えば、中でも、ラップトップコンピュータ、デスクトップコンピュータ、タブレットコンピュータ、モバイルデバイス、またはサーバであってよい。コンピューティングデバイス400は、格納された複数の命令を実行すべく構成された中央処理装置(CPU)402およびCPU402によって実行可能な複数の命令を格納するメモリデバイス404を含む。CPUは、バス406によってメモリデバイス404に結合されてよい。また、CPUはキャッシュ408を含む。複数の実施形態において、CPUキャッシュ408のサイズによって、自動パイプライン合成は最適化されてよい。さらに、CPU402はシングルコアプロセッサ、マルチコアプロセッサ、コンピューティングクラスタ、あるいは任意の数の他の構成であってよい。さらに、コンピューティングデバイス400は2個以上のCPU402を含んでよい。本明細書に記載の自動パイプライン合成を有効にすべく、CPU402によって実行される複数の命令が使用されてよい。
【0028】
コンピューティングデバイス400はまた、グラフィック処理ユニット(GPU)408を含んでよい。図示の通り、CPU402はバス406を介してGPU408に結合されてよい。GPU408は、コンピューティングデバイス400内において、任意の数のグラフィック処理を実行すべく構成されてよい。例えば、GPU408は、複数のグラフィックイメージ、複数のグラフィックフレーム、複数のビデオ等がコンピューティングデバイス400のユーザに対し表示されるよう、レンダリングまたは操作されるべく構成されてよい。いくつかの実施形態では、GPU408は多数のグラフィックエンジン(不図示)を含み、その場合、各グラフィックエンジンは特定の複数のグラフィックタスクを実行、または特定の複数のタイプのワークロードを実行すべく構成される。GPUはまた、キャッシュ410を含む。複数の実施形態において、自動パイプライン合成はCPUキャッシュ410のサイズに応じて最適化されてよい。
【0029】
メモリデバイス404はランダムアクセスメモリ(RAM)、読み取り専用メモリ(ROM)、フラッシュメモリ、または任意の他の好適な複数のメモリシステムを含むことができる。例えば、メモリデバイス404はダイナミックランダムアクセスメモリ(DRAM)を含んでよい。メモリデバイス404は複数のアプリケーションプログラミングインタフェース(API)412を含んでよい。アプリケーションプログラミングインタフェース412は、ユーザがカノニカルイメージングテンプレートまたはクラスを構築可能にし、さらにユーザが複数の本実施形態に係るカノニカルイメージングクラスを使用し、一連のカノニカルイメージングファンクションを構築可能にすべく構成される。
【0030】
コンピューティングデバイス400は、イメージキャプチャメカニズム414を含む。複数の実施形態において、イメージキャプチャメカニズム414はカメラ、立体カメラ、赤外線センサ等である。イメージキャプチャメカニズム414は、処理されるべきイメージ情報をキャプチャすべく使用される。従って、コンピューティングデバイス400はまた1または複数のセンサを含んでよい。
【0031】
CPU402は、コンピューティングデバイス400を1または複数のI/Oデバイス422に接続すべく構成された入出力デバイスインタフェース420にバス406を介して接続されてよい。I/Oデバイス422は、例えば、キーボードおよびポインティングデバイスを含んでよく、ポインティングデバイスはとりわけタッチパッドまたはタッチスクリーンを含んでよい。I/Oデバイス422は、コンピューティングデバイス400の複数のビルトインコンポーネントであってよく、あるいはI/Oデバイス422は、コンピューティングデバイス400に外部接続された複数のデバイスであってよい。
【0032】
CPU402はまた、コンピューティングデバイス400を、ディスプレイデバイス418に接続すべく構成されたディスプレイインタフェース416にバス406を介してリンクされてよい。ディスプレイデバイス422は、コンピューティングデバイス400のビルトインコンポーネントであるディスプレイスクリーンを含んでよい。ディスプレイデバイス422はまた、中でも、コンピューティングデバイス400に外部接続されたコンピュータモニタ、テレビ受像機、またはプロジェクタを含んでよい。
【0033】
コンピューティングデバイスはまた、記憶デバイス424を含む。記憶デバイス424は、ハードドライブ、光学式ドライブ、サムドライブ、複数のドライブのアレイ、あるいはこれら任意の組み合わせ等の物理メモリである。記憶デバイス424はまた、複数のリモート記憶ドライブを含んでよい。記憶デバイス424は、コンピューティングデバイス400上で実行すべく構成された任意の数のアプリケーション426を含む。複数のアプリケーション426は、複数の3Dステレオカメライメージおよび複数のステレオディスプレイ用の複数の3Dグラフィックを含む、複数のメディアおよびグラフィックを結合すべく使用されてよい。複数の例において、アプリケーション426は、カノニカルイメージングテンプレート140等のカノニカルイメージングテンプレートまたはクラスを使用し、一連のカノニカルイメージングファンクションを構築し、かつ、複数の実施形態に係る融合イメージングファンクション200等の融合イメージングファンクションを構築すべく、使用されてよい。
【0034】
コンピューティングデバイス400はまた、バス406を介してコンピューティングデバイス400をネットワーク430に接続すべく構成されたネットワークインタフェースコントローラ(NIC)428を含んでよい。ネットワーク430は、中でも、広域ネットワーク(WAN)、ローカルエリアネットワーク(LAN)、またはインターネットであってよい。
【0035】
いくつかの実施形態では、アプリケーション426はイメージデータを処理でき、かつ、処理されたデータをプリントエンジン432に送信できる。プリントエンジン432は、イメージデータを処理してよく、イメージデータをプリントデバイス434に送信してよい。プリントデバイス434は、複数のプリンタ、複数のファックス送受信機、およびプリントオブジェクトモジュール436を使用し、イメージデータを印刷できる他の複数のプリントデバイスを含むことができる。複数の実施形態において、プリントエンジン432はネットワーク430経由で、データをプリントデバイス434に送信してよい。
【0036】
図4のブロック図は、コンピューティングデバイス400が図4に示されたすべてのコンポーネントを含むことを意味することを意図しない。さらに、コンピューティングデバイス400は、特定の実装の詳細に応じ、図4に不図示の任意の数の追加のコンポーネントを含んでよい。
【0037】
図5は、有形な非一時的コンピュータ可読媒体500を示すブロック図である。非一時的コンピュータ可読媒体500は、カノニカルイメージングテンプレート140等のカノニカルイメージングテンプレートまたはクラスを使用し、一連のカノニカルイメージングファンクションを自動作成し、複数の実施形態に係る融合イメージングファンクション200等の融合イメージングファンクションを構築するコードを格納する。有形な非一時的コンピュータ可読媒体500は、コンピュータバス504を通して、プロセッサ502によってアクセスされてよい。さらに、有形な非一時的コンピュータ可読媒体500は、プロセッサ502に方法300を含む、本明細書に記載の複数の方法を実行するよう命令すべく構成されたコードを含んでよい。
【0038】
図5に示される通り、本明細書に記載の様々なソフトウェアコンポーネントが有形な非一時的コンピュータ可読媒体500上に格納されてよい。例えば、モジュール510はカノニカルイメージングクラスまたはテンプレート140を使用し、一連のカノニカルイメージングファンクションを作成すべく構成されてよい。モジュール520は、モジュール510によって作成された一連のカノニカルイメージングファンクションまたは当該一連のカノニカルイメージングファンクションのサブセットを自動的に、融合イメージングファンクション200等の融合イメージングファンクションに融合すべく構成されてよい。モジュール530は、融合イメージングファンクションを実行すべく構成されてよい。
【0039】
図5のブロック図は、有形な非一時的コンピュータ可読媒体500が、図5に示されるすべてのコンポーネントを含むことを意味するよう意図されていない。さらに、有形な非一時的コンピュータ可読媒体500は特定の実装の詳細に応じ、図5に不図示の任意の数の追加のコンポーネントを含んでよい。
【0040】
以下の例は、単一のモノリシックファンクションに代わる、一連の仮想ファンクションとして実装されたカノニカルイメージングクラスまたはテンプレートのC++実装を示す。これにより、各ファンクションが別々に選ばれ、融合イメージングファンクションに融合されることを可能にする。
【0041】
//
//単一のモノリシックファンクションの代わりに、このクラスに、
//複数のカノニカルファンクションが一連の仮想ファンクションとして実装されている。
//この方法により、各ファンクションが別々に選ばれ、複数の合成ファンクションに融合されるようにできる。//
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());
}
}
};
【0042】
以下の例は、カノニカルイメージングクラスまたはテンプレート140を使用する、一連の3つのカノニカルイメージングファンクション(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
{
. . .
}
【0043】
例1 複数のカノニカルイメージングファンクションを生成するための装置が本明細書に記載される。上記装置は、カノニカルイメージングファンクションテンプレートを提供するためのロジック、および1または複数のモノリシックイメージングファンクションから一連のカノニカルイメージングファンクションを形成するためのロジックを含む。上記複数のカノニカルイメージングファンクションの各々はカノニカルイメージングファンクションテンプレートに従う。上記装置はまた、上記一連のカノニカルイメージングファンクションの1または複数のカノニカルイメージングファンクションを融合イメージングファンクションに融合するためのロジックを含む。
【0044】
各カノニカルイメージングファンクションは、完全なファンクションの1または複数のセクションとして定義されてよく、各ファンクションセクションは完全なファンクションを作成すべく、結合される。さらに、上記一連のカノニカルイメージングファンクションの各カノニカルイメージングファンクションは、一連の共有される固有のセクションとしてのグループに結合されてよい。一連のカノニカルイメージングファンクションを形成することは、カノニカルイメージングファンクションテンプレートを使用し、一連のカノニカルイメージングファンクションを単一の合成ファンクションに自動的にコンパイルするためのロジックを含んでよい。さらに、1または複数のカノニカルイメージングファンクションを単一の合成ファンクションに融合することは、複数の融合イメージングファンクションを新規コードに自動的にコンパイルまたは変換するためのロジックを含んでよい。このコードは実行可能なものであるか、あるいはさらに別の高水準言語または中間言語に変換またはコンパイル可能であるか、あるいは対象のマシンのマシンコードにアセンブル可能なものであってよい。カノニカルイメージングファンクションテンプレートは、一連の合成カノニカルファンクションからのファンクションプリアンブルを含む開始ファンクションセクションを含んでよい。また、カノニカルイメージングファンクションテンプレートは、一連のカノニカルイメージングファンクションからのデータ読み取り、計算、およびデータ書き込み操作の複数のセクションを含むべく構成された共通ループセクションを含んでよい。カノニカルイメージングファンクションテンプレートは、一連のカノニカルファンクションセクションからのファンクションポストアンブルを含む終了ファンクションセクションを含んでよい。また、カノニカルイメージングファンクションテンプレートはさらに、パラメータチェッカセクション、メモリ割当セクション、ループ次元セクション、メモリ解放セクション、ステータスレポータセクション、一連のカノニカルファンクションで定義された他の複数のファンクションセクション、あるいはこれらの任意の組み合わせのうちの少なくとも1つを含んでよい。複数のカノニカルイメージングファンクションを融合することは、カノニカルイメージングテンプレートを使用し、一連のカノニカルイメージングファンクションの1または複数のカノニカルイメージングファンクションを結合することを含んでよい。上記装置は、プリントデバイスまたはイメージキャプチャメカニズムであってよい。
【0045】
例2 本明細書には、複数のカノニカルイメージングファンクションを生成するためのシステムが記載される。上記システムはプロセッサを含み、プロセッサは複数のイメージングファンクションを備えるコードを実行する。システムはまた、1または複数のモノリシックイメージングファンクションから形成される一連のカノニカルイメージングファンクションを含み、上記複数のカノニカルイメージングファンクションの各々は、カノニカルイメージングファンクションテンプレートに従う。 上記一連のカノニカルイメージングファンクションの1または複数のカノニカルイメージングファンクションは、イメージングファンクションに融合される。
【0046】
各カノニカルイメージングファンクションは、完全なファンクションの1または複数のセクションとして定義されてよく、各ファンクションセクションは完全なファンクションを作成すべく、結合される。上記一連のカノニカルイメージングファンクションの各カノニカルイメージングファンクションはまた、一連の共有される固有のセクションとしてのグループに結合されてよい。一連のカノニカルイメージングファンクションは、カノニカルイメージングファンクションテンプレートを使用し、一連のカノニカルイメージングファンクションを単一の合成ファンクションに自動的にコンパイルすることによって形成されてよい。さらに、1または複数のカノニカルイメージングファンクションを単一の合成ファンクションに融合することは、複数の融合イメージングファンクションを新規コードに自動的にコンパイルまたは変換することを含んでよい。ここで、新規コードは実行可能なものであるか、あるいはさらに別の高水準言語または中間言語に変換またはコンパイル可能なものであるか、あるいは対象のマシンのマシンコードにアセンブル可能なものであってよい。カノニカルイメージングファンクションテンプレートは、一連の合成カノニカルファンクションからのファンクションプリアンブルを含む開始ファンクションセクション、一連のカノニカルファンクションからのデータ読み取り、計算、データ書き込み操作の複数のセクションを含むべく構成された共通ループセクション、および一連のカノニカルファンクションセクションからのファンクションポストアンブルを含む終了ファンクションセクションを含んでよい。また、カノニカルイメージングファンクションテンプレートはさらに、パラメータチェッカセクション、メモリ割当セクション、ループ次元セクション、メモリ解放セクション、ステータスレポータセクション、一連のカノニカルファンクションで定義された他の複数のファンクションセクション、あるいはこれらの任意の組み合わせのうちの少なくとも1つを含んでよい。複数のカノニカルイメージングファンクションを融合することは、カノニカルイメージングテンプレートを使用し、一連のカノニカルイメージングファンクションの1または複数のカノニカルイメージングファンクションを結合することを含んでよい。
【0047】
例3 本明細書には、少なくとも1つのマシン可読媒体が記載される。 非一時的マシン可読媒体は、デバイス上での実行に応じ、デバイスに対し、複数のモノリシックイメージングファンクションから一連のカノニカルイメージングファンクションを形成させ、上記複数のカノニカルイメージングファンクションの各々はカノニカルイメージングファンクションテンプレートに従っており、かつ、上記一連のカノニカルイメージングファンクションの1または複数のカノニカルイメージングファンクションを融合イメージングファンクションに融合させる複数の命令を有する。
【0048】
非一時的マシン可読媒体はさらに、デバイス上での実行時、デバイスに対し、複数のカノニカルイメージングファンクションのデータ読み取り、計算、およびデータ書き込みの複数の操作を融合イメージングファンクションの外側ループに配置させる複数の命令を含んでよい。また、非一時的マシン可読媒体はさらに、デバイス上での実行時、デバイスに対し、融合イメージングファンクションを実行させる複数の命令を含んでよい。
【0049】
上記の説明において、開示された発明主題の様々な態様が記載された。本発明主題の深い理解に供すべく、特定の複数の番号、複数のシステムおよび構成が説明目的で記載された。しかしながら、本開示の利益を有する当業者にとって、本発明主題は特定の詳細がなくても、実施できるのは明らかである。他の複数の例において、本開示の発明主題を不明瞭にしないよう、周知の複数の機能、コンポーネントまたはモジュールは省略、簡略化、結合、あるいは分離された。
【0050】
本開示の発明主題の様々な実施形態は、ハードウェア、ファームウェア、ソフトウェア、またはこれらの組み合わせとして実装されてよい。また、本開示の発明主題の様々な実施形態は、プログラムコードへの参照またはプログラムコードとの連携によって記述されてよい。そのようなプログラムコードとしては、複数の命令、複数のファンクション、複数の手順、複数のデータ構造、ロジック、複数のアプリケーションプログラム、設計のシミュレーション、エミュレーション、および製作のための複数の設計表現または複数のフォーマット等がある。これらはマシンによりアクセスされると、マシンに複数のタスクを実行させ、複数の抽象的なデータ型または複数の低水準ハードウェアコンテキストを定義させ、あるいは結果を生成させることになる。
【0051】
複数のシミュレーションについて、プログラムコードは、ハードウェア記述言語または別の機能記述言語を使用してハードウェアを示してよい。ハードウェア記述言語または別の機能記述言語は基本的に、設計されるハードウェアの予期される実行方法のモデルを提供するものである。プログラムコードは、コンパイル可能および/または解釈可能なアセンブリまたは機械言語、またはデータであってよい。さらに、当技術分野において、いずれの形態においても、動作を実行するまたは結果を生じさせる、ソフトウェアについて言及するのは一般的である。そのような複数の表現は単に、プロセッサに動作を実行させ、または結果を生成させる、処理システムによるプログラムコードの実行を言及する簡潔な方法にすぎない。
【0052】
プログラムコードは、例えば揮発性および/または不揮発性メモリに格納されてよい。そのようなメモリとしては、ソリッドステートメモリ、複数のハードドライブ、複数のフロッピディスク、複数の光ストレージ、複数のテープ、フラッシュメモリ、複数のメモリスティック、複数のデジタルビデオディスク、複数のデジタル多目的ディスク(DVD)等に加え、機械アクセス可能な生物学的状態記憶ストレージ等のさらに特殊な媒体を含む、複数の記憶デバイスおよび/または関連付けられた機械可読媒体または機械アクセス可能媒体がある。機械可読媒体は、複数のアンテナ、複数の光ファイバ、複数の通信インタフェース等、機械によって読み取り可能な形式で情報を格納、送信、受信する任意の有形なメカニズムを含んでよい。プログラムコードは、複数のパケット、シリアルデータ、パラレルデータ等の形態で送信されてよく、圧縮形式または暗号化形式で使用されてよい。
【0053】
プログラムコードは、複数のモバイルコンピュータまたは据置コンピュータ、複数の携帯情報端末、複数のセットトップボックス、複数の携帯電話とポケベル、および他の複数の電子デバイス等の複数のプログラム可能なマシン上で実行される複数のプログラムに実装されてよい。各マシンはプロセッサ、プロセッサにより読み取り可能な揮発性および/または不揮発性メモリ、少なくとも1つの入力デバイスおよび/または1または複数の出力デバイスを含む。記載された複数の実施形態を実行し、かつ、出力情報を生成させるべく、プログラムコードは入力デバイスを使用して入力されたデータに適用されてよい。出力情報は1または複数の出力デバイスに適用されてよい。当業者は、本開示の発明主題に係る複数の実施形態は、複数のマルチプロセッサシステムまたはマルチコアプロセッサシステム、複数のミニコンピュータ、複数のメインフレームコンピュータに加え、複数のパーベイシブコンピュータまたは複数の小型コンピュータまたは任意のデバイスに仮想的に埋め込み可能な複数のプロセッサを含む、様々なコンピュータシステム構成とともに実施できることがわかる。本開示の発明主題に係る複数の実施形態は、また複数のタスクが通信ネットワークを介してリンクされた複数のリモート処理デバイスによって実行され得る、複数の分散コンピューティング環境において実施できる。
【0054】
複数の操作はシーケンシャルプロセスとして記述可能であるが、これら操作の一部は実際には並列で、同時に、および/または分散環境において、並びに複数のシングルプロセッサマシンまたはマルチプロセッサマシンによってアクセスされるためローカルおよび/またはリモートに格納されたプログラムコードとともに実行可能である。さらに、いくつかの実施形態では、本開示の主題の精神を逸脱することなく、複数の操作の順序を変更可能である。プログラムコードは、複数の埋め込みコントローラによってまたは複数の埋め込みコントローラとの連携で使用されてよい。
【0055】
本開示の発明主題は、例示の複数の実施形態に照らし記載されたが、この記載は限定的意味で解釈されることを意図していない。本発明主題に係る他の実施形態に加え、例示の複数の実施形態に対する様々な修正は、本開示の発明主題が属する技術分野の当業者にとって明らかであり、これら修正は本開示の発明主題の範囲内に属するとみなされる。
本実施形態の例を下記の各項目として示す。
[項目1]
複数のカノニカルイメージングファンクションを生成するための装置であって、
カノニカルイメージングファンクションテンプレートを提供するためのロジックと、
1または複数のモノリシックイメージングファンクションからセットのカノニカルイメージングファンクションを形成するためのロジックであって、前記セットのカノニカルイメージングファンクションの各々は前記カノニカルイメージングファンクションテンプレートに従うロジックと、
前記セットのカノニカルイメージングファンクションの1または複数のカノニカルイメージングファンクションを融合イメージングファンクションに融合するためのロジックと
を備える装置。
[項目2]
各カノニカルイメージングファンクションが、完全なファンクションの1または複数のセクションとして定義されており、前記完全なファンクションを作成すべく、各ファンクションセクションが結合される、項目1に記載の装置。
[項目3]
前記セットのカノニカルイメージングファンクションの各カノニカルイメージングファンクションが、セットの共有される固有のセクションとしてのグループに結合される、項目2に記載の装置。
[項目4]
セットのカノニカルイメージングファンクションを形成することは、前記カノニカルイメージングファンクションテンプレートを使用し、前記セットのカノニカルイメージングファンクションを共に単一の合成ファンクションに自動的にコンパイルするためのロジックを有する、項目1から3のいずれか一項に記載の装置。
[項目5]
前記1または複数のカノニカルイメージングファンクションを単一の合成ファンクションに融合することは、複数の融合イメージングファンクションを新規コードに自動的にコンパイルまたは変換するためのロジックを有し、
前記新規コードは実行可能なものであるか、あるいは、別の高水準言語または中間言語にさらに変換またはコンパイル可能なものであるか、あるいは対象のマシンのマシンコードにアセンブル可能なものである、項目1から4のいずれか一項に記載の装置。
[項目6]
前記カノニカルイメージングファンクションテンプレートが、セットの合成カノニカルファンクションからのファンクションプリアンブルを含む開始ファンクションセクションと、セットのカノニカルイメージングファンクションからのデータ読み取り、計算、およびデータ書き込み操作の複数のセクションを含むべく構成された共通ループセクションと、セットのカノニカルファンクションセクションからのファンクションポストアンブルを含む終了ファンクションセクションとを有する、項目1から5のいずれか一項に記載の装置。
[項目7]
さらに、前記カノニカルイメージングファンクションテンプレートが、パラメータチェッカセクション、メモリ割当セクション、ループ次元セクション、メモリ解放セクション、ステータスレポータセクション、セットのカノニカルファンクションで定義された他の複数のファンクションセクション、あるいはこれらの任意の組み合わせのうちの少なくとも1つを有する、項目6に記載の装置。
[項目8]
前記複数のカノニカルイメージングファンクションを融合することは、前記カノニカルイメージングファンクションテンプレートを使用し、前記セットのカノニカルイメージングファンクションの1または複数のカノニカルイメージングファンクションを結合することを有する、項目1から7のいずれか一項に記載の装置。
[項目9]
前記装置がプリントデバイスである、項目1から8のいずれか一項に記載の装置。
[項目10]
前記装置がイメージキャプチャメカニズムである、項目1から8のいずれか一項に記載の装置。
[項目11]
複数のカノニカルイメージングファンクションを生成するためのシステムであって、
複数のイメージングファンクションを含むコードを実行するプロセッサと、
1または複数のモノリシックイメージングファンクションから形成されるセットのカノニカルイメージングファンクションとを備え、
前記セットのカノニカルイメージングファンクションの各々はカノニカルイメージングファンクションテンプレートに従い、前記セットのカノニカルイメージングファンクションの1または複数のカノニカルイメージングファンクションがイメージングファンクションに融合される、システム。
[項目12]
各カノニカルイメージングファンクションが、完全なファンクションの1または複数のセクションとして定義されており、前記完全なファンクションを作成すべく、各ファンクションセクションが共に結合される、項目11に記載のシステム。
[項目13]
前記セットのカノニカルイメージングファンクションの各カノニカルイメージングファンクションが、セットの共有される固有のセクションとしてのグループに共に結合される、項目11に記載のシステム。
[項目14]
セットのカノニカルイメージングファンクションを形成することは、前記カノニカルイメージングファンクションテンプレートを使用し、前記セットのカノニカルイメージングファンクションを単一の合成ファンクションに自動的にコンパイルするためのロジックを有する、項目11から13のいずれか一項に記載のシステム。
[項目15]
前記1または複数のカノニカルイメージングファンクションを単一の合成ファンクションに融合することは、複数の融合イメージングファンクションを新規コードに自動的にコンパイルまたは変換することを有し、
前記新規コードは実行可能なものであるか、あるいは、別の高水準言語または中間言語にさらに変換またはコンパイル可能なものであるか、あるいは対象のマシンのマシンコードにアセンブル可能なものである、項目11から14のいずれか一項に記載のシステム。
[項目16]
前記カノニカルイメージングファンクションテンプレートが、セットの合成カノニカルファンクションからのファンクションプリアンブルを含む開始ファンクションセクションと、セットのカノニカルイメージングファンクションからのデータ読み取り、計算、およびデータ書き込み操作の複数のセクションを含むべく構成された共通ループセクションと、セットのカノニカルファンクションセクションからのファンクションポストアンブルを含む終了ファンクションセクションとを有する、項目11から15のいずれか一項に記載のシステム。
[項目17]
さらに、前記カノニカルイメージングファンクションテンプレートが、パラメータチェッカセクション、メモリ割当セクション、ループ次元セクション、メモリ解放セクション、ステータスレポータセクション、セットのカノニカルファンクションで定義された他の複数のファンクションセクション、あるいはこれらの任意の組み合わせのうちの少なくとも1つを有する、項目16に記載のシステム。
[項目18]
前記複数のカノニカルイメージングファンクションを融合することは、前記カノニカルイメージングファンクションテンプレートを使用し、前記セットのカノニカルイメージングファンクションの1または複数のカノニカルイメージングファンクションを結合することを有する、項目11から17のいずれか一項に記載のシステム。
[項目19]
少なくとも1つのプログラムであって、前記少なくとも1つのプログラムはデバイス上での実行に応じ、前記デバイスに対し、
複数のモノリシックイメージングファンクションからセットのカノニカルイメージングファンクションを形成させる手順であって、前記セットのカノニカルイメージングファンクションの各々はカノニカルイメージングファンクションテンプレートに従う手順と、
前記セットのカノニカルイメージングファンクションの1または複数のカノニカルイメージングファンクションを融合イメージングファンクションに融合させる手順とを備えるプログラム。
[項目20]
さらに、デバイス上での実行時、前記デバイスに対し、前記複数のカノニカルイメージングファンクションのデータ読み取り、計算、およびデータ書き込みの複数の操作を前記融合イメージングファンクションの外側ループに配置させる手順を備える、項目19に記載のプログラム。
[項目21]
さらに、デバイス上での実行時、前記デバイスに対し、前記融合イメージングファンクションを実行させる手順を備える、項目19に記載のプログラム。
図1A
図1B
図2
図3
図4
図5