JP2008234491A - 情報処理装置および情報処理方法 - Google Patents

情報処理装置および情報処理方法 Download PDF

Info

Publication number
JP2008234491A
JP2008234491A JP2007075630A JP2007075630A JP2008234491A JP 2008234491 A JP2008234491 A JP 2008234491A JP 2007075630 A JP2007075630 A JP 2007075630A JP 2007075630 A JP2007075630 A JP 2007075630A JP 2008234491 A JP2008234491 A JP 2008234491A
Authority
JP
Japan
Prior art keywords
branch
local memory
address
bank
cache block
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Granted
Application number
JP2007075630A
Other languages
English (en)
Other versions
JP4294059B2 (ja
Inventor
Atsushi Togawa
敦之 戸川
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Sony Interactive Entertainment Inc
Original Assignee
Sony Computer Entertainment Inc
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Sony Computer Entertainment Inc filed Critical Sony Computer Entertainment Inc
Priority to JP2007075630A priority Critical patent/JP4294059B2/ja
Priority to US12/051,287 priority patent/US8700851B2/en
Publication of JP2008234491A publication Critical patent/JP2008234491A/ja
Application granted granted Critical
Publication of JP4294059B2 publication Critical patent/JP4294059B2/ja
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F12/00Accessing, addressing or allocating within memory systems or architectures
    • G06F12/02Addressing or allocation; Relocation
    • G06F12/08Addressing or allocation; Relocation in hierarchically structured memory systems, e.g. virtual memory systems
    • G06F12/0802Addressing of a memory level in which the access to the desired data or data block requires associative addressing means, e.g. caches
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/40Transformation of program code
    • G06F8/41Compilation
    • G06F8/44Encoding
    • G06F8/443Optimisation
    • G06F8/4441Reducing the execution time required by the program code
    • G06F8/4442Reducing the number of cache misses; Data prefetching
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F12/00Accessing, addressing or allocating within memory systems or architectures
    • G06F12/02Addressing or allocation; Relocation
    • G06F12/08Addressing or allocation; Relocation in hierarchically structured memory systems, e.g. virtual memory systems
    • G06F12/0802Addressing of a memory level in which the access to the desired data or data block requires associative addressing means, e.g. caches
    • G06F12/0875Addressing of a memory level in which the access to the desired data or data block requires associative addressing means, e.g. caches with dedicated cache, e.g. instruction or stack
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F12/00Accessing, addressing or allocating within memory systems or architectures
    • G06F12/02Addressing or allocation; Relocation
    • G06F12/08Addressing or allocation; Relocation in hierarchically structured memory systems, e.g. virtual memory systems
    • G06F12/10Address translation
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F12/00Accessing, addressing or allocating within memory systems or architectures
    • G06F12/02Addressing or allocation; Relocation
    • G06F12/08Addressing or allocation; Relocation in hierarchically structured memory systems, e.g. virtual memory systems
    • G06F12/12Replacement control
    • G06F12/121Replacement control using replacement algorithms
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30003Arrangements for executing specific machine instructions
    • G06F9/3005Arrangements for executing specific machine instructions to perform operations for flow control
    • G06F9/30054Unconditional branch instructions
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/38Concurrent instruction execution, e.g. pipeline or look ahead
    • G06F9/3802Instruction prefetching
    • G06F9/3804Instruction prefetching for branches, e.g. hedging, branch folding
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/38Concurrent instruction execution, e.g. pipeline or look ahead
    • G06F9/3802Instruction prefetching
    • G06F9/3804Instruction prefetching for branches, e.g. hedging, branch folding
    • G06F9/3806Instruction prefetching for branches, e.g. hedging, branch folding using address prediction, e.g. return stack, branch history buffer
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F12/00Accessing, addressing or allocating within memory systems or architectures
    • G06F12/02Addressing or allocation; Relocation
    • G06F12/08Addressing or allocation; Relocation in hierarchically structured memory systems, e.g. virtual memory systems
    • G06F12/0802Addressing of a memory level in which the access to the desired data or data block requires associative addressing means, e.g. caches
    • G06F12/0862Addressing of a memory level in which the access to the desired data or data block requires associative addressing means, e.g. caches with prefetch
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F12/00Accessing, addressing or allocating within memory systems or architectures
    • G06F12/02Addressing or allocation; Relocation
    • G06F12/08Addressing or allocation; Relocation in hierarchically structured memory systems, e.g. virtual memory systems
    • G06F12/0802Addressing of a memory level in which the access to the desired data or data block requires associative addressing means, e.g. caches
    • G06F12/0866Addressing of a memory level in which the access to the desired data or data block requires associative addressing means, e.g. caches for peripheral storage systems, e.g. disk cache
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2212/00Indexing scheme relating to accessing, addressing or allocation within memory systems or architectures
    • G06F2212/10Providing a specific technical effect
    • G06F2212/1041Resource optimization
    • G06F2212/1044Space efficiency improvement
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2212/00Indexing scheme relating to accessing, addressing or allocation within memory systems or architectures
    • G06F2212/25Using a specific main memory architecture
    • G06F2212/251Local memory within processor subsystem
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2212/00Indexing scheme relating to accessing, addressing or allocation within memory systems or architectures
    • G06F2212/25Using a specific main memory architecture
    • G06F2212/253Centralized memory

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • General Engineering & Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Physics & Mathematics (AREA)
  • Software Systems (AREA)
  • Memory System Of A Hierarchy Structure (AREA)
  • Memory System (AREA)
  • Stored Programmes (AREA)
  • Advance Control (AREA)
  • Executing Machine-Instructions (AREA)

Abstract

【課題】処理中のプログラムへのアクセスの高速化が望まれている。
【解決手段】メインメモリ20には、プログラムを分割したキャッシュブロック42を格納する。各キャッシュブロック42の他のキャッシュブロック42への分岐位置には、分岐先のキャッシュブロック42のロード等の処理を行う分岐解決ルーチンを起動する命令を埋め込む。ローカルメモリ16にはキャッシュブロック42単位でロードを行い、格納領域の区画である第1バンク30a〜第nバンク30nに順次格納する。ローカルメモリ16内でのアドレス管理、キャッシュブロックのコピー32の破棄時の処理等はアドレス変換テーブル34、バンク間参照テーブル38、世代番号テーブル39を参照して行う。
【選択図】図2

Description

本発明は情報処理技術に関し、階層構造をなすメモリを備えた情報処理装置およびそれに適用される情報処理方法に関する。
近年の情報処理技術の発展により、CD−ROMなどの記録媒体に記録されたソフトウェアやネットワーク上のサーバからダウンロードしたソフトウェアなどを起動させることにより、一の情報処理装置に対して多種多様な機能を発揮させることが容易にできるようになった。そのような状況において、いかに効率よく高速にプログラムを処理していくかは常に重要な課題となってきた。
処理を高速化させるためには、単にプロセッサの処理能力を向上させるばかりでなく、プロセッサユニット間、プロセッサユニットとメモリ間など、情報処理装置内での各ユニット間のデータ転送速度を向上させる必要がある。プロセッサがメモリに格納されたデータやプログラムに高速にアクセスするための技術のひとつがキャッシュメモリによるメモリの階層化である。キャッシュメモリは一般に、メインメモリより容量が小さくアクセスを高速に行うことのできるメモリである。キャッシュメモリにアクセス頻度の高いデータを格納しておくことにより、メインメモリへのアクセス回数を減らし、全体としてデータアクセスに要する時間を削減することができる。複数のプロセッサを備えたマルチプロセッサシステムにおいても、プロセッサごとにローカルメモリを設けることにより、より多くのデータに対する高速なアクセスを可能にしている。
プロセッサがプログラムを高速処理するためには、そのマシンコードに対しても高速にアクセスする必要がある。ところが高速アクセスが可能なメモリ、すなわち高速メモリは一般的にその容量が小さいため、プログラムの規模によってはその全体を高速メモリに格納することができない場合も多い。この場合、プログラマは手作業でプログラムを複数のモジュールに分割し、さらに、これらのモジュールを適当なタイミングでメインメモリから高速メモリにロードするためのプログラムを記述する必要があった。
本発明はこのような課題に鑑みてなされたものであり、その目的は、プログラムへの高速アクセスの効率化を可能にする技術を提供することにある。
本発明のある態様は情報処理装置に関する。この情報処理装置は、参照順につながりを有する複数のデータブロックを格納したメインメモリと、複数のデータブロックのうち少なくとも一部のデータブロックをコピーして格納したローカルメモリと、参照順に基づきローカルメモリにコピーされたデータブロックを順次参照しながら処理を実行し、必要に応じて新たなデータブロックをメインメモリからローカルメモリにコピーするプロセッサと、を備え、ローカルメモリにおけるデータブロックを格納する領域は複数の区画を備え、プロセッサは、新たなデータブロックをコピーするためのローカルメモリ内の格納領域が不足した場合、以前にコピーしたデータブロックを区画ごとに破棄して新たな格納領域を確保し、コピーした前記データブロックごとに、当該データブロックの後に参照されるデータブロックの格納領域に係る参照先情報をローカルメモリに記録することにより、データブロックを順次参照することを特徴とする。
ここで「参照順につながりを有する」とは、あるデータブロックの途中、または最後まで参照した後で別のデータブロックを参照する、というように参照される順序に何らかのつながりを有する関係のことである。参照順において前後をなす2つのデータブロックの他、参照先が元のデータブロックに戻る場合、戻らない場合、3以上のデータブロックにつながりがある場合などのいずれも「参照順につながりを有する」とし、あるデータブロックを参照するために別のデータブロックを参照する場合、データブロック同士に相互関係がなく単に参照する順序がある場合など、データブロック同士の関係は限定されない。また「データブロック」とは、プログラムデータ、数値データ、画像データ、音声データなど、またはそれらのデータを所定の基準で分割したデータなど、のいずれでもよく、そのいずれかの組み合わせでもよい。
本発明の別の態様は情報処理方法に関する。この情報処理方法は、ローカルメモリのアドレスを指定した分岐命令が記述された分岐元のプログラムデータと、当該分岐命令によって指定されたアドレスを含む分岐先のプログラムデータとをローカルメモリに格納するとともに、前記分岐元のプログラムデータのローカルメモリ内の格納領域に係る情報を、分岐先のプログラムデータに対応付けて記録するステップと、分岐先のプログラムデータを破棄する際、分岐元のプログラムデータのローカルメモリ内の格納領域に係る情報に基づき分岐元のプログラムデータを特定し、当該分岐元のプログラムデータに記述された分岐命令において指定された前記アドレスを無効化するステップと、を含むことを特徴とする。
なお、以上の構成要素の任意の組合せ、本発明の表現を方法、装置、システム、コンピュータプログラムなどの間で変換したものもまた、本発明の態様として有効である。
本発明によれば、プログラムへのアクセスの高速化を容易に実現することができる。
図1は本実施の形態における情報処理装置の構造を示している。情報処理装置10は、プロセッサ14、ローカルメモリ16、レジスタ18を含むプロセッサユニット12、メインメモリ20、記憶装置22、および入出力装置24を含み、それぞれがバス28を介して互いにデータの送受を行う。プロセッサユニット12は接続したMFC(Memory Flow Controller)のDMA(Direct Memory Access)を起動させることによりデータの転送を実現させてもよいが、ここではその図示を省略する。
同図ではプロセッサユニット12が2つ示されているが、その数は2つに限られず、1つまたは3つ以上でもよい。また各プロセッサ14が対等の機能を発揮することにより複数のプロセスまたはスレッドを並列処理してもよいし、グラフィックプロセッサ、I/Oプロセッサなど特定の機能を発揮するものが含まれていてもよい。
プロセッサユニット12のプロセッサ14はユーザが起動したアプリケーションソフトウェアなどのプログラムを実行する。ローカルメモリ16は例えばプロセッサ14と同一のチップまたは近隣に配置された高速アクセスが可能なSRAM(Static Random Access Memory)などで構成され、メインメモリ20にロードされたアプリケーションプログラムの一部や、処理に必要なデータ、処理結果のデータなどが適宜格納される。レジスタ18はプロセッサ14における処理で必要な値を一時的に保持する一般的なレジスタで構成してよい。本実施の形態では特に、ローカルメモリ16に格納されたプログラムを管理するためのデータ、スタックなども格納する。
メインメモリ20は例えばDRAM(Dynamic Random Access Memory)などで構成され、ユーザが起動したアプリケーションなどのプログラム全体を格納する。メインメモリ20はその他にも複数のプロセッサユニット12間でデータをやりとりするための共有メモリやOSを動作させるためのシステムメモリなどの機能を果たしてもよい。記憶装置22はハードディスク装置、CD−ROMなどの記録媒体とその読み取り装置など一般的に用いられる記憶装置のいずれかまたは組み合わせでよく、アプリケーションプログラムと処理に必要なデータ、処理の途中や終了時などに保存すべきデータなどを記憶する。入出力装置24はアプリケーションの起動をはじめとして情報処理装置10に対しユーザが行う指示入力や処理結果の出力などを行い、キーボード、コントローラ、ポインティングデバイスなどの入力装置、表示装置、スピーカー、プリンターなどの出力装置のいずれかまたは組み合わせでよい。
本実施の形態では、記憶装置22に記憶されたプログラムなどを、まずメインメモリ20にロードし、各プロセッサユニット12において実行される処理に応じてプログラムの一部をメインメモリ20からローカルメモリ16にロードする。これにより、プロセッサ14はプログラムの進捗ごとにメインメモリ20にアクセスし直す必要がなくなる。アクセスを可能な限りプロセッサユニット12内で閉じることよって、ソフトウェアの処理を高速化する。このような場合、従来の手法では、あらかじめプログラムを記述する段階で、ローカルメモリ16に格納できる大きさのモジュールに分割しておくとともに、それらのモジュールをローカルメモリ16にロードするためのプログラムを記述しておく必要があった。
そのため、ゲームやシミュレーションのソフトウェアなど、高度な機能を提供する、長大で複雑なプログラムを作成したりデバッグしたりする際は特に、その効率化が望まれていた。そこで本実施の形態では、コンパイラによって自動的に命令をキャッシュできるようにする。これによりプログラム記述時にはローカルメモリ16へのロード操作について考慮せずに済み、プログラマの負担も軽減させることができる。具体的には、ローカルメモリ16内に存在しない命令までプログラムの実行が進んだとき、コンパイラの実行時ルーチンが自動的に以下の処理を行う。
(1)不要な命令を予測してローカルメモリ16から削除する。
(2)必要な命令をメインメモリ20からローカルメモリ16にロードする。
図2はローカルメモリ16とメインメモリ20に格納されるデータの構成を模式的に示している。まずメインメモリ20には、本実施の形態におけるコンパイラによってコンパイルされたプログラムが記憶装置22からロードされる。本実施の形態におけるコンパイラはプログラムのコンパイルを行う際、所定の基準でプログラムを分割しプログラムのブロックを形成する。メインメモリ20からローカルメモリ16へのプログラムのロードはこのブロック単位で行う。ブロックのデータサイズは当然、ローカルメモリ16の容量以下とする。以後、このブロックをキャッシュブロック42と呼ぶ。従ってメインメモリ20には図2に示すように、プログラムとして複数のキャッシュブロック42が格納される。
1つのキャッシュブロック42を構成するプログラムは、例えば連続したプログラムを、所定のサイズの範囲に入るように、分割可能な位置で分割したものでもよいし、集中して連続的に参照される関数群を経験則などから導出してあらかじめ設定しておき、コンパイル時にプログラムから抽出するようにしてもよい。あるいは関数より大きな単位でまず基本的なブロックに分割し、それをサイズや処理内容などに鑑みまとめ直すことによりキャッシュブロック42としてもよい。ここで基本ブロックとは、分割可能な最小単位である関数などを処理内容などに応じてまとめたものでよい。いずれにしてもコンパイラが自動的にキャッシュブロックを形成することが望ましいが、プログラマがあらかじめ設定した関数、分割位置などを呼び出すことによってキャッシュブロックの範囲を手動で指定できるようにして、一部、プログラマの意思を反映できるようにしてもよい。
ローカルメモリ16には前述のとおり、メインメモリ20からロードされた少なくとも1つのキャッシュブロック42、すなわちキャッシュブロックのコピー32が格納される。キャッシュブロックのコピー32はプログラムの一部であるため、あるキャッシュブロックのコピー32を参照して処理を行っている途中で別のキャッシュブロックのコピー32中の命令へ分岐したり関数を呼び出したりする必要が生じる。このとき分岐先のキャッシュブロックのコピー32がローカルメモリ16に存在しなければ、コンパイラが提供するルーチンによってメインメモリ20より該当するキャッシュブロック42を特定しローカルメモリ16にコピーする。このような処理を行うルーチンを分岐解決ルーチンと呼ぶ。分岐解決ルーチンの具体的な処理手順は後に説明する。
ローカルメモリ16には第1バンク30a、第2バンク30b、・・・、第nバンク30nという区分けされたn個の記憶領域を設け、メインメモリ20からロードしたキャッシュブロックのコピー32は第1バンク30aの先頭アドレスから順に格納していく。格納が進み、未使用領域が不足したら、すなわち、新たなキャッシュブロックのコピー32が最終のバンクである第nバンク30nに収まらなくなったら、第1バンク30aに以前格納したキャッシュブロックのコピー32を全て破棄し(以後、バンクの無効化と呼ぶ)、新たなキャッシュブロックのコピー32を順次格納していく。以後、第2バンク30bから第nバンク30nまでを順次無効化して再利用する。
図2に示すように、ローカルメモリ16は、キャッシュブロックのコピー32以外にアドレス変換テーブル34、バンク間参照テーブル38、世代番号テーブル39を格納する。アドレス変換テーブル34は、あるキャッシュブロック42を格納したメインメモリ20内のアドレスと、そのコピーを格納したローカルメモリ16内のアドレスとを対応づけたテーブルであり、プロセッサ14が分岐先のキャッシュブロックのコピー32を参照するためにローカルメモリ16内のアドレスを特定したり、必要なキャッシュブロックのコピー32がローカルメモリ16内に存在するか否かを判断するために参照される。
バンク間参照テーブル38は第1バンク30a、第2バンク30b、・・・、第nバンク30nのそれぞれに対応して1つずつ用意され、別のバンク、例えば第nバンク30nに格納されたキャッシュブロックのコピー32が、自らのバンク、例えば第2バンク30bに格納されたキャッシュブロックのコピー32へ分岐している場合に、その分岐元のキャッシュブロックのコピー32に記述された分岐命令列の位置を記録したテーブルである。世代番号テーブル39はバンクごとに世代番号と呼ばれる番号を保持し、各世代番号は対応するバンクが無効化されるごとにインクリメントされる。バンク間参照テーブル38と世代番号テーブル39を参照することにより、分岐先のキャッシュブロックのコピー32を格納したバンクが無効化され、それまで分岐先として使用していたローカルメモリ16内のアドレスがもはや無効であることが認識できる。
図3はメインメモリ20にロードされるキャッシュブロックを形成するとともに分岐解決ルーチンを実行するコンパイラの構造を示している。図3において、様々な処理を行う機能ブロックとして記載される各要素は、ハードウェア的には、CPU、メモリ、その他のLSIで構成することができ、ソフトウェア的にはプログラムなどによって実現される。したがって、これらの機能ブロックがハードウェアのみ、ソフトウェアのみ、またはそれらの組合せによっていろいろな形で実現できることは当業者には理解されるところであり、いずれかに限定されるものではない。例えばコンパイラ100は対応するソフトウェアをロードした情報処理装置10の一部によって実現してもよい。
コンパイラ100はプログラムからキャッシュブロック42を形成するコンパイル部102と、分岐解決ルーチンを実行する分岐解決ルーチン実行部110とを含む。コンパイル部102は、上述のような所定の規則でプログラムを分割するプログラム分割部104と、別のキャッシュブロック42へ処理を分岐するに当たり分岐解決ルーチンを起動する命令などをプログラムに埋め込む命令埋め込み部106と、各分岐処理において分岐解決ルーチンを実行するために必要な、分岐先のキャッシュブロック42に係る情報を、分岐元のキャッシュブロックに付加する分岐先情報付加部108と、を含む。分岐先情報付加部108によって付加される情報については後述する。
分岐解決ルーチン実行部110は命令埋め込み部106によって埋め込まれた命令によって起動される分岐解決ルーチンを実行する。分岐解決ルーチン実行部110はユーザが情報処理装置10において起動したプログラムの実行中に動作するため、その実体はプロセッサ14であってよい。
次に図2で示したキャッシュブロック42、アドレス変換テーブル34、バンク間参照テーブル38、世代番号テーブル39の構成について詳述する。図4はメインメモリ20に格納された2つのキャッシュブロック42a、42bの構造を模式的に示している。ここでキャッシュブロック42a中の処理はキャッシュブロック42b中の処理に分岐するとする。
コンパイラ100が生成するキャッシュブロック42aは、プログラム分割部104が分割したプログラム本体44と、コンパイラ100の分岐先情報付加部108が付加した情報である分岐先テーブル46とで構成される。この構成はどのキャッシュブロック42についても同様である。分岐先テーブル46はプログラム本体44に記述されたプログラムが別のキャッシュブロック42への分岐を含むとき、その情報を記録したテーブルであり、1つの分岐に対し1つのエントリが記述される。
分岐先テーブル46の各エントリは、分岐先キャッシュブロックアドレス欄52、分岐先キャッシュブロックサイズ欄54、分岐先命令オフセット欄56、分岐種別欄58を含む。分岐先キャッシュブロックアドレス欄52には分岐先の命令が格納されているキャッシュブロック42bのメインメモリ20内の先頭アドレス、図4の例では「X」が記録される。分岐先キャッシュブロックサイズ欄54には当該キャッシュブロック42bのデータサイズ、図4の例では「S」が記録される。以後、場合によってメインメモリ20内のアドレスはメインアドレス、ローカルメモリ16内のアドレスはローカルアドレスと呼んで区別する。
分岐先命令オフセット欄56には、分岐先の命令が記述されたメインアドレスの、当該キャッシュブロック42bの先頭メインアドレスからのオフセット値が記録される。図4の例で分岐先の命令がメインアドレス「Y」の破線50で示された位置に記述されていたとすると、オフセット値は「Y−X」となる。分岐種別欄58には当該分岐が単なる分岐か関数呼び出しか、の分岐の種別を識別する情報が記録される。図4の例では「0」か「1」かで識別するとして、「0」が記録されている。
さらにコンパイラ100の命令埋め込み部106は上述のとおり、あるキャッシュブロック42aのプログラム本体44において他のキャッシュブロック42bへの分岐命令があった場合、当該分岐処理をローカルメモリ16内で実現するための命令列48を生成して埋め込む。命令列48は、分岐先テーブル46のうち対応する分岐を示すエントリが記述されたローカルメモリ16内のアドレス、すなわちローカルアドレスをレジスタに格納する命令列と、前述の分岐解決ルーチンを起動する命令列とを含む。図4では前者は「rx = PC + B − A」、後者は「call runtime routine」なる命令列で記述されている。
ここで「rx」はレジスタの値、「PC」はローカルメモリ16内にキャッシュブロック42aがコピーされたときの命令列48のローカルアドレスである。命令列48のローカルアドレス「PC」に、生成した命令列のメインアドレス「A」から分岐先テーブル46の該当エントリのメインアドレス「B」へのオフセット値「B−A」を加算することによって、ローカルメモリ16内での分岐先テーブルのエントリのアドレスを得ることができる。
命令列48はその他に、関数呼び出しから戻る際に、ローカルメモリ16において戻る先のキャッシュブロックのコピー32が破棄されていた場合の処理を行う命令などを含んでよい。当該処理については後に述べる。
なお上述のとおりキャッシュブロック42を、元のプログラムに含まれる関数、または元のプログラムを分割してなる基本ブロックを寄せ集めた集合体とした場合、一のキャッシュブロック42内に分岐元、分岐先の双方が存在する場合がある。この場合、分岐先情報付加部108は当該分岐については分岐先テーブル46に対するエントリを行わなくてよい。そして命令埋め込み部106は、命令列48として、分岐先テーブル46のローカルアドレスをレジスタに格納する命令列や分岐解決ルーチンを起動する命令列を埋め込まず、単に分岐先のローカルアドレスへ分岐する命令を埋め込む。これは例えば、分岐先までのメインアドレスのオフセット値に命令列48のローカルアドレス「PC」を加算したアドレスへの分岐命令によって実現できる。
図5は、図4に示したメインメモリ20内の2つのキャッシュブロック42a、42bのローカルメモリ16内のコピーであるキャッシュブロックのコピー32a、32bと、アドレス変換テーブル34の構造を模式的に示している。アドレス変換テーブル34は、アドレス変換テーブルヘッダ部34aと、アドレス変換テーブルエントリ部34b、34cとで構成される。後述するようにメインメモリ20からローカルメモリ16にキャッシュブロック42a、42bをロードする場合は、まずキャッシュブロックのコピー32a、32bを格納する領域を確保し、その先頭領域にアドレス変換テーブルエントリ部34b、34cを書き込み、その直後の領域にキャッシュブロックのコピー32a、32bを格納するようにする。
本実施の形態ではキャッシュブロック42a、42bのメインメモリ20内でのアドレスをキーに、キャッシュブロックのコピー32a、32bのローカルアドレスを効率よく特定するために、アドレス変換テーブル34をハッシュテーブルとして構造化する。したがってアドレス変換テーブルヘッダ部34aは、メインメモリ内のアドレス、またはその一部をインデックスとして、所望のキャッシュブロックのコピー32a、32bに対応するアドレス変換テーブルエントリ部34b、34cへのポインタを格納する。この場合のアドレス変換テーブル34については図6で詳述するが、メインメモリ20のアドレスからローカルメモリ16のアドレスを特定できるテーブルであればハッシュテーブルの構造でなくてもよい。
キャッシュブロックのコピー32aもプログラム本体62と分岐先テーブル64を含み、保持するデータ内容はメインメモリ20におけるキャッシュブロック42aとほぼ同じである。ただし分岐先のキャッシュブロック42bのロードが完了し、キャッシュブロックのコピー32bのローカルメモリ16内での格納領域が確定した時点で、分岐解決ルーチンは自らのルーチンを呼び出した命令列48を、分岐先の命令への分岐命令列66に置き換える。図5において、分岐先のキャッシュブロックのコピー32bにおける分岐先の命令が記述されたアドレスが「Y'」であるとき、分岐元のキャッシュブロックのコピー32aにおける命令列66では「Jump to Y'」なる命令に置き換えられる。このようにすることで、以後の処理で同じ分岐命令に到達した際は、分岐解決ルーチンの介在なく適したアドレスへの分岐処理を行うことができる。
図6はアドレス変換テーブル34の構造を模式的に示している。アドレス変換テーブル34は前述のとおり、アドレス変換テーブルヘッダ部34aとアドレス変換テーブルエントリ部34b〜34hとを含む。アドレス変換テーブル34は分岐解決ルーチンが実行され新たなキャッシュブロック42がローカルメモリ16にロードされる際、その格納領域の確保とともに更新される。またロードされたキャッシュブロックのコピー32が破棄される際も更新される。
アドレス変換テーブルヘッダ部34aは例えばメインメモリ20内のキャッシュブロック42の格納領域におけるアドレスの下位数ビットごとに欄を設ける。そして各欄に該当するメインメモリ20内のアドレスのいずれかに格納されたキャッシュブロック42をローカルメモリ16にロードするときに、生成したアドレス変換テーブルエントリ部34bのローカルアドレスをアドレス変換テーブルヘッダ部34aの対応する欄に書き込む。
アドレス変換テーブルヘッダ部34aの各欄は、メインメモリ20内のアドレスの一部に対応するため、図6のアドレス変換テーブルエントリ部34b、34cのように、同じ欄に対応するメインメモリ20内の複数のアドレスに格納された複数のキャッシュブロック42がロードされる場合がある。そのため各アドレス変換テーブルエントリ部34b〜34hにはそれぞれ、自らに対応するキャッシュブロック42のメインメモリ内20でのアドレスとともに、同図の実線矢印70、72、破線矢印74で示したように、別のアドレス変換テーブルエントリ部34b〜34hのローカルアドレスへのポインタも格納する。
すなわちアドレス変換テーブルエントリ部34fには、自らに対応するキャッシュブロック42のメインメモリ20内でのアドレスと、実線矢印70のようにアドレス変換テーブルヘッダ部34aに対し後ろに接続したアドレス変換テーブルエントリ部34gのローカルアドレスと、実線矢印72のように前に接続したアドレス変換テーブルエントリ部34eのローカルアドレスと、破線矢印74のように時系列順に次にロードされたキャッシュブロック42のアドレス変換テーブルエントリ部34dのローカルアドレスとが保持される。アドレス変換テーブルヘッダ部34a、アドレス変換テーブルエントリ部34b〜34hのいずれも、該当する接続エントリがなければアドレス以外の定数を代入しておく。
このようなテーブルとすることで、メインメモリ20内のアドレスに基づき、ローカルメモリ16内の所望のキャッシュブロックのコピー32を効率よく特定することができる。アドレス変換テーブル34に新たなアドレス変換テーブルエントリ部を追加する際の詳細な処理手順は、ハッシュテーブルにエントリを追加するための一般的な手法を用いてよい。
次にこれまで述べた装置およびデータの構造を用いて行われる分岐解決ルーチンの実行について説明する。図7は分岐解決ルーチンの処理手順を示すフローチャートである。前段として、ユーザは入出力装置24などによりあるソフトウェアの起動を情報処理装置10に指示し、当該ソフトウェアに対応するキャッシュブロック42がメインメモリ20にロードされ、そのうち1つ以上のキャッシュブロック42がローカルメモリ16にロードされ、それを参照しながらプロセッサ14が処理を進捗させているものとする。
ここで処理がキャッシュブロックのコピー32における分岐解決ルーチンの呼び出し命令まで進捗し、分岐解決ルーチンが呼び出されると、分岐解決ルーチン実行部110の実体であるプロセッサ14は、直前の命令列でレジスタ18に格納されたアドレスに基づき分岐先テーブル64内の該当エントリを参照し、分岐先のキャッシュブロック42のメインメモリ20内での先頭アドレス、サイズ、分岐先命令までのオフセット値、分岐の種類を取得する(S20)。次にプロセッサ14は、アドレス変換テーブル34を参照し、当該メインメモリ20内のアドレスを保持するエントリが存在するか確認する(S22)。存在していなければ(S22のN)、当該キャッシュブロックのコピー32はローカルメモリ16内にないものとし、ロードの処理を開始する。
具体的には、まず最後にロードしたキャッシュブロックのコピー32と同じバンク、例えば第1バンク30aに、新たなキャッシュブロックのコピー32およびアドレス変換テーブルエントリ部、例えばアドレス変換テーブルエントリ部34bを格納できる未使用領域が十分にあるか確認する(S24)。この際、次に使用するバンクである第2バンク30bが未使用であれば未使用領域が十分であると判断する。十分でなかった場合(S24のN)、すなわち次のバンクである第2バンク30bに格納されたキャッシュブロックのコピー32を破棄して新たなキャッシュブロックのコピー32を格納しなければならない場合は、当該第2バンク30bの無効化処理を行う(S26)。無効化処理については後に詳述する。
新たなキャッシュブロックのコピー32を格納する領域が確保できたら(S24のYまたはS26)、アドレス変換テーブルエントリ部34bを作成し当該領域の先頭に書き込むとともに、アドレス変換テーブルヘッダ部34aを更新することにより、アドレス変換テーブル34にエントリを追加する(S28)。そしてS20で取得したメインメモリ20内のアドレスに基づき、メインメモリ20からローカルメモリ16の確保した領域にキャッシュブロック42をロードする(S30)。
そして、元に処理されていた分岐元のキャッシュブロックのコピー32内の、分岐解決ルーチンを呼び出した命令列を、新たにロードしたキャッシュブロックのコピー32内の命令への分岐命令に置き換える(S32)。このとき、ロードしたキャッシュブロックのコピー32の先頭ローカルアドレス(図5の「X'」)にS20で取得した命令列までのオフセット値を加算することにより、分岐先命令列のローカルメモリ16内でのアドレス(図5の「Y'」)が得られる。そして当該キャッシュブロックのコピー32内の分岐先の命令へ処理を分岐する(S34)。
S22においてアドレス変換テーブル34に該当エントリが存在する場合は(S22のY)、分岐先のキャッシュブロックのコピー32がローカルメモリ16内に存在するため、アドレス変換テーブル34からアドレス変換テーブルエントリ部34bのローカルアドレスを取得し、S32、S34の処理を行う。分岐解決ルーチンにおいて分岐先のキャッシュブロックのコピー32がローカルメモリ16内に存在する状態は、以前に別の命令列の分岐解決ルーチンによって当該キャッシュブロックのコピー32がローカルメモリ16に格納されている場合に発生する。
次にローカルメモリ16においてキャッシュブロックのコピー32を格納する第1バンク30a〜第nバンク30nの管理手法について説明する。図8は第1バンク30a、第2バンク30b、第3バンク30c、第4バンク30dと、それぞれに対応づけられたバンク間参照テーブル38a、38b、38c、38d、および世代番号テーブル39との関係を模式的に示している。同図に表された矢印はそれぞれの対応関係を示している。
上述のとおり本実施の形態では、プログラムの実行中、分岐先のキャッシュブロック42を次々とローカルメモリ16にロードする。そのためプログラムの実行に必要なコードの量がローカルメモリ16の容量、厳密にはキャッシュブロックのコピー32を格納することのできる容量を超えている場合は、いつかはロード済みのキャッシュブロックのコピー32を破棄し、その領域を新たなキャッシュブロックのコピー32の格納領域として再利用する必要が生じる。
ここで問題となるのは、破棄されるキャッシュブロックのコピー32への分岐命令が、ローカルメモリ16内の全キャッシュブロックのコピー32に散在しうることである。このような分岐命令に含まれる分岐先のローカルメモリ16内でのアドレスは、分岐先のキャッシュブロックが破棄された時点で無効となるから、分岐元のキャッシュブロックのコピー32において図7のS32で置き換えた分岐命令を、分岐解決ルーチン起動命令へ戻す必要がある。この処理を効率的に行うために、キャッシュブロックのコピー32を格納する領域を第1バンク30a〜第nバンク30nのn個のバンクに分割し、バンクごとにキャッシュブロックのコピー32の有効、無効を管理する。このときバンク間参照テーブル38a、38b、38c、38dは、対応するバンクが無効化されたとき、分岐元のキャッシュブロックのコピー32において分岐解決ルーチン起動命令へ戻すべき分岐命令のアドレスを特定するために使用される。
なお図8では第1バンク30a〜第4バンク30dの4個のバンクのみ示しているが、バンクの数がそれ以外でも同様の構成で実現される。バンク間参照テーブル38a〜38dはそれぞれ、分岐命令アドレス欄72および世代番号下位ビット欄74を含む。分岐命令アドレス欄72には、対応するバンクに格納されたキャッシュブロックのコピー32へ分岐する命令が記述された、分岐元のキャッシュブロックのコピー32における命令列のローカルアドレスが記録される。当該ローカルアドレスに記述された命令列は、当該バンクを無効化した際、分岐解決ルーチンに置き換えるべき命令列である。
世代番号下位ビット欄74には、分岐命令が記述された命令列を含むキャッシュブロックのコピー32を格納したバンクの世代番号の最下位ビットが記録される。ここで記録される世代番号は、当該エントリをバンク間参照テーブル38a〜38dに登録した時点での分岐元のバンクの世代番号である。以後この世代番号を「エントリの世代番号」と呼ぶ。あるキャッシュブロックのコピー32において分岐解決ルーチンが起動し、対応するバンクに格納されたキャッシュブロックのコピー32への分岐命令への置き換えが行われるとき、当該分岐解決ルーチンによってバンク間参照テーブル38a〜38dのエントリが追加登録される。
なお、同一のバンク内に分岐元のキャッシュブロックのコピー32と分岐先のキャッシュブロックのコピー32とがある場合は、それらが同じタイミングで無効化されるため、バンク間参照テーブル38a〜38dに分岐元のアドレスをエントリする必要がない。したがって分岐元で起動した分岐解決ルーチンは、分岐先のキャッシュブロックのコピー32が異なるバンクに存在するときのみ、当該バンクのバンク間参照テーブル38a〜38dに追加登録を行う。
世代番号テーブル39は第1バンク30a〜第4バンク30dにそれぞれ対応する欄を含み、それぞれのバンクの現在の世代番号が記録される。世代番号には対応するバンクが無効化されるたびに1が加算される。図8の例では、第1バンク30aおよび第2バンク30bの世代番号は「3」、第3バンク30cおよび第4バンク30dの世代番号は「2」である。また同図に示すように、第2バンク30b内のアドレス「X」に分岐する分岐命令が、第3バンク30c内のローカルアドレス「A」と第4バンク30d内のローカルアドレス「B」に記述されているとすると、第2バンク30bに対応するバンク間参照テーブル38bの分岐命令アドレス欄72には「A」および「B」が記録され、世代番号下位ビット欄74には、ローカルアドレス「A」を含む第3バンク30cおよびローカルアドレス「B」を含む第4バンク30dの世代番号「2」の最下位ビットである「0」が記録される。
バンク間参照テーブル38a〜38dに記録される各エントリは、対応する第1バンク30a〜第4バンク30dのいずれかを無効化するときに、分岐元のキャッシュブロックのコピー32の分岐命令を分岐解決ルーチン起動命令に置き換えるためのものである。しかし対応するバンクを無効化する以前に当該分岐元のキャッシュブロックのコピー32を格納したバンクがすでに無効化されているときは、そのエントリ自体が意味をなさない、すなわちエントリが無効である。このようにバンク間参照テーブル38a〜38dに記録された各エントリの有効、無効を判断するために、世代番号下位ビット欄74を用いる。
バンク間参照テーブル38a〜38dにおける各エントリの世代番号が、そのエントリの分岐命令が存在する、あるいは存在したバンクの現在の世代番号と等しければそのエントリは有効であり、等しくなければ当該命令列を含むキャッシュブロックのコピー32が破棄されており、当該エントリは無効である。本実施の形態では後に述べるように、エントリの世代番号と現在の世代番号とをそれらの最下位ビットの値で比較する。
次に、バンク間参照テーブル38a〜38dへのエントリ追加登録を含む、図7のS32の分岐解決ルーチン起動命令置き換え処理の手順について説明する。図9は分岐解決ルーチン起動命令置き換え処理の手順を示すフローチャートである。まず、分岐先のキャッシュブロックのコピー32を異なるバンクに新たに格納した場合など、異なるバンクへ分岐する場合(S68のY)、当該バンク(以後、分岐先バンクと呼ぶ)、例えば図8の第2バンク30b、に対応するバンク間参照テーブル38bから、無効となっているエントリを検索する(S70)。無効になっているエントリがあればそれを上書きして新たなエントリを追加するためである。なお分岐先のキャッシュブロックのコピー32が同じバンクにある場合(S68のN)、バンク間参照テーブルの更新は必要ないためS70〜S76の処理は行わない。
エントリの有効、無効は基本的には上述したように、エントリの世代番号と当該エントリの分岐命令が属するバンクの現在の世代番号とを比較することにより判定する。判定に際して本実施の形態では、バンク間参照テーブル38の世代番号下位ビット欄74に記録された、各エントリの世代番号の最下位ビットと、当該エントリの分岐命令が属するバンク(以後、分岐元バンクと呼ぶ)の第1から第nの番号とを利用する。ここでバンクの番号は、各エントリの分岐命令アドレス欄72に記録された分岐命令のローカルアドレスから計算できる。
まず、現在新たなキャッシュブロックのコピー32の格納先となっているバンクを基準バンクとする。各バンクは無効化される際にその世代番号に1が加算されるため、基準バンクは、第1バンク30a〜第nバンク30nのうち最後に世代番号が増加したバンクである、。例えば図8の世代番号テーブル39が保持する値を例にとると、第2バンク30bが基準バンクである。このとき基準バンクである第2バンク30bより上流にある、すなわちバンクの番号が小さい第1バンク30aの世代番号は、基準バンクである第2バンク30bの世代番号と同一であり、下流にある、すなわちバンクの番号が大きい第3バンク30c、第4バンク30dの世代番号は、基準バンクである第2バンク30bの世代番号よりひとつ小さい。
この性質を利用すると、もしバンク間参照テーブル38にエントリされた分岐元バンクの番号が基準バンクの番号以下であれば、そのバンクの現在の世代番号は基準バンクの世代番号と同じであるため、世代番号下位ビット欄74に記録された値と、基準バンクの世代番号の最下位ビットが一致するエントリは有効であり、一致しなければ無効であると判断できる。また、もし分岐元バンクの番号が分岐先バンクの番号より大きければ、そのバンクの現在の世代番号は基準バンクの世代番号より一つ小さいため、世代番号下位ビット欄74に記録された値と、基準バンクの世代番号の最下位ビットが一致しないエントリは有効であり、一致すれば無効であると判断できる。
これらの判定処理を、無効エントリが検出されるまでエントリごとに繰り返す。これにより、エントリの世代番号とそのエントリに対応するバンクの現在の世代番号とを、世代番号テーブル39を検索せずに、基準バンクの世代番号とエントリの世代番号の最下位ビットのみで比較することができる。一方、各エントリに対応するバンクの現在の世代番号を世代番号テーブル39から検索して、世代番号下位ビット欄74に記録された値と直接比較してもよい。なお同一のバンク間参照テーブル38bについて前回検出された無効エントリの次のエントリから検索を行うことにより、検索処理を効率化することができる。
無効エントリが検出されたら(S72のY)、そのエントリの分岐命令アドレス欄72および世代番号下位ビット欄74を、現在実行中の分岐解決ルーチン起動命令が記述されているアドレスと、当該分岐解決ルーチン起動命令を含むキャッシュブロックのコピー32が格納されたバンクの現在の世代番号とでそれぞれ上書きすることによりバンク間参照テーブル38に登録する(S76)。無効エントリが検出されなかったら(S72のN)、今回追加するエントリを優先させ、登録済みのエントリのうちのいずれかを選択して上書きする。これに先立ち、選択したエントリの分岐命令アドレス欄72に記録されたアドレスに記述された分岐命令を分岐解決ルーチン起動命令に置き換える(S74)。そして新たなエントリをバンク間参照テーブル38に登録する(S76)。
続いて図7のS20において取得した、分岐先テーブル64の分岐種別欄58に記録された分岐の種別の識別情報に基づき、置き換える命令が分岐命令か関数呼び出し命令かを判断する(S78)。分岐命令であったら(S78のN)、分岐解決ルーチン起動命令を分岐命令に置き換える(S80)。関数呼び出し命令であったら(S78のY)、分岐解決ルーチン起動命令を関数呼出し命令に置き換える(S82)。関数呼び出し命令については次に説明する。以上の処理により、新たなキャッシュブロックのコピー32をあるバンク、第2バンク30bなどに格納した際のバンク間参照テーブル38bなどへの追加登録と、当該キャッシュブロックのコピー32への分岐命令への置き換えが実現される。
関数呼び出しは単なる分岐と異なり、元のプログラムへ戻る必要がある処理である。そのため図9のS82において分岐解決ルーチンを関数呼び出し命令に置き換えた場合、図7のS34において分岐先の命令へ分岐する処理は、分岐する直前に、関数から戻る先の命令列が存在する、呼び出し元のキャッシュブロック42のメインメモリ20内の格納領域の先頭アドレス、サイズ、戻る先の命令が記述されたアドレスの先頭アドレスからのオフセット値をレジスタ18に格納する処理を伴う。従って図9のS82で置き換える関数呼出し命令にはこれらの処理を実行する命令も含まれる。これらの値はキャッシュブロックのコピー32の分岐先テーブル64を参照することにより取得できる。
一方、呼び出した関数から処理を戻す分岐は、当該関数の呼び出し元が1つに定まらないため、これまで説明した分岐処理のように分岐先のローカルメモリ内でのアドレスを指定した分岐命令に置き換えることができない。関数から処理を戻す分岐ごとに、レジスタ18に格納した戻る先のキャッシュブロック42のメインメモリ20内のアドレスに基づきアドレス変換テーブル34を検索し、ローカルメモリ16内でのアドレスを取得してもよいが、本実施の形態ではリンクスタックを導入して処理効率を向上させる。すなわちリンクスタックは、関数呼び出し時に、分岐先のキャッシュブロックのコピー32から元のキャッシュブロックのコピー32内のローカルアドレスへ処理を戻すために参照されるスタックである。
また本実施の形態では、分岐先での処理中、戻る先の命令列を含むキャッシュブロックのコピー32が破棄されたりまた別の領域にロードしなおされている場合がある。このような場合、リンクスタックに格納した該当アドレスを無効化することにより、処理を戻す際に認識できるようにする。
図10は関数呼び出しおよび戻り処理時のリンクスタックの様子を模式的に示している。リンクスタック36a〜36eは、レジスタ18に格納される1つのリンクスタックの時系列変化を示している。キャッシュブロックのコピー32c〜32eは、関数呼び出しによって順次処理されるキャッシュブロックのコピー32であり、キャッシュブロックのコピー32cからキャッシュブロックのコピー32d、キャッシュブロックのコピー32eの順に呼び出される。なおリンクスタックは情報処理装置10で処理されるスレッドごとに生成してよいが、ここでは1つのリンクスタックのみ示している。
まずリンクスタック36aを初期状態とする。ここでは図示しないキャッシュブロックのコピー32内の、戻り先のアドレスが「E4」、「E3」、「E2」、「E1」の順で格納されている。この状態においてキャッシュブロック32cの処理を実行し、「call C1」なる命令によりキャッシュブロック32dのアドレス「C1」へ分岐する際(S10)、キャッシュブロック32cの戻り先のアドレス「R1」がリンクスタック36aに追加される(リンクスタック36b)。続いてキャッシュブロック32dの処理を実行し、「call C2」なる命令によりキャッシュブロック32eのアドレス「C2」へ分岐する際は(S12)、キャッシュブロック32dの戻り先のアドレス「R2」がリンクスタック36bに追加される(リンクスタック36c)。
次にキャッシュブロック32eの処理を実行し、「return」なる命令によりキャッシュブロック32dに戻る際は(S14)、リンクスタック36cを参照し、先頭のエントリから戻り先のアドレス「R2」を取得する。結果としてリンクスタック36dの状態になるため、キャッシュブロック32dの処理を実行し、「return」なる命令によりキャッシュブロック32cに戻る際は(S16)、リンクスタック36dを参照することによって先頭のエントリから戻り先のアドレス「R1」を取得できる。同図に示すように、リンクスタック36a〜36eの容量が不足した場合は、最も古いエントリを削除していく。
このような分岐処理中に、破棄されるキャッシュブロックのコピー32のアドレスがリンクスタック36a〜36e中にある場合は、当該アドレスに無効アドレスを代入する。ここで無効アドレスは命令が配置されることがない任意の値である。例えばキャッシュブロックのコピー32eを実行中に、戻り先のキャッシュブロックのコピー32dを破棄する場合、リンクスタック36cの先頭エントリにある「R2」を「0」などとする。これにより、戻り先のアドレスを含むキャッシュブロックのコピー32が破棄されたことを識別できる。
戻り先のキャッシュブロックのコピー32が破棄された場合は、分岐解決ルーチンを起動することにより、関数呼び出し前にレジスタ18に格納した情報に基づきメインメモリ20から再ロードを行う。また、リンクスタックに無効アドレスを代入する代わりに、分岐解決ルーチンを格納したメインメモリ20内またはローカルメモリ16内のアドレスを代入してもよい。そして処理を当該アドレスに分岐させることにより、分岐解決ルーチンを直接起動する。これにより無効アドレスか否かによってキャッシュブロックのコピー32の破棄の判定を行う処理を省略することができる。
図11は上述のようなリンクスタック36a〜36eを用いて呼び出した関数から戻る処理手順を示すフローチャートである。まず図10に示すように、例えばリンクスタック36cの先頭エントリを取得する(S40)。このとき、取得した先頭エントリがローカルメモリ16内のキャッシュブロックのコピー32が格納されるアドレス範囲にあるか否かを確認する(S42)。アドレス範囲にあれば(S42のY)、戻り先の命令列を含むキャッシュブロックのコピー32が破棄されていなかったとして、取得したアドレスに記述された戻り先の命令へ分岐する(S44)。
先頭エントリが「0」などアドレス範囲になければ(S42のN)、まず該当するキャッシュブロックのコピー32がローカルメモリ16に存在するかどうかを、レジスタ18に格納したメインメモリ20内のアドレスに基づきアドレス変換テーブル34を検索することにより確認する(S46)。アドレス範囲になくても、一度破棄されたキャッシュブロックのコピー32が再度ロードされている場合や、リンクスタックの容量不足でエントリが削除されてしまったが実体のキャッシュブロックのコピー32は存在する場合があるためである。このようにアドレス変換テーブル34に該当エントリが存在する場合は(S48のY)、アドレス変換テーブル34から当該キャッシュブロックのコピー32のローカルメモリ16内のアドレスを取得し、レジスタ18に記録したオフセット値に基づき戻り先の命令へ分岐する(S50)。
アドレス変換テーブル34に該当エントリが存在しない場合は(S48のN)、当該キャッシュブロックのコピー32は破棄され、再ロードもされていないと判断し、ロード処理を開始する。具体的には図7のS24、S26、S28、S30、S34と同様、バンクの未使用領域の容量確認(S52)、必要に応じてバンクの無効化処理(S54)、アドレス変換テーブル34への登録(S56)、キャッシュブロック42のロード(S58)、戻り先の命令への分岐(S60)を行う。これにより、戻り先の命令を含むキャッシュブロックのコピー32が一旦破棄されていても、効率的に検索を行い必要な場合にのみロード処理を行うことができる。
図12はあるバンク、例えば第2バンク30bの無効化処理を行う手順を示すフローチャートである。まず無効化する第2バンク30bのバンク間参照テーブル38bにおいて有効なエントリを抽出し、分岐命令アドレス欄72に記録されたアドレスに記述された分岐命令を分岐解決ルーチン起動命令に置き換える(S90)。エントリの有効、無効の判断は図9で説明したのと同様の原理で行うことができる。次に当該バンク間参照テーブル38bの全エントリの分岐命令アドレス欄72と世代番号下位ビット欄74に、第2バンク30b内の任意のアドレスと世代番号の最下位ビットをそれぞれ書き込むことにより、全エントリを無効化する(S92)。
さらに、アドレス変換テーブル34において、破線矢印74で示した、ロードされた順番によるエントリの連結を辿り、無効化する第2バンク30bに含まれるキャッシュブロックのコピー32を示すエントリを削除する(S94)。具体的には、削除するエントリへのポインタを保持するエントリにおいて、当該ポインタをアドレス以外の定数とする。そして世代番号テーブル39の第2バンク30bに対応する欄の世代番号を1つ増加させる(S96)。最後に、リンクスタック36a〜36e中に無効化する第2バンク30b内のアドレスが含まれるときは、上述のようにそのアドレスを「0」などとして無効化する(S98)。以上の処理により第2バンク30bの無効化を分岐解決ルーチンに反映させることができる。
以上述べた本実施の形態によれば、プログラムをローカルメモリに一度にロードする単位であるキャッシュブロックに分割し、プロセッサはローカルメモリに格納されたキャッシュブロックを参照することにより処理を実行する。これによりメインメモリに格納されたプログラムへアクセスするより高速にプログラムを参照することができ、全体的な処理時間を削減することができる。
プログラムの分割は、サイズや使用頻度などに基づきコンパイラが自動で行う。またコンパイル時に、キャッシュブロック間の分岐をローカルメモリ内で実現するための分岐解決ルーチン起動命令を埋め込む。そしてプログラムの実行時には当該分岐解決ルーチンを起動させることにより、必要に応じてキャッシュブロックをメインメモリからロードし、ローカルメモリ内のアドレスで分岐命令を生成して書き込む。これらの処理がコンパイラによって行われるため、プログラムをモジュールに分割したり、各モジュールをローカルメモリにロードするためのプログラムを用意したりするプログラマの手間を省略でき、少ない労力でプログラムへの高速アクセスを実現できる。
さらに本実施の形態では、バンクごとにキャッシュブロックの破棄管理を行う。新たなキャッシュブロックをロードするためにあるバンクを無効化する際は、バンク間参照テーブルを利用することにより、無効化されるバンクに格納されたキャッシュブロックへ分岐する分岐元のキャッシュブロックの分岐命令の位置を全て特定し、それを再度分岐解決ルーチン起動命令に戻す。キャッシュラインに格納したデータに相互関係のない通常のキャッシュメモリと異なり、本実施のローカルメモリに格納されるキャッシュブロックは、相互に複雑な前後関係を有する。そして一度ロードしたキャッシュブロックを破棄することは、ローカルメモリ内で一度確立した前後関係を壊すことであり、前後に処理されるキャッシュブロックのプログラム自体に影響を与える。キャッシュブロックを世代番号という観点からバンクごとに管理することにより、そのような複雑な状況を効率よく制御することができる。
また、キャッシュブロックには必ず、当該キャッシュブロックに含まれる分岐処理の分岐先のキャッシュブロックの情報である分岐先テーブルを添付する。分岐先テーブルには分岐先のキャッシュブロックのメインメモリ内での格納アドレスが含まれる。そしてメインメモリ内でのアドレスとローカルメモリ内でのコピーのアドレスとの対応を示すアドレス変換テーブルをローカルメモリ内に用意することにより、メインメモリ内でのアドレスをキャッシュブロックの識別情報として、常時ローカルメモリ内でのコピーの有無や格納領域を特定することができる。アドレス変換テーブルはハッシュテーブルの構造をとることにより、より効率のよい検索が可能となる。また当該ハッシュテーブル構造によって、ローカルメモリにロードした順序を容易に辿ることができ、無効化したバンクに格納されたキャッシュブロックのエントリを効率的に削除することができる。
さらに関数呼び出し処理において関数の処理から元の処理へ戻る際は、分岐解決ルーチンを分岐命令に置き換える処理に代え、スタックを利用する。これにより戻る先を固定できない関数呼び出し処理においても、プログラムの自動的な分割、ローカルメモリへのロード処理などを他の分岐処理と同様に行うことができ、上述のような効果を得ることができる。
以上、本発明を実施の形態をもとに説明した。上記実施の形態は例示であり、それらの各構成要素や各処理プロセスの組合せにいろいろな変形例が可能なこと、またそうした変形例も本発明の範囲にあることは当業者に理解されるところである。
例えば本実施の形態では、プログラムを分割したキャッシュブロックをメインメモリからローカルメモリにロードする態様を示したが、前後関係や依存関係を伴い参照されるデータであればプログラムでなくてもよく、一連のデータストリームのセグメントや、フレーム間予測符号化された動画像データの各フレームデータなどでもよい。
本実施の形態における情報処理装置の構造を示す図である。 本実施の形態においてローカルメモリとメインメモリに格納されるデータの構成を模式的に示す図である。 本実施の形態においてキャッシュブロックを形成するとともに分岐解決ルーチンを実行するコンパイラの構造を示す図である。 本実施の形態においてメインメモリに格納された2つのキャッシュブロックの構造を模式的に示す図である。 本実施の形態においてローカルメモリに格納された2つのキャッシュブロックのコピーとアドレス変換テーブルの構造を模式的に示す図である。 本実施の形態におけるアドレス変換テーブルの構造を模式的に示す図である。 本実施の形態における分岐解決ルーチンの処理手順を示すフローチャートである。 本実施の形態における第1バンク、第2バンク、第3バンク、第4バンク、バンク間参照テーブル、および世代番号テーブルの関係を模式的に示す図である。 本実施の形態における分岐解決ルーチン起動命令置き換え処理の手順を示すフローチャートである。 本実施の形態における関数呼び出しおよび戻り処理時のリンクスタックの様子を模式的に示す図である。 本実施の形態の関数呼び出し処理において呼び出した関数から戻る処理手順を示すフローチャートである。 本実施の形態においてバンクの無効化処理を行う手順を示すフローチャートである。
符号の説明
10 情報処理装置、 12 プロセッサユニット、 14 プロセッサ、 16 ローカルメモリ、 18 レジスタ、 20 メインメモリ、 22 記憶装置、 24 入出力装置、 30a 第1バンク、 30b 第2バンク、 30c 第3バンク、 30d 第4バンク、 32 キャッシュブロックのコピー、 34 アドレス変換テーブル、 36a リンクスタック、 38 バンク間参照テーブル、 39 世代番号テーブル、 42 キャッシュブロック、 46 分岐先テーブル、 100 コンパイラ、 102 コンパイル部、 104 プログラム分割部、 106 命令埋め込み部、 108 分岐先情報付加部、 110 分岐解決ルーチン実行部。

Claims (6)

  1. 参照順につながりを有する複数のデータブロックを格納したメインメモリと、
    前記複数のデータブロックのうち少なくとも一部のデータブロックをコピーして格納したローカルメモリと、
    前記参照順に基づき前記ローカルメモリにコピーされた前記データブロックを順次参照しながら処理を実行し、必要に応じて新たな前記データブロックを前記メインメモリから前記ローカルメモリにコピーするプロセッサと、
    を備え、
    前記ローカルメモリにおける前記データブロックを格納する領域は複数の区画を備え、
    前記プロセッサは、新たなデータブロックをコピーするための前記ローカルメモリ内の格納領域が不足した場合、以前にコピーした前記データブロックを前記区画ごとに破棄して新たな格納領域を確保し、コピーした前記データブロックごとに、当該データブロックの後に参照されるデータブロックの格納領域に係る参照先情報を前記ローカルメモリに記録することにより、前記データブロックを順次参照することを特徴とする情報処理装置。
  2. 前記プロセッサは、前記区画ごとに、当該区画に格納された前記データブロックの前に参照されるデータブロックに係る参照元情報を前記ローカルメモリにさらに記録し、
    以前にコピーした前記データブロックを前記区画ごとに破棄する際、前記参照元情報を参照して破棄されるデータブロックの前に参照されるデータブロックを特定し、前記前に参照されるデータブロックの前記参照先情報における、破棄されるデータブロックの格納領域に係る情報を無効とする処理を行うことを特徴とする請求項1に記載の情報処理装置。
  3. 前記プロセッサは、
    前記区画ごとに、当該区画に格納された前記データブロックが破棄された回数を前記区画の世代番号として前記ローカルメモリにさらに記録し、
    前記参照元情報に、前記前に参照されるデータブロックに係る情報が登録された際の、前記前に参照されるデータブロックが格納された前記区画の世代番号に係る情報をさらに記録し、
    前記参照元情報に含まれる、前記前に参照されるデータブロックが属する区画の登録された際の世代番号と、当該区画の現在の世代番号とが異なるとき、前記参照元情報における当該前に参照されるデータブロックに係る情報を無効とすることを特徴とする請求項2に記載の情報処理装置。
  4. 前記参照元情報における前記前に参照されるデータブロックが格納された前記区画の世代番号に係る情報は、当該世代番号の最下位ビットであり、
    前記プロセッサは、前記前に参照されるデータブロックが属する区画の、前記登録された際の世代番号と、当該区画の現在の世代番号とが異なるか否かを、前記登録された際の世代番号の最下位ビットを参照して判定することを特徴とする請求項3に記載の情報処理装置。
  5. ローカルメモリのアドレスを指定した分岐命令が記述された分岐元のプログラムデータと、当該分岐命令によって指定されたアドレスを含む分岐先のプログラムデータとをローカルメモリに格納するとともに、前記分岐元のプログラムデータのローカルメモリ内の格納領域に係る情報を、前記分岐先のプログラムデータに対応付けて記録するステップと、
    前記分岐先のプログラムデータを破棄する際、前記分岐元のプログラムデータのローカルメモリ内の格納領域に係る情報に基づき前記分岐元のプログラムデータを特定し、当該分岐元のプログラムデータに記述された分岐命令において指定された前記アドレスを無効化するステップと、
    を含むことを特徴とする情報処理方法。
  6. ローカルメモリのアドレスを指定した分岐命令が記述された分岐元のプログラムデータと、当該分岐命令によって指定されたアドレスを含む分岐先のプログラムデータとをローカルメモリに格納するとともに、前記分岐元のプログラムデータのローカルメモリ内の格納領域に係る情報を、前記分岐先のプログラムデータに対応付けて記録する機能と、
    前記分岐先のプログラムデータを破棄する際、前記分岐元のプログラムデータのローカルメモリ内の格納領域に係る情報に基づき前記分岐元のプログラムデータを特定し、当該分岐元のプログラムデータに記述された分岐命令において指定された前記アドレスを無効化する機能と、
    をコンピュータに実現させることを特徴とするコンピュータプログラム。
JP2007075630A 2007-03-22 2007-03-22 情報処理装置および情報処理方法 Active JP4294059B2 (ja)

Priority Applications (2)

Application Number Priority Date Filing Date Title
JP2007075630A JP4294059B2 (ja) 2007-03-22 2007-03-22 情報処理装置および情報処理方法
US12/051,287 US8700851B2 (en) 2007-03-22 2008-03-19 Apparatus and method for information processing enabling fast access to program

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
JP2007075630A JP4294059B2 (ja) 2007-03-22 2007-03-22 情報処理装置および情報処理方法

Publications (2)

Publication Number Publication Date
JP2008234491A true JP2008234491A (ja) 2008-10-02
JP4294059B2 JP4294059B2 (ja) 2009-07-08

Family

ID=39775880

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2007075630A Active JP4294059B2 (ja) 2007-03-22 2007-03-22 情報処理装置および情報処理方法

Country Status (2)

Country Link
US (1) US8700851B2 (ja)
JP (1) JP4294059B2 (ja)

Families Citing this family (8)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US10055251B1 (en) 2009-04-22 2018-08-21 The Trustees Of Columbia University In The City Of New York Methods, systems, and media for injecting code into embedded devices
WO2013176711A2 (en) * 2012-02-15 2013-11-28 The Trustees Of Columbia University In The City Of New York Methods, systems, and media for inhibiting attacks on embedded devices
GB2493340A (en) * 2011-07-28 2013-02-06 St Microelectronics Res & Dev Address mapping of boot transactions between dies in a system in package
CN103513958B (zh) * 2012-06-27 2017-01-25 上海芯豪微电子有限公司 高性能指令缓存系统和方法
US9355052B2 (en) * 2013-08-23 2016-05-31 International Business Machines Corporation Dynamically resizing direct memory access (DMA) windows
JP5808450B1 (ja) * 2014-04-04 2015-11-10 ファナック株式会社 マルチコアプロセッサを使用して逐次プログラムを実行する制御装置
CN105740164B (zh) * 2014-12-10 2020-03-17 阿里巴巴集团控股有限公司 支持缓存一致性的多核处理器、读写方法、装置及设备
CN112631757B (zh) * 2020-12-31 2021-07-13 成都卓讯云网科技有限公司 一种ddr4多用户访问的调度方法和设备

Family Cites Families (10)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US4951193A (en) * 1986-09-05 1990-08-21 Hitachi, Ltd. Parallel computer with distributed shared memories and distributed task activating circuits
US5761716A (en) * 1996-05-01 1998-06-02 International Business Machines Corporation Rate based memory replacement mechanism for replacing cache entries when the cache is full
US6301641B1 (en) * 1997-02-27 2001-10-09 U.S. Philips Corporation Method for reducing the frequency of cache misses in a computer
US6098152A (en) * 1997-10-17 2000-08-01 International Business Machines Corporation Method and apparatus for miss sequence cache block replacement utilizing a most recently used state
US6418530B2 (en) * 1999-02-18 2002-07-09 Hewlett-Packard Company Hardware/software system for instruction profiling and trace selection using branch history information for branch predictions
WO2004025476A1 (en) * 2002-09-16 2004-03-25 Tigi Corporation Storage system architectures and multiple caching arrangements
US7107400B2 (en) * 2003-03-31 2006-09-12 International Business Machines Corporation System, apparatus, and process for evaluating projected cache sizes
US7124128B2 (en) * 2003-06-17 2006-10-17 International Business Machines Corporation Method, system, and program for managing requests to tracks subject to a relationship
US20070204107A1 (en) * 2004-02-24 2007-08-30 Analog Devices, Inc. Cache memory background preprocessing
US7735074B2 (en) * 2005-10-17 2010-06-08 Oracle International Corporation Code outlining without trampolines

Also Published As

Publication number Publication date
US8700851B2 (en) 2014-04-15
JP4294059B2 (ja) 2009-07-08
US20080235460A1 (en) 2008-09-25

Similar Documents

Publication Publication Date Title
JP4339371B2 (ja) 情報処理装置および情報処理方法
JP4294059B2 (ja) 情報処理装置および情報処理方法
US9244883B2 (en) Reconfigurable processor and method of reconfiguring the same
JP4567789B2 (ja) Tlbロックインジケータ
TWI638311B (zh) Data processing method and processor
US7219185B2 (en) Apparatus and method for selecting instructions for execution based on bank prediction of a multi-bank cache
US20080235477A1 (en) Coherent data mover
US20110167222A1 (en) Unbounded transactional memory system and method
US7363435B1 (en) System and method for coherence prediction
GB2443298A (en) Cache memory with tag memory bypass circuit
US7500073B1 (en) Relocation of virtual-to-physical mappings
JP2009205586A (ja) コンパイラおよびプログラム分割方法
US7562204B1 (en) Identifying and relocating relocatable kernel memory allocations in kernel non-relocatable memory
US10019258B2 (en) Hardware assisted software versioning of clustered applications
WO2013084315A1 (ja) 演算処理装置、及び、演算処理装置の制御方法
US6810473B2 (en) Replacement algorithm for a replicated fully associative translation look-aside buffer
JP2006318471A (ja) データ処理におけるメモリキャッシング
JP2002032264A (ja) キャッシュメモリ装置及びそれを用いた中央演算処理装置
Smith Design of CPU cache memories
JP4785777B2 (ja) コンパイラ、コンパイル方法、およびコンピュータプログラム
TW201301032A (zh) 高性能緩存方法和裝置
JP2008009857A (ja) キャッシュ制御回路およびプロセッサシステム
JP6222100B2 (ja) データ格納装置、データ格納方法およびプログラム
JPWO2009057762A1 (ja) マルチプロセッサ並びにそのキャッシュ同期制御方法及びプログラム
JP3006204B2 (ja) 情報処理装置

Legal Events

Date Code Title Description
A977 Report on retrieval

Free format text: JAPANESE INTERMEDIATE CODE: A971007

Effective date: 20090306

TRDD Decision of grant or rejection written
A01 Written decision to grant a patent or to grant a registration (utility model)

Free format text: JAPANESE INTERMEDIATE CODE: A01

Effective date: 20090407

A01 Written decision to grant a patent or to grant a registration (utility model)

Free format text: JAPANESE INTERMEDIATE CODE: A01

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20090407

FPAY Renewal fee payment (event date is renewal date of database)

Free format text: PAYMENT UNTIL: 20120417

Year of fee payment: 3

R150 Certificate of patent or registration of utility model

Ref document number: 4294059

Country of ref document: JP

Free format text: JAPANESE INTERMEDIATE CODE: R150

Free format text: JAPANESE INTERMEDIATE CODE: R150

FPAY Renewal fee payment (event date is renewal date of database)

Free format text: PAYMENT UNTIL: 20120417

Year of fee payment: 3

FPAY Renewal fee payment (event date is renewal date of database)

Free format text: PAYMENT UNTIL: 20130417

Year of fee payment: 4

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

FPAY Renewal fee payment (event date is renewal date of database)

Free format text: PAYMENT UNTIL: 20130417

Year of fee payment: 4

FPAY Renewal fee payment (event date is renewal date of database)

Free format text: PAYMENT UNTIL: 20140417

Year of fee payment: 5

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250