(57)【要約】【課題】  不要なプリフェッチ命令によるメモリアクセスを低減する。【解決手段】  演算処理装置は、命令をデコードするデコード部と、デコードされた命令のうち、メモリアクセスに関する命令が登録される命令保持部と、メモリに記憶されたデータを事前にキャッシュメモリに転送するプリフェッチ命令とは別の所定の契機で、プリフェッチを実行するハードウエアプリフェッチ制御部と、ハードウエアプリフェッチ制御部によりキャッシュメモリに転送されるデータに含まれるデータをメモリからキャッシュメモリに転送する不要なプリフェッチ命令が命令保持部に登録されているか否かを判定し、不要なプリフェッチ命令が命令保持部に登録されている場合、不要なプリフェッチ命令を無効にする制御部とを有する。【選択図】  図１
2015219550.tif 000002
【特許請求の範囲】
【請求項１】
メモリに記憶されたデータを事前にキャッシュメモリに転送するプリフェッチを実行可能な演算処理装置において、
命令をデコードするデコード部と、
デコードされた前記命令のうち、メモリアクセスに関する前記命令が登録される命令保持部と、
前記メモリに記憶された前記データを事前に前記キャッシュメモリに転送するプリフェッチ命令とは別の所定の契機で、前記プリフェッチを実行するハードウエアプリフェッチ制御部と、
前記ハードウエアプリフェッチ制御部により前記キャッシュメモリに転送される前記データに含まれる前記データを前記メモリから前記キャッシュメモリに転送する不要な前記プリフェッチ命令が前記命令保持部に登録されているか否かを判定し、不要な前記プリフェッチ命令が前記命令保持部に登録されている場合、不要な前記プリフェッチ命令を無効にする制御部とを有することを特徴とする演算処理装置。
【請求項２】
請求項１に記載の演算処理装置において、
前記制御部は、不要な前記プリフェッチ命令を前記命令保持部から削除することにより、不要な前記プリフェッチ命令を無効にすることを特徴とする演算処理装置。
【請求項３】
請求項１または請求項２に記載の演算処理装置において、
前記ハードウエアプリフェッチ制御部は、前記所定の契機を検出する際に参照される第１アドレス情報を記憶するアドレス保持部を有し、前記アドレス保持部に記憶した前記第１アドレス情報に基づいて前記プリフェッチのアクセス先を算出し、
前記命令保持部は、前記命令の種類を示す命令コードと、前記命令のアクセス先を示す第２アドレス情報とを記憶し、
前記制御部は、前記ハードウエアプリフェッチ制御部による前記プリフェッチが実行された場合、前記第１アドレス情報に基づいて算出されたアクセス先にアクセスする不要な前記プリフェッチ命令が前記命令保持部に登録されているか否かを、前記命令保持部に記憶された前記命令コードおよび前記第２アドレス情報に基づいて判定し、不要な前記プリフェッチ命令が前記命令保持部に登録されている場合、不要な前記プリフェッチ命令を無効にすることを特徴とする演算処理装置。
【請求項４】
メモリに記憶されたデータを事前にキャッシュメモリに転送するプリフェッチを実行可能な演算処理装置の制御方法において、
前記演算処理装置が有するデコード部が、命令をデコードし、デコードした前記命令のうち、メモリアクセスに関する前記命令を命令保持部に登録し、
前記演算処理装置が有するハードウエアプリフェッチ制御部が、前記メモリに記憶された前記データを事前に前記キャッシュメモリに転送するプリフェッチ命令とは別の所定の契機で、前記プリフェッチを実行し、
前記演算処理装置が有する制御部が、前記ハードウエアプリフェッチ制御部により前記キャッシュメモリに転送される前記データに含まれる前記データを前記メモリから前記キャッシュメモリに転送する不要な前記プリフェッチ命令が前記命令保持部に登録されているか否かを判定し、不要な前記プリフェッチ命令が前記命令保持部に登録されている場合、不要な前記プリフェッチ命令を無効にすることを特徴とする演算処理装置の制御方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、演算処理装置および演算処理装置の制御方法に関する。
【背景技術】
【０００２】
演算処理装置は、例えば、命令をデコードするデコード部と、デコードされた命令に基づく演算を実行する演算部と、演算部と主記憶装置であるメインメモリとの間に配置されたキャッシュメモリとを有する。演算部は、例えば、メインメモリやキャッシュメモリに記憶されたデータを参照して、演算を実行する。キャッシュメモリは、例えば、演算部により参照されたデータを記憶する。
【０００３】
演算処理装置は、例えば、キャッシュメモリに記憶されたデータを参照することにより、メインメモリに記憶されたデータを参照するときに比べて、データを参照するときの待ち時間を短縮できる。なお、例えば、配列等の大規模なデータを使用する数値計算処理では、データの局所性が低いため、キャッシュメモリのヒット率が低下する。この場合、キャッシュメモリが有効に使用されないため、データを参照するときの待ち時間の短縮効果は小さい。
【０００４】
キャッシュメモリのヒット率低下に対する解決手段として、例えば、メインメモリに記憶されたデータを事前にキャッシュメモリに転送するプリフェッチが用いられる（例えば、特許文献１−７参照）。プリフェッチの実現方法としては、ソフトウエアによるソフトウエアプリフェッチと、ハードウエアによるハードウエアプリフェッチとが知られている。
【０００５】
例えば、ソフトウエアプリフェッチでは、コンパイル装置は、メインメモリに記憶されたデータを事前にキャッシュメモリに転送する命令（以下、プリフェッチ命令とも称する）を機械語プログラムに挿入する。なお、コンパイル装置は、例えば、ソースプログラムをプロセッサ等の演算処理装置で実行可能な機械語プログラムに変換するコンパイル処理を実行する。
【０００６】
一方、ハードウエアプリフェッチでは、ハードウエアプリフェッチ機構等のハードウエアが演算処理装置内に設けられる。例えば、ハードウエアプリフェッチ機構は、連続的なメモリアクセスが実行されると判定した場合、次にアクセスされるデータを予測し、メインメモリに記憶されたデータを事前にキャッシュメモリに転送する。
【０００７】
なお、例えば、ハードウエアプリフェッチ機構を有する演算処理装置では、ソフトウエアプリフェッチを適用したにも拘わらず、演算処理装置の性能が低下する場合がある。例えば、ハードウエアプリフェッチ機構によるプリフェッチとプリフェッチ命令によるプリフェッチとの両方が同じアドレスのデータに対して実行される場合がある。すなわち、不要なプリフェッチ命令が実行される場合がある。この場合、例えば、命令数の増加、バスの消費量の増加による転送速度の低下等の性能低下を引き起こすおそれがある。
【０００８】
このため、ハードウエアプリフェッチとソフトウエアプリフェッチとを効率よく両立させて、演算処理装置の性能を向上させる技術が提案されている（例えば、特許文献１参照）。この種の演算処理装置では、例えば、ハードウエアプリフェッチの対象であるか否かを示す指示情報を付加したメモリアクセス命令が使用される。例えば、コンパイル処理では、連続的なメモリアクセスが発生するメモリアクセス命令を検出した場合、指示情報を付加したメモリアクセス命令を生成する。例えば、ハードウエアプリフェッチの対象であることを示す指示情報が付加されたメモリアクセス命令に対しては、プリフェッチ命令の生成が抑止される。
【先行技術文献】
【特許文献】
【０００９】
【特許文献１】特開２００９−２３０３７４号公報
【特許文献２】特表２０１１−５０４２７４号公報
【特許文献３】特開２０１０−２４４２０４号公報
【特許文献４】特開２００６−３３０８１３号公報
【特許文献５】特開２０１１−８１８３６号公報
【特許文献６】特開２００２−２９７３７９号公報
【特許文献７】特開２００１−１６６９８９号公報
【発明の概要】
【発明が解決しようとする課題】
【００１０】
ハードウエアプリフェッチ機構を有する演算処理装置にソフトウエアプリフェッチを適用した場合、不要なプリフェッチ命令が実行され、演算処理装置の性能が低下するおそれがある。なお、コンパイル処理時にプリフェッチ命令の生成を抑止する方法においても、不要なプリフェッチ命令が実行されるおそれがある。例えば、ハードウエアプリフェッチの対象でないとコンパイル処理時に判定したメモリアクセス命令が、演算処理装置の実際の動作では、ハードウエアプリフェッチの対象になる場合もある。この場合、不要なプリフェッチ命令が実行されるおそれがある。
【００１１】
１つの側面では、本件開示の演算処理装置および演算処理装置の制御方法は、不要なプリフェッチ命令によるメモリアクセスを低減することを目的とする。
【課題を解決するための手段】
【００１２】
一観点によれば、メモリに記憶されたデータを事前にキャッシュメモリに転送するプリフェッチを実行可能な演算処理装置は、命令をデコードするデコード部と、デコードされた命令のうち、メモリアクセスに関する命令が登録される命令保持部と、メモリに記憶されたデータを事前にキャッシュメモリに転送するプリフェッチ命令とは別の所定の契機で、プリフェッチを実行するハードウエアプリフェッチ制御部と、ハードウエアプリフェッチ制御部によりキャッシュメモリに転送されるデータに含まれるデータをメモリからキャッシュメモリに転送する不要なプリフェッチ命令が命令保持部に登録されているか否かを判定し、不要なプリフェッチ命令が命令保持部に登録されている場合、不要なプリフェッチ命令を無効にする制御部とを有する。
【００１３】
別の観点によれば、メモリに記憶されたデータを事前にキャッシュメモリに転送するプリフェッチを実行可能な演算処理装置の制御方法では、演算処理装置が有するデコード部が、命令をデコードし、デコードした命令のうち、メモリアクセスに関する命令を命令保持部に登録し、演算処理装置が有するハードウエアプリフェッチ制御部が、メモリに記憶されたデータを事前にキャッシュメモリに転送するプリフェッチ命令とは別の所定の契機で、プリフェッチを実行し、演算処理装置が有する制御部が、ハードウエアプリフェッチ制御部によりキャッシュメモリに転送されるデータに含まれるデータをメモリからキャッシュメモリに転送する不要なプリフェッチ命令が命令保持部に登録されているか否かを判定し、不要なプリフェッチ命令が命令保持部に登録されている場合、不要なプリフェッチ命令を無効にする。
【発明の効果】
【００１４】
本件開示の演算処理装置および演算処理装置の制御方法は、不要なプリフェッチ命令によるメモリアクセスを低減できる。
【図面の簡単な説明】
【００１５】
【図１】演算処理装置および演算処理装置の制御方法の一実施形態を示す図である。
【図２】図１に示したフェッチポート、ハードウエアプリフェッチ制御装置および制御部の一例を示す図である。
【図３】図１に示した演算処理装置の動作の一例を示す図である。
【図４】配列データのアクセス順とプリフェッチとの関係の一例を示す図である。
【発明を実施するための形態】
【００１６】
以下、実施形態を図面を用いて説明する。
【００１７】
図１は、演算処理装置および演算処理装置の制御方法の一実施形態を示す。この実施形態の演算処理装置１０は、例えば、主記憶装置であるメインメモリ１００に記憶されたデータを事前にキャッシュメモリ８０に転送するプリフェッチを実行可能なＣＰＵ（Central Processing Unit）等のプロセッサである。メインメモリ１００には、例えば、演算処理装置１０による演算で使用されるデータや演算結果が記憶される。
【００１８】
プリフェッチの実現方法として、ソフトウエアによるソフトウエアプリフェッチと、ハードウエアによるハードウエアプリフェッチとが用いられる。例えば、ソフトウエアプリフェッチでは、メインメモリ１００に記憶されたデータを事前にキャッシュメモリ８０に転送するプリフェッチ命令が、ソースプログラムを演算処理装置１０で実行可能な機械語プログラムに変換するコンパイル処理時に生成される。なお、プリフェッチ命令は、データをロードする命令で実現されてもよいし、プリフェッチ専用の命令で実現されてもよい。一方、ハードウエアプリフェッチは、例えば、ハードウエアプリフェッチ制御装置４０により実行される。
【００１９】
演算処理装置１０は、例えば、命令デコーダ２０、フェッチポート３０、ハードウエアプリフェッチ制御装置４０、制御部５０、リザベーションステーション６０（６０ａ、６０ｂ）、演算部７０（７０ａ、７０ｂ）およびキャッシュメモリ８０を有する。
【００２０】
命令デコーダ２０は、命令をデコードするデコード部の一例である。例えば、命令デコーダ２０は、命令が記憶されている命令キャッシュ等から命令を読み出し、読み出した命令をデコードする。そして、命令デコーダ２０は、デコードした命令をフェッチポート３０およびリザベーションステーション６０に出力する。
【００２１】
フェッチポート３０は、メモリアクセスに関する命令が登録される命令保持部の一例である。例えば、フェッチポート３０には、命令デコーダ２０でデコードされた命令のうち、メモリアクセスに関する命令が、実行待ちの命令として登録される。メモリアクセスに関する命令は、例えば、データをストアするストア命令、データをロードするロード命令、プリフェッチ命令等である。
【００２２】
例えば、フェッチポート３０は、メモリアクセスに関する命令を記憶するバッファである。フェッチポート３０は、例えば、依存関係のないデータのロードやストアのパイプライン処理で実行順序を変えて制御する場合に、複数の命令を格納する緩衝用のバッファとして使用される。例えば、フェッチポート３０は、任意の個数のロード命令またはストア命令を保持できる。すなわち、フェッチポート３０は、ストア命令、ロード命令、プリフェッチ命令等のメモリアクセスに関する命令用のリザベーションステーションとして用いられる。
【００２３】
ハードウエアプリフェッチ制御装置４０は、プリフェッチを実行するハードウエアプリフェッチ制御部の一例である。例えば、ハードウエアプリフェッチ制御装置４０は、プリフェッチ命令とは別の所定の契機で、プリフェッチを実行する。例えば、ハードウエアプリフェッチ制御装置４０は、連続領域アクセスにおいて連続するキャッシュラインのキャッシュミスを検出したことを契機として、ハードウエアプリフェッチを実行する。連続領域アクセスは、例えば、キャッシュメモリ８０のキャッシュラインをアクセス単位とした場合のアクセス先の変化が２ライン未満の変化量（キャッシュラインが連続する範囲）のアクセスである。
【００２４】
あるいは、ハードウエアプリフェッチ制御装置４０は、アクセス先が一定のアクセス幅で昇順および降順のいずれか一方向に変化するアクセスにおいて、キャッシュミスが連続したことを検出した場合に、ハードウエアプリフェッチを実行してもよい。このように、ハードウエアプリフェッチ制御装置４０は、アクセス先が規則的に変化するアクセスにおいて、連続したキャッシュミスを契機として、ハードウエアプリフェッチを実行する。なお、ハードウエアプリフェッチが実行される所定の契機（動作条件）は、この例に限定されない。
【００２５】
制御部５０は、不要なプリフェッチ命令を無効にする制御部の一例である。例えば、制御部５０は、不要なプリフェッチ命令がフェッチポート３０に登録されているか否かを判定する。そして、制御部５０は、不要なプリフェッチ命令がフェッチポート３０に登録されている場合、不要なプリフェッチ命令を無効にする。なお、不要なプリフェッチ命令は、例えば、ハードウエアプリフェッチ制御装置４０によりキャッシュメモリ８０に転送されるデータに含まれるデータをメインメモリ１００からキャッシュメモリ８０に転送するプリフェッチ命令である。
【００２６】
このように、制御部５０は、不要なプリフェッチ命令を無効にする。これにより、演算処理装置１０は、不要なプリフェッチ命令によるメモリアクセス（メインメモリ１００へのアクセス等）を低減できる。なお、制御部５０は、例えば、不要なプリフェッチ命令をフェッチポート３０から削除することにより、不要なプリフェッチ命令を無効にする。あるいは、制御部５０は、不要なプリフェッチ命令をＮＯＰ（No Operation）命令に置き換えることにより、不要なプリフェッチ命令を無効にしてもよい。
【００２７】
リザベーションステーション６０（６０ａ、６０ｂ）は、例えば、演算命令用のリザベーションステーションである。リザベーションステーション６０ａには、命令デコーダ２０でデコードされた命令のうち、演算部７０ａで実行される命令が登録される。例えば、リザベーションステーション６０ａは、プログラム順に拘わらず、実行可能な状態の命令を選択する。そして、リザベーションステーション６０ａは、選択した命令を演算部７０ａに出力する。
【００２８】
リザベーションステーション６０ｂには、命令デコーダ２０でデコードされた命令のうち、演算部７０ｂで実行される命令が登録される。例えば、リザベーションステーション６０ｂは、プログラム順に拘わらず、実行可能な状態の命令を選択する。そして、リザベーションステーション６０ｂは、選択した命令を演算部７０ｂに出力する。
【００２９】
演算部７０（７０ａ、７０ｂ）は、デコードされた命令に基づく演算を実行する。例えば、演算部７０ａは、リザベーションステーション６０ａから受信した命令に基づく演算を、キャッシュメモリ８０に記憶されたデータを参照して実行する。また、例えば、演算部７０ｂは、リザベーションステーション６０ｂから受信した命令に基づく演算を、キャッシュメモリ８０に記憶されたデータを参照して実行する。そして、演算部７０は、例えば、演算結果をキャッシュメモリ８０に記憶する。
【００３０】
キャッシュメモリ８０は、メインメモリ１００から受信したデータを記憶する。例えば、キャッシュメモリ８０は、演算部７０により参照されたデータを記憶する。さらに、キャッシュメモリ８０は、ハードウエアプリフェッチやソフトウエアプリフェッチによりメインメモリ１００から転送されたデータを記憶する。また、キャッシュメモリ８０は、演算結果等のデータをメインメモリ１００に出力する。
【００３１】
図２は、図１に示したフェッチポート３０、ハードウエアプリフェッチ制御装置４０および制御部５０の一例を示す。なお、図２では、キャッシュメモリ８０のキャッシュライン”Ａ＋１”をアクセスした場合の動作を中心に説明する。キャッシュライン”Ａ＋１”は、キャッシュライン番号が”Ａ＋１”のキャッシュラインである。また、図２の例では、ハードウエアプリフェッチ制御装置４０は、連続領域アクセスにおいて連続するキャッシュラインのキャッシュミスを検出したことを契機として、ハードウエアプリフェッチを実行する。以下、連続領域アクセスをストリームアクセスとも称する。また、プリフェッチの対象データをプリフェッチデータとも称する。
【００３２】
ハードウエアプリフェッチ制御装置４０は、プリフェッチキュー４２およびオフセット付加部４４を有する。プリフェッチキュー４２は、所定の契機（ハードウエアプリフェッチを実行するための契機）を検出する際に参照される第１アドレス情報を記憶するアドレス保持部の一例である。例えば、プリフェッチキュー４２は、複数のエントリをＦＩＦＯ（First-In First-Out）で保持する。例えば、ハードウエアプリフェッチ制御装置４０は、キャッシュライン”Ａ”でキャッシュミスが発生した場合、キャッシュライン”Ａ＋１”および”Ａ−１”を示すライン情報をプリフェッチキュー４２に新規登録する。
【００３３】
そして、後続のアクセスによりキャッシュライン”Ａ＋１”がアクセスされ、キャッシュライン”Ａ＋１”でキャッシュミスが発生した場合、プリフェッチキュー４２に登録されたライン情報”Ａ＋１”がヒットする。これにより、ハードウエアプリフェッチ制御装置４０は、昇順ストリームアクセスと判定し、以降、昇順方向にハードウエアプリフェッチを開始する。また、ハードウエアプリフェッチ制御装置４０は、プリフェッチキュー４２のエントリを、キャッシュライン”Ａ＋１”を示すライン情報からキャッシュライン”Ａ＋２”を示すライン情報に更新する。
【００３４】
なお、キャッシュライン”Ａ”へのアクセスの後続のアクセスによりキャッシュライン”Ａ−１”がアクセスされ、キャッシュライン”Ａ−１”でキャッシュミスが発生した場合、プリフェッチキュー４２に登録されたライン情報”Ａ−１”がヒットする。これにより、ハードウエアプリフェッチ制御装置４０は、降順ストリームアクセスと判定し、以降、降順方向にハードウエアプリフェッチを開始する。また、ハードウエアプリフェッチ制御装置４０は、プリフェッチキュー４２のエントリを、キャッシュライン”Ａ−１”を示すライン情報からキャッシュライン”Ａ−２”を示すライン情報に更新する。
【００３５】
ハードウエアプリフェッチ制御装置４０は、例えば、ストリームアクセスが１キャッシュライン分進む度に、キャッシュメモリ８０にハードウエアプリフェッチ要求を発行し、キャッシュメモリ８０にプリフェッチデータを書き込む。以下、１キャッシュラインを１２８バイトとして説明する。なお、ラインサイズは、１２８バイトに限定されない。例えば、一度のプリフェッチでは、１２８バイト（１ライン）分のデータがメインメモリ１００からキャッシュメモリ８０に転送される。
【００３６】
なお、プリフェッチの対象アドレスは、例えば、ロード命令等により指定されたアドレス（プリフェッチキュー４２内のヒットしたキャッシュライン番号）に対して、所定のライン分（図２の例では、２ライン分）のオフセットを加算あるいは減算して算出される。
【００３７】
例えば、オフセット付加部４４は、プリフェッチの対象データが昇順ストリームアクセスと判定された場合、ロード命令等により指定されたアドレスに２５６バイト（２ライン）のオフセットを加算してプリフェッチの対象アドレスを算出する。また、例えば、オフセット付加部４４は、プリフェッチの対象データが降順ストリームアクセスと判定された場合、ロード命令等により指定されたアドレスから２５６バイト（２ライン）のオフセットを減算してプリフェッチの対象アドレスを算出する。
【００３８】
図２の例では、オフセット付加部４４は、昇順ストリームアクセスにおいて、キャッシュライン”Ａ＋１”でキャッシュミスが発生したため、プリフェッチキュー４２に登録されているライン情報が示すキャッシュライン”Ａ＋１”に２を加算する。これにより、プリフェッチの対象アドレスに対応するキャッシュライン”Ａ＋３”が算出される。
【００３９】
例えば、オフセット付加部４４は、プリフェッチの対象アドレスに対するハードウエアプリフェッチの実行を要求するハードウエアプリフェッチ要求を、キャッシュメモリ８０に発行する。これにより、メインメモリ１００からキャッシュメモリ８０のキャッシュライン”Ａ＋３”に、１ライン分のプリフェッチデータが転送される。また、オフセット付加部４４は、プリフェッチの対象アドレスに対応するキャッシュラインを示す情報を制御部５０の比較部５２に出力する。
【００４０】
このように、ハードウエアプリフェッチ制御装置４０は、メインメモリ１００からキャッシュメモリ８０のキャッシュライン”Ａ＋３”に、１ライン分のプリフェッチデータを転送する。また、ハードウエアプリフェッチ制御装置４０は、プリフェッチキュー４２のエントリを、キャッシュライン”Ａ＋１”を示すライン情報からキャッシュライン”Ａ＋２”を示すライン情報に更新する。
【００４１】
このように、ハードウエアプリフェッチ制御装置４０は、所定の契機を検出する際に参照されるライン情報を記憶するプリフェッチキュー４２を有し、プリフェッチキュー４２に記憶したライン情報に基づいてプリフェッチのアクセス先を算出する。なお、プリフェッチデータのアクセス先およびサイズは、この例に限定されない。例えば、プリフェッチデータのアクセス先およびサイズは、書き換え可能なレジスタに設定され、任意に変更されてもよい。
【００４２】
フェッチポート３０は、命令の種類を示す命令コードと、命令のアクセス先を示すアドレス情報（図２のアドレス）と、フラグとを記憶する。例えば、図２の命令コードの列に記載した命令コード”０１”、”１０”、”１１”は、ロード命令、ストア命令、プリフェッチ命令をそれぞれ示す。なお、フェッチポート３０は、例えば、ロード用のプリフェッチ命令とストア用のプリフェッチ命令とを識別可能に記憶してもよい。また、図２のアドレスの列に記載したアドレス情報”Ｂ”、”Ｃ”、”Ｄ”、”Ａ＋３”は、ロード命令等によりアクセスされるキャッシュラインを示す。
【００４３】
フラグは、フェッチポート３０に登録された命令が有効か無効かを示す。例えば、フラグが”０”に設定された命令は、無効な命令であり、実行されない。例えば、演算処理装置１０は、フェッチポート３０に登録された命令のうち、読み出し用のポインタ（以下、読み出しポインタとも称する）で指定された位置に登録された命令を選択し、選択した命令に従ってデータにアクセスする。例えば、読み出しポインタで指定された位置に登録された命令が実行される度に、読み出しポインタの値が更新される。この際、フラグが”０”に設定された命令は、スキップされる。
【００４４】
読み出しポインタは、データのアクセス処理と並行して更新されるため、ＮＯＰのような無意味なサイクルを消費せずに、次の対象（命令）を示す値に更新される。また、例えば、アクセス処理が実行された命令が登録されていた位置、および、フラグが”０”に設定されたことによりスキップされた命令が登録されていた位置には、メモリアクセスに関する命令が新規に登録される。メモリアクセスに関する命令が新規に登録される位置は、例えば、書き込み用のポインタ（以下、書き込みポインタとも称する）により指定される。このように、フェッチポート３０では、フラグが”０”に設定されることにより、登録された命令が削除される。
【００４５】
制御部５０は、ハードウエアプリフェッチ制御装置４０によるプリフェッチが実行された場合、不要なプリフェッチ命令がフェッチポート３０に登録されているか否かを判定する。例えば、制御部５０は、プリフェッチキュー４２のライン情報に基づいて算出されたアクセス先にアクセスするプリフェッチ命令がフェッチポート３０に登録されているか否かを、フェッチポート３０に記憶された命令コードおよびアドレス情報に基づいて判定する。
【００４６】
そして、制御部５０は、ライン情報に基づいて算出されたアクセス先にアクセスするプリフェッチ命令がフェッチポート３０に登録されている場合、ライン情報に基づいて算出されたアクセス先にアクセスするプリフェッチ命令を無効にする。すなわち、制御部５０は、プリフェッチキュー４２のライン情報に基づいて算出されたアクセス先にアクセスするプリフェッチ命令を不要なプリフェッチ命令として無効にする。
【００４７】
例えば、制御部５０は、比較部５２、５４、５６およびレジスタ５８を有する。比較部５２、５４、５６は、例えば、プリフェッチキュー４２の各エントリ（ハードウエアプリフェッチを並行して実行可能な各エントリ）に対応して設けられる。なお、図２では、図を見やすくするために、プリフェッチキュー４２の複数のエントリのうちの１つのエントリに対応する比較部５２、５４、５６を記載している。レジスタ５８には、例えば、無効化の対象であるプリフェッチ命令を示す命令コード”１１”が設定される。命令コード（図２では、”１１”）のレジスタ５８への設定は、例えば、コンパイル処理の実行時やランタイムに、一度実行されればよい。
【００４８】
比較部５２、５４、５６による比較処理は、例えば、フェッチポート３０に登録された命令に対して、読み出しポインタにより選択される順に実行される。例えば、現状の読み出しポインタが図２のフェッチポート３０の一番下の行を示している場合、先ず、フェッチポート３０の一番下の行の命令コード、アドレスが比較対象として選択され、フェッチポート３０の一番下の行のフラグに比較結果が反映される。
【００４９】
例えば、比較部５２は、プリフェッチの対象アドレスに対応するキャッシュラインを示す情報をオフセット付加部４４から受信する。そして、比較部５２は、フェッチポート３０に登録された命令のうち、読み出しポインタにより選択される命令のアクセス先を示すアドレスとプリフェッチの対象アドレスに対応するキャッシュラインを示す情報とを比較し、比較結果を比較部５６に出力する。
【００５０】
図２の例では、読み出しポインタにより選択される命令のアクセス先を示すアドレスとプリフェッチの対象アドレスに対応するキャッシュラインとの両方がキャッシュライン“Ａ＋３”である。このため、比較部５２は、読み出しポインタにより選択される命令のアクセス先を示すアドレスとプリフェッチの対象アドレスに対応するキャッシュラインとが一致することを示す比較結果を、比較部５６に出力する。例えば、比較部５２は、比較結果が真であることを示す情報を、比較部５６に出力する。
【００５１】
また、例えば、比較部５４は、フェッチポート３０に登録された命令のうち、読み出しポインタにより選択される命令の命令コードとレジスタ５８に設定された命令コードとを比較し、比較結果を比較部５６に出力する。図２の例では、読み出しポインタにより選択される命令の命令コードとレジスタ５８に設定された命令コードとの両方が命令コード“１１”である。このため、比較部５４は、読み出しポインタにより選択される命令の命令コードとレジスタ５８に設定された命令コードとが一致することを示す比較結果を、比較部５６に出力する。例えば、比較部５４は、比較結果が真であることを示す情報を、比較部５６に出力する。
【００５２】
比較部５６は、比較部５２の比較結果と比較部５４の比較結果とを比較し、両方の比較結果が真である場合、フェッチポート３０に登録された命令のうち、読み出しポインタにより選択される命令のフラグを“０”に設定する。なお、比較部５６は、比較部５２の比較結果と比較部５４の比較結果とのいずれかが偽である場合、フラグの値を変更しない。これにより、現状の読み出しポインタが示す位置の命令に対する比較処理（比較部５２、５４、５６による比較処理）が終了する。
【００５３】
図２の例では、比較部５６は、比較部５２の比較結果と比較部５４の比較結果とを比較し、両方の比較結果が真であるため、読み出しポインタにより選択される命令のフラグ（図２のフェッチポート３０の一番下の行のフラグ）を“０”に設定する。これにより、図２のフェッチポート３０の一番下の行のプリフェッチ命令が無効になる。
【００５４】
また、例えば、読み出しポインタが次に示す位置が、図２のフェッチポート３０の下から２行目の場合、図２のフェッチポート３０の下から２行目の命令に対して、比較処理（比較部５２、５４、５６による比較処理）が実行される。例えば、比較部５２は、図２のフェッチポート３０の下から２行目の命令のアクセス先を示すアドレス“Ｄ”とプリフェッチの対象アドレスに対応するキャッシュライン“Ａ＋３”とが一致しないことを示す比較結果を、比較部５６に出力する。例えば、比較部５２は、比較結果が偽であることを示す情報を、比較部５６に出力する。
【００５５】
また、例えば、比較部５４は、図２のフェッチポート３０の下から２行目の命令の命令コード“１０”とレジスタ５８に設定された命令コード“１１”とが一致しないことを示す比較結果を、比較部５６に出力する。例えば、比較部５４は、比較結果が偽であることを示す情報を、比較部５６に出力する。比較部５６は、比較部５２の比較結果と比較部５４の比較結果とが偽であるため、図２のフェッチポート３０の下から２行目の命令のフラグの値を“１”に維持する。
【００５６】
このように、比較部５２、５４、５６による一連の比較処理は、所定の順序で、フェッチポート３０に登録された命令毎に実行される。なお、所定の順序は、読み出しポインタにより選択される順に限定されない。また、比較部５２、５４、５６による一連の比較処理は、フェッチポート３０に登録された全ての命令に対して実行されてもよいし、フェッチポート３０に登録された命令のうち、予め設定された上限の個数までの命令に対して実行されてもよい。例えば、ハードウエアプリフェッチ要求が発行されてから次のハードウエアプリフェッチ要求が発行されるまでの期間内に処理可能な数（比較対象の命令数）が、上限の個数として設定されてもよい。
【００５７】
また、図２の制御部５０では、比較部５２、５４、５６による比較処理で、不要なプリフェッチ命令がフェッチポート３０に登録されているか否かの判定を実現できる。このため、この実施形態では、不要なプリフェッチ命令の検出に複雑な判定アルゴリズムを使用する構成に比べて、演算処理装置１０の回路規模の増加を抑制できる。
【００５８】
なお、フェッチポート３０、ハードウエアプリフェッチ制御装置４０および制御部５０の構成は、この例に限定されない。例えば、フェッチポート３０は、ロード命令等によりアクセスされるデータの論理アドレス（例えば、メインメモリ１００のアドレス）をアドレス情報として記憶してもよい。この場合、制御部５０は、論理アドレスに対応するキャッシュラインを算出する変換回路を有する。比較部５２は、変換回路で算出されたキャッシュラインのライン番号とオフセット付加部４４から受信した情報が示すライン番号とを比較する。
【００５９】
例えば、キャッシュメモリ８０のキャッシュラインのライン番号をＣＬ、ラインサイズをＬＳ（バイト）、１ウエイあたりの容量をＷＳ（キロバイト）、論理アドレスをａｄｄｒとした場合、ライン番号ＣＬは、式（１）で表される。なお、論理アドレスａｄｄｒは、例えば、メインメモリ１００のアドレスである。
【００６０】
ＣＬ＝ｍｏｄ（ａｄｄｒ／ＬＳ，（ＷＳ×１０２４）／ＬＳ）    ・・・（１）
式（１）のｍｏｄは剰余演算子である。すなわち、キャッシュラインのライン番号ＣＬは、”ａｄｄｒ／ＬＳ”を”（ＷＳ×１０２４）／ＬＳ”で割った余りに対応する。
【００６１】
また、例えば、フェッチポート３０に記憶される情報からフラグが省かれてもよい。この場合、比較部５６は、不要なプリフェッチ命令の命令コードを、ＮＯＰ命令を示す命令コードに書き換えることにより、不要なプリフェッチ命令を無効にする。また、例えば、無効化の対象であるプリフェッチ命令を示す命令コードを変更しない場合等、レジスタ５８は、省かれてもよい。この場合、無効化の対象であるプリフェッチ命令を示す命令コード”１１”は、例えば、演算処理装置１０内に固定値で設定される。
【００６２】
また、例えば、演算処理装置１０は、フェッチポート３０を、プリフェッチ命令専用のフェッチポートと、プリフェッチ命令以外の命令（ロード命令、ストア命令等）用のフェッチポートとに分けて有してもよい。この場合、比較部５４は、省かれてもよい。
【００６３】
図３は、図１に示した演算処理装置１０の動作の一例を示す。なお、図３は、演算処理装置１０の制御方法の一形態を示す。図３の動作は、不要なプリフェッチ命令を無効にする際の演算処理装置１０の動作に対応する。なお、命令のデコード、メモリアクセスに関する命令のフェッチポート３０への登録、命令に基づく演算等は、例えば、図３の動作と並行して実行される。図３の動作は、ハードウエアのみで実現されてもよく、ハードウエアをソフトウエアにより制御することにより実現されてもよい。
【００６４】
ステップＳ１００では、演算処理装置１０は、ハードウエアプリフェッチを実行するか否かを判定する。ハードウエアプリフェッチが実行される場合（ステップＳ１００のＹｅｓ）、演算処理装置１０の動作は、ステップＳ１１０に移る。一方、ハードウエアプリフェッチが実行されない場合（ステップＳ１００のＮｏ）、演算処理装置１０の動作は、ステップＳ１００に戻る。すなわち、ステップＳ１１０−Ｓ１５０は、ハードウエアプリフェッチが実行される度に実行される。
【００６５】
ステップＳ１１０では、制御部５０は、フェッチポート３０に登録された命令から、判定対象の命令を選択する。例えば、制御部５０は、不要なプリフェッチ命令か否かの判定が実行されていない判定対象の命令のうち、命令の実行順が最も早い命令を選択する。
【００６６】
ステップＳ１２０では、制御部５０は、ステップＳ１１０で選択した命令がプリフェッチ命令か否かを判定する。例えば、比較部５４は、ステップＳ１１０で選択された命令の命令コードとレジスタ５８に設定された命令コードとを比較する。ステップＳ１１０で選択された命令がプリフェッチ命令の場合（ステップＳ１２０のＹｅｓ）、演算処理装置１０の動作は、ステップＳ１３０に移る。一方、ステップＳ１１０で選択された命令がプリフェッチ命令でない場合（ステップＳ１２０のＮｏ）、演算処理装置１０の動作は、ステップＳ１５０に移る。
【００６７】
ステップＳ１３０では、制御部５０は、ステップＳ１１０で選択した命令のアクセス先がハードウエアプリフェッチのアクセス先と一致するか否かを判定する。例えば、比較部５２は、ステップＳ１１０で選択された命令のアクセス先を示すアドレスとオフセット付加部４４から受信した情報が示すアドレスとを比較する。
【００６８】
ステップＳ１１０で選択された命令のアクセス先がハードウエアプリフェッチのアクセス先と一致する場合（ステップＳ１３０のＹｅｓ）、演算処理装置１０の動作は、ステップＳ１４０に移る。すなわち、ステップＳ１１０で選択された命令が不要なプリフェッチ命令の場合、演算処理装置１０の動作は、ステップＳ１４０に移る。一方、ステップＳ１１０で選択された命令のアクセス先がハードウエアプリフェッチのアクセス先と一致しない場合（ステップＳ１３０のＮｏ）、演算処理装置１０の動作は、ステップＳ１５０に移る。すなわち、ステップＳ１１０で選択された命令が不要なプリフェッチ命令でない場合、演算処理装置１０の動作は、ステップＳ１５０に移る。
【００６９】
ステップＳ１４０では、制御部５０は、ステップＳ１１０で選択した命令に無効フラグを設定する。例えば、比較部５４は、フェッチポート３０に登録された命令のうち、ステップＳ１１０で選択された命令のフラグを”０”に設定する。
【００７０】
ステップＳ１５０では、制御部５０は、判定対象の全ての命令に対して、不要なプリフェッチ命令か否かの判定が実行されたか否かを判定する。なお、判定対象の命令は、フェッチポート３０に登録された全ての命令でもよいし、予め設定された上限の個数までの命令でもよい。
【００７１】
不要なプリフェッチ命令か否かの判定が実行されていない判定対象の命令がフェッチポート３０に存在する場合（ステップＳ１５０のＮｏ）、演算処理装置１０の動作は、ステップＳ１１０に戻る。一方、不要なプリフェッチ命令か否かの判定が実行されていない判定対象の命令がフェッチポート３０に存在しない場合（ステップＳ１５０のＹｅｓ）、不要なプリフェッチ命令を無効にする処理は、終了する。すなわち、不要なプリフェッチ命令か否かの判定が判定対象の全ての命令に対して実行された場合、不要なプリフェッチ命令を無効にする処理は、終了する。
【００７２】
このように、制御部５０は、ハードウエアプリフェッチによりキャッシュメモリ８０に転送されるデータに含まれるデータをメインメモリ１００からキャッシュメモリ８０に転送する不要なプリフェッチ命令がフェッチポート３０に登録されているか否かを判定する。そして、制御部５０は、不要なプリフェッチ命令がフェッチポート３０に登録されている場合、不要なプリフェッチ命令を無効にする。これにより、演算処理装置１０は、不要なプリフェッチ命令によるメモリアクセスを低減できる。
【００７３】
なお、演算処理装置１０の動作は、この例に限定されない。例えば、ステップＳ１２０は、ステップＳ１３０の後に実行されてもよい。
【００７４】
図４は、配列データＺ（ＬＩＳＴ（ｉ））のアクセス順とプリフェッチとの関係の一例を示す。図４に示したソースプログラムＳＰＲＧでは、例えば、配列データＺ（ＬＩＳＴ（ｉ））で示される値をＹに加算する演算がｎ回繰り返される。以下、配列データＺ（ＬＩＳＴ（ｉ））を配列データＺとも称する。例えば、配列データＺのアクセス先は、配列データＬＩＳＴ（ｉ）で指定され、演算処理装置１０でソースプログラムＳＰＲＧを実行したときに確定する。図４の例では、配列データＺは、プリフェッチ命令の挿入対象のデータである。
【００７５】
例えば、プリフェッチ命令の挿入対象のデータは、コンパイラに指示を与える最適化制御行やプラグマ等により指定される。最適化制御行は、例えば、ＦＯＲＴＲＡＮで用いられる。また、例えば、プラグマは、Ｃ言語等で用いられる。例えば、ユーザは、配列データＺ（ＬＩＳＴ（ｉ））をプリフェッチ命令の挿入対象のデータとして指定する最適化制御行（例えば、「!ocl prefetch_beaten(LIST(i+α))」）をソースプログラムＳＰＲＧ内に記述してもよい。この場合、配列データＺ（ＬＩＳＴ（ｉ））に対するプリフェッチ命令（例えば、図４のprefetch Z(LIST(i+α)）が生成される。
【００７６】
なお、プリフェッチ命令の挿入は、例えば、翻訳オプションで指定されてもよい。この場合、演算処理装置１０でソースプログラムＳＰＲＧを実行したときにアクセス先が確定するデータ（以下、不規則な間接アクセスデータとも称する）を、プリフェッチ命令の挿入対象のデータとしてコンパイル処理が実行される。
【００７７】
図の符号ｉは、配列データＺのアクセス順に対応する。図の配列データＬＩＳＴ（ｉ）の値は、配列データＺのアクセス先（メモリ領域のアドレス）に対応する。
【００７８】
ケース１では、配列データＬＩＳＴ（１）、配列データＬＩＳＴ（２）、配列データＬＩＳＴ（３）のそれぞれの値は、５５５、１１、２０００である。したがって、配列データＺ（５５５）、配列データＺ（１１）、配列データＺ（２０００）の順で、アクセスされる。このように、配列データＺのアクセス先は、メモリ領域のアドレス５５５、１１、２０００の順に、不規則に変化する。
【００７９】
このため、配列データＺに対するハードウエアプリフェッチは実行されない。なお、配列データＺに対するソフトウエアプリフェッチは、実行される。したがって、配列データＺに対するプリフェッチ命令が挿入される。図の「prefetch Z(LIST(i+α))」は、α要素先の配列データＺをプリフェッチすることを示す。これにより、不規則な間接アクセスデータに対しても、プリフェッチが実行される。この結果、この実施形態では、データを参照するときの待ち時間を短縮できる。
【００８０】
一方、ケース２では、配列データＬＩＳＴ（１）、配列データＬＩＳＴ（２）、配列データＬＩＳＴ（３）、配列データＬＩＳＴ（４）のそれぞれの値は、１、２、３、４である。したがって、配列データＺ（１）、配列データＺ（２）、配列データＺ（３）、配列データＺ（４）の順で、アクセスされる。このように、配列データＺのアクセス先は、メモリ領域のアドレス１、２、３、４の順に、連続的に変化する。
【００８１】
このため、配列データＺに対するハードウエアプリフェッチが実行される。これにより、この実施形態では、データを参照するときの待ち時間を短縮できる。なお、配列データＺに対するハードウエアプリフェッチが実行されるため、図１から図３で説明したように、配列データＺに対するプリフェッチ命令（ソフトウエアプリフェッチにより挿入されたプリフェッチ命令）は、実行されない。すなわち、この実施形態では、プリフェッチ命令の対象データに対して、ハードウエアプリフェッチとソフトウエアプリフェッチとの両方が実行されることを抑止できる。
【００８２】
例えば、演算処理装置１０は、ハードウエアプリフェッチが実行された配列データＺに対するプリフェッチ命令の実行を抑止する。これにより、この実施形態では、不要なプリフェッチ命令が実行されることを抑止できる。この結果、この実施形態では、不要なプリフェッチ命令の実行による演算処理装置１０の性能低下（例えば、命令数の増加、バスの消費量の増加による転送速度の低下等の性能低下）を低減できる。
【００８３】
以上、図１から図４に示した実施形態の演算処理装置１０および演算処理装置１０の制御方法では、不要なプリフェッチ命令がフェッチポート３０に登録されているか否かを判定する。そして、例えば、演算処理装置１０は、不要なプリフェッチ命令がフェッチポート３０に登録されている場合、不要なプリフェッチ命令を無効にする。不要なプリフェッチ命令は、例えば、ハードウエアプリフェッチ制御装置４０によりキャッシュメモリ８０に転送されるデータに含まれるデータをメインメモリ１００からキャッシュメモリ８０に転送するプリフェッチ命令である。
【００８４】
このように、この実施形態では、不要なプリフェッチ命令を無効にできるため、不要なプリフェッチ命令が実行されることを抑止できる。この結果、この実施形態では、不要なプリフェッチ命令によるメモリアクセスを低減できる。これにより、この実施形態では、不要なプリフェッチ命令の実行による演算処理装置１０の性能低下を低減できる。
【００８５】
以上の実施形態において説明した発明を整理して、付記として開示する。
（付記１）
メモリに記憶されたデータを事前にキャッシュメモリに転送するプリフェッチを実行可能な演算処理装置において、
命令をデコードするデコード部と、
デコードされた前記命令のうち、メモリアクセスに関する前記命令が登録される命令保持部と、
前記メモリに記憶された前記データを事前に前記キャッシュメモリに転送するプリフェッチ命令とは別の所定の契機で、前記プリフェッチを実行するハードウエアプリフェッチ制御部と、
前記ハードウエアプリフェッチ制御部により前記キャッシュメモリに転送される前記データに含まれる前記データを前記メモリから前記キャッシュメモリに転送する不要な前記プリフェッチ命令が前記命令保持部に登録されているか否かを判定し、不要な前記プリフェッチ命令が前記命令保持部に登録されている場合、不要な前記プリフェッチ命令を無効にする制御部とを有することを特徴とする演算処理装置。
（付記２）
付記１に記載の演算処理装置において、
前記制御部は、不要な前記プリフェッチ命令を前記命令保持部から削除することにより、不要な前記プリフェッチ命令を無効にすることを特徴とする演算処理装置。
（付記３）
付記１または付記２に記載の演算処理装置において、
前記ハードウエアプリフェッチ制御部は、前記所定の契機を検出する際に参照される第１アドレス情報を記憶するアドレス保持部を有し、前記アドレス保持部に記憶した前記第１アドレス情報に基づいて前記プリフェッチのアクセス先を算出し、
前記命令保持部は、前記命令の種類を示す命令コードと、前記命令のアクセス先を示す第２アドレス情報とを記憶し、
前記制御部は、前記ハードウエアプリフェッチ制御部による前記プリフェッチが実行された場合、前記第１アドレス情報に基づいて算出されたアクセス先にアクセスする不要な前記プリフェッチ命令が前記命令保持部に登録されているか否かを、前記命令保持部に記憶された前記命令コードおよび前記第２アドレス情報に基づいて判定し、不要な前記プリフェッチ命令が前記命令保持部に登録されている場合、不要な前記プリフェッチ命令を無効にすることを特徴とする演算処理装置。
（付記４）
メモリに記憶されたデータを事前にキャッシュメモリに転送するプリフェッチを実行可能な演算処理装置の制御方法において、
前記演算処理装置が有するデコード部が、命令をデコードし、デコードした前記命令のうち、メモリアクセスに関する前記命令を命令保持部に登録し、
前記演算処理装置が有するハードウエアプリフェッチ制御部が、前記メモリに記憶された前記データを事前に前記キャッシュメモリに転送するプリフェッチ命令とは別の所定の契機で、前記プリフェッチを実行し、
前記演算処理装置が有する制御部が、前記ハードウエアプリフェッチ制御部により前記キャッシュメモリに転送される前記データに含まれる前記データを前記メモリから前記キャッシュメモリに転送する不要な前記プリフェッチ命令が前記命令保持部に登録されているか否かを判定し、不要な前記プリフェッチ命令が前記命令保持部に登録されている場合、不要な前記プリフェッチ命令を無効にすることを特徴とする演算処理装置の制御方法。
（付記５）
付記４に記載の演算処理装置の制御方法において、
前記制御部は、不要な前記プリフェッチ命令を前記命令保持部から削除することにより、不要な前記プリフェッチ命令を無効にすることを特徴とする演算処理装置の制御方法。
（付記６）
付記４または付記５に記載の演算処理装置の制御方法において、
前記ハードウエアプリフェッチ制御部が、前記所定の契機を検出する際に参照する第１アドレス情報をアドレス保持部に記憶し、前記アドレス保持部に記憶した前記第１アドレス情報に基づいて前記プリフェッチのアクセス先を算出し、
前記演算処理装置が、前記命令の種類を示す命令コードと、前記命令のアクセス先を示す第２アドレス情報とを前記命令保持部に記憶し、
前記ハードウエアプリフェッチ制御部が前記プリフェッチを実行した場合、前記制御部が、前記第１アドレス情報に基づいて算出されたアクセス先にアクセスする不要な前記プリフェッチ命令が前記命令保持部に登録されているか否かを、前記命令保持部に記憶された前記命令コードおよび前記第２アドレス情報に基づいて判定し、不要な前記プリフェッチ命令が前記命令保持部に登録されている場合、不要な前記プリフェッチ命令を無効にすることを特徴とする演算処理装置の制御方法。
【００８６】
以上の詳細な説明により、実施形態の特徴点および利点は明らかになるであろう。これは、特許請求の範囲がその精神および権利範囲を逸脱しない範囲で前述のような実施形態の特徴点および利点にまで及ぶことを意図するものである。また、当該技術分野において通常の知識を有する者であれば、あらゆる改良および変更に容易に想到できるはずである。したがって、発明性を有する実施形態の範囲を前述したものに限定する意図はなく、実施形態に開示された範囲に含まれる適当な改良物および均等物に拠ることも可能である。
【符号の説明】
【００８７】
１０‥演算処理装置；２０‥命令デコーダ；３０‥フェッチポート；４０‥ハードウエアプリフェッチ制御装置；４２‥プリフェッチキュー；４４‥オフセット付加部；５０‥制御部；５２、５４、５６‥比較部；６０ａ、６０ｂ‥リザベーションステーション；７０ａ、７０ｂ‥演算部；８０‥キャッシュメモリ；１００‥メインメモリ
【図１】
2015219550.tif 000003
【図２】
2015219550.tif 000004
【図３】
2015219550.tif 000005
【図４】
2015219550.tif 000006