(57)【特許請求の範囲】
【請求項１】
第１コアと、
前記第１コアと並列処理を行う第２コアと、
前記第１コアおよび前記第２コアで共用されるキャッシュメモリと、
それぞれにアドレスが対応付けられている複数個のエントリ値を含むデータを記憶した外部メモリと
を有し、
前記第１コアは、
前記データの一部であって１個又は複数個の前記エントリ値からなる第１部分データのプリロードを要求する第１要求手段を有し、
前記第２コアは、
前記データのうち前記第１部分データと異なる一部であって１個又は複数個の前記エントリ値からなる第２部分データのプリロードを要求する第２要求手段を有し、
前記キャッシュメモリは、
前記第１要求手段からの要求および前記第２要求手段からの要求に応じて、前記第１部分データおよび前記第２部分データを前記外部メモリから読み出す読み出し手段を有し、
前記第１コアおよび前記第２コアは、それぞれ、前記キャッシュメモリに記憶されている前記第１部分データおよび前記第２部分データの少なくとも一部を用いた処理を行う
情報処理装置。
【請求項２】
前記第１コアおよび前記第２コアを含むＮ個のコアと、
前記データを、各々前記アドレスが連続した１個又は複数個の前記エントリ値からなる部分であるＮ個の部分データに等分し、各部分データを前記Ｎ個のコアのいずれかに割り当てる割り当て手段と
を有する請求項１に記載の情報処理装置。
【請求項３】
前記第１コアおよび前記第２コアを含むＮ個のコアと、
前記データを、各々前記アドレスが連続した１個又は複数個の前記エントリ値からなる部分を複数含むＮ個の部分データに等分し、各部分データを前記Ｎ個のコアのいずれかに割り当てる割り当て手段と
を有し、
前記部分データに含まれる一の部分と他の部分とはアドレスが連続していない
請求項１に記載の情報処理装置。
【請求項４】
前記外部メモリはＤＲＡＭを含み、
前記アドレスが連続した部分のデータサイズは、前記読み出し手段が前記ＤＲＡＭからデータを読み出す際の１回当たりのデータ読み出し量以下である
ことを特徴とする請求項２または３に記載の情報処理装置。
【請求項５】
前記第１コアおよび前記第２コアにおける処理は、画素に対応するインデックスを画素値に変換する処理であり、
前記データは、前記インデックスを前記画素値に変換するためのテーブルである
ことを特徴とする請求項１ないし４のいずれか一項に記載の情報処理装置。
【請求項６】
第１コアと、
前記第１コアと並列処理を行う第２コアと、
前記第１コア専用の第１キャッシュメモリと、
前記第２コア専用の第２キャッシュメモリと、
前記第１コアおよび前記第２コアで共用されるキャッシュメモリと、
それぞれにアドレスが対応付けられている複数個のエントリ値を含むデータを記憶した外部メモリと
を有し、
前記第１コアは、
前記データの一部であって１個又は複数個の前記エントリ値からなる第１部分データのプリロードを要求する第１要求手段を有し、
前記第２コアは、
前記データのうち前記第１部分データと異なる一部であって１個又は複数個の前記エントリ値からなる第２部分データのプリロードを要求する第２要求手段を有し、
前記キャッシュメモリは、
前記第１要求手段からの要求および前記第２要求手段からの要求に応じて、前記第１部分データおよび前記第２部分データを前記外部メモリから読み出す読み出し手段を有し、
前記第１キャッシュメモリは、
前記第１要求手段からの要求に応じて、前記第１部分データを前記キャッシュメモリから取得する第１取得手段を有し、
前記第２キャッシュメモリは、
前記第２要求手段からの要求に応じて、前記第２部分データを前記キャッシュメモリから取得する第２取得手段を有し、
前記第１コアは、前記第１キャッシュメモリに記憶されている前記第１部分データを用いた処理を行い、
前記第２コアは、前記第２キャッシュメモリに記憶されている前記第２部分データを用いた処理を行う
情報処理装置。
【請求項７】
請求項１ないし６のいずれか一項に記載の情報処理装置と、
前記第１コアおよび前記第２コアで処理された結果に応じて画像を形成する画像形成手段と
を有する画像形成装置。
【請求項８】
第１コアと、
前記第１コアと並列処理を行う第２コアと、
前記第１コアおよび前記第２コアで共用されるキャッシュメモリと、
データを記憶した外部メモリと、
を有し、
前記第１コアは、
前記データの一部である第１部分データのプリロードを要求する第１要求手段を有し、
前記第２コアは、
前記データのうち前記第１部分データと異なる一部である第２部分データのプリロードを要求する第２要求手段を有し、
前記第１コアおよび前記第２コアにおける処理は、画素に対応するインデックスを画素値に変換する処理であり、
前記データは、前記インデックスを前記画素値に変換するためのテーブルであり、
前記キャッシュメモリは、
前記第１要求手段からの要求および前記第２要求手段からの要求に応じて、前記第１部分データおよび前記第２部分データを前記外部メモリから読み出す読み出し手段を有し、
前記第１コアおよび前記第２コアは、それぞれ、前記キャッシュメモリに記憶されている前記第１部分データおよび前記第２部分データの少なくとも一部を用いた処理を行う
情報処理装置。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、情報処理装置および画像形成装置に関する。
【背景技術】
【０００２】
画像処理装置等の情報処理装置において、外部メモリから読み出したデータを用いた処理が行われる。しかし、メモリアクセス中はコアの処理はストール（待機）するため、外部メモリへのアクセスが頻繁になると処理の高速化を阻害する要因となる。例えば特許文献１には、外部メモリのデータをプロセッサ内部のキャッシュメモリにあらかじめコピー（プリロード）しておき、プロセッサのコアはキャッシュメモリからデータを読み出して処理を行う技術が記載されている。
【先行技術文献】
【特許文献】
【０００３】
【特許文献１】特開２０１１−２２３１４５号公報
【発明の概要】
【発明が解決しようとする課題】
【０００４】
近年プロセッサのコアはマルチコア化している。マルチコアは並列的に処理を行うことで高速化を図るものであるが、外部メモリに記憶されているデータをプリロードする時間を短縮することはできなかった。
【０００５】
本発明は、複数コアを有する情報処理装置において、外部メモリに記憶されているデータをプリロードする時間を短縮する技術を提供する。
【課題を解決するための手段】
【０００６】
本発明は、第１コアと、前記第１コアと並列処理を行う第２コアと、前記第１コアおよび前記第２コアで共用されるキャッシュメモリと、それぞれにアドレスが対応付けられている複数個のエントリ値を含むデータを記憶した外部メモリとを有し、前記第１コアは、前記データの一部であって１個又は複数個の前記エントリ値からなる第１部分データのプリロードを要求する第１要求手段を有し、前記第２コアは、前記データのうち前記第１部分データと異なる一部であって１個又は複数個の前記エントリ値からなる第２部分データのプリロードを要求する第２要求手段を有し、前記キャッシュメモリは、前記第１要求手段からの要求および前記第２要求手段からの要求に応じて、前記第１部分データおよび前記第２部分データを前記外部メモリから読み出す読み出し手段を有し、前記第１コアおよび前記第２コアは、それぞれ、前記キャッシュメモリに記憶されている前記第１部分データおよび前記第２部分データの少なくとも一部を用いた処理を行う情報処理装置を提供する。
【０００７】
この情報処理装置は、前記第１コアおよび前記第２コアを含むＮ個のコアと、前記データを、各々前記アドレスが連続した１個又は複数個の前記エントリ値からなる部分であるＮ個の部分データに等分し、各部分データを前記Ｎ個のコアのいずれかに割り当てる割り当て手段とを有してもよい。
【０００８】
この情報処理装置は、前記第１コアおよび前記第２コアを含むＮ個のコアと、前記データを、各々前記アドレスが連続した１個又は複数個の前記エントリ値からなる部分を複数含むＮ個の部分データに等分し、各部分データを前記Ｎ個のコアのいずれかに割り当てる割り当て手段とを有し、前記部分データに含まれる一の部分と他の部分とはアドレスが連続していない構成であってもよい。
【０００９】
前記外部メモリはＤＲＡＭを含み、前記アドレスが連続した部分のデータサイズは、前記読み出し手段が前記ＤＲＡＭからデータを読み出す際の１回当たりのデータ読み出し量以下であってもよい。
【００１０】
前記第１コアおよび前記第２コアにおける処理は、画素に対応するインデックスを画素値に変換する処理であり、前記データは、前記インデックスを前記画素値に変換するためのテーブルであってもよい。
【００１１】
また、本発明は、第１コアと、前記第１コアと並列処理を行う第２コアと、前記第１コア専用の第１キャッシュメモリと、前記第２コア専用の第２キャッシュメモリと、前記第１コアおよび前記第２コアで共用されるキャッシュメモリと、それぞれにアドレスが対応付けられている複数個のエントリ値を含むデータを記憶した外部メモリとを有し、前記第１コアは、前記データの一部であって１個又は複数個の前記エントリ値からなる第１部分データのプリロードを要求する第１要求手段を有し、前記第２コアは、前記データのうち前記第１部分データと異なる一部であって１個又は複数個の前記エントリ値からなる第２部分データのプリロードを要求する第２要求手段を有し、前記キャッシュメモリは、前記第１要求手段からの要求および前記第２要求手段からの要求に応じて、前記第１部分データおよび前記第２部分データを前記外部メモリから読み出す読み出し手段を有し、前記第１キャッシュメモリは、前記第１要求手段からの要求に応じて、前記第１部分データを前記キャッシュメモリから取得する第１取得手段を有し、前記第２キャッシュメモリは、前記第２要求手段からの要求に応じて、前記第２部分データを前記キャッシュメモリから取得する第２取得手段を有し、前記第１コアは、前記第１キャッシュメモリに記憶されている前記第１部分データを用いた処理を行い、前記第２コアは、前記第２キャッシュメモリに記憶されている前記第２部分データを用いた処理を行う情報処理装置を提供する。
【００１２】
さらに、本発明は、上記いずれかの情報処理装置と、前記第１コアおよび前記第２コアで処理された結果に応じて画像を形成する画像形成手段とを有する画像形成装置を提供する。
また、本発明は、第１コアと、前記第１コアと並列処理を行う第２コアと、前記第１コアおよび前記第２コアで共用されるキャッシュメモリと、データを記憶した外部メモリと、を有し、前記第１コアは、前記データの一部である第１部分データのプリロードを要求する第１要求手段を有し、前記第２コアは、前記データのうち前記第１部分データと異なる一部である第２部分データのプリロードを要求する第２要求手段を有し、前記第１コアおよび前記第２コアにおける処理は、画素に対応するインデックスを画素値に変換する処理であり、前記データは、前記インデックスを前記画素値に変換するためのテーブルであり、前記キャッシュメモリは、前記第１要求手段からの要求および前記第２要求手段からの要求に応じて、前記第１部分データおよび前記第２部分データを前記外部メモリから読み出す読み出し手段を有し、前記第１コアおよび前記第２コアは、それぞれ、前記キャッシュメモリに記憶されている前記第１部分データおよび前記第２部分データの少なくとも一部を用いた処理を行う情報処理装置を提供する。
【発明の効果】
【００１３】
請求項１に係る情報処理装置によれば、外部メモリに記憶されているデータ全体を第１コアおよび第２コアそれぞれがプリロードする場合と比較して、外部メモリに記憶されているデータをプリロードする時間を短縮することができる。
請求項２に係る情報処理装置によれば、外部メモリに記憶されているデータ全体を第１コアおよび第２コアそれぞれがプリロードする場合と比較して、各コアからのデータ要求の回数を１／Ｎに低減することができる。
請求項３に係る情報処理装置によれば、データを単純にＮ等分する場合と比較して、外部メモリからのデータの読み出し時間を短縮することができる。
請求項４に係る情報処理装置によれば、アドレスが連続した部分のデータサイズが細切れである場合と比較して、外部メモリへのアクセス回数を低減することができる。
請求項５に係る情報処理装置によれば、インデックスを画素値に変換する画像処理に用いるテーブルをプリロードする時間を短縮することができる。
請求項６に係る情報処理装置によれば、外部メモリに記憶されているデータ全体を第１コアおよび第２コアそれぞれがプリロードする場合と比較して、外部メモリに記憶されているデータをプリロードする時間を短縮することができる。
請求項７に係る画像形成装置によれば、外部メモリに記憶されているデータ全体を第１コアおよび第２コアそれぞれがプリロードする場合と比較して、外部メモリに記憶されているデータをプリロードする時間を短縮することができる。
【図面の簡単な説明】
【００１４】
【図１】関連技術に係るＣＰＵ９０のキャッシュメモリ構成を例示する図
【図２】単一のコアによるプリロード処理を例示するシーケンスチャート
【図３】複数のコアによるプリロード処理を例示するシーケンスチャート
【図４】一実施形態に係る画像形成装置１の構成を例示する図
【図５】データのプリロードに関する画像形成装置１の機能構成を例示する図
【図６】画像形成装置１における画像処理を例示するフローチャート
【図７】ＬＵＴの分割の概要を示す模式図
【図８】ＬＵＴの分割の具体例を示す図
【図９】ＬＵＴの分割の別の具体例を示す図
【図１０】画像形成装置１におけるプリロード処理を例示するシーケンスチャート
【図１１】変形例に係るＬＵＴの分割の概要を示す模式図
【発明を実施するための形態】
【００１５】
１．概要
まず一例として以下の画像処理を考える。入力画像の画素値からインデックス値が算出される。ルックアップテーブルから、インデックス値で指示されるエントリ値が取得される。取得されたエントリ値から出力画素値が算出される。このような画像処理を高速化する方法の一つに、いわゆるマルチコアのＣＰＵを用い、異なる領域（例えば奇数行と偶数行）の画素をそれぞれ別のコアで並列処理させる方法がある。
【００１６】
具体的に、各コアは、（１）入力画素の読み込み、（２）インデックス値の算出、（３）ルックアップテーブルからエントリ値の読み込み、（４）出力画素値の算出、および（５）出力画素値の記憶、という処理を行う。このうち処理（１）、（３）、および（５）は外部メモリへのアクセスを伴う。外部メモリとは、ＣＰＵと異なるチップに形成されたメモリをいい、例えばコンピュータの主記憶装置（メインメモリ）がこれに該当する。外部メモリにアクセスしているときはコアの命令実行はストール（待機状態となる）する。外部メモリへのアクセスは相対的に遅いため、外部メモリへのアクセスが頻繁に発生すると、それは高速化を阻む要因となる。
【００１７】
この問題に対処するため、外部メモリに記憶されているルックアップテーブルを、画像処理に先立ってキャッシュメモリにコピーすなわちプリロードする技術が知られている。ＬＵＴ（Look Up Table）をキャッシュメモリにプリロードすることによって処理（３）における外部メモリへのアクセスをなくすことができる。
【００１８】
図１は、関連技術に係るＣＰＵ９０のキャッシュメモリ構成を例示する図である。ＣＰＵ９０は、複数のコア、この例ではコア９０１〜９０４の４つのコアを有する。ここで、プロセッサの「コア」とは、プロセッサのうち命令の実行および演算を行う部分をいう。ＣＰＵ９０は、さらに、キャッシュメモリ９１１〜９１４およびキャッシュメモリ９２１を有する。キャッシュメモリ９１１〜９１４は一次キャッシュ（いわゆるＬ１キャッシュ）であり、それぞれ、コア９０１〜９０４に専用のものである。キャッシュメモリ９２１は二次キャッシュ（いわゆるＬ２キャッシュ）である。キャッシュメモリ９２１はコア９０１〜９０４で共用される。なお一般にはＬ１キャッシュまで含めて「コア」という場合があるが、ここでは「コア」にＬ１キャッシュは含まれない。
【００１９】
一次キャッシュとはコアから最優先にアクセスされるキャッシュメモリをいい、二次キャッシュとは一次キャッシュの次の優先順位でアクセスされるキャッシュメモリをいう。一次キャッシュは、二次キャッシュよりも高速でかつ容量が小さい。メインメモリ（外部メモリ）へのアクセス要求が発生すると、コアはまずアクセス先のアドレスのデータが一次キャッシュに格納されているか調べる。アクセス先のアドレスのデータ（以下単に「アクセス先のデータ」という）が一次キャッシュに格納されていた場合、コアは一次キャッシュからデータを読み出す。アクセス先のデータがキャッシュメモリに格納されていることを「ヒット」といい、ヒットが発生する割合を「ヒット率」という。アクセス先のデータが一次キャッシュに格納されていなかった場合、コアは、アクセス先のデータが二次キャッシュに格納されていないか調べる。アクセス先のデータが二次キャッシュに格納されていた場合、コアは二次キャッシュからデータを読み出す。アクセス先のデータが二次キャッシュに格納されていなかった場合、コアは外部メモリである主記憶装置３０からデータを読み出す。
【００２０】
コアは、メモリ空間上のアドレスからデータを読み出す際、まずそのコア専用のＬ１キャッシュに対して読み出し要求を行う。Ｌ１キャッシュは、指定されたアドレスのデータがＬ１キャッシュ内に記憶されているか確認する。指定されたアドレスのデータがＬ１キャッシュ内に記憶されている場合、Ｌ１キャッシュは、指定されたアドレスのデータを要求元のコアに出力する。指定されたアドレスのデータがＬ１キャッシュ内に記憶されていない場合、Ｌ１キャッシュは、Ｌ２キャッシュに対して読み出し要求を行う。Ｌ２キャッシュは、指定されたアドレスのデータがＬ２キャッシュ内に記憶されているか確認する。指定されたアドレスのデータがＬ２キャッシュ内に記憶されている場合、Ｌ２キャッシュは、指定されたアドレスのデータを要求元のＬ１キャッシュに出力する。指定されたアドレスのデータがＬ２キャッシュ内に記憶されていない場合、Ｌ２キャッシュは、主記憶装置３０に対して読み出し要求を行う。データの読み出し要求を受けると、主記憶装置３０は、要求されたデータをＬ２キャッシュに出力する。Ｌ２キャッシュは、主記憶装置３０から読み出されたデータを自身で記憶し、さらに、そのデータの要求元であるＬ１キャッシュに出力する。
【００２１】
次に、図１のＣＰＵ９０を用いたＬＵＴのプリロードについて説明する。マルチコアによるＬＵＴのプリロードの説明に先立ち、まずは単一のコアによるＬＵＴのプリロードについて説明する。ここでは、ＬＵＴのデータサイズが、Ｌ１キャッシュ（１つ）の記憶容量よりは大きく、かつＬ２キャッシュの記憶容量よりは小さい例を説明する。
【００２２】
図２は、単一のコア（コア＃１。例えば図１のコア９０１）によるＬＵＴの関連技術に係るプリロード処理を例示するシーケンスチャートである。以下においては、ＬＵＴのデータのうちアドレスｋのデータ（エントリ値）をＰ［ｋ］と表す。また、コア＃１に対応するＬ１キャッシュをＬ１キャッシュ＃１（図面においてはＬ１＃１）と表す。この例で、図２のフローの開始前においては、Ｌ１キャッシュおよびＬ２キャッシュにはＬＵＴのデータは記憶されていない。
【００２３】
まず、コア＃１は、Ｌ１キャッシュ＃１に対し、Ｐ［０］の読み出しを要求する（ステップＳ８０１）。Ｌ１キャッシュ＃１は、Ｌ２キャッシュに対し、Ｐ［０］の読み出しを要求する（ステップＳ８０２）。Ｌ２キャッシュは、外部メモリ（主記憶装置３０）に対してＰ［０］の読み出しを要求する（ステップＳ８０３）。外部メモリは、記憶しているデータのうちＰ［０］をＬ２キャッシュに出力する（ステップＳ８０４）。Ｌ２キャッシュは、Ｐ［０］をＬ１キャッシュ＃１に出力する（ステップＳ８０５）。Ｌ１キャッシュ＃１は、Ｐ［０］をコア＃１に出力する（ステップＳ８０６）。
【００２４】
次に、コア＃１は、Ｌ１キャッシュ＃１に対し、Ｐ［１］の読み出しを要求する（ステップＳ８０７）。Ｌ１キャッシュ＃１は、Ｌ２キャッシュに対し、Ｐ［１］の読み出しを要求する（ステップＳ８０８）。Ｌ２キャッシュは、外部メモリに対してＰ［１］の読み出しを要求する（ステップＳ８０９）。外部メモリは、記憶しているデータのうちＰ［１］をＬ２キャッシュに出力する（ステップＳ８１０）。Ｌ２キャッシュは、Ｐ［１］をＬ１キャッシュ＃１に出力する（ステップＳ８１１）。Ｌ１キャッシュ＃１は、Ｐ［１］をコア＃１に出力する（ステップＳ８１２）。
【００２５】
Ｐ［２］以降のデータについても同様に処理される。このように、ＬＵＴのデータを順次プリロードすることにより、Ｌ２キャッシュにＬＵＴのデータが記憶される。
【００２６】
図３は、複数のコア（コア＃１およびコア＃２。例えば図１のコア９０１およびコア９０２）によるＬＵＴの関連技術に係るプリロード処理を例示するシーケンスチャートである。この例では、複数のコアの各々において、それぞれ並列的にプリロードが行われる。コア＃２に対応するＬ１キャッシュをＬ１キャッシュ＃２（図面においてはＬ１＃２）と表す。この例で、図３のフローの開始前においては、Ｌ１キャッシュおよびＬ２キャッシュにはＬＵＴのデータは記憶されていない。
【００２７】
まず、コア＃１は、Ｌ１キャッシュ＃１に対し、Ｐ［０］の読み出しを要求する（ステップＳ９０１）。Ｌ１キャッシュ＃１は、Ｌ２キャッシュに対し、Ｐ［０］の読み出しを要求する（ステップＳ９０２）。Ｌ２キャッシュは、外部メモリ（主記憶装置３０）に対してＰ［０］の読み出しを要求する（ステップＳ９０３）。外部メモリは、記憶しているデータのうちＰ［０］をＬ２キャッシュに出力する（ステップＳ９０６）。
【００２８】
コア＃２は、Ｌ１キャッシュ＃２に対し、Ｐ［０］の読み出しを要求する（ステップＳ９０４）。Ｌ１キャッシュ＃２は、Ｌ２キャッシュに対し、Ｐ［０］の読み出しを要求する（ステップＳ９０５）。コア＃２によるステップＳ９０４〜Ｓ９０５の処理は、コア＃１によるステップＳ９０１〜Ｓ９０２の処理と並列で行われるが、ここでは便宜上、ステップＳ９０４〜Ｓ９０５の処理がステップＳ９０１〜Ｓ９０２の処理の後で行われるように記載している。
【００２９】
Ｌ２キャッシュは、Ｐ［０］をＬ１キャッシュ＃１に出力する（ステップＳ９０７）。Ｌ１キャッシュ＃１は、Ｐ［０］をコア＃１に出力する（ステップＳ９０８）。さらに、Ｌ２キャッシュは、Ｐ［０］をＬ１キャッシュ＃２に出力する（ステップＳ９０９）。Ｌ１キャッシュ＃２は、Ｐ［０］をコア＃２に出力する（ステップＳ９１０）。以上で、Ｐ［０］のプリロードが完了する。
【００３０】
次に、コア＃１は、Ｌ１キャッシュ＃１に対し、Ｐ［１］の読み出しを要求する（ステップＳ９１１）。Ｌ１キャッシュ＃１は、Ｌ２キャッシュに対し、Ｐ［１］の読み出しを要求する（ステップＳ９１２）。Ｌ２キャッシュは、外部メモリ（主記憶装置３０）に対してＰ［１］の読み出しを要求する（ステップＳ９１３）。外部メモリは、記憶しているデータのうちＰ［１］をＬ２キャッシュに出力する（ステップＳ９１６）。
【００３１】
コア＃２は、Ｌ１キャッシュ＃２に対し、Ｐ［１］の読み出しを要求する（ステップＳ９１４）。Ｌ１キャッシュ＃２は、Ｌ２キャッシュに対し、Ｐ［１］の読み出しを要求する（ステップＳ９１５）。コア＃２によるステップＳ９１４〜Ｓ９１５の処理は、コア＃１によるステップＳ９１１〜Ｓ９１２の処理と並列で行われるが、ここでは便宜上、ステップＳ９１４〜Ｓ９１５の処理がステップＳ９１１〜Ｓ９１２の処理の後で行われるように記載している。
【００３２】
Ｌ２キャッシュは、Ｐ［１］をＬ１キャッシュ＃１に出力する（ステップＳ９１７）。Ｌ１キャッシュ＃１は、Ｐ［１］をコア＃１に出力する（ステップＳ９１８）。さらに、Ｌ２キャッシュは、Ｐ［１］をＬ１キャッシュ＃２に出力する（ステップＳ９１９）。Ｌ１キャッシュ＃２は、Ｐ［１］をコア＃２に出力する（ステップＳ９２０）。以上で、Ｐ［１］のプリロードが完了する。
【００３３】
図３の処理を図２の処理と対比すると、マルチコアを使用しているにもかかわらず、Ｐ［０］およびＰ［１］をプリロードするのに要する時間は図２の処理と変わらない。これは、図３の処理ではデータのプリロードに関しマルチコアの性能を発揮できていないことを意味する。本実施形態は、プリロードに要する時間を短縮する技術を提供する。
【００３４】
２．構成
図４は、一実施形態に係る画像形成装置１の構成を例示する図である。画像形成装置１は、画像を形成する機能を有する情報処理装置の一例であり、例えばいわゆる複合機である。画像形成装置１は、ＣＰＵ１０、メモリコントローラー２０、主記憶装置（メインメモリ）３０、ＩＯコントローラー４０、補助記憶装置４１、画像読み取りユニット４２、画像形成ユニット４３、および通信ユニット４４を有する。
【００３５】
ＣＰＵ１０は、画像形成装置１の各部を制御する制御装置であり、各々異なる処理を実行するＮ個のコア（Ｎは２以上の自然数）を含む処理手段の一例である。この例ではＮ＝４である。ＣＰＵ１０は、コア１０１〜１０４、キャッシュメモリ１１１〜１１４、およびキャッシュメモリ１２１〜１２２を有する。キャッシュメモリ１１１〜１１４は一次キャッシュ（Ｌ１キャッシュ）であり、それぞれコア１０１〜１０４に専用のものである。キャッシュメモリ１２１〜１２２は二次キャッシュ（Ｌ２キャッシュ）である。キャッシュメモリ１２１はコア１０１および１０２で共用され、キャッシュメモリ１２２はコア１０３および１０４で共用される。
【００３６】
メモリコントローラー２０は、主記憶装置３０に対するデータの読み書きを制御する。主記憶装置３０は主記憶装置であり、例えばＤＲＡＭ（Dynamic Random Access Memory）を含む。主記憶装置３０は、ＣＰＵ１０がプログラムを実行する際のワークエリアとして機能し、種々のデータを記憶する記憶手段の一例である。
【００３７】
ＩＯコントローラー４０は、周辺装置をＣＰＵ１０に接続して制御する装置である。この例で、ＩＯコントローラー４０には、補助記憶装置４１、画像読み取りユニット４２、画像形成ユニット４３、および通信ユニット４４が接続されている。補助記憶装置４１はデータおよびプログラムを記憶する不揮発性の記憶装置であり、例えばＨＤＤ（Hard Disk Drive）を含む。画像読み取りユニット４２は、原稿を光学的に読み取る装置であり、例えばいわゆるスキャナーを含む。画像形成ユニット４３は、媒体（例えば紙）に画像を形成する装置であり、例えば電子写真技術またはインクジェット技術により画像形成を行う。通信ユニット４４は、他の機器と通信を行うインターフェースである。
【００３８】
図５は、外部メモリからのデータのプリロードに関する画像形成装置１の機能構成を例示する図である。補助記憶装置４１は、画像形成装置１のＯＳ（Operating System）を機能させるためのプログラム（以下「ＯＳプログラム」という）を記憶している。ＣＰＵ１０がＯＳプログラムを実行することにより、画像形成装置１にＯＳ５０が実装される。
【００３９】
ＯＳ５０は、割り当て手段５１を有する。割り当て手段５１は、プリロードの対象となるデータ（この例ではＬＵＴ）を、Ｎ個のデータに分割する。分割されたデータを「部分データ」という。さらに、割り当て手段５１は、各部分データをＮ個のコアのいずれかに割り当てる。コア１０１〜コア１０４は、それぞれ要求手段を有する。例えばコア１０１の要求手段（第１要求手段の一例）は、Ｎ個の部分データのうち１つ（第１部分データの一例）の読み出しをキャッシュメモリに要求する。また、コア１０２の要求手段（第２要求手段の一例）は、Ｎ個の部分データのうち別の１つ（第２部分データの一例）の読み出しをキャッシュメモリに要求する。なお図５ではＬ１キャッシュは図示を省略している。
【００４０】
キャッシュメモリ１２１は読み出し手段１２１１を有する。読み出し手段１２１１は、コアからの要求に応じて主記憶装置３０からデータを読み出す。読み出し手段１２１１により、キャッシュメモリ１２１には、コア１０１〜コア１０４により要求された部分データが記憶される。なお、コア１０１〜コア１０４の要求手段は、ＯＳの機能の一部である。すなわち、ＯＳプログラムを実行している各コアが、要求手段の一例である。また、キャッシュメモリ１２１はデータの読み出しを制御するコントローラー（図示略）を有している。このコントローラーが読み出し手段の一例である。
【００４１】
３．動作
図６は、画像形成装置１における画像処理を例示するフローチャートである。図６のフローは、例えば、アプリケーションプログラムによりＬＵＴのプリロードが指示されたことを契機として開始される。以下の説明においてＯＳ５０等のソフトウェアを処理の主体として記載することがあるが、これは、そのソフトウェアを実行しているＣＰＵ１０が他のハードウェア資源と共働して処理を実行することを意味する。
【００４２】
ステップＳ１００において、ＯＳ５０は、複数のスレッドを生成する。ここで、「スレッド」とは、プログラムにおける処理のことをいう。これらのスレッドは、ＬＵＴを分割した部分データを複数のコアに割り当てる処理、各コアに部分データの読み出しを要求させる処理、入力画像を分割し、分割された画像を各コアに割り当てる処理、および各コアに、割り当てられた部分画像のインデックス値を出力画素値に変換させる処理を含む。
【００４３】
図７は、ＬＵＴの分割の概要を示す模式図である。図４の例ではＮ＝４なので、ＬＵＴは４つの部分データに分割される。この例では、ＬＵＴは４等分される。すなわち、４つの部分データはデータサイズが等しく、かつ他の部分データと重複していない。
【００４４】
図８は、ＬＵＴの分割の具体例を示す図である。この例で、ＬＵＴは、Ｐ［０］〜Ｐ［Ｋ−１］のｋ個のエントリ値を含んでいる。ＬＵＴは、それぞれアドレスが連続した部分のみから構成される４つの部分データ（以下「部分データ＃１〜＃４」という）に分割される。例えば、部分データ＃１はＰ［０］〜Ｐ［Ｋ／４−１］のＫ／４個のエントリ値を含んでおり、部分データ＃２はＰ［Ｋ／４］〜Ｐ［２Ｋ／４−１］のＫ／４個のエントリ値を含んでおり、部分データ＃３はＰ［２Ｋ／４］〜Ｐ［３Ｋ／４−１］のＫ／４個のエントリ値を含んでおり、部分データ＃４はＰ［３Ｋ／４］〜Ｐ［Ｋ−１］のＫ／４個のエントリ値を含んでいる。
【００４５】
図９は、ＬＵＴの分割の他の具体例を示す図である。この例で、ＬＵＴは、各々アドレスが不連続な部分を含む４つの部分データに分割される。例えば、部分データ＃１は、Ｐ［０］〜Ｐ［１５］、Ｐ［６４］〜Ｐ［７９］、…、Ｐ［Ｋ−６４］〜Ｐ［Ｋ−４９］の合計Ｋ／４個のエントリ値を含んでいる。部分データ＃２は、Ｐ［１６］〜Ｐ［３１］、Ｐ［８０］〜Ｐ［９５］、…、Ｐ［Ｋ−４８］〜Ｐ［Ｋ−３３］の合計Ｋ／４個のエントリ値を含んでいる。部分データ＃３は、Ｐ［３２］〜Ｐ［４７］、Ｐ［９６］〜Ｐ［１１１］、…、Ｐ［Ｋ−３２］〜Ｐ［Ｋ−１７］の合計Ｋ／４個のエントリ値を含んでいる。部分データ＃４は、Ｐ［４８］〜Ｐ［６３］、Ｐ［１１２］〜Ｐ［１２７］、…、Ｐ［Ｋ−１６］〜Ｐ［Ｋ−１］の合計Ｋ／４個のエントリ値を含んでいる。
【００４６】
この例で、各部分データは、アドレスが連続した１６個のエントリ値のセットを複数、含んでいる。エントリ値１６個分のデータサイズは、キャッシュラインサイズに等しい。キャッシュラインサイズとは、Ｌ２キャッシュと外部メモリとの間の１回あたりの最大データ転送量（データ読み出し量）をいう。例えばＤＲＡＭにおいては、メモリセルが「バンク」と呼ばれるブロックに区分されており、異なるバンクに属するメモリセルにアクセスするには、アクセスするバンクを切り替える処理が必要である。外部メモリがＤＲＡＭを含んでいる場合において図８で例示した連続するＫ／４個のエントリ値が複数のバンクにまたがって記憶されているときは、外部メモリ（ＤＲＡＭ）は、複数のコアから並列的に発生するアクセスに対して、バンクを切り替えながらエントリ値を読み出さなければならない。
【００４７】
いま、外部メモリを構成するＤＲＡＭが４つのバンクを含んでいる例を考える。図８の例では、まず、コア１０１からの要求によりＰ［０］〜Ｐ［１５］が、コア１０２からの要求によりＰ［Ｋ／４］〜Ｐ［Ｋ／４＋１５］が、コア１０３からの要求によりＰ［２Ｋ／４］〜Ｐ［２Ｋ／４＋１５］が、コア１０４からの要求によりＰ［３Ｋ／４］〜Ｐ［３Ｋ／４＋１５］が、それぞれ読み出される。しかし、これらのエントリ値はそれぞれ異なるバンクに記憶されているので、ＤＲＡＭは並列的にバンクを切り替えながらデータを読み出さなければならない。そのた、バンク切り替えの分だけデータ読み出しに時間がかかる。
【００４８】
これに対し図９の例では、まず、コア１０１からの要求によりＰ［０］〜Ｐ［１５］が、コア１０２からの要求によりＰ［１６］〜Ｐ［３１］が、コア１０３からの要求によりＰ［３２］〜Ｐ［４７］が、コア１０４からの要求によりＰ［４８］〜Ｐ［６３］が、それぞれ読み出される。これらのデータは同一のバンクに記憶されているので、ＤＲＡＭはバンクを切り替えることなく高速にデータを読み出すことができる。
【００４９】
再び図６を参照する。ステップＳ１０１、Ｓ１１１、Ｓ１２１、およびＳ１４１において、コア１０１〜コア１０４は、それぞれ自身に割り当てられた部分データをプリロードする。すなわち、コア１０１は部分データ＃１を、コア１０２は部分データ＃２を、コア１０３は部分データ＃３を、コア１０４は部分データ＃４を、それぞれプリロードする。各コアにおけるプリロードは並列的に行われる。その結果、Ｌ２キャッシュにはＬＵＴがコピーされる。
【００５０】
以下、コア１０１〜コア１０４において処理が並列的に行われるが、ここではコア１０１の処理だけ説明する。コア１０２〜１０４の処理（ステップＳ１１１〜Ｓ１１６，Ｓ１２１〜Ｓ１２６，Ｓ１４１〜Ｓ１４６）については、コア１０１の処理と同様なので説明を省略する。ステップＳ１０２において、コア１０１は、対象画素のデータを外部メモリから読み出す。ステップＳ１０３において、コア１０１は、対象画素のデータから、インデックス値を算出する。ステップＳ１０４において、コア１０１は、Ｌ２キャッシュに記憶されているＬＵＴを用いて、算出されたインデックス値に対応するエントリ値を取得する。ステップＳ１０５において、コア１０１は、エントリ値から出力画素値を算出する。ステップＳ１０６において、コア１０１は、出力画素値を外部メモリに書き込む。
【００５１】
ステップＳ１０７において、ＯＳ５０は、全てのスレッドが完了するまで待機する。コア１０１〜コア１０４に割り当てられたスレッドが全て完了した場合、ＯＳ５０は、図６のフローを終了する。
【００５２】
図１０は、画像形成装置１におけるプリロード処理を例示するシーケンスチャートである。ここでは説明を簡単にするため、コア＃１およびコア＃２（例えばコア１０１およびコア１０２）の２つのコアの処理のみ図示している。
【００５３】
まず、コア＃１は、Ｌ１キャッシュ＃１に対し、Ｐ［０］の読み出しを要求する（ステップＳ２０１）。Ｌ１キャッシュ＃１は、Ｌ２キャッシュに対し、Ｐ［０］の読み出しを要求する（ステップＳ２０２）。Ｌ２キャッシュは、外部メモリ（主記憶装置３０）に対してＰ［０］の読み出しを要求する（ステップＳ２０３）。
【００５４】
ステップＳ２０１〜Ｓ２０３の処理と並列的に以下の処理が行われる。コア＃２は、Ｌ１キャッシュ＃２に対し、Ｐ［１］の読み出しを要求する（ステップＳ２０４）。Ｌ１キャッシュ＃２は、Ｌ２キャッシュに対し、Ｐ［１］の読み出しを要求する（ステップＳ２０５）。Ｌ２キャッシュは、外部メモリ（主記憶装置３０）に対してＰ［１］の読み出しを要求する（ステップＳ２０６）。
【００５５】
外部メモリは、コア＃１からの要求に応じて、記憶しているデータのうちＰ［０］をＬ２キャッシュに出力する（ステップＳ２０７）。Ｌ２キャッシュは、Ｐ［０］をＬ１キャッシュ＃１に出力する（ステップＳ２０８）。Ｌ１キャッシュ＃１は、Ｐ［０］をコア＃１に出力する（ステップＳ２０９）。
【００５６】
ステップＳ２０７〜Ｓ２０９の処理と並列的に以下の処理が行われる。外部メモリは、コア＃２からの要求に応じて、記憶しているデータのうちＰ［１］をＬ２キャッシュに出力する（ステップＳ２１０）。Ｌ２キャッシュは、Ｐ［１］をＬ１キャッシュ＃２に出力する（ステップＳ２１１）。Ｌ１キャッシュ＃２は、Ｐ［１］をコア＃２に出力する（ステップＳ２１２）。以上で、Ｐ［０］およびＰ［１］のプリロードが完了する。
【００５７】
図３のフローと対比すると、図１０のフローではＰ［０］およびＰ［１］のプリロードが完了するまでの時間が短縮されていることがわかる。
【００５８】
４．変形例
本発明は上述の実施形態に限定されず、種々の変形実施が可能である。以下、変形例をいくつか説明する。以下の変形例のうち２つ以上のものが組み合わせて用いられてもよい。
【００５９】
４−１．変形例１
図１１は、変形例１に係るＬＵＴの分割方法の概要を示す図である。ＬＵＴの分割方法は実施形態で説明した例に限定されない。この例では、４つの分割データのデータサイズは等しくなく、また互いに一部が重複している。さらに、４つの分割データを合わせても主記憶装置３０に記憶されているＬＵＴは完全に再現されず、一部のエントリ値が欠落している。これは以下の場合に有効である。例えば、アプリケーションプログラム等のソフトウェアコンポーネントが、ＬＵＴのうち、対象画像を画像処理する際に用いられる部分を特定する。ＯＳ５０は、こうして特定された部分をカバーするようにＬＵＴを分割する。
【００６０】
４−２．変形例２
変形例１においてさらに、アプリケーションプログラム等のソフトウェアコンポーネントは、ＬＵＴのうち画像処理で用いられる部分が、コア毎に特定されてもよい。この場合、ＯＳ５０は、コア毎に用いられる部分を含むようにＬＵＴを分割する。図１１の例で、部分データ＃１は対象画像のうちコア１０１が担当する領域の画像処理に用いられるエントリ値をカバーしている。同様に、部分データ＃２は対象画像のうちコア１０２が担当する領域の、部分データ＃３は対象画像のうちコア１０３が担当する領域の、部分データ＃４は対象画像のうちコア１０４が担当する領域の、画像処理に用いられるエントリ値をカバーしている。各部分データのサイズがＬ１キャッシュの容量よりも小さければ、各コアは必要なエントリ値をＬ１キャッシュから直に読み取ることができ、処理がより高速化される。
【００６１】
４−３．変形例３
主記憶装置３０に記憶されるデータおよびこれを用いた処理は実施形態で例示したものに限定されない。主記憶装置３０に記憶されるデータは、例えば各コアで実行されるコード（命令）であってもよい。この場合、コアは、指定されるアドレスに記憶されているコードを読み出し、読み出したコードを実行する。このコードキャッシュメモリにプリロードされる。
【００６２】
４−４．他の変形例
ＣＰＵ１０の構成は図２に例示したものに限定されない。コアの数やキャッシュメモリの階層構造はあくまで例示である。ＣＰＵ１０は、少なくとも、第２キャッシュメモリを共用する２つのコアを有して入ればよい。ＣＰＵ１０は、Ｌ２キャッシュの下層にＬ３キャッシュを有していてもよい。
【００６３】
また、ＣＰＵ１０は、物理的に１つのチップに複数のコアおよびキャッシュメモリを搭載したものに限定されない。複数のＣＰＵチップで１つのキャッシュメモリを共用する情報処理装置に対し、本発明が適用されてもよい。
【００６４】
さらに、実施形態における「複数のコア」は物理的に異なる複数のコアに限定されない。物理的に１つのコアが、時分割で論理的に（擬似的に）複数のコアとして用いられてもよい。
【００６５】
また、ＣＰＵ１０は、物理的に１つのチップに複数のコアおよびキャッシュメモリを搭載したものに限定されない。複数のＣＰＵチップで１つのキャッシュメモリを共用する情報処理装置に対し、本発明が適用されてもよい。
【００６６】
本発明に係る情報処理装置は、図２に例示した画像形成装置１に限定されない。ＣＰＵ１０を用いて複数の処理を並列実行するものであれば、情報処理装置はどのような装置であってもよい。例えば、情報処理装置は、パーソナルコンピュータ、スマートフォン、またはタブレット端末であってもよい。
【符号の説明】
【００６７】
１…画像形成装置、１０…ＣＰＵ、２０…メモリコントローラー、３０…主記憶装置、４０…ＩＯコントローラー、４１…補助記憶装置、４２…画像読み取りユニット、４３…画像形成ユニット、４４…通信ユニット、５０…ＯＳ、５１…割り当て手段、９０…ＣＰＵ、１０１〜１０４…コア、１１１〜１１４…キャッシュメモリ（Ｌ１）、１２１…キャッシュメモリ（Ｌ２）、９０１〜９０４…コア、９１１〜９１４…キャッシュメモリ（Ｌ１）、９２１…キャッシュメモリ（Ｌ２）
【図１】
0006701650.tif 000002
【図２】
0006701650.tif 000003
【図３】
0006701650.tif 000004
【図４】
0006701650.tif 000005
【図５】
0006701650.tif 000006
【図６】
0006701650.tif 000007
【図７】
0006701650.tif 000008
【図８】
0006701650.tif 000009
【図９】
0006701650.tif 000010
【図１０】
0006701650.tif 000011
【図１１】
0006701650.tif 000012