(57)【要約】【課題】回路規模を縮小した処理装置を提供する。【解決手段】処理装置１０は、演算処理を行う複数の演算ユニット１２ａ〜１２ｄを備える。第１選択回路１１０ａ〜１１０ｃは、各演算ユニット１２ａ〜１２ｄに対して、少なくとも１つのＲＡＭ１００ａ〜１００ｆを用いてアドレス空間を構成する。ＲＡＭ１００ａ〜１００ｆのそれぞれは、すべての演算ユニット１２ａ〜１２ｄに対して接続されているのではなく、その一部にのみ接続されている。【選択図】図４
2010146102.tif 000002
【特許請求の範囲】
【請求項１】
機能の変更が可能な演算処理装置であって、
演算処理を行なう複数の演算ユニットと、
複数の記憶領域と、
各演算ユニットに対して、少なくとも１つの記憶領域を用いてアドレス空間を構成する記憶領域構成回路と、を備え、
少なくとも１つの記憶領域は、複数の演算ユニットの一部にのみ接続されていることを特徴とする演算処理装置。
【請求項２】
機能の変更が可能な演算処理装置であって、
複数の独立した演算処理を行なう少なくとも１つの演算ユニットと、
複数の記憶領域と、
各演算処理に対して、少なくとも１つの記憶領域を用いてアドレス空間を構成する記憶領域構成回路と、を備え、
少なくとも１つの記憶領域は、複数の演算処理の一部にのみ利用されるように演算ユニットに接続されていることを特徴とする演算処理装置。
【請求項３】
前記記憶領域構成回路は、
供給されるアドレス信号の一部のビットに基づいて、
アドレス空間を構成する少なくとも１つの記憶領域のうち、データの書き込みもしくは読み出しを行う記憶領域を選択する制御回路と、
少なくとも１つの記憶領域から読み出されたデータからひとつを選択する読出データ選択回路と、を有し、
前記制御回路は、記憶領域ごとに設けられることを特徴とする請求項１または２に記載の演算処理装置。
【請求項４】
異なる記憶容量をもつ記憶領域によってアドレス空間を構成する場合に、アドレス空間は、記憶容量の小さい記憶領域から順に小さいアドレス値が割り当てられることを特徴とする請求項１から３のいずれかに記載の演算処理装置。
【請求項５】
アドレス空間を複数の記憶領域で構成し、同じ記憶容量の記憶領域が存在する場合に、同じ記憶容量の記憶領域の個数が多いものから順に、小さいアドレス値が割り当てられることを特徴とする請求項１から３のいずれかに記載の演算処理装置。
【請求項６】
複数の演算処理で、１つのアドレス空間を共用できることを特徴とする請求項１から５のいずれかに記載の演算処理装置。
【請求項７】
複数の演算処理で同じ記憶領域によって構成されたアドレス空間を共用する場合に、複数の演算処理が、共用するアドレス空間に同時にアクセスしないようにアクセスタイミングを制御することを特徴とする請求項６に記載の演算処理装置。
【請求項８】
前記演算ユニットは、論理回路の多段配列構造を有しており、
第１の演算処理が、第２の演算処理に対して構成されるアドレス空間を使用可能とする場合に、第１演算処理と第２演算処理が、共用するアドレス空間に同時にアクセスしないように、アドレス空間への出力または入力する段を制限することを特徴とする請求項７に記載の演算処理装置。
【請求項９】
前記記憶領域には、すべての演算処理が使用可能な記憶領域と、複数の演算処理のうちの一部のみが使用できる記憶領域とが存在することを特徴とする請求項１から８のいずれかに記載の演算処理装置。
【請求項１０】
複数の演算処理を実行することができ、かつ演算処理に対する記憶領域を構成可能な記憶領域構成回路を備えた演算処理装置に対して、各演算処理に割り当てる記憶領域を定める記憶領域割当方法であって、
各演算処理が保持しなければならないデータ量を取得するステップと、
使用可能な記憶領域の容量を取得するステップと、
各演算処理が保持しなければならないデータ量に応じて、各演算処理が使用可能な記憶領域を割り当てるステップと、
を備えることを特徴とする記憶領域割当方法。
【請求項１１】
記憶領域の割当が完了していない演算処理のうち、使用可能な記憶領域の総容量が最も小さい演算処理を選択するステップを有し、
選択した演算処理から、記憶領域の割り当てを行うことを特徴とする請求項１０に記載の記憶領域割当方法。
【請求項１２】
請求項１から９のいずれかに記載の演算処理装置であって、記憶領域構成回路は、請求項１０から１１のいずれかの記憶領域割当方法により各演算処理に対して割り当てられた記憶領域の関係を用いて、アドレス空間を構成することを特徴とする演算処理装置。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、演算処理に対してメモリを構成する技術に関し、特に機能の変更が可能な演算処理装置においてメモリを構成する技術に関する。
【背景技術】
【０００２】
近年、ＡＬＵ(Arithmetic Logic Unit)と呼ばれる基本演算機能を1つ以上持つ演算ユニットを備えた処理装置（プロセッサ）の開発が進められている（たとえば特許文献１参照）。この演算ユニットは、複数のＡＬＵを含むＡＬＵ列と、ＡＬＵ列の間に設けられた接続部を備えて構成される。処理装置においては、ＡＬＵアレイに対してコマンドデータが設定されることにより、ＡＬＵ回路の演算機能と、前後段のＡＬＵ列を接続する接続部が制御され、全体として所期の演算処理が実現される。コマンドデータは、一般にＣ言語等の高級プログラム言語で記述されたソースプログラムからデータフローグラフ（ＤＦＧ：Data Flow Graph）を作成し、その情報をもとに作成される。
【０００３】
複数の演算ユニットをもつ処理装置では、実現したい演算処理によって各演算ユニットの必要とするメモリ量が異なるため、メモリ構成を可変にできることが望ましい。そのため、メモリ再構成回路を備えた半導体装置を提案するものがある（たとえば特許文献２参照）。
【特許文献１】特開２００６−４０２５４号公報
【特許文献２】特開２００６−１８４５２号公報
【発明の開示】
【発明が解決しようとする課題】
【０００４】
しかしながら、特許文献２に開示された半導体装置では、すべての演算ユニットがすべてのＲＡＭを用いて、必要とする容量のメモリを構成する。そのため、メモリ再構成に必要なスイッチや配線が多くなり、半導体装置全体の回路規模が増大している。
【０００５】
本発明はこうした状況に鑑みてなされたもので、その目的は、回路規模の縮小化に貢献するメモリ構成技術を提供することにある。
【課題を解決するための手段】
【０００６】
上記課題を解決するために、本発明のある態様の演算処理装置は、機能の変更が可能な演算処理装置であって、演算処理を行なう複数の演算ユニットと、複数の記憶領域と、各演算ユニットに対して、少なくとも１つの記憶領域を用いてアドレス空間を構成する記憶領域構成回路とを備える。少なくとも１つの記憶領域は、複数の演算ユニットの一部にのみ接続されている。
【０００７】
本発明の別の態様もまた、演算処理装置である。この装置は、機能の変更が可能な演算処理装置であって、複数の独立した演算処理を行なう少なくとも１つの演算ユニットと、複数の記憶領域と、各演算処理に対して、少なくとも１つの記憶領域を用いてアドレス空間を構成する記憶領域構成回路とを備える。少なくとも１つの記憶領域は、複数の演算処理の一部にのみ利用されるように演算ユニットに接続されている。
【０００８】
本発明のさらに別の態様は、記憶領域割当方法である。この方法は、複数の演算処理を実行することができ、かつ演算処理に対する記憶領域を構成可能な記憶領域構成回路を備えた演算処理装置に対して、各演算処理に割り当てる記憶領域を定める記憶領域割当方法であって、各演算処理が保持しなければならないデータ量に応じて、各演算処理が使用可能な記憶領域を割り当てる。
【０００９】
なお、以上の構成要素の任意の組み合わせ、本発明の表現を方法、装置、システム、コンピュータプログラムとして表現したものもまた、本発明の態様として有効である。
【発明の効果】
【００１０】
本発明によれば、効率的なメモリ構成技術を提供することができる。
【発明を実施するための最良の形態】
【００１１】
図１は、実施の形態に係る処理装置１０の基本構成図である。処理装置１０は、集積回路装置２６、コンパイル部３０、データフローグラフ処理部３１、設定データ生成部３２および記憶部３４を備える。処理装置１０は、機能の変更が可能な演算処理装置として構成される。
【００１２】
集積回路装置２６は１チップとして構成され、演算ユニット１２、設定部１４、制御部１８、内部状態保持回路２０、第１フィードバック経路２４、メインメモリ２７および第２フィードバック経路２９を備える。演算ユニット１２は複数の演算器で構成され、設定を変更することにより、機能の変更を可能とするリコンフィギュラブル回路である。演算ユニット１２は組合せ回路または順序回路等の論理回路として構成される。第１フィードバック経路２４および第２フィードバック経路２９は、フィードバックパスとして機能し、演算ユニット１２の出力を、演算ユニット１２の入力に接続する。
【００１３】
演算ユニット１２は、それぞれが複数の演算機能を選択的に実行可能な論理回路の多段配列と、前段の論理回路の出力と後段の論理回路の入力の接続関係を設定可能な接続部とを備える。構造的には、複数の論理回路列の間に、論理回路列間の接続用結線を設定する接続部が設けられる。演算ユニット１２は、複数段に配列された各論理回路の機能、および論理回路間の接続を任意に設定することで、機能の変更を可能とする。
【００１４】
演算ユニット１２は、パイプライン構成を有し、複数のスレッドを同時に実行することができる。スレッドは、演算ユニット１２に実行させる処理単位であり、各スレッドの処理は、それ自体で完結する。複数のスレッドは、互いに独立して実行され、スレッド同士の間でデータの受け渡しがあるものであってもよい。処理装置１０は、複数種類の回路のコンフィギュレーションを演算ユニット１２上で同時に実現できる。
【００１５】
設定部１４は、第１回路設定部１４ａ、第２回路設定部１４ｂ、第３回路設定部１４ｃ、および第４回路設定部１４ｄを有し、演算ユニット１２に所期の回路を構成するための設定データ４０を供給する。各回路設定部１４ａ〜１４ｄは、プログラムカウンタのカウント値に基づいて、保持するデータを出力するコマンドメモリとして構成されてもよい。この場合、制御部１８がシーケンサとして機能してプログラムカウンタの出力を制御し、設定データ４０がコマンドメモリから出力されるコマンドデータとなる。
【００１６】
ここでは演算ユニット１２が、４段のＡＬＵ列で構成されたＡＬＵアレイであることを前提とする。具体的に、第１回路設定部１４ａ、第２回路設定部１４ｂ、第３回路設定部１４ｃおよび第４回路設定部１４ｄは、それぞれ異なるスレッドを実行するための設定データ４０を、演算ユニット１２のパイプラインにおいて、各段における接続部およびＡＬＵ列で構成されるリコンフィギュラブルユニットに所定の順序で供給する。これにより、ＡＬＵアレイの各段には、それぞれ異なる種類の回路の一部が構成されることになり、マルチスレッド処理機能が実現される。
【００１７】
内部状態保持回路２０は、例えばデータフリップフロップ（ＤＦＦ）などの順序回路として構成され、演算ユニット１２の出力を受け付ける。内部状態保持回路２０は第１フィードバック経路２４に接続されており、演算ユニット１２の出力を直接演算ユニット１２の入力にフィードバックさせる。なお第１フィードバック経路２４は、演算ユニット１２の最下段の出力のみを最上段に入力するように構成されてもよい。
【００１８】
メインメモリ２７は、演算ユニット１２から出力される出力データを格納するためのＲＡＭにより構成される。メインメモリ２７は、演算ユニット１２の出力データを一時的に保持し、演算ユニット１２に戻す機能をもつ。メインメモリ２７は、制御部１８からのチップイネーブル（ＣＥ）信号およびアドレス信号に基づいて、データの書込／読出を行う。メインメモリ２７は第２フィードバック経路２９に接続されており、制御部１８からの読出指示に基づいて、所期のタイミングでデータを演算ユニット１２の入力にフィードバックさせる。なお、設定部１４がコマンドメモリとして構成されている場合、コマンドメモリから供給されるコマンドデータで、メインメモリ２７のデータの書込／読出を行ってもよい。
【００１９】
処理装置１０においては、演算ユニット１２の出力を演算ユニット１２の入力にフィードバックする経路が、第１フィードバック経路２４および第２フィードバック経路２９の２系統存在する。第１フィードバック経路２４は、メインメモリ２７を介さないために、演算ユニット１２の出力データを高速にフィードバック処理することが可能である。一方、第２フィードバック経路２９は、制御部１８からの指示により所期のタイミングでデータ信号を演算ユニット１２に供給することができる。このように、第１フィードバック経路２４または第２フィードバック経路２９は、演算ユニット１２上に再構成する回路に応じて適宜使い分けられる。
【００２０】
演算ユニット１２は、機能の変更が可能な論理回路を有して構成される。複数の論理回路は、マトリックス状に配置された構造をとってもよい。各論理回路の機能と、論理回路間の接続関係は、設定部１４により供給される設定データ４０に基づいて設定される。また、論理回路内において、基本演算素子同士を接続する組合せ用結線も、設定データ４０に基づいて設定される。設定データ４０は、以下の手順で生成される。
【００２１】
集積回路装置２６により実現されるべきプログラム３６が、記憶部３４に保持されている。プログラム３６は、回路における処理の動作を記述した動作記述を示し、信号処理回路または信号処理アルゴリズムなどをＣ言語などの高級言語で記述したものである。コンパイル部３０は、記憶部３４に格納されたプログラム３６をコンパイルし、データフローグラフ（ＤＦＧ）３８に変換して記憶部３４に格納する。データフローグラフ３８は、回路における演算間の実行順序の依存関係を表現し、入力変数および定数の演算の流れをグラフ構造で示したものである。一般に、データフローグラフ３８は、上から下に向かって演算が進むように作成される。
【００２２】
データフローグラフ処理部３１は、コンパイル部３０により生成されたデータフローグラフ３８から、所定の規則を有するデータフローの一群を探索する。このデータフローの一群は、演算ノード間に所定の接続関係を有するノードの集合であって、予め記憶部３４において登録されている。データフローグラフ処理部３１は、所定のデータフローの一群を探索して、その一群を構成するノード数よりも少ない数のノードに置換する。
【００２３】
なお、データフローの一群から置換されたノードは、演算ユニット１２の論理回路で処理可能なノードである必要がある。これに対応して、論理回路は、置換されたノードを処理するために、自身のもつ複数の基本演算素子を所定の順序で組み合わせるための組合せ用結線を有して構成される。これにより、論理回路は基本演算素子の数を増やすことなく、組合せ用結線をもつことで、複数の基本演算素子により実行される新たな演算機能をもつことができる。言い換えると、論理回路における複数の基本演算素子の可能な組合せに応じて、所定の規則を有するデータフローの一群を予め登録し、データフローグラフ処理部３１が、１つの論理回路において実行可能なデータフローの一群を探索して、１つのノードに置換することが可能となる。
【００２４】
設定データ生成部３２は、データフローグラフ処理部３１により処理されたデータフローグラフ３８から設定データ４０を生成する。設定データ４０は、データフローグラフ３８を演算ユニット１２にマッピングするためのデータであり、演算ユニット１２における論理回路の機能や論理回路間の接続関係を定める。
【００２５】
なお設定データ生成部３２は、コンパイル部３０により生成されたメモリ（ＲＡＭ）と演算ユニット１２またはスレッドなどの演算処理単位との関係をもとに、メモリと演算ユニット１２との接続関係、およびメモリアクセスに関する制御を定める設定データ４０も生成する。この設定データ４０は、メインメモリ２７の再構成に利用される。
【００２６】
図２は、演算ユニット１２の構成を示す。演算ユニット１２は、複数の演算機能を選択的に実行可能な論理回路５０より構成される論理回路列を複数備える。具体的に、演算ユニット１２は、論理回路列の多段配列と、各段に設けられた接続部５２を備えて構成される。接続部５２は、前段の論理回路の出力と後段の論理回路の入力の任意の接続関係あるいは予め定められた接続関係の組合せの中から選択された接続関係を設定することができる。また接続部５２は、前段の論理回路の出力信号を保持することができる。演算ユニット１２では、論理回路の多段配列構造により、上段から下段に向かって演算が進められる。
【００２７】
演算ユニット１２は、論理回路５０としてＡＬＵ(Arithmetic Logic Unit)を有している。ＡＬＵは、複数種類の多ビット演算を選択的に実行可能な算術論理回路であって、論理和、論理積、ビットシフトなどの複数種類の多ビット演算を設定により選択的に実行できる。各ＡＬＵは、複数の演算機能を設定するためのセレクタを有して構成されている。図示の例では、ＡＬＵが、２つの入力端子と１つの出力端子を有して構成される。なおＡＬＵは、３つ以上の入力端子を有してもよく、また２つ以上の出力端子を有してもよい。
【００２８】
図示のように、演算ユニット１２は、縦方向にＸ個、横方向にＹ個のＡＬＵが配置されたＸ段Ｙ列のＡＬＵアレイとして構成される。図２は、４段のＡＬＵ列５３を有するＡＬＵアレイを示し、接続部５２ａ、ＡＬＵ列５３ａ、接続部５２ｂ、ＡＬＵ列５３ｂ、接続部５２ｃ、ＡＬＵ列５３ｃ、接続部５２ｄ、ＡＬＵ列５３ｄ、接続部５２ｅが、この順に接続されている。接続部５２と後段のＡＬＵ列５３はリコンフィギュラブルユニットを構成し、リコンフィギュラブルユニットにおいて接続部５２は、外部から入力される変数や定数を、後段のＡＬＵ列５３における所期のＡＬＵに供給する機能を有している。また接続部５２は、前段のＡＬＵの演算結果を外部に直接出力することもできる。なおＡＬＵアレイは、複数のＡＬＵの物理的配置がアレイ状である必要はなく、ＡＬＵ間の接続関係がアレイ状に構成されていればよい。
【００２９】
ＡＬＵ１１、ＡＬＵ１２、・・・、ＡＬＵ１Ｙから構成される第１段のＡＬＵ列５３ａには、接続部５２ａを介して変数や定数が入力され、設定された所定の演算がなされる。演算結果の出力は、接続部５２ｂに設定された接続にしたがって、ＡＬＵ２１、ＡＬＵ２２、・・・、ＡＬＵ２Ｙから構成される第２段のＡＬＵ列５３ｂに入力される。接続部５２ｂにおいては、ＡＬＵ列５３ａの出力とＡＬＵ列５３ｂの入力の間で任意の接続関係、あるいは予め定められた接続関係の組合せの中から選択された接続関係を実現できるように結線が構成されており、設定により所期の結線が有効となる。以下、最終段である接続部５２ｅまで同様の構成である。各接続部５２はＤＦＦ回路としての機能を有し、最終段の接続部５２ｅは、図１に示す内部状態保持回路２０として機能してもよい。
【００３０】
回路のコンフィギュレーションは１クロックで行われる。具体的に、設定部１４が１クロックごとに設定データを演算ユニット１２にマッピングする。なお図１では、設定部１４が４つの第１回路設定部１４ａ〜第４回路設定部１４ｄを有しているが、図２に示すように演算ユニット１２が、５つの接続部５２および４つのＡＬＵ列５３で構成される場合は、各接続部５２および各ＡＬＵ列５３に設定データ４０を供給するために、設定部１４は、９つの回路設定部を有して構成されてもよい。
【００３１】
各ＡＬＵ列５３の出力は、後段の接続部５２に保持される。複数スレッドの実行中、接続部５２のＤＦＦ回路は、前段の論理回路から出力されるデータを保持し、次のクロックで、前段の論理回路が実行していたスレッドと同一のスレッドを実行する後段の論理回路に、保持したデータを供給する。このように、１つのスレッドの処理は、クロックごとに１つ後段のＡＬＵ列５３において実行されることになる。最終段で処理されると、また最上段のＡＬＵ列からクロックごとに１段ずつ下がっていく。これにより、マルチスレッド処理を実行でき、効率的な回路コンフィギュレーションを実現できる。
【００３２】
図３は、マルチスレッド処理を説明するための説明図である。第Ｔクロックで、ＡＬＵ列５３ａがスレッド１を、ＡＬＵ列５３ｂがスレッド４を、ＡＬＵ列５３ｃがスレッド３を、ＡＬＵ列５３ｄがスレッド２をそれぞれ処理する。次の第（Ｔ＋１）クロックで、ＡＬＵ列５３ａがスレッド２を、ＡＬＵ列５３ｂがスレッド１を、ＡＬＵ列５３ｃがスレッド４を、ＡＬＵ列５３ｄがスレッド３をそれぞれ処理する。このように、各スレッドが、１クロックごとに後段のＡＬＵ列５３により処理されることで、マルチスレッド処理が実行される。
【００３３】
図１に戻って、回路の構成時、制御部１８は、設定データ４０を記憶部３４から選択して読み出し、設定部１４に供給する。設定部１４は、各設定データ４０を格納する。設定部１４がコマンドメモリとして構成されている場合、制御部１８は設定部１４に対してプログラムカウンタ値を与え、設定部１４は、そのカウンタ値に応じて格納した設定データを、コマンドデータとして演算ユニット１２に設定する。なお、設定部１４は、キャッシュメモリや他の種類のメモリを有して構成されてもよい。なお、本例においては、制御部１８が記憶部３４から設定データ４０を受けて、その設定データを設定部１４に供給する構成について説明するが、制御部１８を介さずに、予め設定部１４に設定データを格納しておいてもよい。
【００３４】
設定部１４は、設定データ４０を演算ユニット１２に設定し、演算ユニット１２に回路を逐次再構成させる。これにより、演算ユニット１２は、所期の演算を実行できる。演算ユニット１２は、基本セルとして高性能の演算能力のあるＡＬＵを用いており、また演算ユニット１２および設定部１４を１チップ上に構成することから、コンフィグレーションを高速に１クロックで実現することができる。制御部１８はクロック機能を有し、クロック信号は、メインメモリ２７に供給される。また制御部１８は４進カウンタを含み、カウント信号を設定部１４に供給してもよい。
【００３５】
図１は、１つの演算ユニット１２を備えた処理装置１０の基本構成を示すが、以下において、処理装置１０は、複数の演算ユニット１２を有し、各演算ユニット１２がメインメモリ２７を構成するために使用可能な記憶領域（ＲＡＭ）を制限することで、全体の回路規模を小型化する。具体的には演算ユニット１２とＲＡＭの接続をハードウェア上で制限することで、回路規模を削減しつつ、接続制限されたなかで、演算ユニット１２にＲＡＭを効率的に割り当てる。なお以下では、処理装置１０が、複数の演算ユニット１２のメインメモリ２７の構成機能を有する例について説明するが、メインメモリ２７の再構成機能は、演算ユニット単位のほか、スレッド単位で実現されてもよい。
【００３６】
図４は、本実施形態の処理装置１０の構成の一例を示す。図４に示す処理装置１０は複数の演算ユニット１２ａ、１２ｂ、１２ｃ、１２ｄを備え、各演算ユニット１２に対してメモリを再構成可能なメモリ構成機能をもつ。メモリ群として、共通メモリ回路６０、個別メモリ回路７０、個別メモリ回路８０が設けられ、共通メモリ回路６０、個別メモリ回路７０、８０のそれぞれは、第１選択回路１１０と２つのＲＡＭ１００とから構成される。なお各メモリ回路は、３つ以上のＲＡＭ１００を有してもよく、また１つのＲＡＭ１００のみを有してもよい。なお処理装置１０は、複数の集積回路装置２６（図１参照）を備え、複数の集積回路装置２６で使用できる再構成機能をもつメモリを有した構成をとってもよい。またこの場合、再構成機能をもつメモリを使用しない演算ユニット１２が存在してもよい。
【００３７】
具体的に共通メモリ回路６０は、演算ユニット１２ａ、１２ｂ、１２ｄにより使用可能であり、第１選択回路１１０ａと、ＲＡＭ１００ｅ、１００ｆを有する。個別メモリ回路７０は、演算ユニット１２ａ、１２ｂのみにより使用可能であり、第１選択回路１１０ｂと、ＲＡＭ１００ａ、１００ｂを有する。個別メモリ回路８０は、演算ユニット１２ｃ、１２ｄのみにより使用可能であり、第１選択回路１１０ｃと、ＲＡＭ１００ｃ、１００ｄを有する。ここでは、ＲＡＭ１００ａの容量が２０４８バイトで、それ以外のＲＡＭ１００ｂ〜１００ｆの容量が１０２４バイトであるとし、各演算ユニット１２での演算結果や途中のデータを保持するメモリを、メモリ群のＲＡＭ１００を用いて構成する例を示す。
【００３８】
演算ユニット１２に対して、メモリ群との接続を選択する第２選択回路１２０が設けられる。第２選択回路１２０ａは、演算ユニット１２ａに対して設けられ、共通メモリ回路６０または個別メモリ回路７０のいずれかと演算ユニット１２ａとを接続する。第２選択回路１２０ｂは、演算ユニット１２ｂに対して設けられ、共通メモリ回路６０または個別メモリ回路７０のいずれかと演算ユニット１２ｂとを接続する。第２選択回路１２０ｃは、演算ユニット１２ｃに対して設けられるが、演算ユニット１２ｃは共通メモリ回路６０を使用しないため、この例では第２選択回路１２０ｃは存在しなくてもよい。第２選択回路１２０ｄは、演算ユニット１２ｄに対して設けられ、共通メモリ回路６０または個別メモリ回路８０のいずれかと演算ユニット１２ｄとを接続する。
【００３９】
処理装置１０において、第１選択回路１１０および第２選択回路１２０は、演算ユニットに対して記憶領域を必要とする場合に少なくとも１つの記憶領域（ＲＡＭ１００）を用いてアドレス空間を構成する記憶領域構成回路を形成する。処理装置１０において、少なくとも１つのＲＡＭ１００は、複数の演算ユニットの一部にのみ接続されており、これにより回路規模を削減することができる。たとえばＲＡＭ１００ｃ、１００ｄは、演算ユニット１２ｃ、１２ｄにのみ接続されており、演算ユニット１２ａ、１２ｂには接続されていない。
【００４０】
図５は、本実施形態の処理装置１０の構成の変形例を示す。図５に示す処理装置１０は、１つの演算ユニット１２が、複数のスレッドを処理する。図示の例では、演算ユニット１２ａが、スレッド１、２を実行し、演算ユニット１２ｂが、スレッド３、４を実行する。図５に示す処理装置１０は、各スレッドに対してメモリを再構成可能なメモリ構成機能をもつ。なお、図４および図５に示す処理装置１０において、メモリを構成するための第１選択回路１１０ａ〜１１０ｃ、第２選択回路１２０ａ〜１２０ｄの配置は同じであり、以下は、図４に示す処理装置１０に関連して、メモリの構成機能を説明する。
【００４１】
図６は、各演算ユニット１２に対してＲＡＭ１００を用いてメインメモリ２７を構成した例を示す。メインメモリ２７の構成手法については、図１６（ａ）〜図１６（ｃ）に関連して詳述する。この例では、演算ユニット１２ａが容量３０７２バイトのメモリを、演算ユニット１２ｂが容量１０２４バイトのメモリを、演算ユニット１２ｃが容量１０２４バイトのメモリを、演算ユニット１２ｄが容量２０４８バイトのメモリを必要としている。
【００４２】
図６に示すメモリ構成例では、演算ユニット１２ａに対して、共通メモリ回路６０のＲＡＭ１００ｅ（容量１０２４バイト）と、個別メモリ回路７０のＲＡＭ１００ａ（容量２０４８バイト）とにより、容量３０７２バイトの１つのメインメモリ２７ａが構成されている。演算ユニット１２ｂに対しては、個別メモリ回路７０のＲＡＭ１００ｂにより、容量１０２４バイトのメインメモリ２７ｂが構成され、演算ユニット１２ｃに対しては、個別メモリ回路８０のＲＡＭ１００ｃにより、容量１０２４バイトのメインメモリ２７ｃが構成され、メインメモリ２７ｄに対しては、個別メモリ回路８０のＲＡＭ１００ｄと、共通メモリ回路６０のＲＡＭ１００ｆとにより、容量２０４８バイトの１つのメインメモリ２７ｄが構成されている。図中、ａｄｄｒは、メインメモリ２７におけるアドレスを示す。
【００４３】
図７は、共通メモリ回路６０の構成を示す。共通メモリ回路６０は、第１選択回路１１０ａおよびＲＡＭ１００ｅ、１００ｆを有して構成されており、第１選択回路１１０ａは、メモリ制御回路１３０ｅ、１３０ｆと、読出制御回路１５０ａとを備える。メモリ制御回路１３０ｅ、１３０ｆの構成は同じであるため、メモリ制御回路１３０ｆの図示は省略する。また読出制御回路１５０ａは、読出データを、演算ユニット１２ａに設けられた第２選択回路１２０ａに供給するための回路であり、本実施形態では、共通メモリ回路６０が、演算ユニット１２ａ以外にも、演算ユニット１２ｂ、１２ｄに接続されているため、読出データを第２選択回路１２０ｂ、１２０ｄに供給するための読出制御回路（図示せず）がさらに設けられる。メモリ制御回路１３０はＲＡＭ１００ごとに設けられ、読出制御回路１５０は演算ユニット１２ごとに設けられる。なお、図７ではＲＡＭ１００を演算処理に割り当てる例として、ＲＡＭ１００を演算ユニット１２に対して割り当てる回路構成を示しているが、既述したようにＲＡＭ１００をスレッドに対して割り当てることも可能である。
【００４４】
なお図７は共通メモリ回路６０の構成を示しているが、個別メモリ回路７０、８０も、共通メモリ回路６０と同様に構成することができる。
【００４５】
メモリ制御回路１３０は、自身が制御するＲＡＭ１００へのアクセスであるかを判定し、それによってＲＡＭ１００を制御するための回路である。以下、ＲＡＭ１００ｅのメモリ制御回路１３０ｅを例に説明する。
【００４６】
ｓｅｔ_ａ、ｓｅｔ_ｂはメモリ構成情報である。具体的にｓｅｔ_ａはＲＡＭ１００ｅがどの演算ユニット１２のメモリを構成しているか示す情報であり、ｓｅｔ_ｂは構成されたメモリのアドレス空間のうちのどこに相当するか示す情報である。なおｓｅｔ_ａ、ｓｅｔ_ｂは、どの演算ユニット１２にも使用されないという情報を有してもよい。マルチプレクサ（ＭＵＸ）１３２、１３４、１３６は、接続する演算ユニット１２ａ、１２ｂ、１２ｄから供給される書込データ（ｗ_ｄａｔａ）、アドレス信号（ａｄｄｒ）、書込判定信号（ｗ_ｅｎ）のそれぞれから、ＲＡＭ１００ｅを使用可能な演算ユニット１２のうちのひとつを選択する回路であり、ｓｅｔ_ａによって制御される。例えば、図６のメモリ構成例では、ＲＡＭ１００ｅは演算ユニット１２ａのメインメモリ２７ａの一部として構成されているため、ｓｅｔ_ａは演算ユニット１２ａを示す信号となっており、ＭＵＸ１３２、１３４、１３６は、それぞれ演算ユニット１２ａに関するｗ_ｄａｔａ、ａｄｄｒ、ｗ_ｅｎを選択する。
【００４７】
アクセス判定回路１３８は、ａｄｄｒの特定ビット（以下、判定ビット信号と呼ぶ）を用いてａｄｄｒがｓｅｔ_ｂで示されたアドレス範囲に入っているかどうかを判定する。ここで、容量が１０２４バイトと２０４８バイトのような複数の種類のＲＡＭ１００が存在する場合、容量の小さいＲＡＭもしくは同じ容量のＲＡＭの個数が多い順に小さいアドレス値を割り当てるようにすると、ａｄｄｒの上位のビットを見ることによってアクセス判定回路１３８が効率的に判定することが可能である。例えば、図６に示すメモリ構成例では、演算ユニット１２ａはＲＡＭ１００ａとＲＡＭ１００ｅを使用するため、容量の小さいもしくは同じ容量のＲＡＭの個数が多いという条件に合致するＲＡＭ１００ｅをアドレス値０から１０２３に割り当て、ＲＡＭ１００ａをアドレス値１０２４から３０７１に割り当てる。そうすると、ａｄｄｒの下位から１１ビット目以上のビットを判定ビット信号とし、判定ビット信号が０であればＲＡＭ１００ｅへのアクセスであることが判定される。この場合、ｓｅｔ_ｂは０を示す信号となり、アクセス判定回路１３８は判定ビット信号が０かどうかを判定し、０ならアクティブ、０でないならネガティブとして結果を出力する。
【００４８】
ＣＥ生成回路１４２は、アクセス判定回路１３８の出力と選択されたｗ_ｅｎからＲＡＭ１００ｅの制御信号を生成する。例えば、アクセス判定回路１３８の出力と選択されたｗ_ｅｎがともにアクティブならＲＡＭ１００ｅに書き込みを行なわせる信号を出力し、アクセス判定回路１３８の出力がアクティブであって、ｗ_ｅｎがアクティブでないならＲＡＭ１００ｅに読み出しを行なわせる信号を出力する。
【００４９】
読出制御回路１５０ａは、メモリ群のＲＡＭ１００ｅ、１００ｆから読み出されたデータ（ｒ_ｄａｔａ）のうち、演算ユニット１２ａに渡す読出データを選択する。読出制御回路１５０ａは、読出データ変換回路１５２、１５４と読出データ選択回路１５６から形成される。以下、ＲＡＭ１００ｅに対して設けられた読出データ変換回路１５２を例に説明する。読出データ変換回路１５２は、ｒ_ｄａｔａが演算ユニット１２ａのｒ_ｄａｔａであればそのまま出力し、そうでなければ０（全ビット０）に変換して出力する。ｒ_ｄａｔａが演算ユニット１２ａのｒ_ｄａｔａであるかどうかは、ｓｅｔ_ａと、メモリ制御回路１３０ｅのアクセス判定回路１３８の出力をＲＡＭの読み出しにかかる時間分、遅延回路１４０にて遅延したデータ（select）とを用いて判定する。すなわち、ｓｅｔ_ａが演算ユニット１２ａを示す信号であり、かつアクセス判定回路１３８の出力であるselectがアクティブであれば演算ユニット１２ａのｒ_ｄａｔａであることが判定される。読出データ選択回路１５６は、各ＲＡＭ１００ｅ、１００ｆの読出データ変換回路１５２、１５４からの出力のうち、演算ユニット１２ａのｒ_ｄａｔａを選択する。この選択は、読出データ変換回路１５２、１５４の出力の論理和（ＯＲ）をとることで実現される。したがって、読出データ選択回路１５６からは、メモリ群のＲＡＭ１００ｅまたはＲＡＭ１００ｆから読み出されたデータが演算ユニット１２ａのｒ_ｄａｔａの場合はそのデータ値が出力され、演算ユニット１２ａのｒ_ｄａｔａでない場合は０が出力される。
【００５０】
なお読出データ変換回路１５２、１５４が、それぞれのｒ_ｄａｔａが演算ユニット１２ａのｒ_ｄａｔａでない場合に全ビット０に変換して出力するとしたが、他の信号値たとえば全ビット１に変換して出力してもよい。このとき、読出データ選択回路１５６は、読出データ変換回路１５２、１５４の双方からの出力が全ビット１のときは０を出力し、そうでない場合は、読出データ変換回路１５２、１５４の出力の論理積（ＡＮＤ）をとって出力する。
【００５１】
以上はＲＡＭ１００ｅのメモリ制御回路１３０ｅについての説明であるが、他のＲＡＭ１００のメモリ制御回路１３０も、同様の構成を有する。
【００５２】
図８は、第２選択回路１２０の回路構成を示す。第２選択回路１２０は、複数のメモリ群からのｒ_ｄａｔａのうち、ひとつを選択する。回路構成は、読出制御回路１５０ａの読出データ選択回路１５６と同様であり、各メモリ群からのデータの論理和（ＯＲ）をとる読出データ選択回路１５８を有して構成される。第２選択回路１２０ａは、読出データ選択回路１５８を有して、図６に示すメモリ構成例では、演算ユニット１２ａのメインメモリ２７ａを構成するＲＡＭ１００ａ、ＲＡＭ１００ｅの一方の読出データを演算ユニット１２ａに供給する。同様に第２選択回路１２０ｄは、演算ユニット１２ｄのメインメモリ２７ｄを構成するＲＡＭ１００ｄ、ＲＡＭ１００ｆの一方の読出データを演算ユニット１２ｄに供給する。第２選択回路１２０ｂは、ＲＡＭ１００ｂの読出データを演算ユニット１２ｂに供給し、第２選択回路１２０ｃは、ＲＡＭ１００ｃの読出データを演算ユニット１２ｃに供給する。
【００５３】
以上のように、演算ユニット１２によって使用できるメモリ群を制限することにより、選択回路や接続線を削減することができ、配置配線の自由度が高まるとともに、回路規模が削減される。これにより、動作速度の向上し、処理時間が短くなる。
【００５４】
さらに、読出制御回路１５０ａと第２選択回路１２０ａにおいて、それぞれ読出データ選択回路１５６と読出データ選択回路１５８とを設けることで、メモリ群と演算ユニット１２の間の配線数が少なくできる。また、読出データ変換回路１５２、１５４にて所望のデータでない場合は読出データを０値に変換することにより、論理和をとって所望のデータのみを出力できるようにしたことで、読出データ選択回路１５６での制御信号を不要にしている。これらにより、配置配線の自由度が高まり、さらには回路規模が削減され、動作速度が向上し、処理時間が短くなる。
【００５５】
共通メモリ回路６０のメモリ構成情報ｓｅｔ_ａ、ｓｅｔ_ｂは、設定部１４または制御部１８から供給されてもよく、リコンフィギュラブル回路である演算ユニット１２のコンフィギュレーション時に設定されてもよい。前者の場合は、プロセッサの動作時にダイナミックにメモリ構成を変更できるため、演算ユニット１２の処理バリエーションを増やすことができる。また、後者の場合は、メモリ構成情報をＲＡＭごとに独立して配置できるなど、配置配線の自由度が高まる。これにより回路規模が削減され、さらに動作速度の向上により、処理時間が短くなる。
【００５６】
また、ＲＡＭ１００によってアドレス値の割り当てを限定することによって、メモリ構成情報やメモリ群に供給するアドレスａｄｄｒのビット幅を削減することができ、回路規模が削減される。これにより、動作速度を向上でき、処理時間を短くできる。アドレス値の割当の限定手法としては具体的に、異なる記憶容量をもつＲＡＭ１００によってアドレス空間を構成する場合に、アドレス空間には、記憶容量の小さいＲＡＭ１００から順に小さいアドレス値を割り当てる。また、これとは別に、同じ記憶容量のＲＡＭ１００が存在する場合に、同じ記憶容量のＲＡＭ１００の個数が多いものから順に、小さいアドレス値を割り当ててもよい。また、複数の演算ユニット１２に使用可能なＲＡＭ１００に、小さいアドレス値を割り当ててもよい。
【００５７】
例えば、図４に示す処理装置１０の例では、共通メモリ回路６０のＲＡＭ１００ｅ、１００ｆの判定ビット信号を０もしくは１のみ、個別メモリ回路７０のＲＡＭ１００ａの判定ビット信号を０から５、ＲＡＭ１００ｂの判定ビット信号を０から３、個別メモリ回路８０のＲＡＭ１００ｃ、１００ｄの判定ビット信号を０から３と制限することができる。この場合、共通メモリ回路６０のＲＡＭ１００ｅ、１００ｆのｓｅｔ_ｂは1ビット、ＲＡＭ１００ｂ、１００ｃ、１００ｄのｓｅｔ_ｂは２ビットでよいことになる。なおアドレス値の割り当てを限定しなければ、いずれもｓｅｔ_ｂは３ビット必要となるため、アドレス値の割り当ての限定には、回路規模を削減できる利点がある。また、共通メモリ回路６０に送るアドレスａｄｄｒのビット幅は、制限がない場合１３ビット必要であるが、このように制限した場合、演算ユニット１２ａ、１２ｂの出力時に共通メモリ回路６０に送るアドレスａｄｄｒの１２ビット目を１２ビット目と１３ビット目の論理和値（ＯＲ値）に変換すれば、１２ビットでよいことになる。
【００５８】
図９は、本実施形態の処理装置１０の構成のさらなる変形例を示す。図９に示す処理装置１０は、１つの演算ユニット１２ａを備え、演算ユニット１２ａが、スレッド１、２、３、４を実行する。図９に示す処理装置１０は、各スレッドに対してメモリを再構成可能なメモリ構成機能をもつ。第２選択回路１２０ａ〜１２０ｄは、それぞれスレッド１〜４に対して、それぞれのスレッドとＲＡＭ１００との間のデータの送受を可能とするために設けられる。
【００５９】
このように演算ユニット１２が、複数の独立した処理（スレッド）を実行可能なリコンフィギュラブル回路で構成される場合、メモリ群の使用制限をスレッド単位に設定することも可能である。図４と比較すると、演算ユニット１２とスレッドとを単純に置き換えたものとみることができる。これは、図４では処理単位が演算ユニット１２であったのに対して、図９では処理単位がスレッドであることの違いでしかないためであり、したがって、本実施形態のメモリ構成技術は、処理単位ごとに実行可能であることが分かる。
【００６０】
なお、処理装置１０が複数の演算ユニット１２を備え、各演算ユニット１２ごとに個別メモリ回路が設けられ、またすべての演算ユニット１２が共通メモリ回路にアクセス可能な構成としてもよい。この構成によると、個別メモリ回路は演算ユニット専用のメモリとすることができるため、回路規模を削減できるとともに、共通メモリ回路はすべての演算ユニットで共用するために、メモリ構成の柔軟性を維持することも可能となる。
【００６１】
以上は、処理装置１０のハードウェア構成について説明した。以下では、マルチスレッド処理において、さらにメモリの有効利用を図るべく、メモリのアドレス空間を共用する技術について説明する。マルチスレッド処理は、複数の演算ユニット１２において実行されてよいが、以下では説明を簡単にするために、図９に示す処理装置１０の構成にしたがって、アドレス空間共用技術を説明する。
【００６２】
図１０は、演算ユニット１２の構成の一例を示す。この演算ユニット１２は、複数のスレッドがメモリのアドレス空間を共用するアドレス空間共用回路を構成する。このアドレス空間共用回路では、各スレッド１〜４のそれぞれに対してメモリが割り当てられているなかで、スレッド３がスレッド１のメモリのアドレス空間を共用できる。アドレス空間共用回路は、出力選択回路１７０および入力選択回路１８０、１８２により実現される。
【００６３】
ＭＵＸ１６０ａ、１６０ｂ、１６０ｃ、１６０ｄは、接続部５２の入力側に設けられ、接続部５２の下段のＡＬＵ列５３が処理するスレッドに割り当てられているＲＡＭ１００からの読出データを選択して出力する。具体的にＭＵＸ１６０ａは、各スレッドのＲＡＭ１００からの読出データのうち、１段目のＡＬＵ列５３ａが処理するスレッドのデータを選択して接続部５２ａに供給する。ＭＵＸ１６０ｅ、１６０ｆ、１６０ｇ、１６０ｈは、接続部５２の出力側に設けられ、ＲＡＭ１００にアクセス（書込または読出）するデータのうち、特定のスレッドを処理しているＡＬＵ列５３の下段の接続部５２からのデータを選択して出力する。具体的にＭＵＸ１６０ｅは、各ＡＬＵ列５３で処理されたスレッドのデータのうち、処理されたスレッド４のデータを選択して、スレッド４に割り当てられているＲＡＭ１００に出力する。これらのＭＵＸ１６０は、４進カウンタ（図示せず）から出力される制御信号により制御されてよい。
【００６４】
図１１は、スレッド１とスレッド３とでアドレス空間を共用するときの出力選択回路１７０の動作を示す。複数スレッドでメモリのアドレス空間を共用しない場合は、ＭＵＸ１６０ｅ、１６０ｆ、１６０ｇ、１６０ｈの選択により、各段のＡＬＵ列５３から所期のメモリにアクセスできる。一方、図１１に示すようにスレッド１とスレッド３とでメモリアドレス空間を共用する場合は、１段目のＡＬＵ列５３ａ、２段目のＡＬＵ列５３ｂからのみメモリにアクセスでき、またメモリからの読出データの入力は、３段目のＡＬＵ列５３ｃ、４段目のＡＬＵ列５３ｄに制限される。ここで段を制限するとは、読出データの入力を、特定の段に限定することを意味している。
【００６５】
出力選択回路１７０は、スレッド３がスレッド１用のメモリを使用しない場合は、常にスレッド１のメモリアクセスデータを選択する。一方でスレッド３がスレッド１用のメモリを使用する場合は、出力選択回路１７０が、スレッド１が１段目のＡＬＵ列５３ａまたは２段目のＡＬＵ列５３ｂで処理されているときはスレッド１のメモリアクセスデータを、それ以外のとき、つまりスレッド３が１段目のＡＬＵ列５３ａまたは２段目のＡＬＵ列５３ｂで処理されているときはスレッド３のメモリアクセスデータを選択する。すなわち、共用時の出力選択回路１７０は、図１１における出力選択回路１７０への２つの入力のうち、実線で示されている入力を常に選択するように動作する。この例では、第Ｔクロックで、ＡＬＵ列５３ａで処理されたスレッド１の出力データ、第（Ｔ＋１）クロックで、ＡＬＵ列５３ｂで処理されたスレッド１の出力データ、第（Ｔ＋２）クロックで、ＡＬＵ列５３ａで処理されたスレッド３の出力データ、第（Ｔ＋３）クロックで、ＡＬＵ列５３ｂで処理されたスレッド３の出力データが選択される。
【００６６】
入力選択回路１８０、１８２は、ＭＵＸ１６０ｃ、１６０ｄに供給される４進カウンタからの制御信号を変換する回路である。メモリアドレス空間の共用が行われない場合、ＭＵＸ１６０ｃは、各スレッドのメモリからの読出データのうち、常にＡＬＵ列５３ｃが処理するスレッドのデータを選択する。これは、入力選択回路１８０がない場合と同じである。そしてメモリアドレス空間の共用を行なう場合は、３段目のＡＬＵ列５３ｃがスレッド３を処理するときはスレッド１用メモリからのデータを選択し、それ以外のときは、３段目のＡＬＵ列５３ｃが処理するスレッドのメモリのデータを選択する。
【００６７】
同様に、メモリアドレス空間の共用が行われない場合、ＭＵＸ１６０ｄは、各スレッドのメモリからの読出データのうち、常にＡＬＵ列５３ｄが処理するスレッドのデータを選択する。これは入力選択回路１８２がない場合と同じである。そしてメモリアドレス空間の共用を行う場合は、４段目のＡＬＵ列５３ｄがスレッド３を処理するときはスレッド１用メモリからのデータを選択し、それ以外のときは、４段目のＡＬＵ列５３ｄが処理するスレッドのメモリのデータを選択する。すなわち、スレッド１用メモリからのデータは、図１１に示すように、スレッド１またはスレッド３が動作している３段目のＡＬＵ列５３ｃまたは４段目のＡＬＵ列５３ｄに入力される。
【００６８】
このように、メモリのアドレス空間を複数のスレッドで共用する場合、アクセス可能なリコンフィギュラブル回路の段を制限し、共用するアドレス空間に同時にアクセスしないようにアクセスタイミングを制御することにより、複数のスレッドが同時にメモリにアクセスしないようにしている。
【００６９】
図１２は、図９に示す処理装置１０において、スレッド１とスレッド３がメモリアドレス空間を共用したときのメモリ構成例を示す。スレッド３はスレッド１のメモリを使用することにより、スレッド３が、メモリアドレス空間の非共用時に使用できるメモリの容量よりも大きな容量を使用することができる。例えば、スレッド３が必要とするメモリの容量が２５００バイトであった場合、図９を参照すると、メモリ空間の非共用時には最大でもＲＡＭ１００ｃ、１００ｄの２０４８バイトしか利用できないため、スレッド３の処理を実行できるメモリを構成することができない。そのため、個別メモリ回路８０のＲＡＭ１００の数もしくは容量を増やす必要があるが、本実施形態のようにメモリアドレス空間をスレッド１と共用可能とすると、スレッド３が、２５００バイトのメモリを利用することが可能となる。
【００７０】
このとき、スレッド１の処理に必要なメモリの容量が５００バイトであった場合、メモリアドレス空間の非共用時に１０２４バイトの容量のＲＡＭをひとつ使うと、５２４バイトの容量が余ってしまうが、２５００バイトを必要とするスレッド３と３０７２バイトのメモリアドレス空間を共用することで、容量の余りは僅か７２バイトとなり、メモリを有効に使用することができる。このように、共用機能により、メモリの効率的な使用が可能となることで、ＲＡＭ１００の数やＲＡＭ１００の容量を少なく構成でき、回路規模を削減できる。さらに、スレッド３がスレッド１とメモリを共有することにより、スレッド４は個別メモリ回路８０のすべてのＲＡＭ１００ｃ、１００ｄを使用できることとなり、スレッド４で実行する処理のバリエーションを増やすことができる。
【００７１】
さらに、複数のスレッドでメモリのアドレス空間を共用することにより、メモリを介してデータの受け渡しが可能なため、処理の効率化ができ、処理時間を短くできる。ここでは、１つの演算ユニット１２ａのスレッド同士でのメモリアクセスをリコンフィギュラブル回路の段で制限することで、メモリのアドレス空間を共用する構成の例を示したが、異なる演算ユニット１２のスレッド同士でアドレス空間を共用できてもよく、演算ユニット１２同士でアドレス空間を共用できてもよい。また、ある演算ユニット１２のスレッドと、別の演算ユニット１２との間でアドレス空間を共用できてもよい。また、さらには、３つ以上の演算ユニット１２もしくはスレッドでアドレス空間を共用してもよい。
【００７２】
図１３は、２つの演算ユニット１２の構成例を示す。この例では、各演算ユニット１２ａ、１２ｂのスレッドに対して、ＲＡＭ１００が割り当てられている。演算ユニット１２ａ、１２ｂは、それぞれで実行するスレッドがメモリのアドレス空間を共用するアドレス空間共用回路を構成する。このアドレス空間共用回路では、演算ユニット１２ａで実行する各スレッド１〜４のそれぞれに対してメモリが割り当てられており、また演算ユニット１２ｂで実行する各スレッド５〜８のそれぞれに対してメモリが割り当てられているなかで、スレッド７がスレッド１とメモリのアドレス空間を共用し、スレッド７とスレッド１とは、それぞれ異なる演算ユニット１２ｂ、１２ａで処理されている。アドレス空間共用回路は、出力選択回路１７０ａおよび入力選択回路１８０ａ、１８２ａにより実現される。出力選択回路１７０ａ、入力選択回路１８０ａ、１８２ａの動作は、図１０に関連して説明したものと同じである。
【００７３】
図１４は、２つの演算ユニット１２の別の構成例を示す。ここでは、各演算ユニット１２ａ、１２ｂに対して、ＲＡＭ１００が割り当てられている。演算ユニット１２ａ、１２ｂは、メモリのアドレス空間を共用するアドレス空間共用回路を構成する。出力選択回路１７０ｂは、メモリのアドレス空間を共用しない場合は常に演算ユニット１２ａの出力を選択するように動作し、共用する場合は、４進カウンタ（図示せず）からの制御信号にしたがって演算ユニット１２ａまたは演算ユニット１２ｂの出力を選択する。たとえば出力選択回路１７０ｂは、４進カウンタの最初の２つのカウント値に対しては演算ユニット１２ａの出力を選択し、後の２つのカウント値に対しては演算ユニット１２ｂの出力を選択するように動作してよい。また、入力選択回路１８０ｂは、メモリのアドレス空間を共用しない場合は常に演算ユニット１２ｂ用メモリからのデータをＭＵＸ１６０から出力させ、共用する場合は、演算ユニット１２ａ用メモリまたは演算ユニット１２ｂ用メモリからのデータを選択する。この例では、共用を行なう場合、たとえば演算ユニット１２ａのメモリアクセスは１段目、２段目、入力は３段目、４段目に制限され、演算ユニット１２ｂのメモリアクセスは３段目、４段目、入力は１段目、２段目に制限される。
【００７４】
なお、演算ユニット１２が多段構成をとらない場合に、例えば、２つの演算ユニット１２ａ、１２ｂでメモリのアドレス空間を共用するのであれば、交互にメモリにアクセスするようにアクセスタイミングを制御すればよい。以上のようにメモリのアドレス空間をスレッド間、演算ユニット間、またはスレッドと演算ユニット間で共用可能とすることで、回路規模の削減や処理時間の短縮を実現でき、処理装置１０における消費電力の低減化や、処理装置１０の処理パフォーマンスの向上を実現することが可能となる。
【００７５】
以下において、メモリとの接続が制限された処理装置１０において、メモリを演算ユニット１２またはスレッドに対して、効率的に割り当てる手法について説明する。以下、メモリを割り当てる対象を「対象処理」とよぶ。ここで、処理装置１０において処理単位がスレッドである場合には、スレッドが対象処理であり、またマルチスレッド処理を行わない処理装置１０においては、演算ユニット１２が１つの処理を実行するため、演算ユニット１２が対象処理となる。
【００７６】
図１５は、メモリと対象処理との接続がハードウェア上で制限された処理装置１０の構成を示す。共通メモリ回路２１０は、ＲＡＭ２００ｅ、２００ｆ、２００ｇを有し、個別メモリ回路２２０は、ＲＡＭ２００ａ、２００ｂ、２００ｃを有し、個別メモリ回路２３０は、ＲＡＭ２００ｄを有する。対象処理２５０および対象処理２６０は、共通メモリ回路２１０および個別メモリ回路２２０を使用可能であり、対象処理２７０は、共通メモリ回路２１０および個別メモリ回路２３０を使用可能である。図１５中、各ＲＡＭ２００に対して付された数字は、メモリ容量（単位なし）を示す。たとえばＲＡＭ２００ａは、１２８のメモリ容量をもち、ＲＡＭ２００ｃは、３２のメモリ容量をもっている。また各対象処理に対して付された数字は、メモリに格納する必要があるデータ量を示す。たとえば対象処理２５０は、１９０のデータ量をメモリに格納する必要があり、また対象処理２６０は、６０のデータ量をメモリに格納する必要がある。以下、各対象処理２５０、２６０、２７０にメモリを割り当てる技術について説明する。
【００７７】
図１６（ａ）、図１６（ｂ）、図１６（ｃ）は、メモリ割当処理のフローチャートを示す。以下において、メモリと対象処理とが図１５に示すように接続されている場合に、各対象処理に対してメモリを割り当てる例を説明する。このメモリ割当処理では、各対象処理で扱うデータ量を、順次ＲＡＭ２００に振り分けていく。このフローチャートにおいて、「未割当データ」は、ＲＡＭ２００に対して、まだ割り当てられていないデータを意味し、たとえば対象処理２５０に対してＲＡＭ２００ａが既に割り当てられていると、未割当データは、６２（＝１９０−１２８）として表現される。メモリ割当処理は、図１に示すコンパイル部３０により実行される。コンパイル部３０は、メモリ割当処理を行う前に、各対象処理が保持しなければならないデータ量を取得する。また、使用可能なメモリの容量も予め取得する。
【００７８】
まず未割当データのある対象処理が存在するか判定される（Ｓ１０）。すべての対象処理に対してメモリが割り当てられていれば（Ｓ１０のＮ）、本フローは終了する。メモリ割当処理の開始時は、まだ対象処理に対してメモりが割り当てられていないため（Ｓ１０のＹ）、Ｓ１２に進む。
【００７９】
Ｓ１２では、未割当データのある対象処理のうち、使用可能なメモリの総容量が最も小さい対象処理を処理群ａとして設定する。使用可能なメモリの総容量とは、各対象処理がアクセス可能なメモリの総容量を意味する。図１５を参照すると、メモリのアクセス制限から、使用可能なメモリの総容量が最も小さい対象処理は対象処理２７０であるため、処理群ａに対象処理２７０が設定される。続いて、処理群ａに含まれる対象処理のうち、未割当データ量の最も大きい対象処理を、処理ｘとして設定する（Ｓ１４）。この場合、処理群ａに含まれる対象処理が、対象処理２７０のみであるため、対象処理２７０が処理ｘとして特定される。続いて、処理ｘが使用可能なすべてのＲＡＭを、候補メモリｂとして設定する（Ｓ１６）。図１５を参照して、対象処理２７０が使用可能なＲＡＭ２００ｄ、２００ｅ、２００ｆ、２００ｇが、候補メモリｂとして特定される。これらの候補メモリｂは、候補メモリ群を構成する。
【００８０】
このように対象処理２７０に候補メモリｂが設定できた場合（Ｓ１８のＹ）、候補メモリｂを容量が大きい順にソートし、その順番を保持する（Ｓ２０）。なお、メモリ容量が同じ場合には、使用される可能性のある対象処理の数が少ない順にソートする。候補メモリｂであるＲＡＭ２００ｄ、２００ｅ、２００ｆ、２００ｇに関して言えば、すべて同じ３２の容量を有しているが、ＲＡＭ２００ｄは、対象処理２７０のみにより使用される可能性があるのに対し、共通メモリ回路２１０に含まれる２００ｅ、２００ｆ、２００ｇは、対象処理２５０、２６０、２７０の３つの対象処理により使用される可能性がある。したがって、これらは、ＲＡＭ２００ｄ、２００ｅ、２００ｆ、２００ｇの順にソートされ、その順番が保持される。Ｓ２０にしたがってＲＡＭ２００の割り当てを試行する順番を定めることで、メモリの割当可能性を高めることができるとともに、割り当て後のメモリの総容量を小さく抑えることも可能となる。
【００８１】
まず、保持したＲＡＭ２００の順序を示すｉを１にセットし（Ｓ２２）、候補メモリ群のｉ番目のＲＡＭ２００を候補メモリｃとする（Ｓ２４）。ここでは、ＲＡＭ２００ｄが候補メモリｃとして設定される。続いて、候補メモリｃの容量が処理ｘの未割当データ量以下であるか判定される（Ｓ２６）。ここでは候補メモリｃ（ＲＡＭ２００ｄ）の容量が３２、処理ｘ（対象処理２７０）の未割当データ量が３０であり、候補メモリｃの容量が処理ｘの未割当データ量より大きい（Ｓ２６のＮ）。
【００８２】
続いて、処理群ａのうち、使用可能なメモリが処理ｘと同じ対象処理を処理群ｄ（処理ｘを含む）とし、処理群ｄの未割当データ量を、それよりも大きいメモリの最小容量の倍数で表した値の合計をｅとする（Ｓ２８）。ここでは、処理群ａが対象処理２７０のみであるため処理群ｄは対象処理２７０となり、その未割当データ量は３０である。このときメモリの最小容量は３２であり、３２の倍数で且つ３０よりも大きい値であって最小の値は３２である。したがって、ｅ＝３２と特定される。ここでは、最小容量のメモリをいくつ使用して未割当データ量が割り当て可能かを調べ、未割当データ量をメモリの最小容量の単位で表している。これは、Ｓ２８から以下のＳ３２ですべての未割当データが候補メモリｃより容量が小さいメモリを使って割り当てできるかを調べるためである。その際、例えば、未割当データ量が１０と２０の２つの処理がある場合、本来は容量３２のメモリをそれぞれの処理に割り当てることになるが、メモリの最小容量単位で表していないと、未割当データ量の合計が３０なので容量３２のメモリ１つで割り当てできると判断してしまう危険性があり、それを解決するためにメモリの最小容量単位で表している。次に、Ｓ３０では、候補メモリ群のうち、候補メモリｃより容量が小さいメモリの容量の合計をｆとする。ここでＲＡＭ２００ｄ〜２００ｇのうち、候補メモリｃ（ＲＡＭ２００ｄ）より容量が小さいメモリはないので、ｆ＝０となる。
【００８３】
ここでｅとｆとを比較し（Ｓ３２）、この場合はｅ（＝３２）＞ｆ（＝０）（Ｓ３２のＹ）であるため、候補メモリｃを処理ｘの未割当データに割り当てる（Ｓ３４）。これによりＲＡＭ２００ｄが対象処理２７０に割り当てられる。このとき処理ｘ（対象処理２７０）のデータはすべて割り当てられたことになり、したがって処理ｘに未割当データはなくなるため（Ｓ３６のＮ）、Ｓ１０に戻る。
【００８４】
このとき未割当データのある対象処理として対象処理２５０、２６０が存在し（Ｓ１０のＹ）、Ｓ１２では、使用可能なメモリの総容量が最も小さい対象処理が処理群ａとして選ばれる。ここでは、対象処理２５０、２６０の使用可能なメモリの総容量が同じであるため、双方の対象処理２５０、２６０が処理群ａとして設定される。続いてＳ１４で、未割当データ量の大きい対象処理２５０が処理ｘとして設定され、Ｓ１６で、対象処理２５０が使用可能なメモリであるＲＡＭ２００ａ、２００ｂ、２００ｃ、２００ｅ、２００ｆ、２００ｇが、候補メモリｂとして設定される。これらの候補メモリｂは、候補メモリ群を構成する。
【００８５】
候補メモリｂが存在しているため（Ｓ１８のＹ）、Ｓ２０で、候補メモリｂが容量の大きい順にソートされ、その順番が保持される。なお、メモリ容量が同じ場合には、使用される可能性のある対象処理の数が少ない順にソートする。候補メモリｂであるＲＡＭ２００ａ、２００ｂ、２００ｃ、２００ｅ、２００ｆ、２００ｇに関して言えば、候補メモリｂは、ＲＡＭ２００ａ、２００ｂ、２００ｃ、２００ｅ、２００ｆ、２００ｇの順にソートされ、その順番が保持される。
【００８６】
保持したＲＡＭ２００の順序を示すｉを１にセットし（Ｓ２２）、候補メモリ群のｉ番目のＲＡＭ２００を候補メモリｃとする（Ｓ２４）。ここでは、ＲＡＭ２００ａが候補メモリｃとして設定される。続いて、候補メモリｃの容量が処理ｘの未割当データ量以下であるか判定される（Ｓ２６）。ここでは候補メモリｃ（ＲＡＭ２００ａ）の容量が１２８、処理ｘ（対象処理２５０）の未割当データ量が１９０であり、候補メモリｃの容量が処理ｘの未割当データ量より小さい（Ｓ２６のＹ）。したがって候補メモリｃを処理ｘの未割当データに割り当て（Ｓ３４）、これによりＲＡＭ２００ａが対象処理２５０に割り当てられる。このとき処理ｘ（対象処理２５０）に未割当データが存在するため（Ｓ３６のＹ）、Ｓ１２に戻る。このとき対象処理２５０の未割当データ量は６２（＝１９２−１２８）となる。
【００８７】
続いて、Ｓ１２では、処理群ａに対象処理２５０（未割当データ量６２）、対象処理２６０（未割当データ量６０）が選ばれる。Ｓ１４では、処理群ａのうち、未割当データ量の大きい対象処理２５０が処理ｘに設定される。Ｓ１６で、処理ｘが使用可能なＲＡＭ２００ｂ、２００ｃ、２００ｅ、２００ｆ、２００ｇが候補メモリｂに設定される。候補メモリが存在するため（Ｓ１８のＹ）、Ｓ２０では、候補メモリｂがソートされて、ＲＡＭ２００ｂ、２００ｃ、２００ｅ、２００ｆ、２００ｇの順番が保持される。そして、ｉ＝１（Ｓ２２）として、Ｓ２４では、まずＲＡＭ２００ｂが候補メモリｃに設定される。
【００８８】
続いて、候補メモリｃの容量が処理ｘの未割当データ量以下であるか判定され（Ｓ２６）、ここでは候補メモリｃ（ＲＡＭ２００ｂ）の容量が１２８、処理ｘ（対象処理２５０）の未割当データ量が６２である（Ｓ２６のＮ）。Ｓ２８において、処理群ａのうち、使用可能なメモリが処理ｘと同じ対象処理を処理群ｄ（処理ｘを含む）とし、処理群ｄの未割当データ量を、それよりも大きいメモリの最小容量の倍数で表した値の合計をｅとする（Ｓ２８）。ここでは、処理群ａが対象処理２５０、２６０であり、対象処理２５０、２６０は使用可能なメモリが同じであるため、処理群ｄは対象処理２５０、２６０となる。このとき対象処理２５０、２６０の未割当データ量は、それぞれ６２、６０である。このときメモリの最小容量は３２であり、３２の倍数で且つ６２、６０よりも大きい値であって最小の値はそれぞれ６４、６４である。したがって、ｅ＝１２８（＝６４＋６４）と特定される。
【００８９】
次に、Ｓ３０では、候補メモリ群のうち、候補メモリｃ（ＲＡＭ２００ｂ）より容量が小さいメモリの容量の合計をｆとする。ここでＲＡＭ２００ｃ、２００ｅ、２００ｆ、２００ｇが、候補メモリｃ（ＲＡＭ２００ｂ）より容量が小さいため、ｆ＝１２８（＝３２＋３２＋３２＋３２となる。このときｅ＝ｆ（Ｓ３２のＮ）となり、ｉを１インクリメントして（Ｓ３８）、候補メモリ群のｉ番目のメモリと（ｉ−１）番目のメモリの容量が同じか判定される（Ｓ４０）。このとき２番目のメモリ（ＲＡＭ２００ｃ）と１番目のメモリ（ＲＡＭ２００ｂ）とは容量が異なるため（Ｓ４０のＮ）、Ｓ２４に戻る。Ｓ２４では、２番目のメモリであるＲＡＭ２００ｃが、候補メモリｃとして設定される。
【００９０】
Ｓ２６では、候補メモリｃの容量（３２）が、処理ｘの未割当データ量（６２）以下であるため（Ｓ２６のＹ）、候補メモリｃを処理ｘの未割当データに割り当て（Ｓ３４）、これによりＲＡＭ２００ｃが対象処理２５０に割り当てられる。このとき処理ｘ（対象処理２５０）に未割当データが存在するため（Ｓ３６のＹ）、Ｓ１２に戻る。このとき対象処理２５０の未割当データ量は３０（＝６２−３２）となる。
【００９１】
続いて、Ｓ１２では、処理群ａに対象処理２５０（未割当データ量３０）、対象処理２６０（未割当データ量６０）が選ばれる。Ｓ１４では、処理群ａのうち、未割当データ量の大きい対象処理２６０が処理ｘに設定される。Ｓ１６で、処理ｘが使用可能なＲＡＭ２００ｂ、２００ｅ、２００ｆ、２００ｇが候補メモリｂに設定される。候補メモリが存在するため（Ｓ１８のＹ）、Ｓ２０では、候補メモリｂがソートされて、ＲＡＭ２００ｂ、２００ｅ、２００ｆ、２００ｇの順番が保持される。そして、ｉ＝１（Ｓ２２）として、Ｓ２４では、まずＲＡＭ２００ｂが候補メモリｃに設定される。
【００９２】
続いて、候補メモリｃの容量が処理ｘの未割当データ量以下であるか判定され（Ｓ２６）、ここでは候補メモリｃ（ＲＡＭ２００ｂ）の容量が１２８、処理ｘ（対象処理２６０）の未割当データ量が６０である（Ｓ２６のＮ）。Ｓ２８において、処理群ａのうち、使用可能なメモリが処理ｘと同じ対象処理を処理群ｄ（処理ｘを含む）とし、処理群ｄの未割当データ量を、それよりも大きいメモリの最小容量の倍数で表した値の合計をｅとする（Ｓ２８）。ここでは、処理群ａが対象処理２５０、２６０であり、対象処理２５０、２６０は使用可能なメモリが同じであるため、処理群ｄは対象処理２５０、２６０となる。このとき対象処理２５０、２６０の未割当データ量は、それぞれ３０、６０である。このときメモリの最小容量は３２であり、３２の倍数で且つ３０、６０よりも大きい値であって最小の値はそれぞれ３２、６４である。したがって、ｅ＝９６（＝３２＋６４）と特定される。
【００９３】
次に、Ｓ３０では、候補メモリ群のうち、候補メモリｃ（ＲＡＭ２００ｂ）より容量が小さいメモリの容量の合計をｆとする。ここでＲＡＭ２００ｅ、２００ｆ、２００ｇが、候補メモリｃ（ＲＡＭ２００ｂ）より容量が小さいため、ｆ＝９６（＝３２＋３２＋３２となる。このときｅ＝ｆ（Ｓ３２のＮ）となり、ｉを１インクリメントして（Ｓ３８）、候補メモリ群のｉ番目のメモリと（ｉ−１）番目のメモリの容量が同じか判定される（Ｓ４０）。このとき２番目のメモリ（ＲＡＭ２００ｅ）と１番目のメモリ（ＲＡＭ２００ｂ）とは容量が異なるため（Ｓ４０のＮ）、Ｓ２４に戻る。Ｓ２４では、２番目のメモリであるＲＡＭ２００ｅが、候補メモリｃとして設定される。
【００９４】
Ｓ２６では、候補メモリｃの容量（３２）が、処理ｘの未割当データ量（６０）以下であるため（Ｓ２６のＹ）、候補メモリｃを処理ｘの未割当データに割り当て（Ｓ３４）、これによりＲＡＭ２００ｅが対象処理２６０に割り当てられる。このとき処理ｘ（対象処理２６０）に未割当データが存在するため（Ｓ３６のＹ）、Ｓ１２に戻る。このとき対象処理２６０の未割当データ量は２８（＝６０−３２）となる。
【００９５】
続いて、Ｓ１２では、処理群ａに対象処理２５０（未割当データ量３０）、対象処理２６０（未割当データ量２８）が選ばれる。Ｓ１４では、処理群ａのうち、未割当データ量の大きい対象処理２５０が処理ｘに設定される。Ｓ１６で、処理ｘが使用可能なＲＡＭ２００ｂ、２００ｆ、２００ｇが候補メモリｂに設定される。候補メモリが存在するため（Ｓ１８のＹ）、Ｓ２０では、候補メモリｂがソートされて、ＲＡＭ２００ｂ、２００ｆ、２００ｇの順番が保持される。そして、ｉ＝１（Ｓ２２）として、Ｓ２４では、まずＲＡＭ２００ｂが候補メモリｃに設定される。
【００９６】
続いて、候補メモリｃの容量が処理ｘの未割当データ量以下であるか判定され（Ｓ２６）、ここでは候補メモリｃ（ＲＡＭ２００ｂ）の容量が１２８、処理ｘ（対象処理２５０）の未割当データ量が３０である（Ｓ２６のＮ）。Ｓ２８において、処理群ａのうち、使用可能なメモリが処理ｘと同じ対象処理を処理群ｄ（処理ｘを含む）とし、処理群ｄの未割当データ量を、それよりも大きいメモリの最小容量の倍数で表した値の合計をｅとする（Ｓ２８）。ここでは、処理群ａが対象処理２５０、２６０であり、対象処理２５０、２６０は使用可能なメモリが同じであるため、処理群ｄは対象処理２５０、２６０となる。このとき対象処理２５０、２６０の未割当データ量は、それぞれ３０、２８である。このときメモリの最小容量は３２であり、３２の倍数で且つ３０、２８よりも大きい値であって最小の値はそれぞれ３２、３２である。したがって、ｅ＝６４（＝３２＋３２）と特定される。
【００９７】
次に、Ｓ３０では、候補メモリ群のうち、候補メモリｃ（ＲＡＭ２００ｂ）より容量が小さいメモリの容量の合計をｆとする。ここでＲＡＭ２００ｆ、２００ｇが、候補メモリｃ（ＲＡＭ２００ｂ）より容量が小さいため、ｆ＝６４（＝３２＋３２）となる。このときｅ＝ｆ（Ｓ３２のＮ）となり、ｉを１インクリメントして（Ｓ３８）、候補メモリ群のｉ番目のメモリと（ｉ−１）番目のメモリの容量が同じか判定される（Ｓ４０）。このとき２番目のメモリ（ＲＡＭ２００ｆ）と１番目のメモリ（ＲＡＭ２００ｂ）とは容量が異なるため（Ｓ４０のＮ）、Ｓ２４に戻る。Ｓ２４では、２番目のメモリであるＲＡＭ２００ｆが、候補メモリｃとして設定される。
【００９８】
Ｓ２６では、候補メモリｃの容量（３２）が、処理ｘの未割当データ量（３０）以上であるため（Ｓ２６のＹ）、候補メモリｃを処理ｘの未割当データに割り当て（Ｓ３４）、これによりＲＡＭ２００ｆが対象処理２５０に割り当てられる。このとき処理ｘ（対象処理２６０）には未割当データが存在しなくなり（Ｓ３６のＮ）、Ｓ１０に戻る。
【００９９】
このとき未割当データのある対象処理２６０が存在し（Ｓ１０のＹ）、Ｓ１２では、対象処理２６０が処理群ａとして選ばれる。続いてＳ１４で、対象処理２６０が処理ｘとして設定され、Ｓ１６で、対象処理２６０が使用可能なメモリであるＲＡＭ２００ｂ、２００ｇが、候補メモリｂとして設定される。
【０１００】
候補メモリｂが存在しているため（Ｓ１８のＹ）、Ｓ２０で、候補メモリｂが容量の大きい順にソートされ、その順番が保持される。このとき、候補メモリｂは、ＲＡＭ２００ｂ、２００ｇの順にソートされ、その順番が保持される。
【０１０１】
保持したＲＡＭ２００の順序を示すｉを１にセットし（Ｓ２２）、候補メモリ群のｉ番目のＲＡＭ２００を候補メモリｃとする（Ｓ２４）。ここでは、ＲＡＭ２００ｂが候補メモリｃとして設定される。続いて、候補メモリｃの容量が処理ｘの未割当データ量以下であるか判定される（Ｓ２６）。ここでは候補メモリｃ（ＲＡＭ２００ｂ）の容量が１２８、処理ｘ（対象処理２６０）の未割当データ量が２８であり、候補メモリｃの容量が処理ｘの未割当データ量より大きい（Ｓ２６のＮ）。
【０１０２】
続いて、処理群ａのうち、使用可能なメモリが処理ｘと同じ対象処理を処理群ｄ（処理ｘを含む）とし、処理群ｄの未割当データ量を、それよりも大きいメモリの最小容量の倍数で表した値の合計をｅとする（Ｓ２８）。ここでは、処理群ａが対象処理２６０のみであるため処理群ｄは対象処理２６０となり、その未割当データ量は２８である。このときメモリの最小容量は３２であり、３２の倍数で且つ２８よりも大きい値であって最小の値は３２である。したがって、ｅ＝３２と特定される。次に、Ｓ３０では、候補メモリ群のうち、候補メモリｃより容量が小さいメモリの容量の合計をｆとする。ここでＲＡＭ２００ｂ、２００ｇのうち、候補メモリｃ（ＲＡＭ２００ｂ）より容量が小さいメモリはＲＡＭ２００ｇであり、ｆ＝３２となる。
【０１０３】
このときｅ＝ｆ（Ｓ３２のＮ）となり、ｉを１インクリメントして（Ｓ３８）、候補メモリ群のｉ番目のメモリと（ｉ−１）番目のメモリの容量が同じか判定される（Ｓ４０）。このとき２番目のメモリ（ＲＡＭ２００ｇ）と１番目のメモリ（ＲＡＭ２００ｂ）とは容量が異なるため（Ｓ４０のＮ）、Ｓ２４に戻る。Ｓ２４では、２番目のメモリであるＲＡＭ２００ｇが、候補メモリｃとして設定される。
【０１０４】
このとき候補メモリｃ（ＲＡＭ２００ｇ）の容量が３２、処理ｘ（対象処理２６０）の未割当データ量が２８であり、候補メモリｃの容量が処理ｘの未割当データ量より大きい（Ｓ２６のＮ）。
【０１０５】
続いて、処理群ａのうち、使用可能なメモリが処理ｘと同じ対象処理を処理群ｄ（処理ｘを含む）とし、処理群ｄの未割当データ量を、それよりも大きいメモリの最小容量の倍数で表した値の合計をｅとする（Ｓ２８）。ここでは、処理群ａが対象処理２６０のみであるため処理群ｄは対象処理２６０となり、その未割当データ量は２８である。このときメモリの最小容量は３２であり、３２の倍数で且つ２８よりも大きい値であって最小の値は３２である。したがって、ｅ＝３２と特定される。次に、Ｓ３０では、候補メモリ群のうち、候補メモリｃより容量が小さいメモリの容量の合計をｆとする。ここでＲＡＭ２００ｂ、２００ｇのうち、候補メモリｃ（ＲＡＭ２００ｇ）より容量が小さいメモリは存在しないため、ｆ＝０となる。
【０１０６】
ここでｅとｆとを比較し（Ｓ３２）、この場合はｅ（＝３２）＞ｆ（＝０）（Ｓ３２のＹ）であるため、候補メモリｃを処理ｘの未割当データに割り当てる（Ｓ３４）。これによりＲＡＭ２００ｇが対象処理２６０に割り当てられる。このとき処理ｘ（対象処理２６０）のデータはすべて割り当てられたことになり、したがって処理ｘに未割当データはなくなるため（Ｓ３６のＮ）、Ｓ１０に戻る。Ｓ１０では、すべての対象処理についてメモリの割り当てが完了したため（Ｓ１０のＮ）、本フローが終了する。
【０１０７】
なお、Ｓ１８において候補メモリｂが存在しない場合（Ｓ１８のＮ）、処理ｘが使用可能なメモリで、かつすでに割り当てられているメモリのうち割当先の処理が別のメモリに割当変更可能なメモリｘがあるか判定される（Ｓ４２）。そのようなメモリｘが存在しない場合（Ｓ４２のＮ）、割当ができず、本フローは終了する。一方で、そのようなメモリｘが存在する場合（Ｓ４２のＹ）、メモリｘの割当先の処理において、メモリｘの割当を別のメモリに変更し（Ｓ４４）、メモリｘを処理ｘの未割当データに割り当て（Ｓ４６）、Ｓ３６に移行する。このように、候補メモリｂが存在しない場合には、すでに割り当てられているメモリを変更することで、再度、メモリの割り当て処理を実行する。
【０１０８】
図１７は、対象処理に割り当てたＲＡＭを示す。
以上により、コンパイル部３０は、各対象処理へのメモリ割り当てを自動で行なうことができ、ユーザの開発効率を向上させることができる。また、この割当処理を実行することで、使用するメモリの総容量を極力小さくできる。メモリは一般的に容量が大きくなるほど消費電力が大きくなるため、使用するメモリの総容量を小さくすることで、メモリの消費電力を低減することができる。例えば、図１５において、本手法を用いず、対象処理２５０から順に、使用可能なＲＡＭ２００を、符号として付しているアルファベット順に割り当てていくと、対象処理２５０にはＲＡＭ２００ａ、２００ｂ、対象処理２６０にはＲＡＭ２００ｃ、２００ｅ、対象処理２７０にはＲＡＭ２００ｄ、２００ｆが割り当てられる。したがって、この場合の割り当てられたＲＡＭ２００の総容量は３８４となり、図１７における割り当てられたＲＡＭ２００の総容量（３２０）よりも大きくなる。
【０１０９】
今回開示された実施の形態はすべての点で例示であって制限的なものではないと考えられるべきである。本発明の範囲は上記した説明ではなくて特許請求の範囲によって示され、特許請求の範囲と均等の意味および範囲内でのすべての変更が含まれることが意図される。
【図面の簡単な説明】
【０１１０】
【図１】実施の形態に係る処理装置の基本構成図である。
【図２】演算ユニットの構成を示す図である。
【図３】マルチスレッド処理を説明するための説明図である。
【図４】本実施形態の処理装置の構成の一例を示す図である。
【図５】本実施形態の処理装置の構成の変形例を示す図である。
【図６】各演算ユニットに対してＲＡＭを用いてメインメモリを構成した例を示す図である。
【図７】共通メモリ回路の構成を示す図である。
【図８】第２選択回路の回路構成を示す図である。
【図９】本実施形態の処理装置の構成のさらなる変形例を示す図である。
【図１０】演算ユニットの構成の一例を示す図である。
【図１１】スレッド１とスレッド３とでアドレス空間を共用するときの出力選択回路の動作を示す図である。
【図１２】図９に示す処理装置において、スレッド１とスレッド３がメモリアドレス空間を共用したときのメモリ構成例を示す図である。
【図１３】２つの演算ユニットの構成例を示す図である。
【図１４】２つの演算ユニットの別の構成例を示す図である。
【図１５】メモリと対象処理との接続がハードウェア上で制限された処理装置の構成を示す図である。
【図１６（ａ）】メモリ割当処理のフローチャートを示す図である。
【図１６（ｂ）】メモリ割当処理のフローチャートを示す図である。
【図１６（ｃ）】メモリ割当処理のフローチャートを示す図である。
【図１７】対象処理に割り当てたＲＡＭを示す図である。
【符号の説明】
【０１１１】
１０・・・処理装置、１２・・・演算ユニット、１４・・・設定部、１８・・・制御部、２０・・・内部状態保持回路、２４・・・第１フィードバック経路、２６・・・集積回路装置、２７・・・メインメモリ、２９・・・第２フィードバック経路、３０・・・コンパイル部、３１・・・データフローグラフ処理部、３２・・・設定データ生成部、３４・・・記憶部、３６・・・プログラム、３８・・・データフローグラフ、４０・・・設定データ、５０・・・論理回路、６０・・・共通メモリ回路、７０，８０・・・個別メモリ回路、１００・・・ＲＡＭ、１１０・・・第１選択回路、１２０・・・第２選択回路、１３０・・・メモリ制御回路、１３８・・・アクセス判定回路、１４０・・・遅延回路、１４２・・・ＣＥ生成回路、１５０・・・読出制御回路、１５２，１５４・・・読出データ変換回路、１５６，１５８・・・読出データ選択回路、１７０・・・出力選択回路、１８０，１８２・・・入力選択回路、２００・・・ＲＡＭ、２１０・・・共通メモリ回路、２２０，２３０・・・個別メモリ回路。
【図１】
2010146102.tif 000003
【図２】
2010146102.tif 000004
【図３】
2010146102.tif 000005
【図４】
2010146102.tif 000006
【図５】
2010146102.tif 000007
【図６】
2010146102.tif 000008
【図７】
2010146102.tif 000009
【図８】
2010146102.tif 000010
【図９】
2010146102.tif 000011
【図１０】
2010146102.tif 000012
【図１１】
2010146102.tif 000013
【図１２】
2010146102.tif 000014
【図１３】
2010146102.tif 000015
【図１４】
2010146102.tif 000016
【図１５】
2010146102.tif 000017
【図１６（ａ）】
2010146102.tif 000018
【図１６（ｂ）】
2010146102.tif 000019
【図１６（ｃ）】
2010146102.tif 000020
【図１７】
2010146102.tif 000021