(57)【要約】【課題】  バッチスレッド処理基盤のプロセッサ、そのプロセッサを利用したバッチスレッド処理方法、及びバッチスレッド処理のためのコード生成装置を提供する。【解決手段】バッチスレッド処理基盤のプロセッサに関するものであって、プロセッサは、中央レジスタファイルと、２つ以上の機能ユニットと、中央レジスタファイルにアクセスするための１つ以上のポートを含む１つ以上の機能ユニットバッチと、を含み、機能ユニットバッチは、１つ以上のインストラクションを含むインストラクションバッチを行うが、インストラクションバッチ内の１つ以上のインストラクションを順次に行うことができる。【選択図】      図１
2014216021.tif 000002
【特許請求の範囲】
【請求項１】
中央レジスタファイルと、
複数の第１機能ユニットと、前記第１機能ユニットが前記中央レジスタファイルにアクセスするための第１入力ポートと、第１出力ポートとを含む第１機能ユニットバッチと、
複数の第２機能ユニットと、前記第２機能ユニットが前記中央レジスタファイルにアクセスするための第２入力ポートと、第２出力ポートとを含む第２機能ユニットバッチと、を含み、
前記第１機能ユニットバッチは、プログラムをなす１つ以上の第１インストラクションを含む第１インストラクションバッチを受信して、前記１つ以上の第１インストラクションを順次に行い、前記第２機能ユニットバッチは、前記プログラムをなす１つ以上の第２インストラクションを含む第２インストラクションバッチを受信して、前記１つ以上の第２インストラクションを順次に行う、プロセッサ。
【請求項２】
前記第１機能ユニットバッチは、前記複数の第１機能ユニットの入出力データを保存する１つ以上の第１ローカルレジスタファイルを含み、
前記第２機能ユニットバッチは、前記複数の第２機能ユニットの入出力データを保存する１つ以上の第２ローカルレジスタファイルを含む、請求項１に記載のプロセッサ。
【請求項３】
前記第１機能ユニットバッチは、前記複数の第１機能ユニットと、前記複数の第１機能ユニット間のコネクションと、前記１つ以上の第１ローカルレジスタファイルとを用いることにより、粗粒度再設定可能アレイ（ＣＧＲＡ）として動作し、
前記第２機能ユニットバッチは、前記複数の第２機能ユニットと、前記複数の第２機能ユニット間のコネクションと、前記１つ以上の第２ローカルレジスタファイルとを用いることにより、祖粒度再設定可能アレイ（ＣＧＲＡ）として動作する、請求項２に記載のプロセッサ。
【請求項４】
前記第１機能ユニットバッチの構造は、前記第２機能ユニットバッチの構造と同一である、請求項１ないし３のうち何れか１項に記載のプロセッサ。
【請求項５】
前記複数の第１機能ユニットは、前記１つ以上の第１インストラクションを処理し、
前記複数の第２機能ユニットは、前記１つ以上の第２インストラクションを処理する、請求項１ないし４のうち何れか１項に記載のプロセッサ。
【請求項６】
前記第１機能ユニットバッチは、特定サイクルの間にスキュードインストラクションバッチ情報を用いて、少なくとも１つ以上の第２インストラクションのうちの少なくとも何れか１つを実行し、
前記第２機能ユニットバッチは、特定サイクルの間にスキュードインストラクションバッチ情報を用いて、少なくとも１つ以上の第１インストラクションのうちの少なくとも何れか１つを実行する、請求項１ないし５のうち何れか１項に記載のプロセッサ。
【請求項７】
前記第１インストラクションバッチは、複数の第１インストラクションバッチを含み、前記第２インストラクションバッチは、複数の第２インストラクションバッチを含み、
前記第１機能ユニットバッチは、前記複数の第１インストラクションバッチを受信すると、前記複数の第１インストラクションバッチのそれぞれを、１つ以上のスレッドを含むスレッドグループ単位で順次に行い、
前記第２機能ユニットバッチは、前記複数の第２インストラクションバッチを受信すると、前記複数の第２インストラクションバッチのそれぞれを、スレッドグループ単位で順次に行う、請求項１ないし６のうち何れか１項に記載のプロセッサ。
【請求項８】
前記第１機能ユニットバッチ及び第２機能ユニットバッチは、あるインストラクションバッチに対するスレッドグループの遂行途中で、特定スレッドでブロックが発生し、前記ブロックが、前記インストラクションバッチに依存する他のインストラクションバッチに対する前記スレッドグループの遂行時までも続く場合、前記他のインストラクションバッチに対して前記ブロックが発生したスレッドを前記スレッドグループの最後に行う、請求項７に記載のプロセッサ。
【請求項９】
前記第１機能ユニットバッチ及び第２機能ユニットバッチは、あるインストラクションバッチに対するスレッドグループを行う途中で、条件分岐が発生する場合、前記スレッドグループを２つ以上のサブスレッドグループに分割し、各分岐に対して分割された２つ以上のサブスレッドグループを行う、請求項７に記載のプロセッサ。
【請求項１０】
前記第１機能ユニットバッチ及び第２機能ユニットバッチは、前記条件分岐に対する各分岐が終了して併合する場合、前記分割された２つ以上のサブスレッドグループを前記スレッドグループに併合し、該スレッドグループを実行する、請求項９に記載のプロセッサ。
【請求項１１】
中央レジスタファイルと、
複数の第１機能ユニットと、前記第１機能ユニットが前記中央レジスタファイルにアクセスするための第１入力ポートと、第１出力ポートとを含む第１機能ユニットバッチと、
複数の第２機能ユニットと、前記第２機能ユニットが前記中央レジスタファイルにアクセスするための第２入力ポートと、第２出力ポートとを含む第２機能ユニットバッチと、
前記複数の第１機能ユニット及び複数の第２機能ユニットのそれぞれに割り当てられるスキュードレジスタと、を含み、
前記スキュードレジスタのうちの何れか１つを通じてバッチインストラクションメモリに保存されたインストラクションを用いて何れか一サイクルに行われるスキュードインストラクションを生成し、該生成されたスキュードインストラクションを、前記スキュードレジスタの何れか１つに割り当てられた各機能ユニットに伝達する、プロセッサ。
【請求項１２】
前記バッチインストラクションメモリは、該バッチインストラクションメモリに対応する機能ユニットに伝達するインストラクションを保存するように、複数の第１機能ユニットと複数の第２機能ユニットとのそれぞれに対応する２つのユニットに提供される、請求項１１に記載のプロセッサ。
【請求項１３】
前記バッチインストラクションメモリのカーネルから引き出された少なくとも一部のインストラクションを保存する１つ以上のカーネルキューをさらに含み、
前記スキュードレジスタを通じて前記各カーネルキューに保存されたインストラクションを用いて何れか一サイクルに行われるスキュードインストラクションを生成して、前記割り当てられた各機能ユニットに伝達する請求項１１に記載のプロセッサ。
【請求項１４】
複数の第１機能ユニットを含む第１機能ユニットバッチと複数の第２機能ユニットを第２機能ユニットバッチとを含むプロセッサで処理される所定プログラムを分析するプログラム分析部と、
前記分析結果に基づいて、前記第１機能ユニットバッチ及び第２機能ユニットバッチでそれぞれ行われる１つ以上のインストラクションを含む第１インストラクションバッチと第２インストラクションバッチとを生成するインストラクションバッチ生成部と、
を含むコード生成装置。
【請求項１５】
前記インストラクションバッチ生成部は、前記プログラムに条件分岐文が前記分析結果として存在する場合、該条件分岐文の各分岐を処理するインストラクションが、異なるインストラクションバッチに含まれることを許容する、請求項１４に記載のコード生成装置。
【請求項１６】
前記インストラクションバッチ生成部は、各インストラクションバッチの総レイテンシーが類似するように、前記第１インストラクションバッチ及び第２インストラクションバッチを生成する、請求項１４に記載のコード生成装置。
【請求項１７】
前記インストラクションバッチ生成部は、第１インストラクションバッチ及び第２インストラクションバッチが行われる第１機能ユニットバッチまたは第２機能ユニットバッチの読み取りポート及び書き込みポートの数に基づいて、前記第１インストラクションバッチ及び第２インストラクションバッチを生成する、請求項１４ないし１６のうち何れか１項に記載のコード生成装置。
【請求項１８】
前記インストラクションバッチ生成部は、第１インストラクションバッチ及び第２インストラクションバッチを行う第１機能ユニットバッチまたは第２機能ユニットバッチの読み取りポート及び書き込みポートの数を超過することによる、中央レジスタファイルに対する前記第１インストラクションバッチ及び第２インストラクションバッチの読み取り要請及び書き込み要請の数が最小になるように、前記第１インストラクションバッチ及び第２インストラクションバッチを生成する請求項１７に記載のコード生成装置。
【請求項１９】
前記インストラクションバッチ生成部は、第１インストラクションバッチ及び第２インストラクションバッチを行う第１機能ユニットバッチまたは第２機能ユニットバッチに含まれた機能ユニットの数を超過することによる、インストラクションバッチのそれぞれに含まれたインストラクションの数が最小になるように、前記第１インストラクションバッチ及び第２インストラクションバッチを生成する請求項１４ないし１８のうち何れか１項に記載のコード生成装置。
【請求項２０】
前記インストラクションバッチ生成部は、あるインストラクションバッチでソースとして使用されることによる前記あるインストラクションバッチでの遅延の発生を最小化するように、前記第１インストラクションバッチ及び第２インストラクションバッチを生成する請求項１４ないし１９のうち何れか１項に記載のコード生成装置。
【請求項２１】
プロセッサがバッチスレッドを処理する方法において、
コード生成装置から生成された第１インストラクションバッチ及び第２インストラクションバッチを、複数の第１機能ユニットを含む第１機能ユニットバッチと、複数の第２機能ユニットを含む第２機能ユニットバッチとに入力する段階と、
前記第１機能ユニットバッチ及び第２機能ユニットバッチが、それぞれ第１インストラクションバッチ及び第２インストラクションバッチを順次に行う段階と、
を含むバッチスレッド処理方法。
【請求項２２】
前記インストラクションバッチを入力する段階において、
第１インストラクションバッチ及び第２インストラクションバッチをスレッドグループ単位で入力する、請求項２１に記載のバッチスレッド処理方法。
【請求項２３】
前記第１インストラクションバッチ及び第２インストラクションバッチを行う段階において、
前記スレッドグループに含まれた各スレッドをインターリーブド方式で切り替えながら、各インストラクションバッチに対するスレッドグループが実行される、請求項２２に記載のバッチスレッド処理方法。
【請求項２４】
前記第１インストラクションバッチ及び第２インストラクションバッチを行う段階において、
あるインストラクションバッチに対するあるスレッドグループの遂行途中で、特定スレッドでブロックが発生し、前記ブロックが、前記インストラクションバッチに依存する他のインストラクションバッチに対する前記スレッドグループの遂行時までも続く場合、前記他のインストラクションバッチに対して前記ブロックが発生したスレッドを前記スレッドグループの最後に行う、請求項２２に記載のバッチスレッド処理方法。
【請求項２５】
前記第１インストラクションバッチ及び第２インストラクションバッチを行う段階において、あるインストラクションバッチに対するスレッドグループを行う途中で、条件分岐が発生する場合、前記スレッドグループを２つ以上のサブスレッドグループに分割し、各分岐に対して前記分割された２つ以上のサブスレッドグループを行う、請求項２２に記載のバッチスレッド処理方法。
【請求項２６】
前記第１インストラクションバッチ及び第２インストラクションバッチを行う段階において、前記条件分岐に対する各分岐が終了して併合される場合、前記分割された２つ以上のサブスレッドグループを前記スレッドグループに併合し、該スレッドグループを実行する、請求項２５に記載のバッチスレッド処理方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、バッチスレッド処理基盤のプロセッサ、そのプロセッサを用いてバッチスレッドを処理する方法と、そのバッチスレッド処理基盤のプロセッサを支援するためのコード生成装置等に関する。
【背景技術】
【０００２】
粗粒度再設定可能アレイ（Ｃｏａｒｓｅ  Ｇｒａｉｎ  Ｒｅｃｏｎｆｉｇｕｒａｂｌｅ  Ａｒｒａｙ：以下、ＣＧＲＡと称する）は、多数の機能ユニット（ＦＵ：Ｆｕｎｃｔｉｏｎ  Ｕｎｉｔ）を配列（ａｒｒａｙ）形態で有しているハードウェアであって、速い速度の演算のために使われる。ＣＧＲＡは、ソフトウェアパイプライン技術を活用して、それぞれのデータ間の依存度（ｄｅｐｅｎｄｅｎｃｙ）が存在しても、処理効率（ｔｈｒｏｕｇｈｐｕｔ）を最大化することができる。しかし、データ処理過程のあらゆるスケジュールが、コンパイル段階でなされるために、コンパイル時間が長く、マルチスレッド（ｍｕｌｔｉ  ｔｈｒｅａｄ）の具現において、ハードウェアオーバーヘッドが大きくて、メモリアクセスなどの定義されていない、遅延時間の長い演算を行う時、効率が落ちる。
【０００３】
一方、ＳＩＭＴ（Ｓｉｎｇｌｅ  Ｉｎｓｔｒｕｃｔｉｏｎ  Ｍｕｌｔｉｐｌｅ  Ｔｈｒｅａｄ）は、ＣＧＲＡのように多数の機能ユニットを有し、１つのインストラクションを多数の機能ユニットが使って、各機能ユニットが、１つのスレッドを行う構造である。ＳＩＭＴは、多数の機能ユニットが同じインストラクション順序で多数のデータをそれぞれ処理するので、同じ過程で多くのデータを処理しなければならない大量の並列データ処理アプリケーション（ｍａｓｓｉｖｅｌｙ  ｐａｒａｌｌｅｌ  ｄａｔａ  ｐｒｏｃｅｓｓｉｎｇ  ａｐｐｌｉｃａｔｉｏｎ）に有利である。また、演算遅延（ｏｐｅｒａｔｉｏｎｌａｔｅｎｃｙ）が長い場合、他のスレッドを行うスレッドスイッチング（ｔｈｒｅａｄｓｗｉｔｃｈｉｎｇ）を通じて効率を高めうる。しかし、データ処理過程でそれぞれのデータ間に依存度が存在する場合、その処理が非常に難しいという問題がある。
【発明の概要】
【発明が解決しようとする課題】
【０００４】
本発明が解決しようとする課題は、バッチスレッド処理基盤のプロセッサ、そのプロセッサを利用したバッチスレッド処理方法、及びバッチスレッド処理のためのコード生成装置を提供することである。
【課題を解決するための手段】
【０００５】
一観点によるプロセッサは、
中央レジスタファイルと、
複数の第１機能ユニットと、前記第１機能ユニットが前記中央レジスタファイルにアクセスするための第１入力ポートと、第１出力ポートとを含む第１機能ユニットバッチと、
複数の第２機能ユニットと、前記第２機能ユニットが前記中央レジスタファイルにアクセスするための第２入力ポートと、第２出力ポートとを含む第２機能ユニットバッチと、を含み、
前記第１機能ユニットバッチは、プログラムをなす１つ以上の第１インストラクションを含む第１インストラクションバッチを受信して、前記１つ以上の第１インストラクションを順次に行い、前記第２機能ユニットバッチは、前記プログラムをなす１つ以上の第２インストラクションを含む第２インストラクションバッチを受信して、前記１つ以上の第２インストラクションを順次に行う、プロセッサである。
【図面の簡単な説明】
【０００６】
【図１】本発明の一実施形態によるプロセッサを示した図面である。
【図２】例題プログラムの制御流れグラフである。
【図３】図２の例に関し、一般的なＳＩＭＴ構造で行われる手続きを説明する図面である。
【図４Ａ】図２の例に関し、一般的なＣＧＲＡで行われる手続きを説明する図面である。
【図４Ｂ】図２の例に関し、一般的なＣＧＲＡで行われる手続きを説明する図面である。
【図４Ｃ】図２の例に関し、一般的なＣＧＲＡで行われる手続きを説明する図面である。
【図５Ａ】図２の例に関し、一実施形態によるプロセッサで行われる手続きを説明する図面である。
【図５Ｂ】図２の例に関し、一実施形態によるプロセッサで行われる手続きを説明する図面である。
【図６Ａ】本発明の一実施形態によるプロセッサの機能ユニットバッチにスキュードインストラクションが入力される例を説明する図面である。
【図６Ｂ】本発明の一実施形態によるプロセッサの機能ユニットバッチにスキュードインストラクションが入力される例を説明する図面である。
【図７Ａ】スキュードインストラクション入力のためのプロセッサの他の実施形態を示した図面である。
【図７Ｂ】スキュードインストラクション入力のためのプロセッサのさらに他の実施形態を示した図面である。
【図８】本発明の一実施形態によるバッチスレッド基盤のプロセッサを支援するためのコード生成装置のブロック図である。
【図９】本発明の一実施形態によるバッチスレッド基盤のプロセッサを用いてバッチスレッドを処理する方法のフローチャートである。
【発明を実施するための形態】
【０００７】
＜実施の形態の概要＞
本発明の一態様によれば、プロセッサは、中央レジスタファイルと、複数の第１機能ユニットと、第１機能ユニットが、中央レジスタファイルにアクセスするための第１入力ポート及び第１出力ポートを含む第１機能ユニットバッチと、複数の第２機能ユニットと、第２機能ユニットが、中央レジスタファイルにアクセスするための第２入力ポート及び第２出力ポートを含む第２機能ユニットバッチと、を含み、第１機能ユニットバッチは、プログラムに対する１つ以上の第１インストラクションを含む第１インストラクションバッチを受信して、１つ以上の第１インストラクションを順次に行い、第２機能ユニットバッチは、そのプログラムに対する１つ以上の第２インストラクションを含む第２インストラクションバッチを受信して、１つ以上の第２インストラクションを順次に行うことができる。第１機能ユニットバッチは、複数の第１機能ユニットの入出力データを保存する１つ以上の第１ローカルレジスタファイルをさらに含み、第２機能ユニットバッチは、複数の第２機能ユニットの入出力データを保存する１つ以上の第１ローカルレジスタファイルをさらに含みうる。
【０００８】
第１機能ユニットバッチは、複数の第１機能ユニット、複数の第１機能ユニット間の連結及び１つ以上の第１ローカルレジスタファイルを用いてＣＧＲＡで動作し、第２機能ユニットバッチは、複数の第２機能ユニット、複数の第２機能ユニット間の連結及び１つ以上の第２ローカルレジスタファイルを用いてＣＧＲＡで動作することができる。
【０００９】
この際、第１機能ユニットバッチの構造は、第２機能ユニットバッチの構造と同一であり得る。
【００１０】
この際、複数の第１機能ユニットは、１つ以上の第１インストラクションを処理し、複数の第２機能ユニットは、１つ以上の第２インストラクションを処理することができる。
【００１１】
この際、第１機能ユニットバッチは、特定サイクルの間にスキュードインストラクションバッチ情報（ｓｋｅｗｅｄ  ｉｎｓｔｒｕｃｔｉｏｎ  ｂａｔｃｈ  ｉｎｆｏｒｍａｔｉｏｎ）を用いて少なくとも１つ以上の第２インストラクションのうちの少なくとも何れか１つを実行し、第２機能ユニットバッチは、特定サイクルの間にスキュードインストラクションバッチ情報を用いて少なくとも１つ以上の第１インストラクションのうちの少なくとも何れか１つを実行することができる。
【００１２】
この際、第１インストラクションバッチは、複数の第１インストラクションバッチを含み、第２インストラクションバッチは、複数の第２インストラクションバッチを含み、第１機能ユニットバッチは、複数の第１インストラクションバッチが入力されれば、複数の第１インストラクションバッチのそれぞれを１つ以上のスレッドを含むスレッドグループ単位で順次に行い、第２機能ユニットバッチは、複数の第２インストラクションバッチが入力されれば、複数の第２インストラクションバッチのそれぞれをスレッドグループ単位で順次に行うことができる。
【００１３】
この際、第１機能ユニットバッチと第２機能ユニットバッチは、あるインストラクションバッチに対するスレッドグループの遂行途中で、特定スレッドでブロック（ｂｌｏｃｋ）が発生し、ブロックがインストラクションバッチと依存関係にある他のインストラクションバッチに対するスレッドグループの遂行時にも続けば、他のインストラクションバッチに対して前記ブロックが発生したスレッドをスレッドグループの最後に行うことができる。
【００１４】
第１機能ユニットバッチと第２機能ユニットバッチは、あるインストラクションバッチに対するスレッドグループを行う途中で、条件分岐が発生すれば、スレッドグループを２つ以上のサブスレッドグループに分割し、各分岐に対して分割された２つ以上のサブスレッドグループを行うことができる。
【００１５】
第１機能ユニットバッチと第２機能ユニットバッチは、条件分岐に対する各分岐が終了して併合されれば、分割された２つ以上のサブスレッドグループをスレッドグループに再び併合して行うことができる。
【００１６】
本発明の他の態様によれば、プロセッサは、中央レジスタファイルと、複数の第１機能ユニットと、第１機能ユニットが、中央レジスタファイルにアクセスするための第１入力ポート及び第１出力ポートを含む第１機能ユニットバッチと、複数の第２機能ユニットと、第２機能ユニットが、中央レジスタファイルにアクセスするための第２入力ポート及び第２出力ポートを含む第２機能ユニットバッチと、複数の第１機能ユニット及び複数の第２機能ユニットのそれぞれに割り当てられるスキュードレジスタと、を含み、スキュードレジスタのうちの何れか１つを通じてバッチインストラクションメモリに保存されたインストラクションを用いて何れか一サイクルに行われるスキュードインストラクションを生成し、該生成されたスキュードインストラクションをスキュードレジスタの何れか１つに割り当てられた各機能ユニットに伝達することができる。
【００１７】
この際、バッチインストラクションメモリは、そのバッチインストラクションメモリに対応する機能ユニットに伝達するインストラクションを保存するように、複数の第１機能ユニットと複数の第２機能ユニットとのそれぞれに対応する２つのユニットに提供されうる。
【００１８】
プロセッサは、バッチインストラクションメモリのカーネルから引き出された少なくとも一部のインストラクションを保存する１つ以上のカーネルキュー（Ｋｅｒｎｅｌ  Ｑｕｅｕｅ）をさらに含み、スキュードレジスタを通じて各カーネルキューに保存されたインストラクションを用いて何れか一サイクルに行われるスキュードインストラクションを生成して、前記割り当てられた各機能ユニットに伝達することができる。
【００１９】
本発明の一態様によれば、コード生成装置は、複数の第１機能ユニットを含む第１機能ユニットバッチと複数の第２機能ユニットを第２機能ユニットバッチとを含むプロセッサで処理される所定プログラムを分析するプログラム分析部と、分析結果に基づいて、第１機能ユニットバッチ及び第２機能ユニットバッチでそれぞれ行われる１つ以上のインストラクションを含む第１インストラクションバッチと第２インストラクションバッチとを生成するインストラクションバッチ生成部と、を含みうる。
【００２０】
インストラクションバッチ生成部は、分析結果、前記プログラムに条件分岐文が存在すれば、その条件分岐文の各分岐を処理するインストラクションは、互いに異なるインストラクションバッチに含ませる。
【００２１】
インストラクションバッチ生成部は、各インストラクションバッチの総レイテンシー（ｌａｔｅｎｃｙ）が類似するように、前記第１インストラクションバッチ及び第２インストラクションバッチを生成することができる。
【００２２】
インストラクションバッチ生成部は、第１インストラクションバッチ及び第２インストラクションバッチが行われる第１機能ユニットバッチまたは第２機能ユニットバッチの読み取りポート及び書き込みポートの数に基づいて、第１インストラクションバッチ及び第２インストラクションバッチを生成することができる。
【００２３】
インストラクションバッチ生成部は、中央レジスタファイルに対する第１インストラクションバッチ及び第２インストラクションバッチの読み取り要請及び書き込み要請の数が、第１インストラクションバッチ及び第２インストラクションバッチを行う第１機能ユニットバッチまたは第２機能ユニットバッチの読み取りポート及び書き込みポートの数を超過するものから最小になるように、第１インストラクションバッチ及び第２インストラクションバッチを生成することができる。
【００２４】
インストラクションバッチ生成部は、インストラクションバッチのそれぞれに含まれたインストラクションの数が、第１インストラクションバッチ及び第２インストラクションバッチを行う第１機能ユニットバッチまたは第２機能ユニットバッチに含まれた機能ユニットの数を超過するものから最小になるように、第１インストラクションバッチ及び第２インストラクションバッチを生成することができる。
【００２５】
インストラクションバッチ生成部は、あるインストラクションバッチでソースとして使われて、あるインストラクションバッチでの遅延の発生を最小化するように、第１インストラクションバッチ及び第２インストラクションバッチを生成することができる。
【００２６】
本発明の一態様によれば、プロセッサがバッチスレッドを処理する方法は、コード生成装置から生成された第１インストラクションバッチ及び第２インストラクションバッチを、複数の第１機能ユニットを含む第１機能ユニットバッチと、複数の第２機能ユニットを含む第２機能ユニットバッチとに入力する段階と、第１機能ユニットバッチ及び第２機能ユニットバッチが、それぞれ第１インストラクションバッチ及び第２インストラクションバッチを順次に行う段階と、を含みうる。
【００２７】
インストラクションバッチを入力する段階は、第１インストラクションバッチ及び第２インストラクションバッチをスレッドグループ単位で入力することができる。
【００２８】
第１インストラクションバッチ及び第２インストラクションバッチを行う段階は、各インストラクションバッチに対するスレッドグループを行う時、スレッドグループに含まれた各スレッドをインターリーブド（ｉｎｔｅｒｌｅａｖｅｄ）方式でスイッチング（ｓｗｉｔｃｈｉｎｇ）しながら行うことができる。
【００２９】
第１インストラクションバッチ及び第２インストラクションバッチを行う段階は、あるインストラクションバッチに対するあるスレッドグループの遂行途中で、特定スレッドでブロックが発生し、インストラクションバッチと依存関係にある他のインストラクションバッチに対する前記スレッドグループの遂行時にも続けば、他のインストラクションバッチに対してブロックが発生したスレッドをスレッドグループの最後に行うことができる。
【００３０】
第１インストラクションバッチ及び第２インストラクションバッチを行う段階は、あるインストラクションバッチに対するスレッドグループを行う途中で、条件分岐が発生すれば、前記スレッドグループを２つ以上のサブスレッドグループに分割し、各分岐に対して前記分割されたサブスレッドグループを行うことができる。
【００３１】
第１インストラクションバッチ及び第２インストラクションバッチを行う段階は、条件分岐に対する各分岐が終了して併合されれば、分割された２つ以上のサブスレッドグループをスレッドグループに再び併合して行うことができる。
【００３２】
その他の実施形態の具体的な事項は、詳細な説明及び図面に含まれている。記載の技術の利点及び特徴、そして、それらを果たす方法は、添付される図面と共に詳細に後述されている実施形態を参照すると、明確になる。明細書の全般に亘って同じ参照符号は、同じ構成要素を指称する。
【００３３】
＜実施の形態の詳細な説明＞
以下、バッチスレッド処理基盤のプロセッサ、そのプロセッサを利用したバッチスレッド処理方法、及びバッチスレッド処理のためのコード生成装置の実施形態を、図面を参考にして詳しく説明する。
【００３４】
図１は、本発明の一実施形態によるプロセッサを示した図面である。
【００３５】
図１を参照すれば、一実施形態によるプロセッサ１００は、中央レジスタファイル１１０と１つ以上の機能ユニットバッチ１２０ａ、１２０ｂ、１２０ｃ、１２０ｄとを含む。図１には、上端と下端とに２個の中央レジスタファイル１１０が示されているが、これは、各機能ユニットバッチ１２０ａ、１２０ｂ、１２０ｃ、１２０ｄの入力ポート１３０及び出力ポート１４０を説明するために、便宜上、区分して図示したものであり、プロセッサ１００が、２個の中央レジスタファイル１１０を含むことを意味するものではない。
【００３６】
各機能ユニットバッチ１２０ａ、１２０ｂ、１２０ｃ、１２０ｄは、２つ以上の機能ユニットＦＵ０、ＦＵ１、ＦＵ２、ＦＵ３を含む。また、各機能ユニットバッチ１２０ａ、１２０ｂ、１２０ｃ、１２０ｄは、１つ以上の入力ポート１３０及び１つ以上の出力ポート１４０を含み、その入力ポート１３０及び出力ポート１４０を通じて中央レジスタファイル１１０にアクセスすることができる。機能ユニットバッチ１２０ａ、１２０ｂ、１２０ｃ、１２０ｄは、中央レジスタファイル１１０を通じて相互間にデータ共有などの通信が可能である。
【００３７】
機能ユニットバッチ１２０ａ、１２０ｂ、１２０ｃ、１２０ｄは、１つ以上のローカルレジスタファイル（Ｌｏｃａｌ  Ｒｅｇｉｓｔｅｒ  Ｆｉｌｅ、ＬＲ）を含みうる。ローカルレジスタファイル（ＬＲ）は、１つ以上の機能ユニットに含まれ、機能ユニットの入出力データのための保存空間として使われ、ＦＩＦＯ（Ｆｉｒｓｔ  Ｉｎ  Ｆｉｒｓｔ  Ｏｕｔ）方式で動作する。
【００３８】
本発明の一実施形態によるプロセッサ１００は、機能ユニットバッチに含まれた機能ユニット、その機能ユニット間の連結及び機能ユニットのローカルレジスタファイル（ＬＲ）を用いてＣＧＲＡで動作することができる。連結はコネクションと言及されてもよい。また、２つ以上の機能ユニットＦＵ０、ＦＵ１、ＦＵ２、ＦＵ３を含んでなる２つ以上の機能ユニットバッチ１２０ａ、１２０ｂ、１２０ｃ、１２０ｄを使って、ＳＩＭＴで動作することが可能である。
【００３９】
このために、機能ユニットバッチ１２０ａ、１２０ｂ、１２０ｃ、１２０ｄは、互いに同じ構造からなりうる。この際、機能ユニットバッチ１２０ａ、１２０ｂ、１２０ｃ、１２０ｄのそれぞれに含まれた機能ユニットＦＵ０、ＦＵ１、ＦＵ２、ＦＵ３は、互いに異なる構造からなるようにする。しかし、機能ユニットバッチ１２０ａ、１２０ｂ、１２０ｃ、１２０ｄのそれぞれに含まれた機能ユニットＦＵ０、ＦＵ１、ＦＵ２、ＦＵ３が、必ずしも互いに異なる構造からなるものではなく、必要に応じて２つ以上の機能ユニットが互いに同じ構造を有するように具現されうる。
【００４０】
例えば、機能ユニットバッチ１２０ａ、１２０ｂ、１２０ｃ、１２０ｄは、互いに同じコンピュータパワーを有するように機能ユニットＦＵ０、ＦＵ１、ＦＵ２、ＦＵ３を含みうる。ここで、コンピュータパワーとは、機能ユニットが行う演算（例：‘ａｄｄ’、‘ｓｕｂ’、‘ｍｕｌ’、‘ｄｉｖ’など）を行う能力や性能等を意味し、機能ユニットバッチ１２０ａ、１２０ｂ、１２０ｃ、１２０ｄは、同じ演算を行う機能ユニットを含むことによって、同じコンピュータパワーを有させる。このように、一実施形態によるプロセッサ１００は、同じコンピュータパワーを有する機能ユニットバッチ１２０ａ、１２０ｂ、１２０ｃ、１２０ｄを通じてＳＩＭＴで動作して、大量の並列データスレッド処理を支援することができる。
【００４１】
一方、一般的なプロセッサは、各機能ユニットのＡＬＵ（Ａｒｉｔｈｍｅｔｉｃ  Ｌｏｇｉｃ  Ｕｎｉｔ）ごとに中央レジスタファイルにアクセスするための１つ以上の入力ポート及び出力ポートを有するが、一実施形態によるプロセッサ１００は、機能ユニットバッチ１２０ａ、１２０ｂ、１２０ｃ、１２０ｄ単位で中央レジスタファイル１１０にアクセスするための１つ以上の入力ポート１３０と出力ポート１４０とを有させることによって、中央レジスタファイル１１０にアクセスするオーバーヘッドを減少させて、プロセッサの性能を増加させることができる。
【００４２】
例えば、８個の機能ユニットを有した一般的なプロセッサが、各機能ユニットごとに２個の入力ポートと１個の出力ポートとを有するとすれば、そのプロセッサは、総１６個の入力ポートと８個の出力ポートとを通じて中央レジスタファイルのアクセスがなされる。一方、一実施形態によるプロセッサ１００は、８個の機能ユニットが４個ずつ２個の機能ユニットバッチに含まれ、各機能ユニットバッチが、２個の入力ポートと１個の出力ポートとを有すると仮定すれば、総４個の入力ポートと２個の出力ポートとを通じて中央レジスタファイルのアクセスがなされるので、入出力演算のためのオーバーヘッドが減少しうる。
【００４３】
機能ユニットバッチのそれぞれ１２０ａ、１２０ｂ、１２０ｃ、１２０ｄは、コンパイルを通じて生成された１つ以上のインストラクションバッチを行うことができる。この際、各インストラクションバッチは、１つ以上のインストラクションを含み、各インストラクションは、対応する機能ユニットで順次に行われる。
【００４４】
一方、機能ユニットバッチ１２０ａ、１２０ｂ、１２０ｃ、１２０ｄは、入力される１つ以上のインストラクションバッチに対して１つ以上のスレッドを含むスレッドグループ単位で順次に行うことができる。
【００４５】
この際、機能ユニットバッチ１２０ａ、１２０ｂ、１２０ｃ、１２０ｄが、あるインストラクションバッチに対して所定スレッドグループを行う途中で、特定スレッドでブロックが発生する場合、そのブロックが発生したインストラクションバッチと依存関係にある他のインストラクションバッチに対して同じスレッドグループのスレッドを行う時、まだ発生したブロックが解けず、続いていれば、他のインストラクションに対しては、そのブロックが発生したスレッドを行わず、そのスレッドグループのあらゆるスレッドの遂行が終了する最後に行わせうる。
【００４６】
これは、インストラクションバッチを行う途中で、何れか１つのスレッドが、ブロック発生インストラクションによって繋がる、あらゆるスレッドのブロック化を防止することによって、処理効率を増加させるためである。
【００４７】
機能ユニットバッチ１２０ａ、１２０ｂ、１２０ｃ、１２０ｄが、あるインストラクションバッチに対してスレッドグループを行う途中で、条件分岐が発生すれば、そのスレッドグループを２つ以上のサブグループに分割し、各分岐に対してそれぞれ分割されたサブスレッドグループを行うことができる。また、各分岐に対する条件分岐が終了して併合されれば、分割されたサブスレッドグループを再び元のスレッドグループに併合して行うことができる。
【００４８】
図２は、図１の実施形態によるプロセッサ１００でバッチスレッドを処理する手続きを説明する例題プログラムの制御流れグラフである。図２は、あるインストラクションが他のインストラクションの実行後に実行されるさらに他のインストラクションとデータ依存度を有するように、１１個のインストラクション（Ａ〜Ｋ）が互いに一定のデータ依存度を有しながら行われることを示す。この際、レイテンシーは、それぞれのインストラクション（Ａ〜Ｋ）遂行に必要なサイクル（ｃｙｃｌｅ）を意味する。
【００４９】
図３は、図２の例題が、一般的なＳＩＭＴ構造で行う手続きを説明する図面である。１２８個のデータをそれぞれ他のスレッドで処理するとする時、総１２８個のスレッドが処理せねばならない。８個のＡＬＵ（ＡＬＵ０〜ＡＬＵ７）を有した一般的なＳＩＭＴで、１２８個のスレッドを３２個ずつ４個のスレッドグループに分けて、総１１個（Ａ〜Ｋ）のインストラクションに対して遂行させると仮定する。この際、一般的なＳＩＭＴで円滑に動作するように、各インストラクション（Ａ〜Ｋ）のレイテンシーをいずれも４に統一させた場合、ＳＩＭＴは、図３に示したような方式でインストラクションＡからＫまで順次に４個のスレッドグループを処理し、必要となった総サイクルは、１８０サイクルになる。
【００５０】
図４Ａないし図４Ｃは、図２の例題が、一般的なＣＧＲＡで行われる手続きを説明する図面である。図４Ａは、図３に例示されたＳＩＭＴと同じ個数の機能ユニットからなる一般的なＣＧＲＡを例示したものであって、構成メモリまたはキャッシュメモリ（ＣＭＥＭ）からインストラクションを入力される。図４Ｂは、図２の例題が図４ＡのＣＧＲＡで行われるように、スケジューリングされた例である。図４Ｃは、図４Ｂのように、スケジューリングされた１１個のインストラクション（Ａ〜Ｋ）を行ったことを例示したものである。
【００５１】
この際、ＣＧＲＡの繰り返し（ｉｔｅｒａｔｉｏｎ）は、ＳＩＭＴのスレッドに相応し、図３で説明したように、総１２８個のスレッドを処理するためには、１２８回の繰り返しが行われる。図４Ｂを参照すれば、１１個のインストラクション（Ａ〜Ｋ）を一回繰り返しを行うためには、総１６サイクルのレイテンシーが必要となり、これを図４Ｃのように、開始区間（Ｉｎｉｔｉａｔｉｏｎ  Ｉｎｔｅｒｖａｌ、ＩＩ）を２にして、総１２８回の繰り返しを行えば、総２７２サイクルが必要となる。
【００５２】
図５Ａ及び図５Ｂは、図２の例題が、図１の実施形態によるプロセッサ１００で行う手続きを説明する図面である。
【００５３】
図５Ａは、図２の例題をそのプロセッサ１００で行われるように、コンパイル段階から生成された３個のインストラクションバッチを示したものであって、インストラクションバッチ０は、４個のインストラクション（Ａ、Ｂ、Ｄ、Ｅ）を含み、インストラクションバッチ１は、４個のインストラクション（Ｃ、Ｆ、Ｇ、Ｈ）を含み、インストラクションバッチ２は、最後の３個のインストラクション（Ｉ、Ｊ、Ｋ）を含む。
【００５４】
図５Ｂは、プロセッサ１００が、それぞれ４個の機能ユニットを有した２個の機能ユニットバッチを有した場合、何れか１つの機能ユニットバッチで３個のインストラクションバッチを順次に行ったことを示した図面である。インストラクションバッチ内の各インストラクションは、機能ユニットバッチ内の各機能ユニットで行われる。インストラクションバッチ内のデータ移動は、機能ユニットバッチ内のローカルレジスタファイルとインターコネクション（ｉｎｔｅｒｃｏｎｎｅｃｔｉｏｎ）とを通じてなされ、インストラクションバッチ間のデータ移動は、中央レジスタファイル１１０を通じてなされうる。
【００５５】
図３とは同様に、総１２８個のスレッドを処理するとする時、２個の機能ユニットバッチが、３個のインストラクションバッチに対してそれぞれ６４スレッドずつ行うことによって、総２０２サイクルが必要となる。例えば、１２８個のスレッドが、１６個のスレッド単位でスケジューリングされたとする時、何れか１つの機能ユニットバッチで３個のインストラクションバッチを順次に行うが、１６個のスレッドがインターリーブド方式でスイッチングしながら行うことができる。すなわち、インストラクションバッチ１つの入力を１６個のスレッドに対して行い、次のインストラクションバッチに対して１６個のスレッドを行う方式で最後のインストラクションバッチまで行い、再び最初のインストラクションバッチから新たな１６個のスレッドに対して行う方式であらゆるスレッドを処理し、このような方式で２個の機能ユニットバッチで１２８個のスレッドに対して行う場合、総２０２サイクルが必要となる。
【００５６】
図６Ａ及び図６Ｂは、機能ユニットバッチにスキュードインストラクション（ｓｋｅｗｄ  ｉｎｓｔｒｕｃｔｉｏｎ）が入力されるものを説明する図面である。図６Ａ及び図６Ｂを参照すれば、一実施形態によるプロセッサ２００は、各機能ユニットバッチが入力される１つ以上のインストラクションバッチを行う時、各機能ユニットバッチは、ＣＧＲＡのように動作するので、各インストラクションバッチ内のインストラクションが、各機能ユニットに入力される時、時間に対して時差を置く方式で入力される。ここで、１つのバッチ機能ユニットによって行われるバッチインストラクションが、経時的に変更されるために、そのインストラクションは、下記で説明するように、スキュードインストラクションであり得る。
【００５７】
図６Ａに示したように、バッチインストラクションは、Ａ−Ｂ−Ｄ−Ｅ（サイクル１０）、Ｃ−Ｂ−Ｄ−Ｅ（サイクル１７）、Ｃ−Ｆ−Ｄ−Ｅ（サイクル２１）、Ｃ−Ｆ−Ｇ−Ｅ（サイクル２５）、及びＣ−Ｇ−Ｇ−Ｈ（サイクル２６）の順序で変更される。この場合に、Ａ−Ｂ−Ｄ−ＥとＣ−Ｆ−Ｇ−Ｈが、バッチインストラクションである時、３つのスキュードインストラクションが、２つのバッチインストラクション間に挿入される方式で入力される。したがって、バッチ機能ユニットでパイプライン形態で連続した演算が可能である。スキュードインストラクションの特別な例で、サイクル１７の場合、機能ユニットバッチ内の４個の機能ユニットには、４個のインストラクションＣ、Ｂ、Ｄ、Ｅが入力される。しかし、インストラクションＣは、図５Ａを参照すれば、インストラクションバッチ１に含まれ、残りのインストラクションＢ、Ｄ、及びＥは、インストラクションバッチ０に属する。このように、同一サイクルに入力されるインストラクションのうちの少なくとも何れか１つが他のインストラクションバッチに属する場合に、そのサイクルに入力されるインストラクションをスキュードインストラクションであるとすれば、プロセッサ１００は、各機能ユニットバッチに正確なスキュードインストラクションを入力するためのスキュードインストラクション情報（ｓｋｅｗｅｄ  ｉｎｓｔｒｕｃｔｉｏｎ  ｉｎｆｏｒｍａｔｉｏｎ）を必要とする。
【００５８】
このようなスキュードインストラクション情報は、コンパイル段階でコード生成装置によって生成されうる。プロセッサ２００は、スキュードインストラクション情報を用いて機能ユニットバッチのそれぞれのＰＣ（Ｐｒｏｇｒａｍ  Ｃｏｕｎｔｅｒ）を通じてバッチインストラクションメモリ（ＢＩＭ）にアクセスして、該当するインストラクションを機能ユニットバッチの該当する機能ユニットに伝達することができる。
【００５９】
図７Ａ及び図７Ｂは、スキュードインストラクション入力のためのプロセッサの他の実施形態を示した図面である。
【００６０】
図７Ａを参照すれば、プロセッサ３００は、中央レジスタファイル（図示せず）、２つ以上の機能ユニットを含む１つ以上の機能ユニットバッチ及び各機能ユニットバッチに含まれた機能ユニットに割り当てられる２つ以上のスキュードレジスタ３１０を含みうる。
【００６１】
本実施形態によるプロセッサ３００は、前述したスキュードインストラクションの入力をさらに効率的に処理させるために、機能ユニットに対応するスキュードレジスタ３１０をさらに含むものであって、スキュードレジスタ３１０を通じてバッチインストラクションメモリＢＩＭ０、ＢＩＭ１、ＢＩＭ２、ＢＩＭ３に保存されたインストラクションを用いて何れか一サイクルに行われるスキュードインストラクションを生成して、割り当てられた機能ユニットに伝達することができる。機能ユニットバッチのそれぞれは、自身のＰＣ値と各機能ユニットに割り当てられたスキュードレジスタ値とを用いてバッチインストラクションメモリにアクセスすることができる。
【００６２】
この際、バッチインストラクションメモリＢＩＭ０、ＢＩＭ１、ＢＩＭ２、ＢＩＭ３は、示したように、各機能ユニットに対応するように２つ以上に分けて構成されて、各バッチインストラクションメモリＢＩＭ０、ＢＩＭ１、ＢＩＭ２、ＢＩＭ３は、対応する機能ユニットに伝達されるインストラクションを保存することができる。
【００６３】
図７Ｂは、スキュードインストラクション入力のためのプロセッサのさらに他の実施形態であって、プロセッサ４００は、図７Ａのプロセッサ３００に１つ以上のカーネルキュー４２０をさらに含みうる。これは、図７Ａのように、バッチインストラクションメモリＢＩＭ０、ＢＩＭ１、ＢＩＭ２、ＢＩＭ３を複数個備える必要なしに、図７Ｂのように、１つのバッチインストラクションメモリ（ＢＩＭ）を使用可能にする。
【００６４】
図７Ｂを参照すれば、プロセッサ４００は、各機能ユニットバッチの機能ユニットに対応するように２つ以上のカーネルキュー４２０を含みうる。プロセッサ４００は、バッチインストラクションメモリ（ＢＩＭ）のカーネルで少なくとも一部のインストラクションを引き出してカーネルキュー４２０に保存することができる。また、各機能ユニットバッチは、自身のＰＣと割り当てられたスキュードレジスタの値とに基づいて、対応するカーネルキュー４２０に接近して、必要なインストラクションを読み出してスキュードインストラクションを生成し、そのスキュードインストラクションを機能ユニットに伝達されうる。
【００６５】
図８は、本発明の一実施形態によるバッチスレッド基盤のプロセッサを支援するためのコード生成装置のブロック図である。
【００６６】
図１及び図８を参照すれば、コード生成装置５００は、プログラム分析部５１０及びインストラクションバッチ生成部５２０を含み、バッチスレッドを処理するプロセッサ１００を支援するためのインストラクションバッチを生成することができる。
【００６７】
プログラム分析部５１０は、処理される所定プログラムを分析し、該分析結果を生成することができる。例えば、プログラム分析部５１０は、プログラムのデータ間に依存度及びプログラム内に条件分岐文の存否などを分析することができる。
【００６８】
インストラクションバッチ生成部５２０は、分析結果に基づいて、プロセッサ１００の１つ以上の機能ユニットバッチ１２０ａ、１２０ｂ、１２０ｃ、１２０ｄで行われる１つ以上のインストラクションバッチを生成することができる。この際、各インストラクションバッチは、１つ以上のインストラクションを含みうる。
【００６９】
インストラクションバッチ生成部５２０は、分析結果中の依存度分析情報に基づいて、各機能ユニットバッチ１２０ａ、１２０ｂ、１２０ｃ、１２０ｄに含まれた機能ユニットを用いてＣＧＲＡで動作するように、コードを生成し、または各機能ユニットバッチでＳＩＭＴで動作するように、１つ以上のインストラクションバッチに対するコードを生成することができる。
【００７０】
インストラクションバッチ生成部５２０は、分析結果、プログラムに条件分岐文が存在すれば、その条件分岐文の各分岐を処理するインストラクション、例えば、条件が真であれば、第１経路を行い、偽であれば、第２経路を行う場合、第１経路を処理するインストラクションと、第２経路を処理するインストラクションとを互いに異なるインストラクションバッチに含ませる。
【００７１】
また、コード生成装置５００は、インストラクションバッチ生成部５２０によって生成された各分岐を処理するインストラクションバッチに対して何れか１つの機能ユニットバッチで順次に行わせるか、それぞれ他の機能ユニットバッチで分離行わせるインストラクションを生成することができる。これを通じて、一般的なＳＩＭＴやＣＧＲＡでの条件分岐の問題をさらに効率的に解決することができる。
【００７２】
インストラクションバッチ生成部５２０は、各インストラクションバッチを生成する時、各インストラクションバッチの総レイテンシーが類似するように生成することができる。また、インストラクションバッチ生成部５２０は、各機能ユニットバッチ１２０ａ、１２０ｂ、１２０ｃ、１２０ｄで中央レジスタファイル１１０にアクセスするための入出力ポート数を考慮して、インストラクションバッチを生成することができる。例えば、あるインストラクションバッチから中央レジスタファイルに対する読み取り要請の数が、そのインストラクションバッチを行う機能ユニットバッチの読み取りポート数を超過しないようにし、インストラクションバッチの書き込み要請の数は、機能ユニットバッチの書き込みポートの数を超過しないように生成することができる。
【００７３】
また、インストラクションバッチ生成部５２０は、各インストラクションバッチに含まれたインストラクションの数が、各機能ユニットバッチに含まれた機能ユニットの数を超過しないように生成することができる。図５Ａを参照すれば、インストラクションバッチ０と１は、４個のインストラクションが含まれ、インストラクションバッチ２は、３個のインストラクションが含まれるように生成されたものであって、各インストラクションバッチに含まれたインストラクションの数は、各機能ユニットバッチ１２０ａ、１２０ｂ、１２０ｃ、１２０ｄに含まれた機能ユニットの数４を超過しない。
【００７４】
一方、インストラクションバッチ生成部５２０は、特定インストラクションバッチで遅延が発生する演算（ｏｐｅｒａｔｉｏｎ）、例えば、ブロックが発生する演算の結果は、その特定インストラクションバッチでソース（ｓｏｕｒｃｅ）として使われないように、インストラクションバッチを生成することができる。一例として、スケジューリング時にブロックが発生する演算に対しては、インストラクションバッチの最初に位置させ、当該インストラクションバッチの最後に、その演算のスレッド遂行結果を利用させるか、インストラクションバッチの最後に位置させて、次のインストラクションバッチを行う前に、その演算を処理させうる。
【００７５】
一方、コード生成装置５００は、生成されたインストラクションバッチをあらゆる機能ユニットバッチに同様に入力するか、２つ以上の機能ユニットバッチに分離して入力させるインストラクションを生成することができる。
【００７６】
コード生成装置５００は、生成されたインストラクションバッチ情報及び各種インストラクション情報は、構成メモリまたはキャッシュメモリに保存することができる。一方、インストラクションバッチ生成部５２０は、図６Ａ及び図６Ｂを通じて説明したように、スキュードインストラクション情報を生成することができる。
【００７７】
インストラクションバッチ生成部５２０は、前述された。一実施形態によれば、インストラクションバッチ生成部５２０は、同時に行われるインストラクションを収集せず、順次に行われるインストラクションを収集することによって、バッチインストラクションを生成する。これにより、バッチインストラクションの生成に難点がなく、高効率を果たすことができる。複数のデータは、複数のバッチ機能ユニットによって同時に行われるために、このようなバッチ生成は、大量の並列データ処理の具現に効果的である。
【００７８】
以下、ＶＬＩＷ（Ｖｅｒｙ  Ｌｏｎｇ  Ｉｎｓｔｒｕｃｔｉｏｎ  Ｗｏｒｄ）とスーパースカラーアーキテクチャー（ｓｕｐｅｒ−ｓｃａｌａｒ  ａｒｃｈｉｔｅｃｔｕｒｅ）との比較説明である。
【００７９】
ＶＬＩＷは、コンパイラが非常に長い命令語（ｖｅｒｙ  ｌｏｎｇ  ｉｎｓｔｒｕｃｔｉｏｎ  ｗｏｒｄ）を生成し、複数のインストラクションを同時に実行されるように構成され、複数の機能ユニット（または、実行ユニット）が、単一サイクル内にＶＬＩＷを行わせるアーキテクチャーである。デジタル信号処理で広範囲に使われるＶＬＩＷアーキテクチャーは、同時に実行可能な十分なインストラクションを見つけるのによく失敗し、それは、効率を低下させる結果になりうる。そして、あらゆる機能ユニットが、同時に中央レジスタファイルにアクセスしなければならないために、中央レジスタファイルのハードウェアオーバーヘッドは、非効率的に増加する。
【００８０】
スーパースカラーは、ハードウェアがランタイム時に同時に実行可能なインストラクションを見つけ、複数の実行ユニット（または、機能ユニット）が発見されたインストラクションを行うアーキテクチャーである。このアーキテクチャーも、同時に実行可能であり、インストラクションを見つけるのに困難さを有しており、非常に複雑なハードウェアをもたらしうる。
【００８１】
一方、開示された実施形態は、複数のバッチ機能ユニットを活用して、同時に複数のインストラクションを行い、それは、同時に大量の並列データ処理の具現に効果的である。
【００８２】
図９は、本発明の一実施形態によるバッチスレッド基盤のプロセッサを用いてバッチスレッドを処理する方法のフローチャートである。図９は、図１の実施形態によるプロセッサ１００を用いてバッチスレッドを処理する方法を説明する図面であって、詳しくは、図１の以下を参照して説明したところによって解釈されるので、以下、簡単に説明する。
【００８３】
まず、プロセッサ１００は、コード生成装置から生成された１つ以上のインストラクションバッチを１つ以上の機能ユニットバッチ１２０ａ、１２０ｂ、１２０ｃ、１２０ｄに入力することができる（段階６１０）。この際、生成されたあらゆるインストラクションバッチを、あらゆる機能ユニットバッチ１２０ａ、１２０ｂ、１２０ｃ、１２０ｄにスレッド単位で割り当てて入力することができる。すなわち、各機能ユニットバッチ１２０ａ、１２０ｂ、１２０ｃ、１２０ｄにあらゆるインストラクションバッチを同様に入力して、順次に行わせるが、各機能ユニットバッチが、全体処理しなければならないスレッドグループのうちの一部のスレッドグループを処理させて、ＳＩＭＴのように動作させる方式である。
【００８４】
または、各機能ユニットバッチ１２０ａ、１２０ｂ、１２０ｃ、１２０ｄにインストラクションバッチを分けて入力することができる。例えば、生成されたインストラクションバッチが、４個であるとする時、４個のインストラクションバッチを各機能ユニットバッチ１２０ａ、１２０ｂ、１２０ｃ、１２０ｄに１つずつ入力して、ＭＩＭＴ方式でスレッドを処理させうる。または、２個の機能ユニットバッチ１２０ａ、１２０ｂには、同一の２個のインストラクションバッチを入力し、残りの２個の機能ユニットバッチ１２０ｃ、１２０ｄに残りの２個のインストラクションバッチを入力することによって、ＳＩＭＴとＭＩＭＴとを混合する方式で処理することができる。
【００８５】
このように、各機能ユニットバッチ１２０ａ、１２０ｂ、１２０ｃ、１２０ｄにインストラクションバッチを分けて入力する場合、前述したように、条件分岐を処理する各インストラクションバッチを互いに異なる機能ユニットバッチ１２０ａ、１２０ｂ、１２０ｃ、１２０ｄに入力して、条件分岐の処理効率を増加させることができる。また、各機能ユニットバッチ１２０ａ、１２０ｂ、１２０ｃ、１２０ｄが独立して動作するために、何れか１つの機能ユニットバッチでブロックが発生した場合にも、他の機能ユニットバッチは、これに構わずにスレッド処理が可能となる。
【００８６】
次いで、各機能ユニットバッチ１２０ａ、１２０ｂ、１２０ｃ、１２０ｄは、入力された１つ以上のインストラクションバッチを順次に行うことができる（段階６２０）。この際、各機能ユニットバッチ１２０ａ、１２０ｂ、１２０ｃ、１２０ｄは、前述したように、入力されるインストラクションバッチに対して各スレッドをインターリーブド方式でスイッチングし、各インストラクションバッチを行うことができる。
【００８７】
一方、機能ユニットバッチ１２０ａ、１２０ｂ、１２０ｃ、１２０ｄが、あるインストラクションバッチに対して所定スレッドグループを行う途中で、特定スレッドでブロックが発生する場合、そのブロックが発生したインストラクションバッチと依存関係にある他のインストラクションバッチに対して同じスレッドグループのスレッドを行う時、まだ発生したブロックが解けず、続いていれば、他のインストラクションに対しては、そのブロックが発生したスレッドを行わず、そのスレッドグループのあらゆるスレッドの遂行が終了する最後に行わせうる。
【００８８】
また、機能ユニットバッチ１２０ａ、１２０ｂ、１２０ｃ、１２０ｄが、あるインストラクションバッチに対してスレッドグループを行う途中で、条件分岐が発生すれば、そのスレッドグループを２つ以上のサブグループに分割し、各分岐に対してそれぞれ分割されたサブスレッドグループを行うことができる。また、各分岐に対する条件分岐が終了して併合されれば、分割されたサブスレッドグループを再び元のスレッドグループに併合して行うことができる。
【００８９】
一方、本実施形態は、コンピュータで読み取り可能な記録媒体にコンピュータで読み取り可能なコードとして具現することが可能である。コンピュータで読み取り可能な記録媒体は、コンピュータシステムによって読み取れるデータが保存されるあらゆる種類の記録装置を含む。
【００９０】
コンピュータで読み取り可能な記録媒体の例としては、ＲＯＭ、ＲＡＭ、ＣＤ−ＲＯＭ、磁気テープ、フロッピー（登録商標）ディスク、光データ保存装置などがあり、また、キャリアウェーブ（例えば、インターネットを介した伝送）の形態で具現するものを含む。また、コンピュータで読み取り可能な記録媒体は、ネットワークで連結されたコンピュータシステムに分散されて、分散方式でコンピュータで読み取り可能なコードとして保存されて実行可能である。そして、本実施形態を具現するための機能的な（ｆｕｎｃｔｉｏｎａｌ）プログラム、コード及びコードセグメントは、本発明が属する技術分野のプログラマーによって容易に推論されうる。
【００９１】
当業者ならば、本発明がその技術的思想や必須的な特徴を変更せずとも、他の具体的な形態で実施可能であることを理解できるであろう。したがって、前述した実施形態は、あらゆる面で例示的なものであり、限定的ではないということを理解せねばならない。
【００９２】
本発明は、バッチスレッド処理基盤のプロセッサ、そのプロセッサを利用したバッチスレッド処理方法、及びバッチスレッド処理のためのコード生成装置関連の技術分野に適用可能である。
【符号の説明】
【００９３】
１００  プロセッサ
１１０  中央レジスタファイル
１２０ａ〜１２０ｄ  機能ユニットバッチ
１３０  入力ポート
１４０  出力ポート
【図２】
2014216021.tif 000003
【図３】
2014216021.tif 000004
【図４Ｃ】
2014216021.tif 000005
【図７Ｂ】
2014216021.tif 000006
【図１】
2014216021.tif 000007
【図４Ａ】
2014216021.tif 000008
【図４Ｂ】
2014216021.tif 000009
【図５Ａ】
2014216021.tif 000010
【図５Ｂ】
2014216021.tif 000011
【図６Ａ】
2014216021.tif 000012
【図６Ｂ】
2014216021.tif 000013
【図７Ａ】
2014216021.tif 000014
【図８】
2014216021.tif 000015
【図９】
2014216021.tif 000016