(57)【特許請求の範囲】
【請求項１】
アキュムレータにキューを用いるキュープロセッサにおいて、
フェッチされた複数の命令を実行するために必要なデータが前記キューにあるか否かをチェックし、必要なデータが前記キューにある場合には、実行可能な命令をすべて同時に実行ユニットに送る並列実行命令発行ユニットを備えたことを特徴とするキュープロセッサ。
【請求項２】
請求項１記載のキュープロセッサにおいて、前記キューが循環キューであることを特徴とするキュープロセッサ。
【請求項３】
請求項１又は２に記載のキュープロセッサにおいて、前記キューの取り出し口を示すヘッドポインタからの相対位置を示す情報に基づいて前記キュー上のデータを参照することを特徴とするキュープロセッサ。
【請求項４】
請求項１〜３の何れか１項に記載のキュープロセッサにおいて、前記キューは複数組のポインタを有し、前記並列実行命令発行ユニットは、各ポインタ組に対して１つのスレッドを割り当てることによって、マルチスレッド処理を実行することを特徴とするキュープロセッサ。
【発明の詳細な説明】
【０００１】
【発明の属する技術分野】
本発明は、ＦＩＦＯ（先入れ先出し）方式のメモリの一種であるキューをアキュムレータとして用いたキュープロセッサに関するものである。ここで、アキュムレータとは主に計算の途中結果を入れる高速なメモリであり、一般のプロセッサではレジスタ又は汎用レジスタと呼ばれるものに相当する。
【０００２】
【従来の技術】
電子計算機の一般のプロセッサは、（１）ランダムアクセスメモリの一種であるレジスタをアキュムレータとして使ったプロセッサである。
【０００３】
これとは別に、（２）ＦＩＬＯ（先入れ後出し）方式のメモリを用いたスタック計算機が提案されている。この方式は通信量の問題を解決することを中心にしてＪａｖａという言語で使われている。
【０００４】
【発明が解決しようとする課題】
しかしながら、上記した（１）のレジスタをアキュムレータとして使ったプロセッサの場合、命令一つ一つでレジスタを指定しなければならないので、レジスタの抽象化が難しく、また命令長が長くなるため、プロセス切替えが遅くなる、あるいはプログラム長が長くなるなどの問題があった。特に、インターネット化が進展する現在では、通信量はさらに多くなる一方であるため、改善が求められている。
【０００５】
また、上記した（２）のスタックを使った方式は、出来たデータをすぐ使う方式であるため、並列処理が困難であるという問題があった。
【０００６】
本発明は、上記状況に鑑みて、命令長及びプログラム長を短くするとともに、並列実行を可能にし、プロセッサを高速化することができるキュープロセッサを提供することを目的とする。
【０００７】
【課題を解決するための手段】
本発明は、上記した目的を達成するために、
〔１〕アキュムレータにキューを用いるキュープロセッサにおいて、フェッチされた複数の命令を実行するために必要なデータが前記キューにあるか否かをチェックし、必要なデータが前記キューにある場合には、実行可能な命令をすべて同時に実行ユニットに送る並列実行命令発行ユニットを備えたことを特徴とする。
【０００８】
〔２〕上記〔１〕記載のキュープロセッサにおいて、前記キューが循環キューであることを特徴とする。
【０００９】
〔３〕上記〔１〕又は〔２〕に記載のキュープロセッサにおいて、前記キューの取り出し口を示すヘッドポインタからの相対位置を示す情報に基づいて前記キュー上のデータを参照することを特徴とする。
【００１０】
〔４〕上記〔１〕〜〔３〕の何れか１項に記載のキュープロセッサにおいて、前記キューは複数組のポインタを有し、前記並列実行命令発行ユニットは、各ポインタ組に対して１つのスレッドを割り当てることによって、マルチスレッド処理を実行することを特徴とする。
【００１１】
このように、本発明によれば、アキュムレータにキューを用い、このキューを同時アクセス可能なものとする。一般にキューは後ろからデータを一つ一つ入れて前から一つ一つ出すメモリであるが、格納する場所に関してはキューに従いながら、ランダムに複数データの格納と複数データの取り出しを可能とする。また、このキュー内のデータを監視することによって実行可能命令を検出する機能を付加し、並列実行可能なプロセッサを構築することができる。
【００１２】
そして、キューはごく一般的なメモリであるので、その構成は簡単であり、この方法により、プログラム量の減少、並列実行、プロセス切替えの高速化、マルチスレッド実行の簡単化を図ることができる。
【００１３】
【発明の実施の形態】
以下、本発明の実施例を図面に従って詳細に説明する。
【００１４】
図１は本発明の実施例を示す並列プログラムを図形的に示した図、図２は本発明の実施例におけるキューの内容の移りかわりを示す図である。
【００１５】
図１において、ｍ１からｍ６はメモリとキューと呼ばれるレジスタ間のデータの移動を行うための命令で、ｌｄはメモリからキューへ、ｓｔはキューからメモリへデータを移動させる命令である。Ａ１からＡ４は演算命令で、＊，＋，／はそれぞれ掛け算（ｍｕｌ）、足し算（ａｄｄ）、割り算（ｄｉｖ）命令を意味する。キューはテール（後ろ）からデータを入れ、ヘッド（前）からデータを取り出すレジスタである。なお、ｃｏｐｙ  １は１つ前の命令が計算した値を１つ後にコピーする命令である。
【００１６】
キュー計算法ではプログラムを図２に示すようにキューを使って計算をする。基本的なキュー計算法では命令を一つ一つ順番に実行する。図の右側がキュー内のデータの移り変わり、左側が実行した命令を示す。また、キューには右からデータを入れ、左から取り出す。計算順序は図１の破線矢印の順番である。
【００１７】
まず、最初にｌｄ  ａ  命令でａをキューに入れ、次に、ｌｄ  ｂ，ｌｄ  ｃ，ｌｄ  ｄ命令でｂ，ｃ，ｄを入れる。次に、ｍｕｌ命令でキューのヘッド（先端）からａ，ｂを取り出して掛け算を行い、その結果をキューのテール（後ろ）に入れる。次に、ｃｏｐｙ  １命令でいま計算した値ａｂをテールの１つ後に入れる。次に、ａｄｄ命令でｃとｄを取り出して足し算を行い、その結果をキューのテールに入れる。その後、同様な方法でコピー（ｃｏｐｙ）や割り算（ｄｉｖ）、掛け算（ｍｕｌ）を行い、ｓｔ  ｅ，ｓｔ  ｆ命令でその結果をメモリに格納して計算が終わる。
【００１８】
今、図３に示すようにキューに同時にデータを入れたり出したり出来るようにすると、並列に計算をすることができる。このように、並列に計算すると図２では１２ステップかかっていた計算が４ステップで実行でき、大幅な高速化が実現できる。
【００１９】
一般に、キューは循環レジスタという技術を使って、循環キューとして実現されることが多い。すなわち、従来のキューではデータを取り出すと、キューの中をデータが動いて、そのスペースが詰められたが、実際上これは得策ではない。
【００２０】
それゆえ、図４に示すようにデータの取り出し口を示すＨＰ（ヘッドポインタ）、データの入口を示すＴＰ（テールポインタ）を用意してポインタを動かし、キューの出口と入口を動かしてデータを動かすことなくキューを実現する。
【００２１】
図４ではｄｉｖ，ｍｕｌ命令の実行が終わったときのキューの内容を表している。ＨＰとＴＰに囲まれている部分が実際のキューとして使われている部分である。
【００２２】
また、キューの最先端と最後端が接続されているとして（すなわち、円状に実現されているとして）最後尾にＴＰが来たら最先端から使い始める。これを循環キューと呼ぶ。
【００２３】
循環キューの内容は、使い終わった後でもそのデータはしばらく残っている。従って、このデータを再度使えば、図２，図３のｃｏｐｙ命令を省略することができる。この時のプログラムは以下のようである。
ｌｄ  ａ
ｌｄ  ｂ
ｌｄ  ｃ
ｌｄ  ｄ
ｍｕｌ
ａｄｄ
ｄｉｖ  −１，−２
ｍｕｌ  −２，−３
ｓｔ  ｅ
ｓｔ  ｆ
ここで、ｄｉｖ  −１，−２はＴＰから一つ前と二つ前のデータを参照して、ｄｉｖ計算をすることを意味し、ｍｕｌ  −２，−３はＴＰから二つ手前と三つ手前のデータを参照してｍｕｌ計算することを意味している。
【００２４】
このようにすると、キューのデータを複数回利用できるので、図５に示すように、キューに同じデータが入ることがなく、キューの無駄使いがなくなる。
【００２５】
キューのＨＰとＴＰを複数個用意すると図６のように複数個のキューを作ることができる。この場合、一つのキューで一つのプログラムを走らせることができるので、この図では３個のプログラムを同時に実行できる。すなわち、３スレッドの実現が可能である。このように、キュープロセッサでは比較的簡単にマルチスレッド化することが可能である。
【００２６】
図７は並列キュープロセッサの構造を示す図である。命令メモリ１にはプログラムが入っており、データメモリ５には処理するデータが入っている。
【００２７】
フェッチユニット２は命令メモリ１から複数個（１個を含む）の命令を取り出し、命令とキューとの関係を付ける。並列実行命令発行ユニット３は、命令を実行するのに必要なデータがキュー６にあるかどうかをチェックし、必要なデータがある命令を実行ユニット４に送る（命令発行）。このとき、実行可能な命令があるとそれらはすべて実行ユニット４に送られる。実行ユニット４は送られてきた命令のすべてを並列に実行する。命令実行の結果得られたデータはキュー６に格納される。
【００２８】
なお、本発明は上記実施例に限定されるものではなく、本発明の趣旨に基づいて種々の変形が可能であり、これらを本発明の範囲から排除するものではない。
【００２９】
【発明の効果】
以上、詳細に説明したように、本発明では、以下のような効果を奏することができる。
【００３０】
（Ａ）命令長及びプログラム長を短くすることができる。
【００３１】
（Ｂ）並列実行を可能にし、プロセッサを高速化することできる。
【００３２】
（Ｃ）アキュムレータを抽象化し取り扱いを容易にする。特に、プロセス切替えを高速化することができる。
【００３３】
（Ｄ）マルチスレッド実行が簡単にできる。
【図面の簡単な説明】
【図１】  本発明の実施例を示す並列プログラムを図形的に示した図である。
【図２】  本発明の実施例におけるキューの内容の移りかわりを示す図である。
【図３】  本発明の実施例を示すキューを同時にデータを入れたり出したりできるようにすることにより並列の計算をする方法の説明である。
【図４】  本発明の実施例を示す循環レジスタを使ったキューの説明図である。
【図５】  本発明の実施例を示す参照を使った計算時のキューの説明図である。
【図６】  本発明の実施例を示す複数キューの実現の説明である。
【図７】  本発明の実施例を示すキュープロセッサの構成図である。
【符号の説明】
１    命令メモリ
２    フェッチユニット
３    並列実行命令発行ユニット
４    実行ユニット
５    データメモリ
６    キュー
【図１】
0003701583.tif 000002
【図２】
0003701583.tif 000003
【図３】
0003701583.tif 000004
【図４】
0003701583.tif 000005
【図５】
0003701583.tif 000006
【図６】
0003701583.tif 000007
【図７】
0003701583.tif 000008