(57)【要約】【課題】処理量を効果的に減らす。【解決手段】本方法、および、本装置は、処理環境における扱われる強調された命令のために供給される。プログラム参照は、１またはそれ以上のプログラムモジュールに関係づけられていてもよい。プログラムモジュールは、ローカルメモリに読み込まれ、コードやデータなどの情報は、プログラム参照にもとづいて、プログラムモジュールから取得される。新規のプログラムモジュールは、存在するプログラムモジュールにもとづいて形成される。プログラムモジュール内における直接参照を生成し、プログラムモジュール間の間接参照を回避して、新規プログラムモジュールを最適化する。プログラムモジュールは、挿入個所にしたがってローカルメモリ内に事前に読み出されてもよい。挿入個所は、統計的に決定される。本発明は、特に、メモリ量に制限のあるマルチプロセッサシステムに有益である。【選択図】図１
2006107497.tif 000002
【特許請求の範囲】
【請求項１】
ローカルメモリを有する処理部を制御する方法であって、
プログラム参照情報に関係付けられたプログラムモジュールが前記ローカルメモリに読み込まれたことを判別するステップと、
前記プログラムモジュールが前記ローカルメモリに読み込まれていない場合、前記ローカルメモリに対し、前記プログラムモジュールを読み込むステップと、
前記プログラム参照情報にもとづいて、前記プログラムモジュールから情報を取得するステップと、
を含むことを特徴とする制御方法。
【請求項２】
前記プログラムモジュールから取得される情報は、データとコードのうち少なくとも一方を含むことを特徴とする請求項１に記載の制御方法。
【請求項３】
前記プログラムモジュールは、主記憶部から前記ローカルメモリに読み込まれるオブジェクトモジュールを含むことを特徴とする請求項１または２のいずれかに記載の制御方法。
【請求項４】
前記プログラム参照情報は、前記プログラムモジュール内への直接参照情報を含むことを特徴とする請求項１から３のいずれかに記載の制御方法。
【請求項５】
前記プログラム参照情報は、第２プログラムモジュールへの間接参照情報を含むことを特徴とする請求項１から４のいずれかに記載の制御方法。
【請求項６】
前記プログラムモジュールは第１プログラムモジュールであり、
当該制御方法は、前記第１プログラムモジュールと第２プログラムモジュールを主記憶部に記憶するステップをさらに含み、
前記読み込むステップは、前記主記憶部から前記ローカルメモリに第１プログラムモジュールを読み込ませることを特徴とする請求項１から５のいずれかに記載の制御方法。
【請求項７】
前記プログラム参照情報は、前記第１プログラムモジュール内への直接参照情報を含むことを特徴とする請求項６に記載の制御方法。
【請求項８】
前記プログラム参照情報は、第２プログラムモジュールへの間接参照情報を含むことを特徴とする請求項６または７のいずれかに記載の制御方法。
【請求項９】
前記プログラム参照情報は前記第２プログラムモジュールから得られ、
当該制御方法は、
前記第２プログラムモジュールが前記ローカルメモリから読み込まれていることを判別するステップと、
前記第２プログラムモジュールが前記ローカルメモリから読み込まれていない場合、前記ローカルメモリに前記第２プログラムモジュールを読み込むステップと、
前記第１プログラムモジュールに前記プログラム参照情報を供給するステップと、
をさらに含むことを特徴とする請求項８に記載の制御方法。
【請求項１０】
ローカルメモリを有する処理部を制御する方法であって、
主記憶部から第１プログラムモジュールを取得するステップと、
前記主記憶部から第２プログラムモジュールを取得するステップと、
前記第１プログラムモジュールにて使用されるプログラム参照情報が、前記第２プログラムモジュールへの間接参照情報を含むことを判別するステップと、
前記プログラム参照情報が前記間接参照情報を含む場合、前記第１プログラムモジュールの少なくとも一部分を含む新規プログラムモジュールを形成して、前記プログラム参照情報を前記新規プログラムモジュールの複数の部分間における直接参照情報とするステップと、
を含むことを特徴とする制御方法。
【請求項１１】
前記新規プログラムモジュールを前記ローカルメモリに読み込むステップをさらに含むことを特徴とする請求項１０に記載の制御方法。
【請求項１２】
前記新規プログラムモジュールを形成する前に、前記第１プログラムモジュールと第２プログラムモジュールを前記ローカルメモリに読み込ませることを特徴とする請求項１０または１１のいずれかに記載の制御方法。
【請求項１３】
前記第１プログラムモジュールは第１コード関数を含み、かつ、前記第２プログラムモジュールは第２コード関数を含み、かつ、前記新規プログラムモジュールは、前記第１コード関数と第２コード関数のうち少なくとも一方を含んで形成されることを特徴とする請求項１０から１２のいずれかに記載の制御方法。
【請求項１４】
前記第１プログラムモジュールは、データ群をさらに含み、前記新規プログラムモジュールは、前記データ群をさらに含んで形成されることを特徴とする請求項１０から１３のいずれかに記載の制御方法。
【請求項１５】
前記プログラム参照情報は前記第２プログラムモジュールへの間接参照情報であって、
当該制御方法は、
前記第１プログラムモジュールにて使用される前記プログラム参照情報にもとづいて、前記新規プログラムモジュールにて使用される新規プログラム参照情報を決定するステップと、をさらに含み、
前記新規プログラムモジュールは、前記第１プログラムモジュールの少なくとも一部分と、前記第２プログラムモジュールの少なくとも一部分とを含んで形成されることにより、前記新規プログラム参照情報は、前記新規プログラムモジュールへの直接参照情報となることを特徴とする請求項１０から１４のいずれかに記載の制御方法。
【請求項１６】
ローカルメモリを有する処理部における処理方法であって、
前記ローカルメモリに読み込まれている第１プログラムモジュールを実行するステップと、
第２プログラムモジュールの挿入個所を決定するステップと、
前記第１プログラムモジュールの実行中に、前記ローカルメモリに第２プログラムモジュールを読み込むステップと、
前記第２プログラムモジュールの実行を開始するために、予測実行時間を決定するステップと、
前記第２プログラムモジュールの読み込みが完了したことを判別するステップと、
前記第１プログラムモジュールの実行が終了した後に、前記第２プログラムモジュールを実行するステップと、
を含むことを特徴とする処理方法。
【請求項１７】
読み込みが完了していない場合、前記第２プログラムモジュールの実行を遅延させるステップと、をさらに含むことを特徴とする請求項１６に記載の処理方法。
【請求項１８】
前記遅延させるステップは、読み込みが完了するまで、１もしくはそれ以上のＮＯＰ（Ｎｏ  Ｏｐｅｒａｔｉｏｎ）処理を実行するステップを含むことを特徴とする請求項１７に記載の処理方法。
【請求項１９】
前記挿入個所は、統計的に決定されることを特徴とする請求項１６から１８のいずれかに記載の処理方法。
【請求項２０】
前記挿入個所の有効性は、実行時の状態にもとづいて決定されることを特徴とする請求項１６から１９のいずれかに記載の処理方法。
【請求項２１】
プログラムモジュールを記憶できるローカルメモリと、
プログラム参照情報とプログラムモジュールとを関係付け、前記プログラムモジュールが前記ローカルメモリに現在読み込まれていることを判別し、前記ローカルメモリに現在読み込まれていない場合に前記プログラムモジュールを前記ローカルメモリに読み込み、前記プログラム参照情報にもとづいて前記プログラムモジュールから情報を取得する管理機能を実行する論理回路を有する、前記ローカルメモリに接続されたプロセッサと、
を備えることを特徴とする処理システム。
【請求項２２】
前記ローカルメモリは、前記プロセッサに内蔵されていることを特徴とする請求項２１に記載の処理システム。
【請求項２３】
プログラムモジュールを記憶できるローカルメモリと、
第１プログラムモジュールと第２プログラムモジュールを主記憶装置に記憶し、前記第１プログラムモジュールと第２プログラムモジュールのいずれかを選択して前記主記憶装置から前記ローカルメモリに読み出し、前記選択されたプログラムモジュールとプログラム参照情報を関係付け、前記プログラム参照情報にもとづいて情報を取得する管理機能を実行する論理回路を有する、前記ローカルメモリに接続されたプロセッサと、
を備えることを特徴とする処理システム。
【請求項２４】
前記主記憶装置は、半導体基板上に備えられた記憶装置を含むことを特徴とする請求項２３に記載の処理システム。
【請求項２５】
前記ローカルメモリは、前記プロセッサと統合されていることを特徴とする請求項２３または２４のいずれかに記載の処理システム。
【請求項２６】
プログラムモジュールを記憶できるローカルメモリと、
主記憶装置から第１プログラムモジュールを取得し、前記主記憶装置から第２プログラムモジュールを取得し、前記第１プログラムモジュールに使用される第１プログラム参照情報を決定し、前記第１プログラムモジュールの少なくとも一部を含む新規プログラムモジュールを形成して、前記第１プログラム参照情報を前記新規プログラムモジュール内の直接参照情報とし、前記ローカルメモリに前記新規プログラムモジュールを読み込ませる管理機能を実行する論理回路を有する、前記ローカルメモリに接続されたプロセッサと、
を備えることを特徴とする処理システム。
【請求項２７】
プログラムモジュールを記憶できるローカルメモリと、
前記ローカルメモリに接続されたプロセッサとを備え、
前記プロセッサは、第１プログラムモジュールの挿入個所を決定し、前記プロセッサによる第２プログラムモジュールの実行中に前記第１プログラムモジュールを前記ローカルメモリに読み込ませ、前記第２プログラムモジュールの実行後であって、かつ、前記読み込みが完了した後に、前記第１プログラムモジュールを実行するための管理機能を実行する論理回路を有することを特徴とする処理システム。
【請求項２８】
プログラム参照情報によって関係づけられたプログラムモジュールを特定し、
前記プログラムモジュールがローカルメモリに現在読み込まれていることを判別し、
前記プログラムモジュールが前記ローカルメモリに現在読み込まれていない場合、前記プログラムモジュールを前記ローカルメモリに読み込み、
前記プログラム参照情報にもとづいて、前記プログラムモジュールから情報を取得する
ことをプロセッサに実行させるためのプロセッサにて使用されるプログラムを記憶する記憶媒体。
【請求項２９】
バスを含む処理要素と、
処理部と、
前記バスを介して前記処理部と接続された少なくとも１つの副処理部と、
を備え、
前記処理部と前記少なくとも１つの副処理部のうち少なくとも一方は、プログラム参照情報は第１プログラムモジュールに属することを判別し、ローカルメモリに前記第１プログラムモジュールを読み込み、前記プログラム参照情報にもとづいて前記第１プログラムモジュールから情報を取得するように機能することを特徴とする処理システム。
【請求項３０】
ユーザ入力部と、
表示装置を装着するための表示インターフェイスと、
プログラムモジュールを記憶できるローカルメモリと、
前記ローカルメモリに接続されるプロセッサとを備え、
前記プロセッサは、１またはそれ以上の処理要素を有し、前記処理要素のうち少なくとも１つの処理要素はプログラム参照情報が第１プログラムモジュールに属しているかを判別し、前記ローカルメモリに前記第１プログラムモジュールを読みこみ、前記プログラム参照情報にもとづいて前記第１プログラムモジュールから情報を取得する管理機能を実行する論理回路を含むことを特徴とするコンピュータ処理システム。
【請求項３１】
通信ネットワークを介して他のコンピュータ処理システムと接続されている複数のコンピュータ処理システムを備えるコンピュータのネットワークであって、
前記コンピュータ処理システムは、
ユーザ入力部と、
表示装置を装着するためのインターフェイスと、
プログラムモジュールを記憶できるローカルメモリと、
前記ローカルメモリに接続されるプロセッサとを備え、
前記プロセッサは、１またはそれ以上の処理要素を有し、前記処理要素のうち少なくとも１つの処理要素はプログラム参照情報が第１プログラムモジュールに属しているかを判別し、前記ローカルメモリに前記第１プログラムモジュールを読みこみ、前記プログラム参照情報にもとづいて前記第１プログラムモジュールから情報を取得する管理機能を実行する論理回路を含むことを特徴とするコンピュータのネットワーク。
【請求項３２】
プログラム参照情報によって関係づけられたプログラムモジュールを特定し、
前記プログラムモジュールがローカルメモリに現在読み込まれていることを判別し、
前記プログラムモジュールが前記ローカルメモリに現在読み込まれていない場合、前記プログラムモジュールを前記ローカルメモリに読み込み、
前記プログラム参照情報にもとづいて、前記プログラムモジュールから情報を取得する
ことをプロセッサに実行させるためのプログラム。
【請求項３３】
第１プログラムモジュールと第２プログラムモジュールを主記憶装置に記憶し、
プログラム参照情報と関係付けられた前記第１プログラムモジュールを前記主記憶装置から、プロセッサに関係付けられたローカルメモリに読み出し、
前記プログラム参照情報にもとづいて情報を取得することを前記プロセッサに実行させるためのプログラム。
【請求項３４】
主記憶装置から第１プログラムモジュールを取得し、
前記主記憶装置から第２プログラムモジュールを取得し、
第１プログラムモジュールにて使用されるプログラム参照情報が前記第２プログラムモジュールへの間接参照情報を含むことを判別し、
前記プログラム参照情報が前記間接参照情報を含む場合、少なくとも第１プログラムモジュールの一部分を含む新規プログラムモジュールを形成して、前記プログラム参照情報を前記新規プログラムモジュールの部分間における直接参照情報とすることをプロセッサに実行させるためのプログラム。
【請求項３５】
プロセッサに関係付けられたローカルメモリに読み込まれた第１プログラムモジュールを実行し、
第２プログラムモジュールの挿入個所を決定し、
前記第１プログラムモジュールの実行中に、前記ローカルメモリに第２プログラムモジュールを読み込み、
前記第２プログラムモジュールの実行を開始するための予測実行時間を決定し、
前記第２プログラムモジュールの読み込みが完了したことを判別し、
前記第１プログラムモジュールの実行が終了した後に、前記第２プログラムモジュールを実行することをプロセッサに実行させるためのプログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、一般的なコンピュータのプログラムの実行に関する。特に、オブジェクトモジュールにしたがって、プロセッサのローカルメモリにプログラムモジュールを読み込み、また、プログラムモジュールを操作することによって、プログラムの実行を改良するための制御方法、処理方法、またはそれらを利用した処理システム、コンピュータ処理システム、記憶媒体、コンピュータのネットワークに関する。
【背景技術】
【０００２】
コンピュータシステムは、より複雑さが増してきており、そのサイズの縮小化と製造コストの低減をしつつ、高い処理スピードを達成している。これらの進歩は、多くのアプリケーション、リアルタイムに行なうマルチメディアゲーム、処理量の多いアプリケーションにとって重要である。しばしば、コンピュータシステムは、マルチプロセッサを搭載している。マルチプロセッサは、処理効率を上げるために、複数のプロセッサを含み、それらが並列に、もしくは、協調して、処理を制御する。
【０００３】
通常、プロセッサ、もしくは、複数のプロセッサは、コードおよび／またはデータ（これらを総称して「情報」という）を扱う。情報は、典型的には、主記憶装置に記憶されている。主記憶装置は、例えば、ダイナミックランダムアクセスメモリ（Ｄｙｎａｍｉｃ  Ｒａｎｄｏｍ  Ａｃｃｅｓｓ  Ｍｅｍｏｒｙ。以下、「ＤＲＡＭ」と略称する。）である。ＤＲＡＭはプロセッサを含むチップから物理的に離れている。主記憶装置が、物理的もしくは論理的に、プロセッサと離れている場合、それらは、大きな遅延（ｈｉｇｈ  ｌａｔｅｎｃｙ。）を有する。大きな遅延とは、例えば、主記憶装置に含まれる情報にアクセスする際に要求される付加的な数１０ミリ秒もしくは数１００ミリ秒の時間をいう。この大きな遅延は、処理に悪影響を与える。なぜなら、プロセッサは、主記憶装置から必要な情報が転送されるまで、空処理もしくは停止処理を行う必要があるからである。
【０００４】
大きな遅延の問題を処置するために、多くのコンピュータシステムは、キャッシュメモリを備えている。キャッシュメモリは、プロセッサと主記憶装置の間に備えられた一時的な記憶装置である。キャッシュメモリは、一般的に、主記憶装置と比べて小さな処理遅延を有する。しかし、キャッシュメモリはプロセッサより小さな領域しか持たない。キャッシュメモリが使用される場合、キャッシュメモリは、繰り返しアクセスされるデータを一時的に記憶することによって、プロセッサの性能を改良させる。キャッシュメモリの有用性は、アクセスの局在性による。例えば、９０％の時間がデータの１０％のアクセスに費やされるといった“９  ＴＯ  １”の規則を使って、主記憶装置または外部の記憶装置から少量のデータを検索することは、多くの時間が少量のデータのアクセスに費やされるため、非常に効果的ではない。従って、よく使われるデータは、キャッシュメモリの中に記憶させるべきである。
【０００５】
従来のハードウェアキャッシュシステムは、“キャッシュライン”を含む。キャッシュラインは、記憶装置を制御するための基本的なユニットである。キャッシュラインは、キャッシュメモリと主記憶装置の間におけるデータ転送において最適なサイズになるように選択される。この分野の公知の技術として、キャッシュシステムは、主記憶装置にキャッシュラインを対応づける一定の規則を扱う。例えば、”キャッシュタグ”は、主記憶装置のどの部分がキャッシュラインに記憶されているか、そして、主記憶装置のその部分の状態を表すために利用される。
【０００６】
メモリアクセスに加え、プログラムの実行に悪影響を与える制限として、メモリサイズによる制限がある。主記憶装置は、必要とされる処理を実行するには小さすぎる場合がある。この場合、外部記憶装置を利用することによって、主記憶装置に物理的に存在するアドレス領域より大きなアドレス領域を供給するために、”仮想メモリ”が使用される。しかしながら、外部記憶装置は典型的に、主記憶装置より大きな遅延を有する。
【０００７】
仮想メモリを実現するために、通常は、ＣＰＵの一部もしくは別の要素であるプロセッサのメモリ管理ユニット（Ｍｅｍｏｒｙ  Ｍａｎａｇｅｍｅｎｔ  Ｕｎｉｔ。以下、「ＭＭＵ」と略称する。）を利用する。ＭＭＵは、プログラムソフトウェアによって使用される仮想アドレスをメモリ内の物理アドレスに割当てる。ＭＭＵは、物理アドレスに対応づけられていない、仮想アドレスへのアクセスであることを検出できる。この場合、仮想メモリを管理するソフトウェアが呼び出される。仮想アドレスが外部アドレスに記憶されている場合、主記憶装置に読み出され、マッピングが仮想アドレスのためになされる。
【０００８】
高度なプロセッサの構造、特にマルチプロセッサの構造において、個々の処理装置は、ローカルメモリを有する。ローカルメモリは、主記憶装置の記憶を補助することができる。ローカルメモリは、高速であるものの、記憶容量が制限される。ここで、ソフトウェアに使用されるアドレスとローカルメモリの物理アドレスに使用されるアドレスとは、仮想化されてない。すなわち、処理装置が使用することができるメモリ量が制限される。処理装置が、ダイレクトメモリアクセスコントローラ（Ｄｙｎａｍｉｃ  Ｍｅｍｏｒｙ  Ａｃｃｅｓｓ  Ｃｏｎｔｒｏｌｌｅｒ。以下、「ＤＭＡＣ」と略称する。）、もしくは、他のハードウェアを通じて、主記憶装置にアクセスしている間、システムアドレス空間とローカルメモリのアドレス空間とがリンクするようなハードウェアのメカニズムはない。
【発明の開示】
【発明が解決しようとする課題】
【０００９】
しかし、大きな遅延を有する主記憶装置は、処理効率を減らしてしまい、マルチプロセッサシステムにとって、性能的に大きなボトルネックを生み出す。それゆえに、それらの問題を克服するような情報の操作が必要となる。本発明は、これらの問題に対し、特に厳しいメモリ制限があるマイクロプロセッサ構造に適合することができるものである。
【課題を解決するための手段】
【００１０】
上記課題を解決するために、本発明のある態様の制御方法は、ローカルメモリを有する処理部を制御する方法であって、プログラム参照情報に関係付けられたプログラムモジュールがローカルメモリに読み込まれたことを判別するステップと、プログラムモジュールがローカルメモリに読み込まれていない場合、ローカルメモリに対し、プログラムモジュールを読み込むステップと、プログラム参照情報にもとづいて、プログラムモジュールから情報を取得するステップと、を含む。
【００１１】
プログラムモジュールから取得される情報は、データとコードのうち少なくとも一方を含んでもよい。プログラムモジュールは、主記憶部からローカルメモリに読み込まれるオブジェクトモジュールを含んでもよい。プログラム参照情報は、プログラムモジュール内への直接参照情報を含んでもよい。プログラム参照情報は、第２プログラムモジュールへの間接参照情報を含んでもよい。
【００１２】
プログラムモジュールは第１プログラムモジュールであり、制御方法は、第１プログラムモジュールと第２プログラムモジュールを主記憶部に記憶するステップをさらに含み、読み込むステップは、主記憶部からローカルメモリに第１プログラムモジュールを読み込んでもよい。プログラム参照情報は、第1プログラムモジュール内への直接参照情報を含んでもよい。プログラム参照情報は、第２プログラムモジュールへの間接参照情報を含んでもよい。情報は第２プログラムモジュールから得られ、制御方法は、第２プログラムモジュールがローカルメモリから読み込まれていることを判別するステップと、第２プログラムモジュールがローカルメモリから読み込まれていない場合、ローカルメモリに第２プログラムモジュールを読み込むステップと、第１プログラムモジュールに情報を供給するステップと、をさらに含んでもよい。
【００１３】
本発明の別の態様は、ローカルメモリを有する処理部を制御する方法であって、主記憶部から第１プログラムモジュールを取得するステップと、主記憶部から第２プログラムモジュールを取得するステップと、第１プログラムモジュールにて使用されるプログラム参照情報が、第２プログラムモジュールへの間接参照情報を含むことを判別するステップと、プログラム参照情報が間接参照情報を含む場合、第１プログラムモジュールの少なくとも一部分を含む新規プログラムモジュールを形成して、プログラム参照情報を新規プログラムモジュールの複数の部分間における直接参照情報とするステップと、を含む。
【００１４】
新規プログラムモジュールをローカルメモリに読み込むステップをさらに含んでもよい。新規プログラムモジュールを形成する前に、第１プログラムモジュールと第２プログラムモジュールを前記ローカルメモリに読み込ませてもよい。第１プログラムモジュールは第１コード関数を含み、かつ、第２プログラムモジュールは第２コード関数を含み、かつ、新規プログラムモジュールは、第１コード関数と第２コード関数のうち少なくとも一方を含んで形成されてもよい。第１プログラムモジュールは、データ群をさらに含み、新規プログラムモジュールは、データ群をさらに含んで形成されてもよい。
【００１５】
プログラム参照情報は前記第２プログラムモジュールへの間接参照情報であって、制御方法は、第１プログラムモジュールにて使用されるプログラム参照情報にもとづいて、新規プログラムモジュールにて使用される新規プログラム参照情報を決定するステップと、をさらに含み、新規プログラムモジュールは、第１プログラムモジュールの少なくとも一部分と、第２プログラムモジュールの少なくとも一部分とを含んで形成されることにより、新規プログラム参照情報は、新規プログラムモジュールへの直接参照情報としてもよい。
【００１６】
本発明のさらに別の態様は、ローカルメモリを有する処理部における処理方法であって、ローカルメモリに読み込まれている第１プログラムモジュールを実行するステップと、第２プログラムモジュールの挿入個所を決定するステップと、第１プログラムモジュールの実行中に、ローカルメモリに第２プログラムモジュールを読み込むステップと、第２プログラムモジュールの実行を開始するために、予測実行時間を決定するステップと、第２プログラムモジュールの読み込みが完了したことを判別するステップと、第１プログラムモジュールの実行が終了した後に、第２プログラムモジュールを実行するステップと、を含む。
【００１７】
読み込みが完了していない場合、第２プログラムモジュールの実行を遅延させるステップと、をさらに含んでもよい。遅延させるステップは、読み込みが完了するまで、１もしくはそれ以上のＮＯＰ（Ｎｏ  Ｏｐｅｒａｔｉｏｎ）処理を実行するステップを含んでもよい。挿入個所は、統計的に決定されてもよい。挿入個所の有効性は、実行時の状態にもとづいて決定されてもよい。
【００１８】
本発明のさらに別の態様は、プログラムモジュールを記憶できるローカルメモリと、プログラム参照情報とプログラムモジュールとを関係付け、プログラムモジュールがローカルメモリに現在読み込まれていることを判別し、ローカルメモリに現在読み込まれていない場合にプログラムモジュールをローカルメモリに読み込み、プログラム参照情報にもとづいてプログラムモジュールから情報を取得する管理機能を実行する論理回路を有する、ローカルメモリに接続されたプロセッサと、を備える。ローカルメモリは、プロセッサに内蔵されていてもよい。
【００１９】
本発明のさらに別の態様は、プログラムモジュールを記憶できるローカルメモリと、第１プログラムモジュールと第２プログラムモジュールを主記憶装置に記憶し、第１プログラムモジュールと第２プログラムモジュールのいずれかを選択して主記憶装置からローカルメモリに読み出し、選択されたプログラムモジュールとプログラム参照情報を関係付け、プログラム参照情報にもとづいて情報を取得する管理機能を実行する論理回路を有する、ローカルメモリに接続されたプロセッサと、を備える。主記憶装置は、半導体基板上に備えられた記憶装置を含んでもよい。ローカルメモリは、プロセッサと統合されていてもよい。
【００２０】
本発明のさらに別の態様は、プログラムモジュールを記憶できるローカルメモリと、主記憶装置から第１プログラムモジュールを取得し、主記憶装置から第２プログラムモジュールを取得し、第１プログラムモジュールに使用される第１プログラム参照情報を決定し、第１プログラムモジュールの少なくとも一部を含む新規プログラムモジュールを形成して、第１プログラム参照情報を新規プログラムモジュール内の直接参照情報とし、ローカルメモリに新規プログラムモジュールを読み込ませる管理機能を実行する論理回路を有する、ローカルメモリに接続されたプロセッサと、を備える。
【００２１】
本発明のさらに別の態様は、プログラムモジュールを記憶できるローカルメモリと、ローカルメモリに接続されたプロセッサとを備え、プロセッサは、第１プログラムモジュールの挿入個所を決定し、プロセッサによる第２プログラムモジュールの実行中に第１プログラムモジュールをローカルメモリに読み込ませ、第２プログラムモジュールの実行後であって、かつ、読み込みが完了した後に、第１プログラムモジュールを実行するための管理機能を実行する論理回路を有する。
【００２２】
本発明のさらに別の態様は、記録媒体である。この記録媒体は、プログラム参照情報によって関係づけられたプログラムモジュールを特定し、プログラムモジュールがローカルメモリに現在読み込まれていることを判別し、プログラムモジュールがローカルメモリに現在読み込まれていない場合、プログラムモジュールをローカルメモリに読み込み、プログラム参照情報にもとづいて、プログラムモジュールから情報を取得することをプロセッサに実行させるためのプロセッサにて使用されるプログラムを記憶する。
【００２３】
本発明のさらに別の態様は、記録媒体である。この記録媒体は、第１プログラムモジュールと第２プログラムモジュールを主記憶装置に記憶し、プログラム参照情報と関係付けられた第１プログラムモジュールを主記憶装置から、プロセッサに関係付けられたローカルメモリに読み出し、プログラム参照情報にもとづいて情報を取得することをプロセッサに実行させるためのプロセッサにて使用されるプログラムを記憶する。
【００２４】
本発明のさらに別の態様は、記録媒体である。この記録媒体は、主記憶装置から第１プログラムモジュールを取得し、主記憶装置から第２プログラムモジュールを取得し、第１プログラムモジュールにて使用されるプログラム参照情報が前記第２プログラムモジュールへの間接参照情報を含むことを判別し、プログラム参照情報が間接参照情報を含む場合、少なくとも第１プログラムモジュールの一部分を含む新規プログラムモジュールを形成して、プログラム参照情報を新規プログラムモジュールの部分間における直接参照情報とすることをプロセッサに実行させるためのプロセッサにて使用されるプログラムを記憶する。
【００２５】
本発明のさらに別の態様は、記録媒体である。この記録媒体は、プロセッサに関係付けられたローカルメモリに読み込まれた第１プログラムモジュールを実行し、第２プログラムモジュールの挿入個所を決定し、第１プログラムモジュールの実行中に、ローカルメモリに第２プログラムモジュールを読み込み、第２プログラムモジュールの実行を開始するための予測実行時間を決定し、第２プログラムモジュールの読み込みが完了したことを判別し、第１プログラムモジュールの実行が終了した後に、第２プログラムモジュールを実行することをプロセッサに実行させるためのプロセッサにて使用されるプログラムを記憶する。
【００２６】
本発明のさらに別の態様は、処理システムである。この処理システムは、バスを含む処理要素と、処理部と、バスを介して処理部と接続された少なくとも１つの副処理部と、を備える。処理部と少なくとも１つの副処理部のうち少なくとも一方は、プログラム参照情報は第１プログラムモジュールに属することを判別し、ローカルメモリに第１プログラムモジュールを読み込み、プログラム参照情報にもとづいて第１プログラムモジュールから情報を取得する。
【００２７】
本発明のさらに別の態様は、コンピュータ処理システムである。このコンピュータ処理システムは、ユーザ入力部と、表示装置を装着するための表示インターフェイスと、プログラムモジュールを記憶できるローカルメモリと、ローカルメモリに接続されるプロセッサとを備える。プロセッサは、１またはそれ以上の処理要素を有し、処理要素のうち少なくとも１つの処理要素はプログラム参照情報が第１プログラムモジュールに属しているかを判別し、ローカルメモリに第１プログラムモジュールを読みこみ、プログラム参照情報にもとづいて第１プログラムモジュールから情報を取得する管理機能を実行する論理回路を含む。
【００２８】
本発明のさらに別の態様は、通信ネットワークを介して他のコンピュータ処理システムと接続されている複数のコンピュータ処理システムを備えるコンピュータのネットワークである。コンピュータ処理システムは、ユーザ入力部と、表示装置を装着するためのインターフェイスと、プログラムモジュールを記憶できるローカルメモリと、ローカルメモリに接続されるプロセッサとを備え、プロセッサは、１またはそれ以上の処理要素を有し、処理要素のうち少なくとも１つの処理要素はプログラム参照情報が第１プログラムモジュールに属しているかを判別し、ローカルメモリに第１プログラムモジュールを読みこみ、プログラム参照情報にもとづいて第１プログラムモジュールから情報を取得する管理機能を実行する論理回路を含む。少なくとも１つの前記コンピュータ処理システムは、マルチメディアゲームを処理することができるゲーム部を含んでもよい。
【００２９】
本発明のさらに別の態様は、プログラムである。このプログラムは、プログラム参照情報によって関係づけられたプログラムモジュールを特定し、プログラムモジュールがローカルメモリに現在読み込まれていることを判別し、プログラムモジュールがローカルメモリに現在読み込まれていない場合、プログラムモジュールを前記ローカルメモリに読み込み、プログラム参照情報にもとづいて、プログラムモジュールから情報を取得することをプロセッサに実行させる。
【００３０】
本発明のさらに別の態様は、プログラムである。このプログラムは、第１プログラムモジュールと第２プログラムモジュールを主記憶装置に記憶し、プログラム参照情報と関係付けられた第１プログラムモジュールを主記憶装置から、プロセッサに関係付けられたローカルメモリに読み出し、プログラム参照情報にもとづいて情報を取得することをプロセッサに実行させる。
【００３１】
本発明のさらに別の態様は、プログラムである。このプログラムは、主記憶装置から第１プログラムモジュールを取得し、主記憶装置から第２プログラムモジュールを取得し、第１プログラムモジュールにて使用されるプログラム参照情報が前記第２プログラムモジュールへの間接参照情報を含むことを判別し、プログラム参照情報が間接参照情報を含む場合、少なくとも第１プログラムモジュールの一部分を含む新規プログラムモジュールを形成して、プログラム参照情報を新規プログラムモジュールの部分間における直接参照情報とすることをプロセッサに実行させる。
【００３２】
本発明のさらに別の態様は、プログラムである。このプログラムは、プロセッサに関係付けられたローカルメモリに読み込まれた第１プログラムモジュールを実行し、第２プログラムモジュールの挿入個所を決定し、第１プログラムモジュールの実行中に、ローカルメモリに第２プログラムモジュールを読み込み、第２プログラムモジュールの実行を開始するための予測実行時間を決定し、第２プログラムモジュールの読み込みが完了したことを判別し、第１プログラムモジュールの実行が終了した後に、第２プログラムモジュールを実行することをプロセッサに実行させる。
【発明の効果】
【００３３】
処理量を効果的に減らすことができるマイクロプロセッサシステムを提供する。
【発明を実施するための最良の形態】
【００３４】
添付した図面に参照される本発明の好ましい態様の記載において、特定の用語は、発明の明瞭性のために用いられている。しかしながら、本発明は、用いられた特定の事項に限定されず、かつ、同様の目的を達成するために同様の規則で行う全ての等価な技術を含むものと理解される。
【００３５】
図１は、本発明の実施例にかかる基本的な処理モジュールもしくは処理要素１００（Ｐｒｏｃｅｓｓｏｒ  Ｅｌｅｍｅｎｔ。以下、「ＰＥ１００」と略称する。）の構成例を示す図である。図１に示すようにＰＥ１００は、好ましくは、入出力インタフェイス１０２と、処理部１０４（Ｐｒｏｃｅｓｓｉｎｇ  Ｕｎｉｔ。以下、「ＰＵ１０４」と略称する。）と、ＤＭＡＣ１０６と、副処理部１０８（Ｓｕｂ-Ｐｒｏｃｅｓｓｉｎｇ  Ｕｎｉｔ。以下、「ＳＰＵ１０８」と略称する。）とを含む。ＳＰＵ１０８は、ＳＰＵ１０８ａ〜ＳＰＵ４１０８ｄを代表する。ここでは、４つのＳＰＵ１０８を示したが、ＰＥ１００は任意の個数のＳＰＵ１０８を含むことができる。ローカルＰＥバス１２０は、ＰＵ１０４、ＳＰＵ１０８、入出力インタフェイス１０２、ＤＭＡＣ１０６およびメモリインタフェイス１１０の間においてデータとアプリケーションを転送する。ローカルＰＥバス１２０は、たとえば、通常の構成を有することができ、また、パケットスイッチネットワークとして実現することができる。パケットスイッチネットワークとして実現すると、多くのハードウェアが要求されるため、有効なバンド幅が増加する。入出力インタフェイス１０２は、入出力バス１２４を介して、一つもしくはそれ以上の図示しない外部の入出力デバイス、例えばフレームバッファ、ディスクドライブなどと接続されてもよい。
【００３６】
ＰＥ１００は、デジタル論理を実現するためのさまざまな方法を使って構成される。ＰＥ１００は、好ましくは、シリコン表面上にＣＭＯＳを使った単一のＩＣとして構成される。ＰＥ１００は、広帯域メモリバス１２２を介して、メモリ１３０と接続されている。メモリ１３０は、ＰＥ１００のための主記憶部として適切に機能する。実際の構成においては、メモリ１３０は、ＰＥ１００に組みこまれているプロセッサチップの一部として統合されてもよいし、また、外部のオフチップメモリとして分割されてもよい。たとえば、メモリ１３０はチップ上の離れた位置に配置される。もしくはＰＥ１００を含む一つもしくはそれ以上のプロセッサに統合することができる。メモリ１３０は、好ましくはＤＲＡＭであるとよいが、メモリ１３０は他の手段によっても実現することができる。例えば、静的なランダムアクセスメモリ（Ｓｔａｔｉｃ  Ｒａｎｄｏｍ  Ａｃｃｅｓｓ  Ｍｅｍｏｒｙ。以下、「ＳＲＡＭ」と略称する。）、磁気的なランダムアクセスメモリ（Ｍａｇｎｅｔｉｃ  Ｒａｎｄｏｍ  Ａｃｃｅｓｓ  Ｍｅｍｏｒｙ。以下、「ＭＲＡＭ」と略称する。）、光学的なメモリ（Ｏｐｔｉｃａｌ  Ｍｅｍｏｒｙ）、フォログラフィックメモリ（Ｈｏｌｏｇｒａｐｈｉｃ  Ｍｅｍｏｒｙ）などである。ＤＭＡＣ１０６とメモリインタフェイス１１０は、ＰＥ１００のＰＵ１０４と、ＳＰＵ１０８のメモリ１３０との間におけるデータの転送を促進する。
【００３７】
ＰＵ１０４は、たとえば、データとアプリケーションを単独で処理することができる標準的なプロセッサである。ＰＵ１０４は、その処理において、ＳＰＵ１０８によるデータとアプリケーションの処理の順序を管理し、または、指揮する。ＰＥ１００は、他の構成として、複数のＰＵ１０４を含んでもよい。ＰＵ１０４のそれぞれは、一つ、または、全て、または、いくつかのＳＰＵ１０８のグループを制御してもよい。ＳＰＵ１０８は、好ましくは、単一の命令で複数のデータを扱う処理部である。ＰＵ１０４の制御下において、ＳＰＵ１０８は、並列かつ独立に、データとアプリケーションの処理を実行してもよい。ＤＭＡＣ１０６は、メモリ１３０に記憶されたデータとアプリケーションに関し、ＰＵ１０４もしくはＳＰＵ１０８によるアクセスを制御する。好ましくは、複数のＰＥ１００は、高い処理電力を供給するために、論理的に他の装置と関連づけられ、または、連結され、もしくは一体化されてもよい。
【００３８】
図２は、本発明の実施例にかかる複数のＰＥ２００を含む処理部の構成例を示す図である。好ましくは、ＰＥ２００は、単一のチップで構成されている。ＰＥ２００は、図１のＰＥ１００に示したようなＰＵ１０４および／またはＳＰＵ１０８のようなサブシステムを含んでもよく、含まないでもよい。ＰＥ２００は、要求される処理形式に従って、同一もしくは異なる形式となってもよい。たとえば、１または複数のＰＥ２００は、一般的なマイクロプロセッサであってもよく、また、デジタル信号プロセッサ（Ｄｉｇｉｔａｌ  Ｓｉｇｎａｌ  Ｐｒｏｃｅｓｓｏｒ）であってもよく、画像プロセッサであってもよく、また、マイクロコントローラなどであってもよい。ＰＥ２００の一つは、例えばＰＥ１は、ＰＥ２、ＰＥ３、ＰＥ４によって処理されるいくつかのもしくは全ての処理に指示、もしくは制御してもよい。
【００３９】
ＰＥ２００は、好ましくは共有バス２０２と接続されている。メモリ制御部またはＤＭＡＣ２０６は、メモリバス２０４を介して共有バス２０２に接続されてもよい。ＤＭＡＣ２０６は、メモリ２０８に接続されている。メモリ２０８は、メモリ１３０に関して上述した形式のうちのいずれかであってもよい。実際の構成においては、メモリ２０８は、一つまたは複数のＰＥ２００に統合されているプロセッサチップの一部として統合されていてもよく、また、組み込まれていてもよく、外部のオフチップメモリに配置されていてもよい。たとえば、メモリ２０８は、チップ上の別の位置に配置でき、また、１またはそれ以上のＰＥ２００に統合されることができる。入出力制御部２１２は、入出力バス２１０を介して、共有バス２０２に接続されている。入出力制御部２１２は、一つまたはそれ以上の入出力デバイス２１４、例えばフレームバッファ、ディスクドライブなどに接続されていてもよい。
【００４０】
上述した処理モジュールと構成は単に例示にすぎないと理解される。また、本発明のさまざまな態様は、他の構成を有していてもよいし、以下の文献１、２に開示されたマルチプロセッサシステムなどに限定されない。
文献１：US.PAT.NO. 6526491, "Memory protection system and method for computer architecture broadband networks", 登録日 2003/2/25.
文献２: US.AP.NO. 09/816004, "Computer archtecture and software cells for broadband networks",出願日 2001/3/22.
【００４１】
図３は、本発明の実施例にかかるＳＰＵ３００の構成例を示す図である。一つもしくはそれ以上のＳＰＵ３００は、ＰＥ１００に統合されていてもよい。ＰＥが複数のＰＵ１０４を含むような場合、ＰＵ１０４のそれぞれは一つまたは全てもしくはいくつかの指定されたＳＰＵ３００のグループを制御してもよい。
【００４２】
ＳＰＵ３００は、好ましくは、ＬＳ３０２（Ｌｏｃａｌ  Ｓｔｏｒｅ。以下、「ＬＳ３０２」と略称する。）、レジスタ３０４、一つまたはそれ以上の浮動小数点演算ユニット３０６（Ｆｌｏａｔｉｎｇ  Ｐｏｉｎｔ  Ｕｎｉｔ。以下、「ＦＰＵ３０６」と略称する。）、および一つまたはそれ以上の整数演算ユニット３０８（Ｉｎｔｅｇｅｒ  Ｕｎｉｔ。以下、「ＩＵ３０８」と略称する。）とを含み、もしくは、論理的に関係づけられている。ＳＰＵ３００の構成要素は、以下に示す構成を含む。要求される処理電力に従って、より多くのもしくはより少ないＦＰＵ３０６とＩＵ３０８が実行されてもよい。本実施例においては、ＬＳ３０２は、少なくとも１２８キロバイトの記憶容量を含み、レジスタ３０４の容量は１２８×１２８ビットである。ＦＰＵ３０６は好ましくは、少なくとも３２ＧＦＬＯＰＳ（Ｇｉｇａ  ＦＬＯａｔｉｎｇ  ｐｏｉｎｔ  ｏｐｅｒａｔｉｏｎｓ  Ｐｅｒ  Ｓｅｃｏｎｄ。１秒あたりに処理できる浮動小数点演算の数。）のスピードで計算することができる。ＩＵ３０８は、好ましくは３２ＧＯＰＳ（Ｇｉｇａ  Ｏｐｅｒａｔｉｏｎｓ  Ｐｅｒ  Ｓｅｃｏｎｄ）のスピードで計算することができる。
【００４３】
ＬＳ３０２は好ましくは、キャッシュメモリではない。ＳＰＵ３００におけるキャッシュの整合性は必要ない。そのかわりに、ＬＳ３０２は好ましくはＳＲＡＭとして構成される。ＰＵ１０４は、ＰＵ１０４によって初期化された直接メモリアクセスのためのキャッシュの整合性のサポートを要求してもよい。キャッシュの整合性のサポートは、ＳＰＵ３００によって初期化された直接メモリアクセスや入出力デバイス２１４のような外部のデバイスに対するアクセス、または外部のデバイスからのアクセスには要求されない。ＬＳ３０２は、たとえば、特定のＳＰＵ３００に関係付けられた物理メモリとして実現されてもよいし、ＳＰＵ３００に関係付けられた仮想メモリ領域として実現されてもよいし、物理メモリと仮想メモリの組合せとして実現されてもよいし、または等価なハードウェア、ソフトウェア、および／または、ファームウェアの構成として実現されてもよい。ＬＳ３０２は、ＰＥバス１２０のようなシステムバスを通じて、またはＳＰＵ特定のローカルバスを通じて、ＳＰＵ３００に接続されてもよい。
【００４４】
ＳＰＵ３００は、バスインタフェイス３１２を介してＳＰＵ３００に対して、もしくは、ＳＰＵ３００からアプリケーションとデータを転送するためのバス３１０をさらに含む。本実施例においては、バス３１０は、１０２４ビットの幅を持つ。ＳＰＵ３００は、第１内部バス３１４、第２内部バス３１６、第３内部バス３１８をさらに含む。本実施例においては、第１内部バス３１４は２５６ビットの幅を有し、ＬＳ３０２とレジスタ３０４の間の通信を供給する。第２内部バス３１６と第３内部バス３１８は、レジスタ３０４とＦＰＵ３０６の間における通信またはレジスタ３０４とＩＵ３０８のそれぞれの間における通信を供給する。本実施例において、第２内部バス３１６と第３内部バス３１８の幅は、レジスタ３０４からＦＰＵ３０６、もしくは、レジスタ３０４からＩＵ３０８においては３８４ビットである。また、第２内部バス３１６と第３内部バス３１８の幅は、ＦＰＵ３０６もしくはＩＵ３０８からレジスタ３０４への幅は、１２８ビットである。レジスタ３０４からＦＰＵ３０６、ＩＵ３０８へのより大きなバス幅は、処理中においてレジスタ３０４からのより多くのデータの流れを収容する。例えば、３ワードを最大としてそれぞれの処理において最大３ワードが必要であるとする。この場合、それぞれの計算においては、１ワードのみ必要となる。
【００４５】
本発明においては、ローカルメモリのアドレス空間とシステムのアドレス空間におけるボトルネックの問題と仮想化の欠如を克服することができる。ＬＳ３０２に対するデータの読み込み（ロード／ローディング）もしくは読み出し（アンロード／アンローディング）は、ソフトウェアを通じて適切に実行されるため、ソフトウェアがある時刻においてデータ、もしくは、コードを読み出すべきか否かを判別することができるという事実を利用できる。これは、プログラムモジュールの使用を通じて達成される。ここで使用する”プログラムモジュール”という語句は、メモリ内に配置されたプログラムリソースの論理集合などを含むが、これに限定されない。例えば、プログラムモジュールはデータおよび／またはコードを含んでもよい。データおよび／またはコードは、コンパイラなどの論理的な手段によってグループ化される。プログラム、または、その他のコンピュータ処理は、ひとつ、もしくはそれ以上のプログラムモジュールを使って実現されてもよい。
【００４６】
図４Ａは、本発明の実施例にかかるプログラムモジュールの使用に基づく記憶管理の例を示す図である。主記憶部、例えばメモリ１３０は、１またはそれ以上のプログラムモジュールを含んでもよい。図４Ａにおいて、プログラムモジュールＡ４０２とプログラムモジュールＢ４０４は、メモリ１３０の中に表されている。本実施例においては、プログラムモジュールは、“＊．ｏ”ファイルとして知られているコンパイル時のオブジェクトモジュールであってもよい。オブジェクトモジュールは、プログラムの部分間において、非常に明確に論理的な境界を供給する。オブジェクトモジュールは、コンパイルの間に生成されるので、正確なモジュール内（直接参照）もしくは外部への（外部参照もしくは間接参照）参照アドレスを供給する。間接参照は、好ましくは、以下に示すように管理ルーチンを呼び出すことによって実現される。
【００４７】
好ましくは、プログラムは、プログラムモジュールごとにＬＳ３０２に読み込まれる。より好ましくは、プログラムは、オブジェクトモジュールごとにＬＳ３０２に読み込まれる。図４Ａに示すように、プログラムモジュールＡは、プログラムモジュールＡ４０６としてＬＳ３０２に読み込まれる。また、プログラムモジュールＢは、プログラムモジュールＢ４０８として読み込まれる。矢印４１０で指し示されるように、直接参照が、プログラムモジュールＡ４０６に含まれるデータまたはコードにアクセスするためになされた場合、すべての参照（コードおよび／またはデータへのポインタ）は、オーバーヘッドなしでアクセスすることができる。破線矢印４１２と破線矢印４１３で指し示されるプログラムモジュールＡ４０６から、外部のモジュールであるプログラムモジュールＢ４０８への間接参照においては、管理ルーチン４１４が好ましくは呼び出される。処理部によって好ましくは実行される管理ルーチン４１４は、必要であればプログラムモジュールを読み出し、もしくは、すでに読み出されていれば、そのプログラムモジュールにアクセスすることができる。ここで、たとえば、破線矢印４１２で指し示される間接参照がプログラムモジュールＡ４０６へのものであると仮定する。さらに、ＬＳ３０２に存在しないプログラムモジュールＢ４０８への間接参照情報が破線矢印４１２で指し示されているとする。そうすると、管理ルーチン４１４は、プログラムモジュールＢ４０４としてメモリ１３０に存在するプログラムモジュールＢを読み出し、プログラムモジュールＢ４０８としてＬＳ３０２に読み込ませる。
【００４８】
図４Ｂは、本発明の実施例にかかる第１のフローダイアグラム例を示す図である。まず、Ｓ４４２において記憶管理が初期化される。次に、Ｓ４４４において、参照がいずれのプログラムモジュールに属しているかを判別するために検査が実行される。図４Ａに示す管理ルーチン４１４が、その検査を実行してもよい。検査の結果は、たとえば、他のプロセス、アプリケーションもしくはデバイスによって、管理ルーチン４１４に供給してもよい。いったん参照情報が決定されると、Ｓ４４６においてＬＳ３０２にそのプログラムモジュールが読み込まれているかどうかを判別するための検査が実行される。プログラムモジュールがＬＳ３０２に読み込まれている場合、Ｓ４４８において、プログラムモジュールから参照された値（データ）は、それを要求しているエンティティ、たとえば、図４ＡのプログラムモジュールＡ４０６に返される。プログラムモジュールがＬＳ３０２に読み込まれていない場合、Ｓ４５０において、参照されたモジュールがＬＳ３０２に読み込まれる。この場合、Ｓ４４８に処理が移り、データは、それを要求しているエンティティに返される。Ｓ４５２において、この記憶管理ルーチンが終了する。この管理ルーチン４１４は、好ましくは、図４Ａに示す記憶管理を実行、もしくは、管理する。
【００４９】
プログラムモジュールがコンパイルの間に形成されたオブジェクトモジュールを使って実現されている場合、そのオブジェクトモジュールがどのように構成されているかによって、記憶管理処理の効率に影響を与える。たとえば、コード関数におけるデータが、そのコード関数に正しく関係づけられていない場合、処理ボトルネックとなる。したがって、プログラムおよび／またはデータが複数のソースファイルに分かれている場合、慎重になるべきである。
【００５０】
この問題は、コードとデータなどを含むプログラムを解析することによって回避することができる。また、コードおよび／またはデータは、好ましくは別々のモジュールに分割されている。また、コードおよび／またはデータは、場合により、複数の関数もしくはデータのグループに分割される。コンパイラまたは他の処理ツールは、複数の関数とデータのグループにおける参照情報を解析することができる。よって、存在するプログラムモジュールは、プログラムモジュールのグループ化を最適にするための解析に基づいて、データおよび／またはコードをグループ化して新規プログラムモジュールに再分割される。これは、モジュールの外部にアクセスすることによって生成されるオーバーヘッドを最小化する。モジュールをどのように分割するかを決定する処理は、好ましくは、モジュールのコードを関数によって分割することによって開始される。たとえば、ツリー構造は、関係の呼び出し関係から抽出される。外部の呼び出しを伴わない関数、または外部から参照されない関数は、ローカル関数として識別される。外部参照を伴う関数は、参照先のモジュールによってグループ化することができ、外部参照をもつものとして識別される。同様のグループ化は、外部から参照される関数に対しても実現することができ、そのような関数は、外部参照されるものとして識別される。モジュールのデータ部分は、好ましくは、同様の解析によって行うことができる。モジュールのグループは、好ましくは、最も適した組み合わせを選択するために比較され、マッチングがとられる。たとえば、ＬＳ３０２のサイズ、転送サイズ、および／またはアライメントに基づいて最適な組み合わせが選択される。好ましくは、参照が使用される可能性が高ければ高いほど、最適な組合せを探索する解析において、その参照の重みづけは高くなる。最適なグループ分けを自動化するためにツールを使用することもできる。たとえば、コンパイラおよび／またはリンカーは、最適な実行ファイルを生成するために、１つまたはそれ以上のコンパイルまたはリンクの実行を繰り返してもよい。参照情報は、実行時にプロファイルを作成することによって、統計的に解析される。
【００５１】
本実施例においては、再グループ化の処理への入力は、プログラムを形成して関係づけられた複数のオブジェクトファイルを含む。このような態様において、望まれる出力は、読み込みが完了するまでの待ち時間による遅延を最小化するようにグループ化された複数の読み込まれたモジュールを含む。
【００５２】
図５Ａは、本発明の実施例にかかる第１プログラムモジュール５０２と第２プログラムモジュール５０４を含むプログラムモジュール群５００の構成例を示す図である。第１プログラムモジュール５０２と第２プログラムモジュール５０４は、好ましくはＳＰＵのＬＳ３０２に読み込まれている。マルチスレッド処理におけては異なるスレッド間で同一のコードモジュールを共有することができるので、第１プログラムモジュール５０２を第１のローカルメモリによみこませ、また、第２プログラムモジュール５０４を第２のローカルメモリに読み込ませることができる。あるいは、プログラムモジュール群全体５００を、一対のローカルメモリに読み込ませることもできる。しかしながらデータモジュールは、別々のインスタンスが必要である。また、ダイナミックローディングとアンローディングを拡張して、共有コードモジュールに関係づけられた別々のデータモジュールを管理ルーチンが管理している間、その共有コードモジュールを使うことができるようにすることができる。図５Ａに示すように、第１プログラムモジュール５０２はコード関数Ａ５０６と、コード関数ＢＣ５０８と、データ群Ａ５１０と、データ群ＢＣＤ５１２とを含む。コード関数Ａ５０６は、処理Ａのためのコードを含む。コード関数ＢＣ５０８は、処理Ｂと処理Ｃの為のコードを含む。データ群Ａ５１０はデータの集合Ａを含む。データ群ＢＣＤ５１２はデータの集合Ｂと、Ｃと、Ｄを含む。同様に第２プログラムモジュール５０４は、コード関数ＤＥ５１４と、コード関数Ｆ５１６と、データ群ＤＥ５１８と、データ群ＦＧ５２０とを含む。コード関数ＤＥ５１４は、処理ＤとＥのためのコードを含む。コード関数Ｆ５１６は処理Ｆの為のコードを含む。データ群ＤＥ５１８は、データの集合ＤとＥとを含む。データ群ＦＧ５２０はデータの集合ＦとＧを含む。
【００５３】
図５Ａの例においては、コード関数Ａ５０６は、矢印５２１で指し示されたデータ群Ａ５１０への直接参照を行ってもよく、また、コード関数ＤＥ５１４を間接的に参照してもよい。コード関数ＢＣ５０８は、矢印５２３で指し示されたデータ群ＢＣＤ５１２へ直接的に参照してもよい。コード関数ＤＥ５１４は、矢印５２４で指し示されたデータ群ＦＧ５２０へ直接的に参照してもよい。さいごに、コード関数Ｆ５１６は、矢印５２６で指し示されたデータ群ＤＥ５１８に直接的に参照してもよい。破線矢印５２２で指し示されたコード関数Ａ５０６とコード関数ＤＥ５１４の間における間接参照は、望まれないオーバーヘッドを生成する。それゆえに、好ましくは、複数のコード関数と複数のデータ群とを再グループ化した方がよい。
【００５４】
図５Ｂは、図５Ａのプログラムモジュール群５００の再グループ化の例を示す図である。図５Ｂにおいては、第１新規プログラムモジュール５３０と、第２新規プログラムモジュール５３２と、第３新規プログラムモジュール５３４とが生成される。第１新規プログラムモジュール５３０は、コード関数Ａ５３６と、コード関数ＤＥ５３８と、データ群Ａ５４０と、データ群ＦＧ５４２とを含む。コード関数Ａ５３６は、処理Ａの為のコードを含む。コード関数ＤＥ５３８は、処理ＤとＥの処理の為のコードを含む。データ群Ａ５４０は、データの集合Ａを含む。データ群ＦＧ５４２は、データの集合ＦとＧとを含む。第２新規プログラムモジュール５３２は、コード関数ＢＣ５４４とデータ群ＢＣＤ５４６とを含む。コード関数ＢＣ５４４は、処理ＢとＣの為のコードを含む。データ群ＢＣＤ５４６は、データの集合ＢとＣとＤとを含む。第３新規プログラムモジュール５３４は、コード関数Ｆ５４８とデータ群ＤＥ５５０を含む。コード関数Ｆ５４８は、処理Ｆのためのコードを含む。データ群ＤＥ５５０は、データの集合ＤとＥを含む。
【００５５】
図５Ｂに示す再グループ化において、コード関数Ａ５３６は、矢印５２１’で指し示されたデータ群Ａ５４０を直接的に参照してもよい。また、コード関数Ａ５３６は矢印５２２’で指し示されたコード関数ＤＥ５３８を直接的に参照してもよい。コード関数ＢＣ５４４は、矢印５２３’で指し示されたデータ群ＢＣＤ５４６を直接的に参照してもよい。コード関数ＤＥ５３８は、矢印５２４’で指し示されたデータ群ＦＧ５４２を直接的に参照してもよい。コード関数Ｆ５４８は、矢印５２６’で指し示されたデータ群ＤＥ５５０を直接的に参照してもよい。図５Ｂにおいては、間接参照をなくし直接参照を増やすようにグループ分けが最適化される。
【００５６】
さらに、例を示す。図６Ａは、本発明の実施例にかかる第１プログラムモジュール６０２と、第２プログラムモジュール６０４と、第３プログラムモジュール６０６と、第４プログラムモジュール６０８とを含むファンクションコールツリー６００の構成例を示す図である。ここで、ファンクションコールツリー６００は、ＳＰＵのＬＳ３０２に読み込まれているものとする。図６Ａに示すように、第１プログラムモジュール６０２は、コード関数Ａ６１０とコード関数Ｂ６１２と、コード関数Ｃ６１４と、コード関数Ｄ６１６と、コード関数Ｅ６１８とを含む。コード関数Ａ６１０は、処理Ａの為のコードを含む。コード関数Ｂ６１２は処理Ｂの為のコードを含む。コード関数Ｃ６１４は、処理Ｃの為のコードを含む。コード関数Ｄ６１６は処理Ｄの為のコードを含む。コード関数Ｅ６１８は、処理Ｅの為のコードを含む。第１プログラムモジュール６０２は、コード関数Ａ６１０と、コード関数Ｂ６１２と、コード関数Ｃ６１４と、コード関数Ｄ６１６と、コード関数Ｅ６１８とそれぞれ関係づけられたデータ群Ａ６２０と、データ群Ｂ６２２と、データ群Ｃ６２４と、データ群Ｄ６２６と、データ群Ｅ６２８とを含む。データ群Ａ６２０は、データ群Ａを含む。データ群Ｂ６２２は、データの集合Ｂを含む。データ群Ｃ６２４は、データの集合Ｃを含む。データ群Ｄ６２６は、データの集合Ｄを含む。データ群Ｅ６２８は、データの集合Ｅを含む。
【００５７】
第２プログラムモジュール６０４は、コード関数Ｆ６３０とコード関数Ｇ６３２とを含む。コード関数Ｆ６３０は、処理Ｆの為のコードを含む。コード関数Ｇ６３２は、処理Ｇの為のコードを含む。第２プログラムモジュール６０４は、データ群Ｆ６３４とデータ群Ｇ６３６とを含む。データ群Ｆ６３４とデータ群Ｇ６３６は、それぞれコード関数Ｆ６３０とコード関数Ｇ６３２に関係づけられている。データ群ＦＧ６３８は、第２プログラムモジュール６０４にも含まれている。データ群Ｆ６３４は、データの集合Ｆを含む。データ群Ｇ６３６は、データの集合Ｇを含む。データ群ＦＧ６３８は、データの集合ＦとＧとを含む。
【００５８】
第３プログラムモジュール６０６は、コード群Ｈ６４０とコード群Ｉ６４２を含む。コード群Ｈ６４０は処理Ｈの為のコードを含む。コード群Ｉ６４２は、処理Ｉの為のコードを含む。第３プログラムモジュール６０６は、データ群Ｈ６４４とデータ群Ｉ６４６とを含む。データ群Ｈ６４４とデータ群Ｉ６４６は、それぞれコード群Ｈ６４０とコード群Ｉ６４２に関係づけられている。データ群ＩＥ６４８は第３プログラムモジュール６０６にも含まれている。データ群Ｈ６４４はデータの集合Ｈを含む。データ群Ｉ６４６は、データの集合Ｉを含む。データ群ＩＥ６４８はデータの集合ＩとＥとを含む。
【００５９】
第４プログラムモジュール６０８は、コード関数Ｊ６５０とコード関数Ｋ６５２とを含む。コード関数Ｊ６５０は、処理Ｊの為のコードを含む。コード関数Ｋ６５２は、処理Ｋの為のコードを含む。第４プログラムモジュール６０８はデータ群Ｊ６５４とデータ群Ｋ６５６とを含む。データ群Ｊ６５４とデータ群Ｋ６５６はそれぞれコード群Ｈ６４０とコード群Ｉ６４２とに関係づけられている。データ群Ｊ６５４はデータの集合Ｊを含む。データ群Ｋ６５６はデータの集合Ｋを含む。
【００６０】
図６Ａに示す例においては、第１プログラムモジュール６０２に関しては、コード関数Ａ６１０は矢印６１３に指し示されたコード関数Ｂ６１２を直接参照し、また、矢印６１５によって指し示されたコード関数Ｃ６１４を直接参照し、また、矢印６１７によって指し示されたコード関数Ｄ６１６を直接参照し、また、矢印６１９によって指し示されたコード関数Ｅ６１８を直接参照する。コード関数Ｃ６１４は、破線矢印６３１によって指し示されたコード関数Ｆ６３０と、破線矢印６３３によって指し示されたコード関数Ｇ６３２とを間接的に参照する。コード関数Ｄ６１６は破線矢印６４１によって指し示されたコード群Ｈ６４０と、破線矢印６４３によって指し示されたコード群Ｉ６４２とを間接的に参照する。コード関数Ｅ６１８は、破線矢印６４５によって指し示されたコード群Ｉ６４２と、破線矢印６４７によって指し示されたデータ群ＩＥ６４８とを間接的に参照する。
【００６１】
第２プログラムモジュール６０４においては、コード関数Ｆ６３０は、矢印６３７によって指し示されたデータ群ＦＧ６３８を直接参照する。コード関数Ｇ６３２は、矢印６３９によって指し示されたデータ群ＦＧ６３８を直接参照する。第３プログラムモジュール６０６においては、コード群Ｈ６４０は、破線矢印６５１によって指し示されたコード関数Ｊ６５０を間接的に参照する。コード群Ｈ６４０は、破線矢印６５３によって指し示されたコード関数Ｋ６５２にも間接的に参照する。コード群Ｉ６４２は、矢印６４９によって指し示されたデータ群ＩＥ６４８を直接参照する。第４プログラムモジュール６０８においては、コード関数Ｊ６５０は、矢印６５５によって指し示されたコード関数Ｋ６５２を直接参照する。
【００６２】
ここでは、８つの内部的な呼び出し、すなわち、８つの直接参照がファンクションコールツリー６００に存在する。また、８つの外部的な呼び出し、すなわち、８つの間接参照がファンクションコールツリー６００に存在する。８つの外部的な呼び出しは、望まれざるかなりのオーバーヘッドを生成する。それゆえに、ファンクションコールツリー６００の各要素を再グループ化して間接参照を最小化することが好ましい。
【００６３】
図６Ｂは、図６Ａのファンクションコールツリー６００を再グループ化したファンクションコールツリー６６０の構成例を示す図である。図６Ｂのファンクションコールツリー６６０は、第５プログラムモジュール６６２と、第６プログラムモジュール６６４と、第７プログラムモジュール６６６と、第８プログラムモジュール６６８とを含む。第５プログラムモジュール６６２と、第６プログラムモジュール６６４と、第７プログラムモジュール６６６と、第８プログラムモジュール６６８は、ＳＰＵのＬＳ３０２に読み込まれているものとする。図６Ｂに示すように、第５プログラムモジュール６６２は、コード関数Ａ６１０と、コード関数Ｂ６１２と、データ群Ａ６２０と、データ群Ｂ６２２とを含む。第６プログラムモジュール６６４は、コード関数Ｃ６１４と、コード関数Ｆ６３０と、コード関数Ｇ６３２とを含む。第２プログラムモジュール６０４は、データ群Ｆ６３４と、データ群Ｇ６３６と、データ群ＦＧ６３８を含む。第７プログラムモジュール６６６は、コード関数Ｄ６１６と、コード関数Ｅ６１８と、コード群Ｉ６４２とを含む。第７プログラムモジュール６６６は、データ群Ｄ６２６と、データ群Ｅ６２８と、データ群Ｉ６４６と、データ群ＩＥ６４８も含む。第８プログラムモジュール６６８は、コード群Ｈ６４０と、コード関数Ｊ６５０と、コード関数Ｋ６５２と、データ群Ｈ６４４と、データ群Ｊ６５４と、データ群Ｋ６５６とを含む。
【００６４】
図６Ｂに示す例においては、第５プログラムモジュール６６２においては、コード関数Ａ６１０は、矢印６１３で指し示されるように、コード関数Ｂ６１２を直接参照する。しかしながら、再グループ化によって、第５プログラムモジュール６６２は、破線矢印６１５’で指し示されるように、コード関数Ｃ６１４を間接的に参照し、また、破線矢印６１７’で示すように、コード関数Ｄ６１６を間接的に参照し、また、破線矢印６１９’で示すように、コード関数Ｅ６１８を間接的に参照している。
【００６５】
第６プログラムモジュール６６４においては、コード関数Ｃ６１４は、矢印６３１’で指し示されるようにコード関数Ｆ６３０を直接参照している。また、コード関数Ｃ６１４は、矢印６３３’に指し示されるように、コード関数Ｇ６３２を直接参照している。コード関数Ｆ６３０は、矢印６３７で指し示されるように、データ群ＦＧ６３８を直接参照している。また、コード関数Ｇ６３２は、矢印６３９で指し示されるように、データ群ＦＧ６３８を直接参照している。
【００６６】
第７プログラムモジュール６６６においては、コード関数Ｄ６１６は、破線矢印６４１で指し示されるように、コード群Ｈ６４０を間接的に参照している。しかし今は、矢印６４３’で指し示されるように、コード群Ｉ６４２を直接的に参照している。コード関数Ｅ６１８は、矢印６４５’で示すようにコード群Ｉ６４２を直接参照している。また、コード関数Ｅ６１８は、矢印６４７’で示すようにデータ群ＩＥ６４８を直接参照している。コード群Ｉ６４２は、矢印６４９で示すようにデータ群ＩＥ６４８を直接参照している。
【００６７】
第８プログラムモジュール６６８において、コード群Ｈ６４０は、矢印６５１’で示すようにコード関数Ｊ６５０を直接参照している。コード群Ｈ６４０は、矢印６５３’で示すようにコード関数Ｋ６５２も直接参照している。コード関数Ｊ６５０は、矢印６５５で示すようにコード関数Ｋ６５２を直接参照している。
【００６８】
ここでは、１２個の内部的な呼び出し、すなわち、１２の直接参照と、４つのみの外部的な呼び出し、すなわち、間接参照をファンクションコールツリー６６０において行っている。間接参照の個数を半分に減らすことによって、望まれざるオーバーヘッドの量が最小化される。
【００６９】
ＬＳ３０２に読み込むことのできるモジュールの個数は、ＬＳ３０２のサイズとモジュール自身のサイズによって制限される。しかしながら、どのように参照がなされるかについてのコード解析は、プログラムモジュールが必要とされる前にＬＳ３０２にプログラムモジュールをロードしたり、アンロードすることができる強力なツールを供給する。プログラムモジュールが必要になることをある箇所において決定することができるならば、そのモジュールの読み込みを前もって行うことができ、オンデマンドでモジュールを読み込むときの遅延を減少することができる。与えられたモジュールが使われることが完全にはわからない場合であっても、そのモジュールが使われる可能性が非常に高い（たとえば、７５％以上）ならば、そのモジュールを予測して読み込むことは、多くの場合、より効率的である。
【００７０】
参照は、厳密に作成することもできるが、参照が現実に使われる可能性に応じて、オンデマンドで検査を行ってもよい。そのような読込みルーチンのためのプログラムの挿入個所は、コンパイラもしくは同等のツールを使って統計的に決定することができる。挿入個所は、モジュールが生成される前に静的に決定することもできる。挿入個所の有効性は、実行時の状態に基づいて決定することができる。例えば、読み込みが行われるべきか否かを判断する読み込みルーチンを利用してもよい。好ましくは、実行時において、読み込まれたプログラムモジュールの集合に対してローディングやアンローディングの量が最小化される。実行時にプロファイルを解析することによりは、読み込まれるそれぞれのモジュールの位置を決定する為の最新情報を供給することができる。典型的なスタックの管理によって、さらなる呼び出しを伴わないモジュールに対しては、任意の読み込み箇所が選択されることになる。例えば、従来のスタック管理処理においては、スタックのフレームは、戻りポインタによって構成されている。関数が戻ったとき、呼び出しモジュールを含むモジュールは、呼び出されたときと同じ位置に配置されなければならない。モジュールが戻り時に同じ位置に読み込まれるかぎり、モジュールが新規に呼び出されるたびに、異なった位置に読み出すことができる。しかしながら、外部の関数呼び出しから戻る場合は、管理ルーチンは、呼び出しモジュールを元の位置に読み込む。
【００７１】
図７Ａは、本発明の実施例にかかる事前読み込み処理のフローダイアグラムの例を示す図である。まず、Ｓ７０２において初期化が実行される。Ｓ７０４においては、挿入個所がプログラムモジュールごとに決定される。上述したように、挿入個所は、コンパイラもしくはプロファイル解析ツールによって決定される。処理の実行の分岐のパスは、ツリー構造によって表される。参照を行なおうとしているか、または、行なわれる可能性があるかを判別するのはそのツリー構造の箇所である。例えば、０％から１００％の範囲における確率に基づいて、判別する。１００％とは、参照が明確に行われる場合をいい、０％とは、参照が行われないことをいう。挿入個所は、分岐の後に設置される。次に、Ｓ７０６において、モジュールもしくは複数のモジュールは、たとえば、ＤＭＡ転送装置などによって読み込まれる。読み込みは、コードの実行による遅延を最小化する為に、好ましくは、バックグラウンドの処理として実行される。次に、Ｓ７０８において、読み込みが完了したかどうかが判別される。読み込み処理が完了していない場合、Ｓ７１０において、コードの実行は、プログラムモジュールの全ての読み込みを許可するために停止されてもよい。読み込みが完了した場合、そのプロセスはＳ７１２において終了する。
【００７２】
図７Ｂは、図７Ａに示すプログラムモジュールの事前読み込みの例を示す図である。図７Ａに示すように、コード実行７２２は処理部、例えばＳＰＵ３００によって実行される。まず、第１の関数Ａが処理部によって実行されてもよい。第２の関数Ｂの挿入個所７２４が上述のように判別された場合、関数Ｂを含むプログラムモジュールは、たとえば、ＤＭＡ転送７２６などによって読み込まれる。ＤＭＡ転送７２６はＴＬＯＡＤの時間を要する。処理部が関数Ｂを実行する準備ができているなら、たとえば、関数Ａにおけるプログラムジャンプ７２８により、Ｓ７０８のようにプログラムモジュールＢの読み込みが完了したかを判別する。図７Ｂに示すように、ジャンプ（分岐）７２８が起こるまでにＤＭＡ転送７２６は完了していない。それゆえに、待ち時間ＴＷＡＩＴがＤＭＡ転送７２６が完了するまで存在する。処理部は、例えば、一つもしくはそれ以上のＮＯＰＳ（Ｎｏ  Ｏｐｅｒａｔｉｏｎ。空処理。）をＴＷＡＩＴの間実行する。ＴＷＡＩＴが終わった場合、処理部は、開始個所７３０の時点において、関数Ｂの処理を開始する。従って、待ち時間ＴＷＡＩＴを考慮すると、モジュールを先読みすることにより時間ΔＴだけ節約できることがわかる。
【００７３】
本実施例におけるプログラムモジュールを最適化する利益は、モジュールのローディングもしくはアンローディングの為の待ち時間を最小化することにある。最小化するための１つのファクタ（要因）は、モジュールの転送における遅延とその幅である。実際に、転送が行われる間に要する時間は、直接的には以下のファクタ（要因）に関係する。（ａ）参照が行われている回数。（ｂ）転送準備の為の時間。（ｃ）転送のサイズ。（ｄ）転送幅。他のファクタ（要因）としては、利用可能なメモリ空間のサイズである。
【００７４】
静的な解析がコード組織化の処理の一部として用いられている間は、一般的に、複数の関数間における関係を供給することに制限され、所定期間に関数に対して何回呼び出しが発生するかについての情報は供給しない。好ましくは、そのような静的なデータへの参照は、再グループ化におけるファクタとして用いられる。関数内における関数の呼び出し回数と呼び出し頻度についての情報を供給するためにコードの追加的な解析が用いられてもよい。また、ある態様においては、最適化は、静的な解析のみを使って取得された情報に制限される。
【００７５】
最適化アルゴリズムに含まれる他の要件としては、モジュールの予期されたレイアウトとサイズである。例えば、呼び出されるモジュールを読み込む（ロードする）ために呼び出す側のモジュールをアンロードしなければならない場合、そのアンロードにより、関数の呼び出しを完了する為のさらなる遅延が付加される。
【００７６】
最適化アルゴリズムの設計においては、一つまたはそれ以上のファクタ（例えば重み係数）が好ましくは含まれ、最適化を定量化するために用いられる。あるファクタにおいては、関数の参照は、好ましくは、呼び出しの頻度、モジュールの呼び出し回数、モジュールのサイズに重きがおかれる。例えば、モジュールの呼び出し回数にモジュールのサイズが乗算される。静的な解析においては、下位のファンクションコールツリーを呼び出す関数は、そのコールがより頻繁になされることを示すために、より大きな重み付けがなされる。
【００７７】
他の要素としては、モジュール内における呼び出し（ローカル参照）があった場合、その重み付けは０となるか、もしくは減少される。さらなる要件としては、コードの構造の解析を伴う関数からの呼び出しごとに異なった重みが設定される。例えば、呼び出しに関しては、一回のみの呼び出しは、ループの一部において何度もなされる呼び出しよりも低く重み付けされることが望ましい。さらに、ループの繰り返しの回数が決定される場合、その回数はループの呼び出しに対する重み付けのファクタとして用いられる。さらなる他の要件としては、単一の関数のみに使用される静的なデータ参照は、その関数に付加されているものとみなす。他の要件としては、静的なデータが異なった関数で共有されている場合、単一のモジュールの中にそれらの複数の関数を含めることが望ましい。
【００７８】
さらに他の要件としては、全体のプログラムが十分小さい場合、そのプログラムは、単一のモジュール内に配置されるべきである。または、そのプログラムは複数のモジュールに分割されるべきである。さらに他の要素として、そのプログラムモジュールが複数のモジュールに分割される場合、呼び出すモジュールと呼び出されるモジュールとが一緒にローカルメモリの中に入るようにモジュール群を組織化することが好ましい。プログラムを１つのモジュールに分割することに関する前述の二つの要件は、望ましい最適化アルゴリズムを達成するために他の要素を考慮して評価されるべきである。上述した図は、選択された一つもしくはそれ以上のファクタにしたがってなされるさまざまな再組織化について示した。
【００７９】
図８は、本発明の実施例にかかるネットワーク環境またはスタンドアロンで利用される様々なコンピュータデバイスを含むコンピュータネットワークのダイアグラム例を示す図である。コンピュータデバイスは、ユーザのさまざまなタイプの入力を用いるコンピュータタイプのデバイス、ディスプレイ、メモリ、およびプロセッサなどを含む。これらの構成は、典型的なパーソナルコンピュータ、ラップトップ、サーバ、ゲーム機、ＰＤＡなどに見られるものである。 例えば、図８は、コンピュータネットワーク８００を図示する。コンピュータネットワーク８００は、ネットワーク８７０を介してそれぞれ接続された、第１コンピュータ処理システム８１０と、第２コンピュータ処理システム８２０と、第３コンピュータ処理システム８３０と、第４コンピュータ処理システム８４０と、第５コンピュータ処理システム８５０と、第６コンピュータ処理システム８６０とを含む。それらは、ＬＡＮ、ＷＡＮ、インターネットなどのネットワーク８７０によって接続されている。また、有線であってもよく、無線であってもよく、またはそれらの組合せで接続されていてもよい。
【００８０】
それぞれのコンピュータ処理システムは、例えば、一つもしくはそれ以上のコンピュータデバイスを含む。コンピュータデバイスは、キーボード８１１やマウス８１２やさまざまな他のタイプによる入力、たとえば、ペン入力、ジョイスティック、ボタン、タッチスクリーン、などからユーザの入力を受け付ける。また、表示インタフェース８１３（接続部やポートやカードなど）が表示装置８１４に接続するためのものとして用いられている。また、表示装置８１４は、ＣＲＴ、ＬＣＤ、プラズマ画面、ＴＶ、プロジェクタなどが含まれる。それぞれのコンピュータは、好ましくは、通常の処理コンポーネントを含む。通常の処理コンポーネントはコンピュータ処理システムに含まれた一つまたは複数の処理部やメモリデバイスなどである。そのようなコンピュータデバイスに含まれるメモリと処理部は、例えば、上述した本発明のさまざまな実施例におけるプログラム参照を使ったプログラムモジュールの処理を実行するのに適している。メモリは、本発明に係るコード関数とデータ群とを記憶する内部および外部の記憶部を含むことができる。
【００８１】
本発明について、特定の実施例に関して記載した。これらの実施例は、本発明の目的および応用例を単に示したものにすぎないと理解される。したがって、多数の改良は、実施例から導出され、また、他の変形技術は、請求項によって定義された本発明の思想や範囲から逸脱することなく発明された発明されると理解される。
【図面の簡単な説明】
【００８２】
【図１】本発明の実施例にかかる基本的な処理モジュールもしくは処理要素の構成例を示す図である。
【図２】本発明の実施例にかかる複数のＰＥを含む処理部の構成例を示す図である。
【図３】本発明の実施例にかかるＳＰＵの構成例を示す図である。
【図４Ａ】本発明の実施例にかかるプログラムモジュールの使用に基づく記憶管理の例を示す図である。
【図４Ｂ】本発明の実施例にかかる第１のフローダイアグラム例を示す図である。
【図５Ａ】本発明の実施例にかかる第１プログラムモジュールと第２プログラムモジュールを含むプログラムモジュール群の構成例を示す図である。
【図５Ｂ】図５Ａのプログラムモジュール群の再グループ化の例を示す図である。
【図６Ａ】本発明の実施例にかかる第１プログラムモジュールと、第２プログラムモジュールと、第３プログラムモジュールと、第４プログラムモジュールとを含むコール関数のコールツリーファンクションコールツリーの構成例を示す図である。
【図６Ｂ】図６Ａのファンクションコールツリーを再グループ化したファンクションコールツリーの構成例を示す図である。
【図７Ａ】本発明の実施例にかかる事前読み込み処理のフローダイアグラムの例を示す図である。
【図７Ｂ】図７Ａに示すプログラムモジュールの事前読み込みの例を示す図である。
【図８】本発明の実施例にかかるネットワーク化された、もしくは、単独の様々なコンピュータデバイスを含むダイアグラム例を示す図である。
【符号の説明】
【００８３】
１００  ＰＥ、  １０２  入出力インタフェイス、  １０４  ＰＵ、  １０６  ＤＭＡＣ、  １０８  ＳＰＵ、  １１０  メモリインタフェイス、  １２０  ＰＥバス、  １２２  広帯域メモリバス、  １２４  入出力バス、  １３０  メモリ、  ２００  ＰＥ、  ２０２  共有バス、  ２０４  メモリバス、  ２０６  ＤＭＡＣ、  ２０８  メモリ、  ２１０  入出力バス、  ２１２  入出力制御部、  ２１４  入出力デバイス、  ３００  ＳＰＵ、  ３０２  ＬＳ、  ３０４  レジスタ、  ３０６  ＦＰＵ、  ３０８  ＩＵ、  ３１０  バス、  ３１２  バスインタフェイス、  ３１４  第１内部バス、  ３１６  第２内部バス、  ３１８  第３内部バス、  ４１４  管理ルーチン、  ５００  プログラムモジュール群、  ６００  ファンクションコールツリー、  ６６０  ファンクションコールツリー、  ７２４  挿入個所、  ７２６  ＤＭＡ転送、  ７２８  ジャンプ個所、  ７３０  開始個所、  ８００  コンピュータネットワーク、  ８１０  第１コンピュータ処理システム、  ８１１  キーボード、  ８１２  マウス、  ８１３  表示インタフェース、  ８１４  表示装置、  ８２０  第２コンピュータ処理システム、  ８３０  第３コンピュータ処理システム、  ８４０  第４コンピュータ処理システム、  ８５０  第５コンピュータ処理システム、  ８６０  第６コンピュータ処理システム、  ８７０  ネットワーク。
【図１】
2006107497.tif 000003
【図２】
2006107497.tif 000004
【図３】
2006107497.tif 000005
【図４Ａ】
2006107497.tif 000006
【図４Ｂ】
2006107497.tif 000007
【図５Ａ】
2006107497.tif 000008
【図５Ｂ】
2006107497.tif 000009
【図６Ａ】
2006107497.tif 000010
【図６Ｂ】
2006107497.tif 000011
【図７Ａ】
2006107497.tif 000012
【図７Ｂ】
2006107497.tif 000013
【図８】
2006107497.tif 000014