(57)【要約】【課題】局所性の高いデータがキャッシュメモリからの追い出されないようにする。【解決手段】メインメモリ１０４では、連続データを記憶する記憶領域と、連続データのうちキャッシュさせるデータを保管するｗｏｒｋ領域とが設けられ、キャッシュメモリ１０３では、ｗｏｒｋ領域のデータを格納するための特定キャッシュ領域が他のキャッシュ領域と区別されて管理され、プロセッサ１０２は、ＤＭＡＣ１０５を利用して連続データの各データを順にｗｏｒｋ領域に転送させ、ｗｏｒｋ領域内のデータをキャッシュメモリ１０３の特定キャッシュ領域に格納してデータ処理を行い、データ処理が終了すると、特定キャッシュ領域からデータを追い出し、次のデータをｗｏｒｋ領域に転送させ、ｗｏｒｋ領域内のデータを特定キャッシュ領域に格納する動作を繰り返し、特定キャッシュ領域以外に格納されている局所性の高いデータキャッシュメモリから追い出されない。【選択図】図１
2011086131.tif 000002
【特許請求の範囲】
【請求項１】
複数のデータを記憶するメインメモリに接続されているデータ処理システムであって、
前記メインメモリのデータをキャッシュするキャッシュ領域の一部に、他のキャッシュ領域から区別して管理される特定キャッシュ領域が設けられているキャッシュメモリと、
前記キャッシュメモリに前記メインメモリのデータを格納する際に、前記特定キャッシュ領域へのキャッシュが指定されている指定データは前記特定キャッシュ領域に格納するプロセッサとを有することを特徴とするデータ処理システム。
【請求項２】
前記メインメモリは、
複数の指定データを順序づけて記憶しており、
前記プロセッサは、
前記メインメモリ内の指定データの順序に従って指定データを前記特定キャッシュ領域に格納するとともに、前記特定キャッシュ領域に格納されている指定データを用いたデータ処理を行い、当該指定データを用いたデータ処理が終了した際に当該指定データを前記特定キャッシュ領域から追い出し、次にキャッシュの対象となる指定データを前記特定キャッシュ領域に格納する動作を繰り返すことを特徴とする請求項１に記載のデータ処理システム。
【請求項３】
前記メインメモリは、
複数のデータを記憶するデータ記憶領域と、前記キャッシュメモリにキャッシュさせる指定データを保管するデータ保管領域とが設けられており、
前記データ処理システムは、更に、
前記データ記憶領域内の指定データを前記データ保管領域に転送するデータ転送装置を有し、
前記プロセッサは、
前記データ転送装置により前記データ記憶領域から転送された前記データ保管領域内の指定データを前記特定キャッシュ領域に格納することを特徴とする請求項１又は２に記載のデータ処理システム。
【請求項４】
前記プロセッサは、
前記特定キャッシュ領域に格納されている指定データを用いたデータ処理を行うとともに当該指定データを用いたデータ処理が終了した際に、データ処理の結果が反映された指定データを前記特定キャッシュ領域から前記データ保管領域に格納し、
前記データ転送装置は、
前記プロセッサによる格納が行われた後の前記データ保管領域内の指定データを前記データ記憶領域に転送することを特徴とする請求項３に記載のデータ処理システム。
【請求項５】
前記メインメモリは、
前記データ記憶領域において、複数の指定データを順序づけて記憶しており、
前記プロセッサは、
前記特定キャッシュ領域に格納されている指定データを用いたデータ処理が終了した際に、データ処理の結果が反映された指定データを前記特定キャッシュ領域から前記データ保管領域に格納し、
前記データ転送装置は、
前記プロセッサによる格納が行われた後の前記データ保管領域内の指定データを前記データ記憶領域に転送し、更に、次にキャッシュの対象となる指定データを前記データ記憶領域から前記データ保管領域に転送することを特徴とする請求項４に記載のデータ処理システム。
【請求項６】
前記メインメモリは、
複数のデータ保管領域が設けられ、
前記データ記憶領域において、複数の指定データを順序づけて記憶しており、
前記データ転送装置は、
前記データ記憶領域内の前記複数の指定データを順に前記複数のデータ保管領域の各々に転送し、
前記プロセッサは、
各データ保管領域内の指定データを順に前記特定キャッシュ領域に格納することを特徴とする請求項３〜５のいずれかに記載のデータ処理システム。
【請求項７】
前記データ転送装置は、
前記特定キャッシュ領域に格納されている指定データを用いたデータ処理が前記プロセッサにより行われている際に、データ処理の対象になっている指定データの前の指定データであって前記プロセッサにより前記特定キャッシュ領域からいずれかのデータ保管領域に格納された指定データを前記データ記憶領域に転送することを特徴とする請求項６に記載のデータ処理システム。
【請求項８】
前記データ転送装置は、
前記特定キャッシュ領域に格納されている指定データを用いたデータ処理が前記プロセッサにより行われている際に、次にキャッシュの対象となる指定データを前記データ記憶領域からいずれかのデータ保管領域に転送することを特徴とする請求項６又は７に記載のデータ処理システム。
【請求項９】
前記データ転送装置は、
前記特定キャッシュ領域に格納されている指定データを用いたデータ処理が前記プロセッサにより行われている際に、データ処理の対象になっている指定データの前の指定データであって前記プロセッサにより前記特定キャッシュ領域からいずれかのデータ保管領域に格納された指定データを前記データ記憶領域に転送する動作と、次にキャッシュの対象となる指定データを前記データ記憶領域からいずれかのデータ保管領域に転送する動作とを連続して行うことを特徴とする請求項６〜８のいずれかに記載のデータ処理システム。
【請求項１０】
前記メインメモリは、
２つのデータ保管領域が設けられており、
前記プロセッサは、
一方のデータ保管領域から前記特定キャッシュ領域に格納された指定データを前半部分と後半部分に分けてデータ処理を行い、
前記データ転送装置は、
指定データの前半部分を用いたデータ処理が終了した段階で、データ処理の対象になっている指定データの前の指定データであって前記プロセッサにより前記特定キャッシュ領域から他方のデータ保管領域に格納された指定データを前記データ記憶領域に転送し、次にキャッシュの対象となる指定データを前記データ記憶領域から他方のデータ保管領域に転送することを特徴とする請求項６〜９のいずれかに記載のデータ処理システム。
【請求項１１】
前記データ転送装置は、前記プロセッサにより制御されるＤＭＡ（Ｄｉｒｅｃｔ  Ｍｅｍｏｒｙ  Ａｃｃｅｓｓ）装置であり、
前記プロセッサは、
キャッシュ対象の指定データを前記データ記憶領域から前記データ保管領域に転送するよう前記ＤＭＡ装置に指示し、前記ＤＭＡ装置により転送された前記データ保管領域内の指定データを前記特定キャッシュ領域に格納し、前記特定キャッシュ領域に格納された指定データを用いたデータ処理を行い、データ処理が終了した際に、データ処理の結果が反映された指定データを前記特定キャッシュ領域から前記データ保管領域に格納し、前記データ保管領域内の指定データを前記データ記憶領域に転送するよう前記ＤＭＡ装置に指示し、
前記ＤＭＡ装置は、
前記プロセッサからの指示に基づき、前記データ記憶領域内の指定データを前記データ保管領域に転送し、前記データ保管領域内の指定データを前記データ記憶領域に転送することを特徴とする請求項３〜１０のいずれかに記載のデータ処理システム。
【請求項１２】
前記メインメモリは、
前記データ記憶領域において、複数の指定データを順序づけて記憶しており、
前記プロセッサは、
データ処理の結果が反映された指定データが前記データ保管領域内から前記データ記憶領域に転送された後に次の指定データを前記データ記憶領域から前記データ保管領域に転送するよう前記ＤＭＡ装置に指示し、
前記ＤＭＡ装置は、
前記プロセッサからの指示に基づき、前記データ保管領域内の指定データを前記データ記憶領域に転送した後に、前記データ記憶領域内の次の指定データを前記データ保管領域に転送することを特徴とする請求項１１に記載のデータ処理システム。
【請求項１３】
前記データ転送装置は、
前記プロセッサにより制御されるＤＭＡ装置であり、
前記メインメモリは、
前記データ保管領域内の指定データのステータスを示すステータス情報を格納するためのステータス情報格納領域と、転送対象の指定データの前記データ記憶領域内の記憶領域を示すインデックス情報を格納するためのインデックス情報格納領域とが設けられ、
前記プロセッサは、
前記データ記憶領域から前記データ保管領域に転送させる指定データのインデックス情報を前記インデックス情報格納領域に設定し、前記データ保管領域への指定データの転送が完了したことを通知するステータス情報が前記ＤＭＡ装置により前記ステータス情報格納領域に設定された場合に、前記データ保管領域内の指定データを前記特定キャッシュ領域に格納し、前記特定キャッシュ領域に格納された指定データを用いたデータ処理を行い、データ処理が終了した際に、前記ＤＭＡ装置による転送の開始を通知するステータス情報を前記ステータス情報格納領域に設定し、データ処理の結果が反映された指定データを前記特定キャッシュ領域から前記データ保管領域に格納し、
前記ＤＭＡ装置は、
前記インデックス情報格納領域に設定されているインデックス情報に基づき、転送対象の指定データを前記データ記憶領域から前記データ保管領域に転送し、前記データ保管領域への指定データの転送が完了したことを通知するステータス情報を前記ステータス情報格納領域に設定し、前記ＤＭＡ装置による転送の開始を通知するステータス情報が前記プロセッサにより前記ステータス情報格納領域に設定された際に、前記インデックス情報格納領域に設定されているインデックス情報に基づき、前記データ保管領域内の指定データを前記データ記憶領域に転送することを特徴とする請求項３〜１２のいずれかに記載のデータ処理システム。
【請求項１４】
前記メインメモリは、
前記データ記憶領域において、複数の指定データを順序づけて記憶しており、
前記プロセッサは、
前記ＤＭＡ装置による転送の開始を通知するステータス情報を前記ステータス情報格納領域に設定するとともに、次に前記データ記憶領域から前記データ保管領域に転送させる指定データのインデックス情報を前記インデックス情報格納領域に設定し、
前記ＤＭＡ装置は、
前記データ保管領域内の指定データを前記データ記憶領域に転送した後に、前記インデックス情報格納領域に設定されているインデックス情報に基づき、次の転送対象の指定データを前記データ記憶領域から前記データ保管領域に転送することを特徴とする請求項１３に記載のデータ処理システム。
【請求項１５】
前記データ転送装置は、
前記キャッシュメモリを利用しない他のプロセッサであり、
前記メインメモリは、
前記データ保管領域内の指定データのステータスを示すステータス情報を格納するためのステータス情報格納領域と、転送対象の指定データの前記データ記憶領域内の記憶領域を示すインデックス情報を格納するためのインデックス情報格納領域とが設けられ、
前記プロセッサは、
前記データ記憶領域から前記データ保管領域に転送させる指定データのインデックス情報を前記インデックス情報格納領域に設定し、前記データ保管領域への指定データの転送が完了したことを通知するステータス情報が前記他のプロセッサにより前記ステータス情報格納領域に設定された場合に、前記データ保管領域内の指定データを前記特定キャッシュ領域に格納し、前記特定キャッシュ領域に格納された指定データを用いたデータ処理を行い、データ処理が終了した際に、前記他のプロセッサによる転送の開始を通知するステータス情報を前記ステータス情報格納領域に設定し、データ処理の結果が反映された指定データを前記特定キャッシュ領域から前記データ保管領域に格納し、
前記他のプロセッサは、
前記インデックス情報格納領域に設定されているインデックス情報に基づき、転送対象の指定データを前記データ記憶領域から前記データ保管領域に転送し、前記データ保管領域への指定データの転送が完了したことを通知するステータス情報を前記ステータス情報格納領域に設定し、前記他のプロセッサによる転送の開始を通知するステータス情報が前記プロセッサにより前記ステータス情報格納領域に設定された際に、前記インデックス情報格納領域に設定されているインデックス情報に基づき、前記データ保管領域内の指定データを前記データ記憶領域に転送することを特徴とする請求項３〜１４のいずれかに記載のデータ処理システム。
【請求項１６】
前記メインメモリは、
前記データ記憶領域において、複数の指定データを順序づけて記憶しており、
前記プロセッサは、
前記他のプロセッサによる転送の開始を通知するステータス情報を前記ステータス情報格納領域に設定するとともに、次に前記データ記憶領域から前記データ保管領域に転送させる指定データのインデックス情報を前記インデックス情報格納領域に設定し、
前記他のプロセッサは、
前記データ保管領域内の指定データを前記データ記憶領域に転送した後に、前記インデックス情報格納領域に設定されているインデックス情報に基づき、次の転送対象の指定データを前記データ記憶領域から前記データ保管領域に転送することを特徴とする請求項１５に記載のデータ処理システム。
【請求項１７】
前記メインメモリは、
前記データ記憶領域において、複数の指定データを順序づけて記憶しており、
前記プロセッサは、
前記他のプロセッサによる転送の開始を通知するステータス情報を前記ステータス情報格納領域に設定し、
前記他のプロセッサは、
前記データ保管領域内の指定データを前記データ記憶領域に転送した後に、前記インデックス情報格納領域に設定されているインデックス情報に基づき、次の転送対象の指定データを前記データ記憶領域から前記データ保管領域に転送し、
その次に前記データ記憶領域から前記データ保管領域に転送させる指定データのインデックス情報を前記インデックス情報格納領域に設定することを特徴とする請求項１５に記載のデータ処理システム。
【請求項１８】
前記他のプロセッサは、
ＤＭＡ装置を用いて、転送対象の指定データを前記データ記憶領域と前記データ保管領域の間で転送することを特徴とする請求項１５〜１７のいずれかに記載のデータ処理システム。
【請求項１９】
前記他のプロセッサは、
ＤＭＡ装置を用いないで、転送対象の指定データを前記データ記憶領域と前記データ保管領域の間で転送することを特徴とする請求項１５〜１７のいずれかに記載のデータ処理システム。
【請求項２０】
前記メインメモリは、
前記データ記憶領域において、複数の指定データを順序づけて記憶しており、
前記プロセッサは、
前記ＤＭＡ装置による転送の開始を通知するステータス情報を前記ステータス情報格納領域に設定し、
前記ＤＭＡ装置は、
前記データ保管領域内の指定データを前記データ記憶領域に転送した後に、前記インデックス情報格納領域に設定されているインデックス情報に基づき、次の転送対象の指定データを前記データ記憶領域から前記データ保管領域に転送し、
その次に前記データ記憶領域から前記データ保管領域に転送させる指定データのインデックス情報を前記インデックス情報格納領域に設定することを特徴とする請求項１３に記載のデータ処理システム。
【請求項２１】
前記プロセッサは、
前記キャッシュメモリに残存させておく必要性が高くないデータを指定データとすることを特徴とする請求項１〜２０のいずれかに記載のデータ処理システム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、メインメモリ上のデータをキャッシュメモリに格納する技術に関する。
【背景技術】
【０００２】
計算機システムではメインメモリへのアクセス時間はＣＰＵ（Ｃｅｎｔｒａｌ  Ｐｒｏｃｅｓｓｉｎｇ  Ｕｎｉｔ）の処理時間と比較して大きく、メモリアクセス時間が処理性能に大きな影響を与える。
この問題を解決する方法としてキャッシュメモリが利用されている。
キャッシュメモリはメインメモリよりも小容量ではあるが高速にアクセスできるメモリであり、ＣＰＵはキャッシュメモリに格納されたメインメモリのデータの複製にアクセスすることでメモリアクセス時間を削減し、処理を高速化することができる。
一般的にデータには短い時間に同じデータにアクセスされる時間的局所性や、アクセスされたアドレス近辺のデータにアクセスされる空間的局所性といった局所性がある。
キャッシュメモリはこの局所性を利用し、メインメモリへのアクセス回数を削減している。
【０００３】
しかし、処理によっては時間的局所性の高いデータがキャッシュメモリから追い出され、メインメモリへのアクセス回数が削減されない場合がある。
例えば、図２の２０１に示す関数ｆｕｎｃＡ（）では２０２で囲まれた関数ｇ（）の引数と関数ｇ（）の戻り値への代入としてｎ行×ｍ列の配列ａ［ｉ］［ｊ］の各要素に順次アクセスしている。
この配列ａのサイズがキャッシュメモリの容量と同じまたはキャッシュメモリよりも大きい場合、ｆｕｎｃＡ（）が実行されるとキャッシュメモリのすべての内容がｆｕｎｃＡ（）で利用されているデータに置き換わってしまう。
そのためｆｕｎｃＡ（）が実行される前にキャッシュメモリに格納されていた局所性の高いデータはｆｕｎｃＡ（）の実行後キャッシュメモリに存在しなくなり、ＣＰＵはｆｕｎｃＡ（）の実行前にキャッシュ内にあったデータにｆｕｎｃＡ（）の実行後アクセスするためにはメインメモリにアクセスしてデータを取得する必要が出てくる。
【０００４】
図２のプログラムは説明の都合上単純なものを示している。
実際のシステムではｆｕｎｃＡ（）よりも複雑な動作をし、規則的にｊの値が増加するとは限らないが、配列ａ［ｉ］［ｊ］のような（個々のデータのサイズは小さいが、データ数が多いため）全体のデータ量がキャッシュメモリの容量よりも大きいデータに対して処理を行うシステムは存在する。
このようなシステムでは、そのデータをキャッシュメモリに格納することにより、これまでキャッシュメモリに格納されていた時間的局所性の高いデータをキャッシュから追い出してしまい、処理効率が低下するという問題がある。
この問題を解決するためにｆｕｎｃＡ（）の実行により追い出されたデータが再びアクセスされることを予測してプリフェッチを行うことは困難である。
そのため、キャッシュメモリの容量よりも大きいデータにアクセスしてもキャッシュメモリから局所性の高いデータが追い出されないようにする必要がある。
キャッシュメモリから時間的局所性の高いデータを追い出すことを防ぐ方法として、多量の連続データをキャッシュメモリとは別のメモリにデータを格納する方法（特許文献１）、多量の連続データがキャッシュメモリ内に格納できる領域を制限する方法（特許文献２、特許文献３）などがある。
また、多量の連続データをキャッシュメモリに格納せずに直接メインメモリからアクセスするようにすれば、キャッシュメモリから他のデータを追い出すことはなくなる。
【０００５】
特許文献１ではアドレスの連続した多量のデータを読み込む場合はキャッシュメモリとは別に設けられたオンデマンドキャッシュメモリにデータを格納することによって結果的にキャッシュメモリから局所性の高いデータを追い出すことを防ぐことができる。
【０００６】
特許文献２ではセットアソシアティブ方式のキャッシュにおいて、時間的局所性のないデータが格納できる領域（ウェイ）を制限することによって時間的局所性のあるデータがキャッシュから追い出されることを減少することができる。
【０００７】
特許文献３ではルールセットに基づいて格納（置換）することのできるウェイを決定することにより、局所性の小さいデータが局所性の高いデータを置換することを防ぐことができる。
【先行技術文献】
【特許文献】
【０００８】
【特許文献１】特開平９−２０４３５６号公報
【特許文献２】特開２００１−１９５３０４号公報
【特許文献３】特表２００６−５２９０３４号公報
【発明の概要】
【発明が解決しようとする課題】
【０００９】
特許文献１や特許文献２、特許文献３ではキャッシュメモリにオンデマンドキャッシュメモリやプリフェッチＷＡＹ制限回路、キャッシュウェイ制御レジスタなどといった特別な回路やメモリが必要であるため、これらの機能が搭載されたキャッシュメモリ（またはキャッシュメモリ付ＣＰＵ）を用いるか自身でその機能を搭載したＬＳＩを設計する必要がある。
しかし、このような機能が搭載されたキャッシュメモリは少なく、また自身で設計するにはＬＳＩの開発コストがかかるという課題がある。
また、キャッシュメモリ内のデータが大量に追い出されるようなデータをキャッシュメモリに読み込ませない領域（非キャッシュ領域）としてアクセスした場合、ＣＰＵはデータにアクセスするたびにメインメモリへアクセスしてデータを取得する必要があり、キャッシュメモリにアクセスする場合よりもメインメモリへのアクセス回数が多くなる。そのため、処理性能が低下してしまうという課題がある。
【００１０】
本発明は上記のような課題を解決することを主な目的の一つし、特殊な機能を備えたキャッシュメモリを用いずに多量の連続データによる他のデータのキャッシュメモリからの追い出しを防ぎ、処理の効率低下を防ぐことのできるシステムを提供することを主な目的とする。
【課題を解決するための手段】
【００１１】
本発明に係るデータ処理システムは、
複数のデータを記憶するメインメモリに接続されているデータ処理システムであって、
前記メインメモリのデータをキャッシュするキャッシュ領域の一部に、他のキャッシュ領域から区別して管理される特定キャッシュ領域として割り当て可能なキャッシュメモリと、
前記キャッシュメモリに前記メインメモリのデータを格納する際に、前記特定キャッシュ領域へのキャッシュ割り当てが指定されている指定データを前記特定キャッシュ領域に格納するプロセッサとを有することを特徴とする。
【発明の効果】
【００１２】
本発明によれば、指定データは特定キャッシュ領域にのみ格納されるので、特定キャッシュ領域以外の領域に格納されている局所性の高いデータがキャッシュメモリから追い出される可能性が小さくなり、キャッシュミスを減少させることができ、処理の効率低下を防止することができる。
【図面の簡単な説明】
【００１３】
【図１】実施の形態１に係る構成例を示す図。
【図２】課題とするプログラムの例を示す図。
【図３】実施の形態１に係るメインメモリの例を示す図。
【図４】実施の形態１に係るプログラムの例を示す図。
【図５】実施の形態１に係るプロセッサ１０２の動作例を示すフローチャート図。
【図６】従来のアクセス方法と実施の形態１に係るアクセス方法におけるキャッシュメモリ内容の比較例を示す図。
【図７】課題とするプログラムの例を示す図。
【図８】実施の形態２に係るメインメモリの例を示す図。
【図９】実施の形態２に係るプロセッサ１０２の動作例を示すフローチャート図。
【図１０】実施の形態２に係るプロセッサ１０２の動作例を示すフローチャート図。
【図１１】実施の形態２に係るプログラムの例を示す図。
【図１２】実施の形態２に係るプログラムの例を示す図。
【図１３】実施の形態２に係る動作のタイミングチャート図。
【図１４】実施の形態２に係るプロセッサ１０２の動作例を示すフローチャート図。
【図１５】実施の形態２に係るプロセッサ１０２の動作例を示すフローチャート図。
【図１６】実施の形態２に係るＣＣＷの例を示す図。
【図１７】実施の形態２に係る動作のタイミングチャート図。
【図１８】実施の形態３に係る構成例を示す図。
【図１９】実施の形態３に係るメインメモリの例を示す図。
【図２０】実施の形態３に係るプロセッサ１０２の動作例を示すフローチャート図。
【図２１】実施の形態３に係るデータ転送自動制御回路及び実施の形態４に係るプロセッサ１１０の動作例を示すフローチャート図。
【図２２】実施の形態４に係る構成例を示す図。
【図２３】実施の形態５に係る構成例を示す図。
【図２４】実施の形態５に係るプロセッサ１１０の動作例を示すフローチャート図。
【発明を実施するための形態】
【００１４】
実施の形態１．
本実施の形態では図２の２０１の関数ｆｕｎｃＡ（）を実行してもキャッシュメモリの中にある局所性の高いデータのキャッシュメモリからの追い出しを防ぐようなシステムについて示す。
具体的には、本実施の形態では、キャッシュメモリにおいて、メインメモリのデータをキャッシュするキャッシュ領域の一部に、他のキャッシュ領域から区別して管理される特定キャッシュ領域が設けられ、プロセッサが、キャッシュメモリにメインメモリのデータを格納する際に、特定キャッシュ領域へのキャッシュが指定されているデータ（指定データ）は特定キャッシュ領域に格納し、特定キャッシュ領域に格納されている指定データを用いたデータ処理が終了した際に当該指定データを特定キャッシュ領域から追い出し、次にキャッシュの対象となる指定データを特定キャッシュ領域に格納する動作を繰り返す。
これにより、キャッシュメモリに残存させておく重要性の低い指定データは特定キャッシュ領域だけに格納され、特定キャッシュ領域以外の領域に格納されている局所性の高いデータがキャッシュメモリから追い出される可能性が小さくなる。
【００１５】
図１は、実施の形態１に係る構成例を示す。
１０１はＣＰＵであり、内部にプロセッサ１０２とキャッシュメモリ１０３を備えている。
１０４はメインメモリ、１０５はメモリ間のデータ転送を行うＤＭＡ（Ｄｉｒｅｃｔ  Ｍｅｍｏｒｙ  Ａｃｃｅｓｓ）コントローラであり、１０６はＣＰＵ１０１とメインメモリ１０４、ＤＭＡコントローラ１０５（ＤＭＡコントローラはＤＭＡＣとも表記する）を接続するバスである。
メインメモリ１０４にはプロセッサ１０２が実行するプログラムやデータが格納されており、プロセッサ１０２はアクセスしたデータをキャッシュメモリ１０３に格納して利用する。
また、キャッシュメモリ１０３にはメインメモリ１０４のデータがＤＭＡコントローラ１０５などによって参照または変更された際、該当するデータがキャッシュメモリ１０３に格納されていた場合はキャッシュメモリ１０３の該当データを必要に応じてメインメモリ１０４に書き戻したり無効にしたりする機能（スヌープ機能）を有している。
なお、ＤＭＡＣ１０５はデータ転送装置の例であり、また、プロセッサ１０２、キャッシュメモリ１０３及びＤＭＡＣ１０５を合わせたものがデータ処理システムの例である。
【００１６】
メインメモリ１０４では、連続データを記憶するデータ記憶領域と、連続データのうちキャッシュメモリ１０３にキャッシュさせる指定データを順に保管するｗｏｒｋ領域（データ保管領域）とが設けられている。
また、キャッシュメモリ１０３では、ｗｏｒｋ領域に保管されているデータを格納するための特定キャッシュ領域が他のキャッシュ領域と区別されて割り当て可能としている。例えば、セットアソシアティブ方式のキャッシュではアドレスの下位部分より連想されるセットが使用されるため、ｗｏｒｋ領域が１つのウェイの合計容量より小さければ割り当てられるセットは限定できる。一般的にはＬＲＵ（Ｌｅａｓｔ  Ｒｅｃｅｎｔｌｙ  Ｕｓｅｄ）やＦＩＦＯ（Ｆａｓｔ  Ｉｎ  Ｆａｓｔ  Ｏｕｔ）などの置換アルゴリズムが採用されている場合でも、ウェイ数がＮ個ある場合には、ｗｏｒｋ領域が順次ウェイを移動してＮ倍の領域を汚すことが考えられるが、Ｉ／Ｏや他ＣＰＵからのアクセスにより無効化されるとそこにキャッシュの空きができるため、ｗｏｒｋ領域のキャッシュへの割り付けはウェイを移動せずに同じキャッシュ領域に留まることが期待できる。これにより特定キャッシュ領域への割り付けができる。
プロセッサ１０２は、ＤＭＡＣ１０５を利用して指定データを順にデータ記憶領域からｗｏｒｋ領域に転送させ、ｗｏｒｋ領域に転送させた指定データをキャッシュメモリ１０３の特定キャッシュ領域に格納してデータ処理を行い、データ処理が終了すると、特定キャッシュ領域に格納されているデータの追い出しを行う。そして、次の指定データをｗｏｒｋ領域に転送させ、ｗｏｒｋ領域内の指定データをキャッシュメモリ１０３の特定キャッシュ領域に格納する一連の動作を繰り返し、特定キャッシュ領域以外の領域に格納されている局所性の高いデータがキャッシュメモリ１０３から追い出されることを回避する。
また、プロセッサ１０２は、特定キャッシュ領域に格納されている指定データを用いたデータ処理が終了した際に、指定データをメインメモリ１０４に書き戻す場合は、データ処理の結果が反映された指定データを特定キャッシュ領域からメインメモリ１０４のｗｏｒｋ領域に格納し、ＤＭＡＣ１０５がプロセッサ１０２による格納が行われた後のｗｏｒｋ領域内の指定データをデータ記憶領域に転送し、更に、次にキャッシュの対象となる指定データをデータ記憶領域からｗｏｒｋ領域に転送する。
【００１７】
図３は、本実施の形態のメインメモリ１０４の内容の一部を表している。
メインメモリ１０４には配列ａのデータを格納しているデータ記憶領域３０１ａ〜３０１ｎの他に配列ａの任意の一行（ａ［ｉ］［０］〜ａ［ｉ］［ｍ−１］）のデータを格納できるｗｏｒｋ領域３０２を備えている。
ｗｏｒｋ領域３０２はデータ保管領域の例である。
【００１８】
本実施の形態では図２のプログラム２０１の関数ｆｕｎｃＡ（）において配列ａ［ｉ］［ｊ］のデータにアクセスするため、プロセッサ１０２はＤＭＡ転送によってａ［ｉ］［０］〜ａ［ｉ］［ｍ−１］の一列分のデータをｗｏｒｋ領域３０２にコピーする。
コピーが完了するとプロセッサ１０２はｗｏｒｋ領域３０２のｗｏｒｋ［０］〜ｗｏｒｋ［ｍ−１］を参照する（ｗｏｒｋ領域３０２のデータｗｏｒｋ［０］〜ｗｏｒｋ［ｍ−１］をキャッシュメモリ１０３の特定キャッシュ領域に格納する）ことでａ［ｉ］［０］〜ａ［ｉ］［ｍ−１］のデータの複製にアクセスして処理を行う。
ａ［ｉ］［０］〜ａ［ｉ］［ｍ−１］のデータの複製を利用した後は、キャッシュメモリ１０３の特定キャッシュ領域内のデータをｗｏｒｋ領域３０２に格納し、ｗｏｒｋ領域３０２のデータｗｏｒｋ［０］〜ｗｏｒｋ［ｍ−１］を配列ａ［ｉ］［０］〜ａ［ｉ］［ｍ−１］に書き戻すようＤＭＡ転送を行う。
その後、次にプロセッサ１０２がアクセスするデータａ［ｉ＋１］［０］〜ａ［ｉ＋１］［ｍ−１］をＤＭＡ転送によりｗｏｒｋ領域３０２にコピーし、再びｗｏｒｋ領域３０２を参照してａ［ｉ＋１］［０］〜ａ［ｉ＋１］［ｍ−１］のデータにアクセスして処理を行うことを繰り返す。
【００１９】
上記のプロセッサ１０２の動作を示すフローチャートを図５に示す。
プロセッサ１０２は、まず変数ｉに初期値０を代入し（ステップＳ５０１）、ｗｏｒｋ領域３０２にａ［ｉ］［０］〜ａ［ｉ］［ｍ−１］のデータを転送するようにＤＭＡコントローラ１０５を起動する（ステップＳ５０２）。
次に、ステップＳ５０３では、プロセッサ１０２はＤＭＡの転送状態を見てＤＭＡの転送完了を確認する。
ステップＳ５０３でＤＭＡ転送が完了したことを確認すればｗｏｒｋ領域３０２にあるａ［ｉ］［０］〜ａ［ｉ］［ｍ−１］のデータの複製にアクセスして図２の２０２の処理を実行する（ステップＳ５０４）。
ステップＳ５０４の処理が終了するとａ［ｉ］［０］〜ａ［ｉ］［ｍ−１］にｗｏｒｋ領域３０２のデータｗｏｒｋ［０］〜ｗｏｒｋ［ｍ−１］を転送するようＤＭＡコントローラ１０５を起動する（ステップＳ５０５）。
ステップＳ５０５で起動したＤＭＡ転送が完了すれば（ステップＳ５０６）、ｉの値を１増やす（ステップＳ５０７）。
もし、ｉがｎよりも小さい場合はａ［ｉ］［］〜ａ［ｎ−１］［］に対する処理が残っているのでステップＳ５０２に戻る（ステップＳ５０８）。
【００２０】
図５のフローチャートの動作に対応する関数ｆｕｎｃＡ（）のプログラムを図４の４０１に示す。
図４の４０２、４０５、４０７にあるｄｍａ＿ｓｔａｒｔ（ｃｈａｎｎｅｌ，ｔｏ，ｆｒｏｍ，ｓｉｚｅ）関数はｆｒｏｍ領域のｓｉｚｅで指定したサイズのデータをｔｏ領域へｃｈａｎｎｅｌで指定したチャネルでＤＭＡ転送するようにＤＭＡコントローラ１０５を起動する関数であり、ｄｍａ＿ｆｉｎ（ｃｈａｎｎｅｌ）関数はｃｈａｎｎｅｌで指定したチャネルのＤＭＡ転送が完了しているかを確認する関数である。
また、図４の４０２、４０５、４０７でｗｏｒｋ領域３０２にＤＭＡ転送するように指定されているデータ（図３の領域３０１ａ〜３０１ｎに記憶されているデータ）は、キャッシュメモリ１０３の特定キャッシュ領域に格納することを指定されているデータであり、指定データに相当する。
また、図４の４０２、４０７が図５のステップＳ５０２、４０３がステップＳ５０３、４０４がステップＳ５０４、４０５がステップＳ５０５、４０６がステップＳ５０６に相当する。
【００２１】
以上のようにプロセッサ１０２は関数ｆｕｎｃＡ（）においてｎ行×ｍ列の配列ａ［ｉ］［ｊ］を利用するがプロセッサ１０２はメインメモリ１０４のａ［０］［０］〜ａ［ｎ−１］［ｍ−１］の領域３０１ａ〜３０１ｎにはアクセスせずにｗｏｒｋ領域３０２にアクセスする。
そのためキャッシュメモリ１０３にはｗｏｒｋ領域３０２のサイズ分しか配列ａ［ｉ］［ｊ］のデータが格納されないためキャッシュメモリ１０３のデータの追い出しを少なくすることができる。
【００２２】
図６の６０１は図２の関数ｆｕｎｃＡ（）を実行した際のキャッシュメモリ１０３の内容を示し、６０２は本実施の形態である図４の関数ｆｕｎｃＡ（）を実行した際のキャッシュメモリ１０３の内容を示したものである。
キャッシュメモリ１０３の１ブロックのサイズが配列ａ［ｉ］［０］〜ａ［ｉ］［ｍ−１］のサイズに相当し、キャッシュメモリ１０３には８ブロック分のデータが格納できるとする。
関数ｆｕｎｃＡ（）内では配列ａ［０］［０］〜ａ［ｎ−１］［ｍ−１］と配列ｗｏｒｋ［０］〜ｗｏｒｋ［ｍ−１］のデータのみがキャッシュメモリ１０３に格納されるものとする。
ＣＰＵ１０１は図２のプログラムの２０２の部分において配列ａ［ｉ］［ｊ］のデータにアクセスした際、ａ［ｉ］［ｊ］のデータを含むａ［ｉ］［０］〜ａ［ｉ］［ｍ−１］のデータをキャッシュメモリ１０３に格納する。
６０１に示すように図２の関数ｆｕｎｃＡ（）を実行した場合、キャッシュメモリ１０３の全てのブロック６０３ａ〜６０３ｈには配列ａのデータが格納され、関数ｆｕｎｃＡ（）の実行前にキャッシュメモリ１０３に格納されていたデータは全てキャッシュメモリ１０３から追い出されてしまう。
しかし図４の関数ｆｕｎｃＡ（）を実行した場合は、ＣＰＵ１０１は配列ｗｏｒｋにしかアクセスしないため６０２に示すようにキャッシュメモリ１０３の１ブロック６０３ａに配列ｗｏｒｋのデータが格納されるのみでそれ以外の６０４ａ〜６０４ｇのブロックには関数ｆｕｎｃＡ（）が実行される前のデータが残る。
そのため関数ｆｕｎｃＡ（）の実行前にキャッシュメモリ１０３に格納されていたデータは関数ｆｕｎｃＡ（）の実行後でもキャッシュメモリ１０３に残っている確率が高く、処理の低下を抑えることができる。
なお、図６の６０２のブロック６０３ａが特定キャッシュ領域であり、メインメモリ１０４のｗｏｒｋ領域３０２内のデータは特定キャッシュ領域であるブロック６０３ａにのみ格納されることが定義づけられている。
【００２３】
このように本実施の形態では、広大なサイズのデータをｗｏｒｋ領域３０２へコピーしてからアクセスすることによって、広大な領域へ順次アクセスすることで局所性の高いデータがキャッシュメモリから追い出される可能性が小さくなり、キャッシュミスを削減する効果が得られる。
つまり、キャッシュメモリに残存させておく重要性の低い指定データは特定キャッシュ領域だけに格納され、特定キャッシュ領域以外の領域に格納されている局所性の高いデータがキャッシュメモリから追い出される可能性が小さく、キャッシュミスを減少させることができる。
【００２４】
また、図２のプログラムの２０２では関数ｇの引数にａ［ｉ］［ｊ］を指定し、戻り値をａ［ｉ］［ｊ］に代入しており、ａ［ｉ］［ｊ］を参照した後、ａ［ｉ］［ｊ］に値を代入している。
しかし、図７の関数ｆｕｎｃＢ（）７０１のように、ａ［ｉ］［ｊ］の値を参照せずに関数ｇの結果を書き込むだけの場合は、ａ［ｉ］［０］〜ａ［ｉ］［ｍ−１］のデータを事前にｗｏｒｋ領域３０２に転送する処理（図５のステップＳ５０２、ステップＳ５０３）を行う必要はない。
【００２５】
逆に図７の関数ｆｕｎｃＣ（）７０２のように、ａ［ｉ］［ｊ］を参照するだけで変更しないのであればｗｏｒｋ領域から配列ａ［ｉ］［０］〜ａ［ｉ］［ｍ−１］にデータを書き戻す必要がないため図５のステップＳ５０５、ステップＳ５０６の動作は必要ない。
【００２６】
このように、データを参照するのみまたは書き込むのみであるならば、ｗｏｒｋ領域３０２へのデータのコピーまたはｗｏｒｋ領域３０２から元の領域へデータの書き戻しを省略することができる。
これによりデータ転送量を削減することができる。
【００２７】
以上、本実施の形態では、スヌープ機能などのキャッシュのコヒーレンス制御をもつキャッシュメモリの備わったＣＰＵがメインメモリ内の広大な領域のデータに順次アクセスして処理を行うシステムにおいて、以下の（ａ）〜（ｃ）の動作を順番に繰り返し行って処理するプログラムおよびそれを用いたシステムを説明した。
（ａ）メインメモリ内の小容量のバッファに広大な領域のデータの一部をＤＭＡ装置を用いてＤＭＡ転送でコピーする。
（ｂ）（ａ）のＤＭＡ転送が完了するとＣＰＵはメインメモリ内の（広大な領域ではなく）バッファへアクセスして処理を行う。
（ｃ）（ｂ）のＣＰＵによるバッファのデータの利用が終了すると、バッファのデータを（ａ）でコピーしてきた広大な領域にＤＭＡ装置を用いて書き戻す。
【００２８】
実施の形態２．
実施の形態１では１つのｗｏｒｋ領域に配列ａ［ｉ］［０］〜ａ［ｉ］［ｍ−１］のデータを格納し、プロセッサ１０２がデータを利用し終えるとｗｏｒｋ領域のデータを配列ａ［ｉ］［０］〜ａ［ｉ］［ｍ−１］に書き戻した後、配列ａ［ｉ＋１］［０］〜ａ［ｉ＋１］［ｍ−１］のデータをｗｏｒｋ領域に格納して処理を行っていた。
本実施の形態では、２つのｗｏｒｋ領域、ｗｏｒｋＡ、ｗｏｒｋＢを用意し、一方のｗｏｒｋ領域でプロセッサ１０２がデータを処理している間にもう一方のｗｏｒｋ領域に次にプロセッサ１０２が利用するデータを転送する実施の形態を示す。
【００２９】
実施の形態２の構成図は図２と同じである。
ただしメインメモリ１０４の内容は図８に示すとおり、２つのｗｏｒｋ領域、ｗｏｒｋＡ［０］〜ｗｏｒｋＡ［ｍ−１］３０２ａ、ｗｏｒｋＢ［０］〜ｗｏｒｋＢ［ｍ−１］３０２ｂを備えている。
また、本実施の形態では、プロセッサ１０２は、ｗｏｒｋ領域内の配列を前半部分のデータと後半部分のデータに分け、動作（特定キャッシュメモリへの格納、データ処理）を前半部分のデータに対する動作と後半部分のデータに対する動作に分ける。
【００３０】
実施の形態２では、プロセッサ１０２がｗｏｒｋＡ領域３０２ａを参照して配列ａ［ｉ］［０］〜ａ［ｉ］［ｍ−１］のデータにアクセスして処理を行っている間に前回プロセッサ１０２が利用したｗｏｒｋＢ領域３０２ｂのデータを配列ａ［ｉ−１］［０］〜ａ［ｉ−１］［ｍ−１］へ書き戻し、次にプロセッサ１０２が利用するデータａ［ｉ＋１］［０］〜ａ［ｉ＋１］［ｍ−１］をｗｏｒｋＢ領域３０２ｂにコピーするようにＤＭＡコントローラ１０５を制御する。
本実施の形態ではプロセッサ１０２がｗｏｒｋＡ領域３０２ａにある配列ａ［ｉ］［０］〜ａ［ｉ］［ｍ−１］のデータの複製にアクセスして処理を行っている間にｗｏｒｋＢ領域３０２ｂのデータの配列ａ［ｉ−１］［０］〜ａ［ｉ−１］［ｍ−１］へのデータの書き戻しと、次にアクセスする配列ａ［ｉ＋１］［０］〜ａ［ｉ＋１］［ｍ−１］のデータのｗｏｒｋＢ領域３０２ｂへのコピーの２回のＤＭＡ転送を行う必要がある。
そこで、プロセッサ１０２がｗｏｒｋＢ領域３０２ｂを参照して配列ａ［ｉ−１］［０］〜ａ［ｉ−１］［ｍ−１］のデータにアクセスして行う処理が終了すると、ｗｏｒｋＢ領域３０２ｂのデータｗｏｒｋＢ［０］〜ｗｏｒｋＢ［ｍ−１］を配列ａ［ｉ−１］［０］〜ａ［ｉ−１］［ｍ−１］に転送するＤＭＡを起動する。
その後、ｗｏｒｋＡ領域３０２ａの配列の前半部分である配列ａ［ｉ］［０］〜ａ［ｉ］［ｍ／２−１］のデータを処理すると、ｗｏｒｋＢ領域３０２ｂのデータの書き戻しのＤＭＡ転送の完了を待ち、次にアクセスする配列ａ［ｉ＋１］［０］〜ａ［ｉ＋１］［ｍ−１］のデータのコピーを行う２回目のＤＭＡ転送を行うようＤＭＡコントローラ１０５を起動する。
【００３１】
このプロセッサ１０２の動作を表すフローチャートを図９及び図１０に示す。
図９及び図１０のフローチャートの動作は以下の通りである。
【００３２】
まず、プロセッサ１０２は、変数ｉに０を代入し（ステップＳ８０１）、ｗｏｒｋＡ領域３０２ａにａ［ｉ］［０］〜ａ［ｉ］［ｍ−１］のデータを転送するようにＤＭＡコントローラ１０５を起動する（ステップＳ８０２）。
ｗｏｒｋＡ領域３０２ａへのＤＭＡ転送が完了すれば（ステップＳ８０３ａがＹＥＳになれば）ｗｏｒｋＡ領域３０２ａに格納されている配列ａ［ｉ］の前半部分、ａ［ｉ］［０］〜ａ［ｉ］［ｍ／２−１］にアクセスして処理を実行する（ｗｏｒｋＡ領域３０２ａ内のａ［ｉ］［０］〜ａ［ｉ］［ｍ／２−１］のデータを特定キャッシュ領域に格納し、特定キャッシュ領域のデータを用いてデータ処理を行う）（ステップＳ８０４ａ）。
配列ａ［ｉ］の前半部分の処理が完了し、ｉが１以上であるならば（ステップＳ８１０がＹＥＳ）ｗｏｒｋＡ領域３０２ａのデータにアクセスする前にｗｏｒｋＢ領域３０２ｂのデータにアクセスしているため、ｗｏｒｋＢ領域３０２ｂのデータを配列ａ［ｉ−１］［０］〜ａ［ｉ−１］［ｍ−１］に書き戻すＤＭＡ転送が完了するまで待つ（ステップＳ８０５ａ）。
ｗｏｒｋＢ領域３０２ｂに対するＤＭＡ転送が完了した、またはステップＳ８１０がＮＯであった場合は、ｉがｎ−１未満であり、現在処理しているデータが配列ａ［ｉ］［０］〜ａ［ｉ］［ｍ−１］の最後のデータかを調べる（ステップＳ８０６ａ）。
ｉがｎ−１以上、すなわち現在処理しているデータが最後である場合の処理は後で説明する。
【００３３】
ステップＳ８０６ａがＹＥＳの場合は、プロセッサ１０２は、次に処理する配列ａ［ｉ＋１］［０］〜ａ［ｉ＋１］［ｍ−１］のデータをｗｏｒｋＢ領域３０２ｂに転送するようにＤＭＡコントローラ１０５を起動する（ステップＳ８０７ａ）。
その後、ｗｏｒｋＡ領域３０２ａの後半部分の配列ａ［ｉ］［ｍ／２］〜ａ［ｉ］［ｍ−１］のデータにアクセスして処理を続行する（ｗｏｒｋＡ領域３０２ａ内のａ［ｉ］［ｍ／２］〜ａ［ｉ］［ｍ−１］のデータを特定キャッシュ領域に格納し、特定キャッシュ領域のデータを用いてデータ処理を行う）（ステップＳ８０８ａ）。
ｗｏｒｋＡ領域３０２ａのデータに対する処理が終了すれば、プロセッサ１０２は、特定キャッシュ領域内のデータをｗｏｒｋＡ領域３０２ａに格納するとともに、ｗｏｒｋＡ領域３０２ａのデータを配列ａ［ｉ］［０］〜ａ［ｉ］［ｍ−１］に書き戻すようにＤＭＡコントローラ１０５を起動する（ステップＳ８０９ａ）。
【００３４】
ステップＳ８０３ａ〜ステップＳ８０９ａ、ステップＳ８１０の処理はプロセッサ１０２がｗｏｒｋＡ領域３０２ａに格納されている配列ａ［ｉ］［０］〜ａ［ｉ］［ｍ−１］のデータにアクセスして処理を行い、またこの処理の合間にｗｏｒｋＢ領域３０５ｂのデータの書き戻しの完了確認と、次にプロセッサ１０２が利用する配列ａ［ｉ＋１］［０］〜ａ［ｉ＋１］［ｍ−１］のデータのｗｏｒｋＢ領域３０５ｂへのコピーを行った。
ステップＳ８０９ａ以降のステップＳ８０３ｂ〜ステップＳ８０９ｂの処理はプロセッサ１０２がｗｏｒｋＢ領域３０２ｂに格納されている配列ａ［ｉ＋１］［０］〜ａ［ｉ＋１］［ｍ−１］のデータにアクセスして処理を行い、その処理の合間にｗｏｒｋＡ領域３０２ａのデータの書き戻しの完了確認と次にプロセッサ１０２が利用する配列ａ［ｉ＋２］［０］〜ａ［ｉ＋２］［ｍ−１］のデータのｗｏｒｋＡ領域３０２ａへのコピーを行う動作を表している。
ステップＳ８０３ｂ〜ステップＳ８０９ｂの各動作内容はステップＳ８０３ａ〜ステップＳ８０９ａと同じであるため、説明は省略する。
本実施の形態ではプロセッサ１０２はｗｏｒｋＡ領域３０２ａから利用するようにしているのでｗｏｒｋＢ領域３０２ｂのデータにアクセスする前にｗｏｒｋＡ領域３０２ａにアクセスしていたかを調べる、ステップＳ８１０に対応した動作は不要である。
ステップＳ８０９ｂで配列ａ［ｉ＋１］［０］〜ａ［ｉ＋１］［ｍ−１］にｗｏｒｋＢ領域３０２ｂのデータを書き戻すようにＤＭＡコントローラ１０５を起動した後は、ｉの値を２増加して（ステップＳ８１１）、ステップＳ８０３ａに戻る。
【００３５】
ステップＳ８０６ａ（またはステップＳ８０６ｂ）での判定がＮＯの場合、すなわち現在処理しているデータが最後である場合は、ｗｏｒｋＢ領域３０２ｂ（ｗｏｒｋＡ領域３０２ａ）への配列ａのデータのコピーは行わず、ｗｏｒｋＡ領域３０２ａ（ｗｏｒｋＢ領域３０２ｂ）の配列ａ［ｉ］［ｍ／２］〜ａ［ｉ］［ｍ−１］（配列ａ［ｉ＋１］［ｍ／２］〜ａ［ｉ＋１］［ｍ−１］）にアクセスして処理を行う（ステップＳ８１２ａ／ステップＳ８１２ｂ）。
処理が終わると配列ａ［ｉ］［０］〜ａ［ｉ］［ｍ−１］（配列ａ［ｉ＋１］［０］〜ａ［ｉ＋１］［ｍ−１］）にｗｏｒｋＡ領域３０２ａ（ｗｏｒｋＢ領域３０２ｂ）のデータを書き戻すよう、ＤＭＡコントローラ１０５を起動する（ステップＳ８１３ａ／ステップＳ８１３ｂ）。
その後、ステップＳ８１３ａ（ステップＳ８１３ｂ）で起動したＤＭＡ転送が完了したことを確認すれば（ステップＳ８１４ａ／ステップＳ８１４ｂ）処理を終了する。
【００３６】
図９及び図１０のフローチャートの動作に対応するプログラムを図１１及び図１２の１００１に示す。
図１１及び図１２では、作図上の理由から、１つのプログラムを２つの図に分割している。
プログラム１００１は、部分１００２と部分１００３を含み、図１１では部分１００２の詳細を示し、図１２では部分１００３の詳細を示している。
図１１及び図１２の各行の“／／”以下はコメントを表し、図９及び図１０のフローチャート中の対応するステップを示している。
１００２で囲まれた部分が、ＣＰＵ１０１がｗｏｒｋＡ領域３０２ａにアクセスして処理を行い、ｗｏｒｋＢ領域３０２ｂに対するＤＭＡ転送を行っている処理に対応し、１００３で囲まれた部分が、ＣＰＵ１０１がｗｏｒｋＢ領域３０２ｂにアクセスして処理を行い、ｗｏｒｋＡ領域３０２ａに対するＤＭＡ転送を行っている処理に対応する。
１００４、１００５はそれぞれ図８のステップＳ８０６ａ、ステップ８０６ｂにてＮＯと判定された場合の処理である。
図９及び図１０のプログラムではｗｏｒｋＡ領域と配列ａとのデータ転送（コピー、書き戻し）はＤＭＡのチャネル０で行い、ｗｏｒｋＢ領域と配列ａとのデータ転送（コピー、書き戻し）はＤＭＡのチャネル１で行っている。
【００３７】
本実施の形態のタイミングチャートを図１３に示す。
横軸が時間による推移を表しており、図のＣＰＵの線の上はプロセッサ１０２がアクセスしている配列ａ［ｉ］［ｊ］のデータを、各ＤＭＡチャネルの線の下には転送内容を表している。
例えばＤＭＡチャネル０の「ｗｏｒｋＡ←ａ［０］」はＤＭＡチャネル０にてｗｏｒｋＡ領域３０２ａに配列ａ［０］［０］〜ａ［０］［ｍ−１］のデータを転送していることを表している。
実線の矢印はＣＰＵ１０１がＤＭＡコントローラ１０５に起動をかける動作、破線の矢印はＤＭＡ転送が完了までを待つ動作を表している。
図中の符号は図９及び図１０のフローチャートに対応するステップを示している。
【００３８】
このように、本実施の形態では、ｗｏｒｋ領域を複数持つことによって、プロセッサ１０２が配列ａ［ｉ］［ｊ］にアクセスして処理を行うのと並行して、前回アクセスしたｗｏｒｋ領域のデータの書き戻しと、次に使用する配列ａ［ｉ＋１］［０］〜ａ［ｉ＋１］［ｍ−１］のデータのｗｏｒｋ領域へのコピーを行うことができる。そのためプロセッサ１０２がｗｏｒｋ領域へのデータ転送完了を待つ時間が短くなり、処理効率を上げることができる。
【００３９】
図２のプログラムの２０２では、関数ｇの引数にａ［ｉ］［ｊ］を指定し、戻り値をａ［ｉ］［ｊ］に代入しており、ａ［ｉ］［ｊ］を参照した後、書き込んでいる。
しかし、実施の形態１と同様、図７の関数ｆｕｎｃＢ（）７０１のように、ａ［ｉ］［ｊ］の値を参照せずに関数ｇの結果を書き込むだけの場合は、ａ［ｉ］［０］〜ａ［ｉ］［ｍ−１］のデータを事前にｗｏｒｋ領域に転送する処理（図９及び図１０のステップＳ８０２、ステップＳ８０３ａ、ステップＳ８０７ａ、ステップＳ８０３ｂ、ステップＳ８０７ｂ）を行う必要はない。
【００４０】
また、図７の関数ｆｕｎｃＣ（）７０２のように、ａ［ｉ］［ｊ］を参照するだけで変更しないのであればｗｏｒｋ領域から配列ａ書き戻す必要がないので図９及び図１０のステップＳ８０５ａ、ステップＳ８０９ａ、ステップＳ８０５ｂ、ステップＳ８０９ｂ、ステップＳ８１３ａ、ステップＳ８１４ａ、ステップＳ８１３ｂ、ステップＳ８１４ｂの動作は必要ない。
【００４１】
このように、データを参照するのみまたは書き込むのみであるならば、ｗｏｒｋ領域から元の領域へデータを書き戻しまたは、ｗｏｒｋ領域へのデータのコピーを省略することができる。これにより、データ転送量を削減することができる。
【００４２】
本実施の形態では、プロセッサ１０２がｗｏｒｋＡ領域３０２ａにある配列ａ［ｉ］［０］〜ａ［ｉ］［ｍ／２−１］のデータに対する処理を行った後でｗｏｒｋＢ領域３０２ｂのデータの書き戻しのＤＭＡ転送が完了したことを確認し、次にプロセッサ１０２が利用する配列ａ［ｉ＋１］［０］〜ａ［ｉ＋１］［ｍ−１］のデータをｗｏｒｋＢ領域３０２ｂに転送するＤＭＡ転送を行うようＤＭＡコントローラ１０５を起動していたが、この書き戻しと次のデータのコピーのＤＭＡ転送をあらかじめＤＭＡコントローラ１０５にある転送制御情報を格納するＣＣＷ（チャネルコマンドワード）にセットしておき、１回の起動処理で両方の転送を１度に行うようにしてもよい。
ＣＣＷについては後で説明する。
【００４３】
ｗｏｒｋ領域から配列ａへのデータの書き戻しと次のデータのコピーを１回の起動で行った場合のプロセッサ１０２のフローチャートを図１４及び図１５に示す。図９及び図１０のフローチャートと同じ処理には同じ番号を振り、説明は省略する。
図１４及び図１５のフローチャートでは、ステップＳ８２２ａ、ステップＳ８２２ｂにてｗｏｒｋ領域３０２のデータの書き戻しと次のデータのコピーを１回の起動処理で行う。そのため、図９及び図１０のステップＳ８０４、ステップＳ８０８のようにｗｏｒｋ領域３０２の処理を分割し、途中でＤＭＡ転送の完了を確認する必要がない。
また、配列ａ［ｎ−２］［０］〜ａ［ｎ−２］［ｍ−１］、ａ［ｎ−１］［０］〜ａ［ｎ−１］［ｍ−１］に対する処理を行った後はｗｏｒｋ領域３０２のデータを配列ａ［ｎ−２］［０］〜ａ［ｎ−２］［ｍ−１］、ａ［ｎ−１］［０］〜ａ［ｎ−１］［ｍ−１］に書き戻す処理は必要だが、次の配列ａのデータをｗｏｒｋ領域３０２にコピーする処理は不要である。そのため、ステップＳ８２１ａ、ステップＳ８２１ｂにてｗｏｒｋ領域３０２に配列ａ［ｉ］の次の領域のデータをコピーする必要であるかを判定し、ｗｏｒｋ領域３０２にコピーする必要がない場合はｗｏｒｋ領域３０２のデータの配列ａ［ｉ］［０］〜ａ［ｉ］［ｍ−１］への書き戻し処理（ステップＳ８１３ａ、ステップＳ８１３ｂ）だけを行っている。
【００４４】
本実施の形態のＣＣＷの例を図１６に示す。
９０１は１回の転送を行うＣＣＷを表しており、ＣＣＷ９０１は転送先アドレス９０２、転送元アドレス９０３、転送サイズ９０４、チェイニング情報９０５から構成される。
ＤＭＡコントローラ１０５はＣＣＷ９０１で指定された転送元アドレス９０３から転送サイズ９０４で指定されたデータを転送先アドレス９０２に転送する。
チェイニング情報９０５は連続して実行するＣＣＷがあるかどうかを示す情報で、‘１’ならば続けて実行するＣＣＷデータがあることを示し、‘０’ならばこのＣＣＷで転送が終わりであることを示す。
本実施の形態ではプロセッサ１０２が図１４及び図１５のフローチャートのステップＳ８２２ａ、ステップＳ８２２ｂでＣＣＷ−ｂ９１１をＤＭＡコントローラ１０５にセットして起動することで、ＤＭＡコントローラ１０５がｗｏｒｋ領域３０２のデータを配列ａ［ｉ−２］［０］〜ａ［ｉ−２］［ｍ−１］に書き戻し、配列ａ［ｉ］［０］〜ａ［ｉ］［ｍ−１］のデータをｗｏｒｋ領域３０２にコピーする。
また、本実施の形態では各ｗｏｒｋ領域３０２の最初の転送（ステップＳ８０２ａ、ステップＳ８０２ｂ）はｗｏｒｋ領域３０２から配列ａ［ｉ−２］［０］〜ａ［ｉ−２］［ｍ−１］のデータの書き戻しがなく、また、最後の転送（ステップＳ８１３ａ、ステップＳ８１３ｂ）は配列ａ［ｉ］［０］〜ａ［ｉ］［ｍ−１］からｗｏｒｋ領域３０２へのデータのコピーが発生しないので、プロセッサ１０２はステップＳ８０２ａ、ステップＳ８０２ｂではＣＣＷ−ａ９１０をセットしてＤＭＡコントローラ１０５を起動し、ステップＳ８１３ａ、ステップＳ８１３ａではＣＣＷはＣＣＷ−ｃ９１１をセットしてＤＭＡコントローラ１０５を起動する。
【００４５】
図１４及び図１５のフローチャートを実行したときのタイミングチャートを図１７に示す。
図中の各符号は図１４及び図１５のフローチャートに対応するステップを示す。
【００４６】
図１３のタイミングチャートと比較してもわかるように、図１７では、プロセッサ１０２がＤＭＡ転送完了を確認する回数が少なくなっている。
このように、ｗｏｒｋ領域３０２に格納されている、現在プロセッサ１０２がアクセスしているデータａ［ｉ］［ｊ］の１つ前のデータａ［ｉ−１］［０］〜ａ［ｉ−１］［ｍ−１］の書き戻しと１つ後の次の領域のデータａ［ｉ＋１］［０］〜ａ［ｉ＋１］［ｍ−１］のコピーをコマンドチェインにより１回の起動で連続して転送されるようにすることでプロセッサ１０２がＤＭＡ転送の完了を確認する回数が削減するため、ＤＭＡ転送の完了確認のオーバーヘッドを削減することができ、また、プロセッサ１０２の処理も前半と後半にわけずに実装できることから、処理効率をさらに向上させることができる。
【００４７】
また、本実施の形態ではｗｏｒｋ領域を２個としたが３個以上のｗｏｒｋ領域を用いてもよい。
また、上記では、ｗｏｒｋ領域にあるデータを前半部分と後半部分に分け、動作も前半部分と後半部分で分けていたが、ｗｏｒｋ領域が３個以上の場合は、このような分割は必要ない。
たとえば、ｗｏｒｋ領域が３個の場合は、ｗｏｒｋＡ領域に格納されているデータの特定キャッシュ領域への格納及びデータ処理に並行して、データ記憶領域からｗｏｒｋＢ領域への次のデータのＤＭＡ転送と、データ処理結果が反映されたデータのｗｏｒｋＣ領域からデータ記憶領域へのＤＭＡ転送を行うようにする。
また、ｗｏｒｋ領域が４個以上の場合は、いずれかのｗｏｒｋ領域に対する処理を休止するようにしてもよいし、いずれかのｗｏｒｋ領域に対する処理を２サイクル以上かけて行うようにしてもよい。
ｗｏｒｋ領域が増えるほどキャッシュメモリに格納される配列ａ［ｉ］［ｊ］のデータは増えるため、キャッシュメモリからのデータの追い出されるデータは増加するが、処理を分割してＤＭＡ転送の完了を確認したり、コマンドチェインを用いて転送を行ったりしなくてもプロセッサ１０２によるｗｏｒｋＡ領域に格納されている配列ａ［ｉ］［ｊ］へのアクセスと、ｗｏｒｋＢ領域から配列ａ［ｉ−１］［０］〜ａ［ｉ−１］［ｍ−１］へのデータの書き戻しと、配列ａ［ｉ＋１］［０］〜ａ［ｉ＋１］［ｍ−１］からｗｏｒｋＣ領域へのデータのコピーを並行して行うことができる。
【００４８】
以上、本実施の形態では、バッファは複数個あり、ＣＰＵがあるバッファにアクセスして処理を行っている間に、ＤＭＡ装置が前記バッファに対する処理を行う前に利用していたバッファのデータの広大な領域への書き戻しと次にＣＰＵが処理する広大な領域のデータのバッファへのコピーを行うプログラムおよびそれを用いたシステムを説明した。
【００４９】
また、本実施の形態では、バッファがＡ、Ｂの２個しかない場合は、ＣＰＵがバッファＡに対する処理が終了すると、バッファＡのデータの広大な領域への書き戻しを行うようＤＭＡ装置を起動する。その後、バッファＢに対する処理が半分終了すると、次にＣＰＵが利用するデータをバッファＡにコピーするようＤＭＡ装置を起動するプログラムおよびそれを用いたシステムを説明した。
【００５０】
更に、本実施の形態では、バッファから広大な領域へのデータの書き戻しと次にＣＰＵが利用するデータのバッファへのコピーはコマンドチェインによって１回の起動処理で行うプログラムおよびそれを用いたシステムを説明した。
【００５１】
実施の形態３．
実施の形態１、実施の形態２ではともにプログラム中でプロセッサ１０２がＤＭＡコントローラ１０５を制御していたが、本実施の形態では制御回路によって処理結果の書き戻しと次に利用するデータの転送を行う構成について示す。
【００５２】
図１８に本実施の形態の構成を示す。
実施の形態３ではＣＰＵ１０１、メインメモリ１０４に加えてデータ自動転送回路１０７がバス１０６に接続されている。
データ自動転送回路１０７には、ＤＭＡコントローラ１０５とメインメモリ１０４から取得した情報に基づいてＤＭＡコントローラ１０５を制御するデータ転送自動制御回路１０８を備えている。
ＤＭＡコントローラ１０５は、実施の形態１及び実施の形態２で説明したものと同じである。
なお、本実施の形態では、データ自動転送回路１０７がデータ転送装置の例となる。
【００５３】
図１９に本実施の形態のメインメモリ１０４の内容の一部を示す。
本実施の形態では配列ａのデータ３０１ａ〜３０１ｎと配列ａのデータの一部を格納するｗｏｒｋＡ領域３０２ａ、ｗｏｒｋＢ領域３０２ｂに加え、ｗｏｒｋＡ領域３０２ａ、ｗｏｒｋＢ領域３０２ｂのそれぞれの状態を表すステータス情報を格納するステータス情報格納領域３０３ａ、３０３ｂと、インデックス情報を格納するインデックス情報格納領域３０４ａ、３０４ｂを備えている。
【００５４】
各ステータス情報は、ｗｏｒｋ領域内のデータのステータスを示す情報であり、“データ転送完了”、“ＣＰＵ処理終了”のいずれかの状態を示す。
“データ転送完了”はデータ記憶領域からｗｏｒｋ領域へのデータ転送が完了しプロセッサ１０２がｗｏｒｋ領域内のデータを利用できる状態を示し、“ＣＰＵ処理終了”はプロセッサ１０２によりデータアクセスが終了し、ｗｏｒｋ領域３０２のデータを元の領域へ転送することが可能である状態を示す。システム起動時のステータス情報の初期状態は“データ転送完了”とする。実際にはデータ記憶領域からｗｏｒｋ領域へのデータ転送は行われていないためプロセッサ１０２がｗｏｒｋ領域内のデータを利用できる状態ではないが、データ自動転送回路１０７が転送を開始しないようにするために“データ転送完了”としておく。
インデックス情報は、現在プロセッサ１０２がアクセスしている配列ａまたはＤＭＡコントローラ１０５が次にｗｏｒｋ領域３０２へデータを転送する転送対象の配列ａを表す。
【００５５】
さらに、メインメモリ１０４にはデータ転送自動制御回路１０８がｗｏｒｋ領域３０２、配列ａのデータ３０１にアクセスでき、また、配列ａの個数とＤＭＡコントローラ１０５によって転送するデータの大きさを参照できるようにｗｏｒｋ領域３０２の先頭アドレス情報を格納する領域３０７と配列ａの先頭アドレス情報を格納する領域３０８、配列ａの行数を格納する領域３０５、配列ａ［ｉ］［０］〜ａ［ｉ］［ｍ−１］のサイズを表す情報を格納する領域３０６がある。
【００５６】
なお、以下では、ステータス情報格納領域３０３に格納されているステータス情報をステータス情報３０３とも表記し、インデックス情報格納領域３０４に格納されているインデックス情報をインデックス情報３０４とも表記する。
【００５７】
プロセッサ１０２はステータス情報３０３が“データ転送完了”であれば、ｗｏｒｋ領域３０２に格納されている配列ａ［ｉ］［ｊ］のデータにアクセスして処理を行う。
処理が完了するとインデックス情報３０４を（ｉ＋２）に更新してステータス情報３０３を“ＣＰＵ処理終了”にセットする。
そして、プロセッサ１０２はデータ自動転送回路１０７によってｗｏｒｋ領域３０２のデータがデータ記憶領域の配列ａ［ｉ−２］［０］〜ａ［ｉ−２］［ｍ−１］に書き戻され、次にプロセッサ１０２が処理する配列ａ［ｉ］［０］〜ａ［ｉ］［ｍ−１］のデータがｗｏｒｋ領域３０２にコピーされるのを待つ。
つまり、データ転送自動制御回路１０８はステータス情報３０３が“ＣＰＵ処理終了”であれば、インデックス情報（ｉｎｄｅｘ）で指定した配列ａ［ｉ−２］［０］〜ａ［ｉ−２］［ｍ−１］へｗｏｒｋ領域３０２のデータを書き戻すようＤＭＡコントローラ１０５を起動する。
その後、プロセッサ１０２が次に処理する配列ａ［ｉ］［０］〜［ｉ］［ｍ−１］のデータをｗｏｒｋ領域３０２にコピーするようＤＭＡコントローラ１０５を起動し、ＤＭＡ転送が完了すればステータス情報３０３を“データ転送完了”にセットする。
【００５８】
本実施の形態に係るプロセッサ１０２の動作のフローチャートを図２０に示す。
プロセッサ１０２は、初期設定として変数ｉとインデックス情報３０４ａ（ｉｎｄｅｘＡ）を０、インデックス情報３０４ｂ（ｉｎｄｅｘＢ）を１にセットし、ステータス情報３０３ａ、ステータス情報３０３ｂを“ＣＰＵ処理終了”にする（ステップＳ１３０１）。
詳しい動作は後で説明するが、ステータス情報３０３が“ＣＰＵ処理終了”の場合はデータ転送自動制御回路１０８がｗｏｒｋ領域３０２にインデックス情報３０４で指定した配列ａのデータを転送し、ステータス情報３０３を“データ転送完了”にセットする。
そのため、プロセッサ１０２はステータス情報３０３ａが“データ転送完了”になり、ｗｏｒｋＡ領域３０２ａに配列ａ［ｉ］［］のデータが転送されるまで待つ（ステップＳ１３０２）。
ｗｏｒｋＡ領域３０２ａに配列ａ［ｉ］［］のデータが格納されると、プロセッサ１０２はｗｏｒｋＡ領域３０２ａにアクセスして処理を行う（ｗｏｒｋＡ領域３０２ａのデータをキャッシュメモリ１０３の特定キャッシュ領域に格納し、特定キャッシュメモリのデータを用いてデータ処理を行い、データ処理が反映されたデータをｗｏｒｋＡ領域３０２ａに格納する）（ステップＳ１３０３）。
ｗｏｒｋＡ領域３０２ａへの処理が終わると、プロセッサ１０２は、インデックス情報３０４ａをｉ＋２に更新し、ステータス情報３０３ａを“ＣＰＵ処理終了”にセットする（ステップＳ１３０４）。
ｉの値が（ｎ−１）以上であれば（ステップＳ１３０５がＮＯの場合）、最後の配列ａ［ｎ−１］［］のデータに対して処理を行ったのでフローを終了する。
【００５９】
ｉの値が（ｎ−１）よりも小さい場合（ステップＳ１３０５がＹＥＳの場合）は処理するデータがまだ残っているので、今度はステータス情報３０３ｂが“データ転送完了”になり、ｗｏｒｋＢ領域３０２ｂへ配列ａ［ｉ＋１］［］のデータがコピーされるのを待つ（ステップＳ１３０６）。
ステータス情報３０３ｂが“データ転送完了”になればｗｏｒｋＢ領域３０２ｂにアクセスして処理を行う（ｗｏｒｋＢ領域３０２ｂのデータをキャッシュメモリ１０３の特定キャッシュ領域に格納し、特定キャッシュメモリのデータを用いてデータ処理を行い、データ処理が反映されたデータをｗｏｒｋＢ領域３０２ｂに格納する）（ステップＳ１３０７）。
ｗｏｒｋＢ領域３０２ｂへの処理が終わると、プロセッサ１０２は、インデックス情報３０４ｂをｉ＋３に更新し、ステータス情報３０３ｂを”ＣＰＵ処理終了”にセットする（ステップＳ１３０８）。
（ｉ＋１）の値が（ｎ−１）以上であれば（ステップＳ１３０９がＮＯの場合）、最後の配列ａ［ｎ−１］［］のデータに対して処理を行ったのでフローを終了する。
（ｉ＋１）の値が（ｎ−１）よりも小さい場合（ステップＳ１３０９がＹＥＳの場合）、ｉを２増加させて（ステップＳ１３１０）、ステップＳ１３０２へ戻る。
【００６０】
次に、本実施の形態に係るデータ転送自動制御回路１０８の動作を表すフローチャートを図２１に示す。
図２１のフローチャートは１つのｗｏｒｋ領域３０２に対するＤＭＡ転送を制御する動作を示したもので、データ転送自動制御回路１０８は図２１の処理をｗｏｒｋ領域３０２の個数だけ並行して実行する。図２１は３０２の個数が２個の実施例である。
図２１はｗｏｒｋＡ領域３０２ａに対する処理について示しているが、ｗｏｒｋＢ領域に対する処理もｗｏｒｋＡ領域３０２ａをｗｏｒｋＢ領域３０２ｂ、ステータス情報３０３ａ（ｓｔａｔｕｓＡ）をステータス情報３０３ｂ（ｓｔａｔｕｓＢ）、インデックス情報３０４ａ（ｉｎｄｅｘＡ）をインデックス情報３０４ｂ（ｉｎｄｅｘＢ）と読み替えればよい。
【００６１】
図２１の動作を説明する。
まず、データ転送自動制御回路１０８はｗｏｒｋＡ領域３０２ａのステータス情報３０３ａ、インデックス情報３０４ａを取得する（ステップＳ１４０１）。
ステータス情報３０３ａが“ＣＰＵ処理終了”でなければ、ステップＳ１４０１に戻り、ステータス情報３０３ａが“ＣＰＵ処理終了”になるまで処理を繰り返す。
ステータス情報３０３ａが“ＣＰＵ処理終了”となり、ステップＳ１４０２がＹＥＳとなれば、インデックス情報３０４ａ（ｉｎｄｅｘＡ）を参照し、ｗｏｒｋＡ領域３０２ａのデータを配列ａ［ｉｎｄｅｘＡ−２］［０］〜ａ［ｉｎｄｅｘＡ−２］［ｍ−１］に書き戻す必要があるかを調べる（ステップＳ１４０３）。
ステップＳ１４０３がＹＥＳの場合は、ｗｏｒｋＡ領域３０２ａに格納されているデータを配列ａ［ｉｎｄｅｘＡ−２］に書き戻すようＤＭＡコントローラ１０５を起動する（ステップＳ１４０４）。
そしてステップＳ１４０４で起動したＤＭＡ転送が完了するまで待つ（ステップＳ１４０５）。
ステップＳ１４０３がＮＯであった場合、またはステップＳ１４０５がＹＥＳになった場合はｗｏｒｋＡ領域３０２ａにｉｎｄｅｘＡで指定した配列のデータを転送する必要があるかを調べる（ステップＳ１４０６）。ステップＳ１４０６がＮＯの場合はステータス情報３０３ａを”データ転送完了”にセットして処理を終了する。
ステップＳ１４０６がＹＥＳの場合は、ｗｏｒｋＡ領域３０２ａに配列ａ［ｉｎｄｅｘ］のデータを転送とするようＤＭＡコントローラ１０５を起動し（ステップＳ１４０７）、ＤＭＡ転送が完了するまで待つ（ステップＳ１４０８）。
ステップＳ１４０７で起動したＤＭＡ転送が完了すれば、ステータス情報３０３を”データ転送完了”にセットしてステップＳ１４０１に戻る。
【００６２】
このようにデータ転送自動制御回路１０８がステータス情報３０３を参照して自動的にｗｏｒｋ領域３０２から配列ａの元の領域へのデータの書き戻しと次のデータのｗｏｒｋ領域３０２へのコピーを行うことでプロセッサ１０２はｗｏｒｋ領域３０２と配列ａ［ｉ］［ｊ］の間のデータ転送を制御する必要はなくなるため、プロセッサ１０２がＤＭＡコントローラ１０５を制御するオーバーヘッドを削減することができる。
図示していないが、ｉｎｄｅｘＡとｉｎｄｅｘＢへの値設定をプロセッサ１０２ではなく、データ転送自動制御回路１０８が加算処理として行うことによりプロセッサ１０２の処理を軽くしてもよい。その場合は図２０のステップＳ１３０４とＳ１３０８での処理「ｉｎｄｅｘＡにｉ＋２を書き込む」、「ｉｎｄｅｘＢにｉ＋３を書き込む」がなくなり、図２１のステップＳ１４０９に「ｉｎｄｅｘＡに２を加算する」処理を追加すればよい。
【００６３】
以上、本実施の形態では、以下の構成要素を備えたシステムを説明した。
スヌープ機能などのキャッシュのコヒーレンス制御をもつキャッシュメモリの備わったＣＰＵ、
ＣＰＵがアクセスして処理を行う広大な領域のデータ、広大な領域のデータの一部を格納する１個以上のバッファ、各バッファの利用状態を示すステータス情報、各バッファに広大な領域のどの部分のデータが格納されているかを示すインデックス情報、バッファに格納する広大な領域のサイズと広大な領域の先頭アドレス情報、バッファのアドレス情報が格納されたメインメモリ、
以下の動作をＣＰＵが行うＣＰＵプログラム、
ＣＰＵはステータス情報を取得してバッファに広大な領域のデータがコピーされていることを確認するとバッファのデータへアクセスして処理を行う。
バッファ内のデータに対する処理が終了するとステータス情報とインデックス情報を更新し、次に処理するデータがバッファにコピーされるのを待つ。
以下の動作を自発的に行うＤＭＡ制御回路を備えたＤＭＡ装置、
メインメモリ内のステータス情報を定期的に取得する。
取得したステータス情報からＣＰＵによるバッファのデータに対する処理が終了したと判断すればＣＰＵが利用していたバッファのデータをインデックス情報から参照される広大な領域に書き戻すようＤＭＡ装置を起動する。
さらに同インデックス情報で指定された、次にＣＰＵが利用する広大な領域のデータをバッファへコピーするようＤＭＡ装置を起動する。
ＣＰＵが次に処理するデータのバッファへのコピーが完了すればステータス情報を更新する。
【００６４】
実施の形態４．
実施の形態３では、データ自動転送回路１０７がメインメモリ１０４内のステータス情報３０３を参照し、ステータス情報３０３が“ＣＰＵ処理終了”であればデータの書き戻しと次のデータのコピーを行ったが、本実施の形態ではデータ自動転送回路１０７を用いずにキャッシュメモリを共有しない別のプロセッサ１１０を用いてｗｏｒｋ領域３０２と配列ａ［ｉ］［ｊ］との間のデータ転送とステータス情報３０３の更新を行う。
【００６５】
図２２に本実施の形態の構成を示す。
本実施の形態ではＣＰＵ１０１の他にプロセッサ１１０とキャッシュメモリ１１１の備わったＣＰＵ１０９がバス１０６に接続されている。
プロセッサ１０２とプロセッサ１１０は共通のキャッシュメモリを持たない。つまり、プロセッサ１１０は、プロセッサ１０２が利用するキャッシュメモリ１０３は利用せず、キャッシュメモリ１１１のみを利用する。
プロセッサ１１０は、他のプロセッサの例である。
また、メインメモリ１０４の内容は図１９と同じである。
また、プロセッサ１０２の動作は図２０と同じである。
【００６６】
プロセッサ１１０が、あるｗｏｒｋ領域３０２に対するデータ転送処理を行うフローチャートは図２１と同じである。
プロセッサ１１０は図２１の処理を１つのｗｏｒｋ領域３０２に対して１つのスレッドとして実行する。
【００６７】
このように、配列ａ［ｉ］［ｊ］のデータにアクセスして処理を行うプロセッサ１０２とは異なるプロセッサ１１０を用いて配列ａ［ｉ］［ｊ］とｗｏｒｋ領域３０２とのデータ転送を行うことで、実施の形態３のデータ自動転送回路１０７のような専用Ｈ／Ｗがない構成においてもキャッシュメモリからのデータの追い出しを防ぐことができる。
また、実施の形態３と同様、図示していないが、ｉｎｄｅｘＡとｉｎｄｅｘＢへの値設定をプロセッサ１０２ではなく、プロセッサ１１０が行うことによりプロセッサ１０２の処理を軽くしてもよい。その場合は図２０のステップＳ１３０４とＳ１３０８での処理「ｉｎｄｅｘＡにｉ＋２を書き込む」、「ｉｎｄｅｘＢにｉ＋３を書き込む」がなくなり、図２１のステップＳ１４０９に「ｉｎｄｅｘＡに２を加算する」処理を追加すればよい。
【００６８】
以上、本実施の形態では、以下の構成要素を備えたシステムを説明した。
スヌープ機能などのキャッシュのコヒーレンス制御をもつキャッシュメモリの備わったＣＰＵ（Ａ）、
ＣＰＵ（Ａ）がアクセスして処理を行う広大な領域のデータ、広大な領域の一部のデータを格納する１個以上のバッファ、各バッファの利用状態を示すステータス情報、各バッファに広大な領域のどの部分のデータが格納されているかを示すインデックス情報、バッファに格納する広大な領域のサイズと広大な領域の先頭アドレス情報、バッファのアドレス情報が格納されたメインメモリ、
ＣＰＵ（Ａ）とキャッシュメモリを共有しないＣＰＵ（Ｂ）、
ＤＭＡ装置、
以下の動作をＣＰＵ（Ａ）が行うＣＰＵプログラム、
ＣＰＵ（Ａ）はステータス情報によってバッファに広大な領域のデータがコピーされていることを確認するとバッファへアクセスして処理を行う。
バッファ内のデータに対する処理が終了するとステータス情報とインデックス情報を更新し、次に処理するデータがバッファにコピーされるのを待つ。
以下の動作をＣＰＵ（Ｂ）が行うＣＰＵプログラム、
ＣＰＵ（Ｂ）はステータス情報を定期的に取得する。
取得したステータス情報からＣＰＵ（Ａ）によるバッファのデータに対する処理が終了したと判断すれば、ＣＰＵ（Ａ）が利用していたバッファのデータをインデックス情報から参照される広大な領域へデータを書き戻すようＤＭＡ装置を起動する。
さらに同インデックス情報で指定された、次にＣＰＵ（Ａ）が利用する広大な領域のデータをバッファへコピーするようＤＭＡ装置を起動する。
ＣＰＵ（Ａ）が次に処理するデータのバッファへのコピーが完了すればステータス情報を更新する。
【００６９】
実施の形態５．
実施の形態４ではＣＰＵ１０１とは異なるＣＰＵ１０９がＤＭＡコントローラ１０５を起動してデータを転送していたが、本実施の形態では、プロセッサ１１０は、ＤＭＡコントローラ１０５を用いずにプログラムＩ／Ｏによってｗｏｒｋ領域３０２と配列ａ［ｉ］［ｊ］とのデータの転送を行う。
【００７０】
図２３に本実施の形態の構成を示す。
本実施の形態は、実施の形態４の構成からＤＭＡコントローラ１０５を除いた構成である。
メインメモリ１０４の内容、ＣＰＵ１０１の動作はそれぞれ図１９、図２０と同じである。
【００７１】
図２４に本実施の形態におけるプロセッサ１１０の動作のフローチャートを示す。
図２１のフローチャートと同じ動作には同じ番号を振っている。
図２４ではステップＳ１７０１〜ステップＳ１７０３にてｗｏｒｋＡ領域３０２ａのデータを配列ａ［ｉｎｄｅｘＡ−２］［０］〜ａ［ｉｎｄｅｘＡ−２］［ｍ−１］に書き戻す処理を、ステップＳ１７０４〜ステップＳ１７０６にて配列ａ［ｉｎｄｅｘＡ］［０］〜ａ［ｉｎｄｅｘＡ］［ｍ−１］のデータをｗｏｒｋＡ領域３０２ａにコピーする処理をＤＭＡで行わずにプログラムでデータコピーして行っている。
【００７２】
この動作により、配列ａ［ｉ］［ｊ］のデータがキャッシュメモリ１１１に格納されるため、キャッシュメモリ１１１の中の局所性の高いデータが追い出され、プロセッサ１１０のキャッシュミスが増加する。
しかし、一方でキャッシュメモリ１０３にはｗｏｒｋ領域３０２分しか配列ａ［ｉ］［ｊ］のデータが格納されないためプロセッサ１０２の処理効率を低下させることはない。
このように、プロセッサ１１０を用いて配列ａ［ｉ］［ｊ］のデータとｗｏｒｋ領域３０２のデータのコピーを行うことでＤＭＡコントローラ１０５がない構成においても広大な領域に対する処理を行うことによるキャッシュメモリ１０３中の局所性の高いデータの追い出しを防ぎ、処理効率の低下を防ぐことができる。
プロセッサ１０２のキャッシュミスが減りその分プロセッサ１１０のキャッシュミスが増えたので総合的には良くなったように見えないかもしれないが、複数のプロセッサで均等に処理を分担できないため、実際には効果がある。プロセッサ１０２では図４のプログラム中の処理ステップ４０４に示した関数ｇ（）の中で他の変数を参照していることが多く、処理分割の関係上それはキャッシュ１０３に存在するが１１１には存在しない場合があるためプロセッサ１１０と処理分担をすることができない。また同様に他の処理の分割も困難でありプロセッサ１１０のアイドル状態が長い場合には、ここで新たに発生したキャッシュミスのオーバーヘッドはそのアイドル時間の一部を消費するだけであり、データ処理装置全体のボトルネックとなっているプロセッサ１０２の処理時間の短縮効果のほうが大きい。また、プロセッサ１１０がプロセッサ１０２と比べて単純な機能しかなくかつアイドル状態が長い場合、プロセッサ１１０にキャッシュメモリ１１１がない構成では、１１０のキャッシュミスは当然、問題にならない。
また、実施の形態４と同様に、ｉｎｄｅｘＡとｉｎｄｅｘＢへの値設定をプロセッサ１０２ではなく、プロセッサ１１０が行うことによりプロセッサ１０２の処理を軽くしてもよい。その場合は図２０のステップＳ１３０４とＳ１３０８での処理「ｉｎｄｅｘＡにｉ＋２を書き込む」、「ｉｎｄｅｘＢにｉ＋３を書き込む」がなくなり、図２４のステップＳ１４０９に「ｉｎｄｅｘＡに２を加算する」処理を追加すればよい。
【００７３】
以上、本実施の形態では、以下の構成要素を備えたシステムを説明した。
スヌープ機能などのキャッシュのコヒーレンス制御をもつキャッシュメモリの備わったＣＰＵ（Ａ）、
ＣＰＵ（Ａ）がアクセスして処理を行う広大な領域のデータ、広大な領域の一部のデータを格納する１個以上のバッファ、各バッファの利用状態を示すステータス情報、各バッファに広大な領域のどの部分のデータが格納されているかを示すインデックス情報、広大な領域の大きさをバッファに格納するサイズと広大な領域の先頭アドレス情報、バッファのアドレス情報が格納されたメインメモリ、
ＣＰＵ（Ａ）とキャッシュメモリを共有しないＣＰＵ（Ｂ）、
以下の動作をＣＰＵ（Ａ）が行うＣＰＵプログラム、
ＣＰＵ（Ａ）はステータス情報によってバッファに広大な領域のデータがコピーされていることを確認するとバッファへアクセスして処理を行う。
バッファ内のデータに対する処理が終了するとステータス情報とインデックス情報を更新し、次に処理するデータがバッファにコピーされるのを待つ。
以下の動作をＣＰＵ（Ｂ）が行うＣＰＵプログラム、
ＣＰＵ（Ｂ）はステータス情報を定期的に取得する。
取得したステータス情報からＣＰＵ（Ａ）によるバッファのデータに対する処理が終了したと判断すれば、ＣＰＵ（Ａ）が利用していたバッファのデータをインデックス情報から参照される広大な領域へデータをプログラムＩＯによって書き戻す。
さらに同インデックス情報で指定された、次にＣＰＵ（Ａ）が利用する広大な領域のデータをバッファへプログラムＩＯによってコピーする。
広大な領域のデータのバッファへのコピーが完了すればステータス情報を更新する。
【符号の説明】
【００７４】
１００  データ処理システム、１０１  ＣＰＵ、１０２  プロセッサ、１０３  キャッシュメモリ、１０４  メインメモリ、１０５  ＤＭＡコントローラ、１０６  バス、１０７  データ自動転送回路、１０８  データ転送自動制御回路、１０９  ＣＰＵ、１１０  プロセッサ、１１１  キャッシュメモリ。
【図１】
2011086131.tif 000003
【図２】
2011086131.tif 000004
【図３】
2011086131.tif 000005
【図４】
2011086131.tif 000006
【図５】
2011086131.tif 000007
【図６】
2011086131.tif 000008
【図７】
2011086131.tif 000009
【図８】
2011086131.tif 000010
【図９】
2011086131.tif 000011
【図１０】
2011086131.tif 000012
【図１１】
2011086131.tif 000013
【図１２】
2011086131.tif 000014
【図１３】
2011086131.tif 000015
【図１４】
2011086131.tif 000016
【図１５】
2011086131.tif 000017
【図１６】
2011086131.tif 000018
【図１７】
2011086131.tif 000019
【図１８】
2011086131.tif 000020
【図１９】
2011086131.tif 000021
【図２０】
2011086131.tif 000022
【図２１】
2011086131.tif 000023
【図２２】
2011086131.tif 000024
【図２３】
2011086131.tif 000025
【図２４】
2011086131.tif 000026