特許第6502616号(P6502616)IP Force 特許公報掲載プロジェクト 2022.1.31 β版

知財求人 - 知財ポータルサイト「IP Force」

▶ 三星電子株式会社の特許一覧

特許6502616バッチスレッド処理のためのプロセッサ、コード生成装置及びバッチスレッド処理方法
<>
  • 特許6502616-バッチスレッド処理のためのプロセッサ、コード生成装置及びバッチスレッド処理方法 図000002
  • 特許6502616-バッチスレッド処理のためのプロセッサ、コード生成装置及びバッチスレッド処理方法 図000003
  • 特許6502616-バッチスレッド処理のためのプロセッサ、コード生成装置及びバッチスレッド処理方法 図000004
  • 特許6502616-バッチスレッド処理のためのプロセッサ、コード生成装置及びバッチスレッド処理方法 図000005
  • 特許6502616-バッチスレッド処理のためのプロセッサ、コード生成装置及びバッチスレッド処理方法 図000006
  • 特許6502616-バッチスレッド処理のためのプロセッサ、コード生成装置及びバッチスレッド処理方法 図000007
  • 特許6502616-バッチスレッド処理のためのプロセッサ、コード生成装置及びバッチスレッド処理方法 図000008
  • 特許6502616-バッチスレッド処理のためのプロセッサ、コード生成装置及びバッチスレッド処理方法 図000009
  • 特許6502616-バッチスレッド処理のためのプロセッサ、コード生成装置及びバッチスレッド処理方法 図000010
  • 特許6502616-バッチスレッド処理のためのプロセッサ、コード生成装置及びバッチスレッド処理方法 図000011
  • 特許6502616-バッチスレッド処理のためのプロセッサ、コード生成装置及びバッチスレッド処理方法 図000012
  • 特許6502616-バッチスレッド処理のためのプロセッサ、コード生成装置及びバッチスレッド処理方法 図000013
  • 特許6502616-バッチスレッド処理のためのプロセッサ、コード生成装置及びバッチスレッド処理方法 図000014
  • 特許6502616-バッチスレッド処理のためのプロセッサ、コード生成装置及びバッチスレッド処理方法 図000015
< >
(19)【発行国】日本国特許庁(JP)
(12)【公報種別】特許公報(B2)
(11)【特許番号】6502616
(24)【登録日】2019年3月29日
(45)【発行日】2019年4月17日
(54)【発明の名称】バッチスレッド処理のためのプロセッサ、コード生成装置及びバッチスレッド処理方法
(51)【国際特許分類】
   G06F 9/38 20060101AFI20190408BHJP
   G06F 15/80 20060101ALI20190408BHJP
   G06F 8/41 20180101ALI20190408BHJP
【FI】
   G06F9/38 370A
   G06F15/80
   G06F8/41 130
【請求項の数】23
【全頁数】21
(21)【出願番号】特願2014-88265(P2014-88265)
(22)【出願日】2014年4月22日
(65)【公開番号】特開2014-216021(P2014-216021A)
(43)【公開日】2014年11月17日
【審査請求日】2017年4月13日
(31)【優先権主張番号】10-2013-0044435
(32)【優先日】2013年4月22日
(33)【優先権主張国】KR
(73)【特許権者】
【識別番号】390019839
【氏名又は名称】三星電子株式会社
【氏名又は名称原語表記】Samsung Electronics Co.,Ltd.
(74)【代理人】
【識別番号】100107766
【弁理士】
【氏名又は名称】伊東 忠重
(74)【代理人】
【識別番号】100070150
【弁理士】
【氏名又は名称】伊東 忠彦
(74)【代理人】
【識別番号】100091214
【弁理士】
【氏名又は名称】大貫 進介
(72)【発明者】
【氏名】鄭 武 ▲きょん▼
(72)【発明者】
【氏名】柳 秀 晶
(72)【発明者】
【氏名】趙 淵 坤
【審査官】 小林 哲雄
(56)【参考文献】
【文献】 特開2003−346140(JP,A)
【文献】 米国特許出願公開第2012/0089813(US,A1)
【文献】 特開2011−203920(JP,A)
【文献】 特表2012−508939(JP,A)
【文献】 特開2009−157773(JP,A)
【文献】 米国特許第07447873(US,B1)
【文献】 国際公開第2007/027671(WO,A2)
【文献】 国際公開第2007/143278(WO,A2)
【文献】 米国特許出願公開第2013/0007415(US,A1)
(58)【調査した分野】(Int.Cl.,DB名)
G06F 9/38
G06F 8/41
G06F 15/80
(57)【特許請求の範囲】
【請求項1】
中央レジスタファイルと、
複数の第1機能ユニットと、前記第1機能ユニットが前記中央レジスタファイルにアクセスするための第1入力ポートと、第1出力ポートとを含む第1機能ユニットバッチと、
複数の第2機能ユニットと、前記第2機能ユニットが前記中央レジスタファイルにアクセスするための第2入力ポートと、第2出力ポートとを含む第2機能ユニットバッチと、を含み、
前記第1機能ユニットバッチは、プログラムをなす1つ以上の第1インストラクションを含む第1インストラクションバッチを受信して、前記1つ以上の第1インストラクションを順次に行い、前記第2機能ユニットバッチは、前記プログラムをなす1つ以上の第2インストラクションを含む第2インストラクションバッチを受信して、前記1つ以上の第2インストラクションを順次に行い、
前記第1機能ユニットバッチ及び第2機能ユニットバッチは、あるインストラクションバッチに対するスレッドグループの遂行途中で特定スレッドでブロックが発生し、前記ブロックが前記インストラクションバッチに依存する他のインストラクションバッチに対する前記スレッドグループの遂行時まで続く場合、前記他のインストラクションバッチに対して前記ブロックが発生したスレッドを前記スレッドグループの最後に行う、プロセッサ。
【請求項2】
前記第1機能ユニットバッチは、前記複数の第1機能ユニットの入出力データを保存する1つ以上の第1ローカルレジスタファイルを含み、
前記第2機能ユニットバッチは、前記複数の第2機能ユニットの入出力データを保存する1つ以上の第2ローカルレジスタファイルを含む、請求項1に記載のプロセッサ。
【請求項3】
前記第1機能ユニットバッチは、前記複数の第1機能ユニットと、前記複数の第1機能ユニット間のコネクションと、前記1つ以上の第1ローカルレジスタファイルとを用いることにより、粗粒度再設定可能アレイ(CGRA)として動作し、
前記第2機能ユニットバッチは、前記複数の第2機能ユニットと、前記複数の第2機能ユニット間のコネクションと、前記1つ以上の第2ローカルレジスタファイルとを用いることにより、粒度再設定可能アレイ(CGRA)として動作する、請求項2に記載のプロセッサ。
【請求項4】
前記第1機能ユニットバッチの構造は、前記第2機能ユニットバッチの構造と同一である、請求項1ないし3のうち何れか1項に記載のプロセッサ。
【請求項5】
前記複数の第1機能ユニットは、前記1つ以上の第1インストラクションを処理し、
前記複数の第2機能ユニットは、前記1つ以上の第2インストラクションを処理する、請求項1ないし4のうち何れか1項に記載のプロセッサ。
【請求項6】
前記第1機能ユニットバッチは、特定サイクルの間にスキュードインストラクションバッチ情報を用いて、少なくとも1つ以上の第2インストラクションのうちの少なくとも何れか1つを実行し、
前記第2機能ユニットバッチは、特定サイクルの間にスキュードインストラクションバッチ情報を用いて、少なくとも1つ以上の第1インストラクションのうちの少なくとも何れか1つを実行する、請求項1ないし5のうち何れか1項に記載のプロセッサ。
【請求項7】
前記第1インストラクションバッチは、複数の第1インストラクションを含み、前記第2インストラクションバッチは、複数の第2インストラクションを含み、
前記第1機能ユニットバッチは、前記複数の第1インストラクションを受信すると、前記複数の第1インストラクションのそれぞれを、1つ以上のスレッドを含むスレッドグループ単位で順次に行い、
前記第2機能ユニットバッチは、前記複数の第2インストラクションを受信すると、前記複数の第2インストラクションのそれぞれを、スレッドグループ単位で順次に行う、請求項1ないし6のうち何れか1項に記載のプロセッサ。
【請求項8】
前記第1機能ユニットバッチ及び第2機能ユニットバッチは、あるインストラクションバッチに対するスレッドグループを行う途中で、条件分岐が発生する場合、前記スレッドグループを2つ以上のサブスレッドグループに分割し、各分岐に対して分割された2つ以上のサブスレッドグループを行う、請求項7に記載のプロセッサ。
【請求項9】
前記第1機能ユニットバッチ及び第2機能ユニットバッチは、前記条件分岐に対する各分岐が終了して併合する場合、前記分割された2つ以上のサブスレッドグループを前記スレッドグループに併合し、該スレッドグループを実行する、請求項に記載のプロセッサ。
【請求項10】
前記複数の第1機能ユニット及び複数の第2機能ユニットのそれぞれに割り当てられるスキュードレジスタ含み、
前記スキュードレジスタのうちの何れか1つを通じてバッチインストラクションメモリに保存されたインストラクションを用いて何れか一サイクルに行われるスキュードインストラクションを生成し、該生成されたスキュードインストラクションを、前記スキュードレジスタの何れか1つに割り当てられた各機能ユニットに伝達する、請求項1に記載のプロセッサ。
【請求項11】
前記バッチインストラクションメモリは、該バッチインストラクションメモリに対応する機能ユニットに伝達するインストラクションを保存するように、複数の第1機能ユニットと複数の第2機能ユニットとのそれぞれに対応する2つのユニットに提供される、請求項10に記載のプロセッサ。
【請求項12】
前記バッチインストラクションメモリのカーネルから引き出された少なくとも一部のインストラクションを保存する1つ以上のカーネルキューをさらに含み、
前記スキュードレジスタを通じて前記各カーネルキューに保存されたインストラクションを用いて何れか一サイクルに行われるスキュードインストラクションを生成して、前記割り当てられた各機能ユニットに伝達する請求項10に記載のプロセッサ。
【請求項13】
複数の第1機能ユニットを含む第1機能ユニットバッチと複数の第2機能ユニットを第2機能ユニットバッチとを含むプロセッサで処理される所定プログラムを分析するプログラム分析部と、
前記分析結果に基づいて、前記第1機能ユニットバッチ及び第2機能ユニットバッチでそれぞれ行われる1つ以上のインストラクションを含む第1インストラクションバッチと第2インストラクションバッチとを生成するインストラクションバッチ生成部と、
を含み、前記インストラクションバッチ生成部は、前記プログラムに条件分岐文が前記分析結果として存在する場合、該条件分岐文の各分岐を処理するインストラクションが、異なるインストラクションバッチに含まれることを許容する、コード生成装置。
【請求項14】
前記インストラクションバッチ生成部は、各インストラクションバッチの総レイテンシーが類似するように、前記第1インストラクションバッチ及び第2インストラクションバッチを生成する、請求項13に記載のコード生成装置。
【請求項15】
前記インストラクションバッチ生成部は、第1インストラクションバッチ及び第2インストラクションバッチが行われる第1機能ユニットバッチまたは第2機能ユニットバッチの読み取りポート及び書き込みポートの数に基づいて、前記第1インストラクションバッチ及び第2インストラクションバッチを生成する、請求項13又は14に記載のコード生成装置。
【請求項16】
前記インストラクションバッチ生成部は、第1インストラクションバッチ及び第2インストラクションバッチを行う第1機能ユニットバッチまたは第2機能ユニットバッチの読み取りポート及び書き込みポートの数を超過することによる、中央レジスタファイルに対する前記第1インストラクションバッチ及び第2インストラクションバッチの読み取り要請及び書き込み要請の数が最小になるように、前記第1インストラクションバッチ及び第2インストラクションバッチを生成する請求項15に記載のコード生成装置。
【請求項17】
前記インストラクションバッチ生成部は、第1インストラクションバッチ及び第2インストラクションバッチを行う第1機能ユニットバッチまたは第2機能ユニットバッチに含まれた機能ユニットの数を超過することによる、インストラクションバッチのそれぞれに含まれたインストラクションの数が最小になるように、前記第1インストラクションバッチ及び第2インストラクションバッチを生成する請求項13ないし16のうち何れか1項に記載のコード生成装置。
【請求項18】
前記インストラクションバッチ生成部は、あるインストラクションバッチでソースとして使用されることによる前記あるインストラクションバッチでの遅延の発生を最小化するように、前記第1インストラクションバッチ及び第2インストラクションバッチを生成する請求項13ないし17のうち何れか1項に記載のコード生成装置。
【請求項19】
プロセッサがバッチスレッドを処理する方法において、
コード生成装置から生成された第1インストラクションバッチ及び第2インストラクションバッチを、複数の第1機能ユニットを含む第1機能ユニットバッチと、複数の第2機能ユニットを含む第2機能ユニットバッチとに入力する段階と、
前記第1機能ユニットバッチ及び第2機能ユニットバッチが、それぞれ第1インストラクションバッチ及び第2インストラクションバッチを順次に行う段階と、
を含み、前記第1インストラクションバッチ及び第2インストラクションバッチを行う段階において、
あるインストラクションバッチに対するあるスレッドグループの遂行途中で、特定スレッドでブロックが発生し、前記ブロックが前記インストラクションバッチに依存する他のインストラクションバッチに対する前記スレッドグループの遂行時まで続く場合、前記他のインストラクションバッチに対して前記ブロックが発生したスレッドを前記スレッドグループの最後に行う、バッチスレッド処理方法。
【請求項20】
前記インストラクションバッチを入力する段階において、
第1インストラクションバッチ及び第2インストラクションバッチをスレッドグループ単位で入力する、請求項19に記載のバッチスレッド処理方法。
【請求項21】
前記第1インストラクションバッチ及び第2インストラクションバッチを行う段階において、
前記スレッドグループに含まれた各スレッドをインターリーブド方式で切り替えながら、各インストラクションバッチに対するスレッドグループが実行される、請求項20に記載のバッチスレッド処理方法。
【請求項22】
前記第1インストラクションバッチ及び第2インストラクションバッチを行う段階において、あるインストラクションバッチに対するスレッドグループを行う途中で、条件分岐が発生する場合、前記スレッドグループを2つ以上のサブスレッドグループに分割し、各分岐に対して前記分割された2つ以上のサブスレッドグループを行う、請求項20に記載のバッチスレッド処理方法。
【請求項23】
前記第1インストラクションバッチ及び第2インストラクションバッチを行う段階において、前記条件分岐に対する各分岐が終了して併合される場合、前記分割された2つ以上のサブスレッドグループを前記スレッドグループに併合し、該スレッドグループを実行する、請求項22に記載のバッチスレッド処理方法。
【発明の詳細な説明】
【技術分野】
【0001】
本発明は、バッチスレッド処理基盤のプロセッサ、そのプロセッサを用いてバッチスレッドを処理する方法と、そのバッチスレッド処理基盤のプロセッサを支援するためのコード生成装置等に関する。
【背景技術】
【0002】
粗粒度再設定可能アレイ(Coarse Grain Reconfigurable Array:以下、CGRAと称する)は、多数の機能ユニット(FU:Function Unit)を配列(array)形態で有しているハードウェアであって、速い速度の演算のために使われる。CGRAは、ソフトウェアパイプライン技術を活用して、それぞれのデータ間の依存度(dependency)が存在しても、処理効率(throughput)を最大化することができる。しかし、データ処理過程のあらゆるスケジュールが、コンパイル段階でなされるために、コンパイル時間が長く、マルチスレッド(multi thread)の具現において、ハードウェアオーバーヘッドが大きくて、メモリアクセスなどの定義されていない、遅延時間の長い演算を行う時、効率が落ちる。
【0003】
一方、SIMT(Single Instruction Multiple Thread)は、CGRAのように多数の機能ユニットを有し、1つのインストラクションを多数の機能ユニットが使って、各機能ユニットが、1つのスレッドを行う構造である。SIMTは、多数の機能ユニットが同じインストラクション順序で多数のデータをそれぞれ処理するので、同じ過程で多くのデータを処理しなければならない大量の並列データ処理アプリケーション(massively parallel data processing application)に有利である。また、演算遅延(operationlatency)が長い場合、他のスレッドを行うスレッドスイッチング(threadswitching)を通じて効率を高めうる。しかし、データ処理過程でそれぞれのデータ間に依存度が存在する場合、その処理が非常に難しいという問題がある。
【発明の概要】
【発明が解決しようとする課題】
【0004】
本発明が解決しようとする課題は、バッチスレッド処理基盤のプロセッサ、そのプロセッサを利用したバッチスレッド処理方法、及びバッチスレッド処理のためのコード生成装置を提供することである。
【課題を解決するための手段】
【0005】
一観点によるプロセッサは、
中央レジスタファイルと、
複数の第1機能ユニットと、前記第1機能ユニットが前記中央レジスタファイルにアクセスするための第1入力ポートと、第1出力ポートとを含む第1機能ユニットバッチと、
複数の第2機能ユニットと、前記第2機能ユニットが前記中央レジスタファイルにアクセスするための第2入力ポートと、第2出力ポートとを含む第2機能ユニットバッチと、を含み、
前記第1機能ユニットバッチは、プログラムをなす1つ以上の第1インストラクションを含む第1インストラクションバッチを受信して、前記1つ以上の第1インストラクションを順次に行い、前記第2機能ユニットバッチは、前記プログラムをなす1つ以上の第2インストラクションを含む第2インストラクションバッチを受信して、前記1つ以上の第2インストラクションを順次に行う、プロセッサである。
【図面の簡単な説明】
【0006】
図1】本発明の一実施形態によるプロセッサを示した図面である。
図2】例題プログラムの制御流れグラフである。
図3図2の例に関し、一般的なSIMT構造で行われる手続きを説明する図面である。
図4A図2の例に関し、一般的なCGRAで行われる手続きを説明する図面である。
図4B図2の例に関し、一般的なCGRAで行われる手続きを説明する図面である。
図4C図2の例に関し、一般的なCGRAで行われる手続きを説明する図面である。
図5A図2の例に関し、一実施形態によるプロセッサで行われる手続きを説明する図面である。
図5B図2の例に関し、一実施形態によるプロセッサで行われる手続きを説明する図面である。
図6A】本発明の一実施形態によるプロセッサの機能ユニットバッチにスキュードインストラクションが入力される例を説明する図面である。
図6B】本発明の一実施形態によるプロセッサの機能ユニットバッチにスキュードインストラクションが入力される例を説明する図面である。
図7A】スキュードインストラクション入力のためのプロセッサの他の実施形態を示した図面である。
図7B】スキュードインストラクション入力のためのプロセッサのさらに他の実施形態を示した図面である。
図8】本発明の一実施形態によるバッチスレッド基盤のプロセッサを支援するためのコード生成装置のブロック図である。
図9】本発明の一実施形態によるバッチスレッド基盤のプロセッサを用いてバッチスレッドを処理する方法のフローチャートである。
【発明を実施するための形態】
【0007】
<実施の形態の概要>
本発明の一態様によれば、プロセッサは、中央レジスタファイルと、複数の第1機能ユニットと、第1機能ユニットが、中央レジスタファイルにアクセスするための第1入力ポート及び第1出力ポートを含む第1機能ユニットバッチと、複数の第2機能ユニットと、第2機能ユニットが、中央レジスタファイルにアクセスするための第2入力ポート及び第2出力ポートを含む第2機能ユニットバッチと、を含み、第1機能ユニットバッチは、プログラムに対する1つ以上の第1インストラクションを含む第1インストラクションバッチを受信して、1つ以上の第1インストラクションを順次に行い、第2機能ユニットバッチは、そのプログラムに対する1つ以上の第2インストラクションを含む第2インストラクションバッチを受信して、1つ以上の第2インストラクションを順次に行うことができる。第1機能ユニットバッチは、複数の第1機能ユニットの入出力データを保存する1つ以上の第1ローカルレジスタファイルをさらに含み、第2機能ユニットバッチは、複数の第2機能ユニットの入出力データを保存する1つ以上の第1ローカルレジスタファイルをさらに含みうる。
【0008】
第1機能ユニットバッチは、複数の第1機能ユニット、複数の第1機能ユニット間の連結及び1つ以上の第1ローカルレジスタファイルを用いてCGRAで動作し、第2機能ユニットバッチは、複数の第2機能ユニット、複数の第2機能ユニット間の連結及び1つ以上の第2ローカルレジスタファイルを用いてCGRAで動作することができる。
【0009】
この際、第1機能ユニットバッチの構造は、第2機能ユニットバッチの構造と同一であり得る。
【0010】
この際、複数の第1機能ユニットは、1つ以上の第1インストラクションを処理し、複数の第2機能ユニットは、1つ以上の第2インストラクションを処理することができる。
【0011】
この際、第1機能ユニットバッチは、特定サイクルの間にスキュードインストラクションバッチ情報(skewed instruction batch information)を用いて少なくとも1つ以上の第2インストラクションのうちの少なくとも何れか1つを実行し、第2機能ユニットバッチは、特定サイクルの間にスキュードインストラクションバッチ情報を用いて少なくとも1つ以上の第1インストラクションのうちの少なくとも何れか1つを実行することができる。
【0012】
この際、第1インストラクションバッチは、複数の第1インストラクションバッチを含み、第2インストラクションバッチは、複数の第2インストラクションバッチを含み、第1機能ユニットバッチは、複数の第1インストラクションバッチが入力されれば、複数の第1インストラクションバッチのそれぞれを1つ以上のスレッドを含むスレッドグループ単位で順次に行い、第2機能ユニットバッチは、複数の第2インストラクションバッチが入力されれば、複数の第2インストラクションバッチのそれぞれをスレッドグループ単位で順次に行うことができる。
【0013】
この際、第1機能ユニットバッチと第2機能ユニットバッチは、あるインストラクションバッチに対するスレッドグループの遂行途中で、特定スレッドでブロック(block)が発生し、ブロックがインストラクションバッチと依存関係にある他のインストラクションバッチに対するスレッドグループの遂行時にも続けば、他のインストラクションバッチに対して前記ブロックが発生したスレッドをスレッドグループの最後に行うことができる。
【0014】
第1機能ユニットバッチと第2機能ユニットバッチは、あるインストラクションバッチに対するスレッドグループを行う途中で、条件分岐が発生すれば、スレッドグループを2つ以上のサブスレッドグループに分割し、各分岐に対して分割された2つ以上のサブスレッドグループを行うことができる。
【0015】
第1機能ユニットバッチと第2機能ユニットバッチは、条件分岐に対する各分岐が終了して併合されれば、分割された2つ以上のサブスレッドグループをスレッドグループに再び併合して行うことができる。
【0016】
本発明の他の態様によれば、プロセッサは、中央レジスタファイルと、複数の第1機能ユニットと、第1機能ユニットが、中央レジスタファイルにアクセスするための第1入力ポート及び第1出力ポートを含む第1機能ユニットバッチと、複数の第2機能ユニットと、第2機能ユニットが、中央レジスタファイルにアクセスするための第2入力ポート及び第2出力ポートを含む第2機能ユニットバッチと、複数の第1機能ユニット及び複数の第2機能ユニットのそれぞれに割り当てられるスキュードレジスタと、を含み、スキュードレジスタのうちの何れか1つを通じてバッチインストラクションメモリに保存されたインストラクションを用いて何れか一サイクルに行われるスキュードインストラクションを生成し、該生成されたスキュードインストラクションをスキュードレジスタの何れか1つに割り当てられた各機能ユニットに伝達することができる。
【0017】
この際、バッチインストラクションメモリは、そのバッチインストラクションメモリに対応する機能ユニットに伝達するインストラクションを保存するように、複数の第1機能ユニットと複数の第2機能ユニットとのそれぞれに対応する2つのユニットに提供されうる。
【0018】
プロセッサは、バッチインストラクションメモリのカーネルから引き出された少なくとも一部のインストラクションを保存する1つ以上のカーネルキュー(Kernel Queue)をさらに含み、スキュードレジスタを通じて各カーネルキューに保存されたインストラクションを用いて何れか一サイクルに行われるスキュードインストラクションを生成して、前記割り当てられた各機能ユニットに伝達することができる。
【0019】
本発明の一態様によれば、コード生成装置は、複数の第1機能ユニットを含む第1機能ユニットバッチと複数の第2機能ユニットを第2機能ユニットバッチとを含むプロセッサで処理される所定プログラムを分析するプログラム分析部と、分析結果に基づいて、第1機能ユニットバッチ及び第2機能ユニットバッチでそれぞれ行われる1つ以上のインストラクションを含む第1インストラクションバッチと第2インストラクションバッチとを生成するインストラクションバッチ生成部と、を含みうる。
【0020】
インストラクションバッチ生成部は、分析結果、前記プログラムに条件分岐文が存在すれば、その条件分岐文の各分岐を処理するインストラクションは、互いに異なるインストラクションバッチに含ませる。
【0021】
インストラクションバッチ生成部は、各インストラクションバッチの総レイテンシー(latency)が類似するように、前記第1インストラクションバッチ及び第2インストラクションバッチを生成することができる。
【0022】
インストラクションバッチ生成部は、第1インストラクションバッチ及び第2インストラクションバッチが行われる第1機能ユニットバッチまたは第2機能ユニットバッチの読み取りポート及び書き込みポートの数に基づいて、第1インストラクションバッチ及び第2インストラクションバッチを生成することができる。
【0023】
インストラクションバッチ生成部は、中央レジスタファイルに対する第1インストラクションバッチ及び第2インストラクションバッチの読み取り要請及び書き込み要請の数が、第1インストラクションバッチ及び第2インストラクションバッチを行う第1機能ユニットバッチまたは第2機能ユニットバッチの読み取りポート及び書き込みポートの数を超過するものから最小になるように、第1インストラクションバッチ及び第2インストラクションバッチを生成することができる。
【0024】
インストラクションバッチ生成部は、インストラクションバッチのそれぞれに含まれたインストラクションの数が、第1インストラクションバッチ及び第2インストラクションバッチを行う第1機能ユニットバッチまたは第2機能ユニットバッチに含まれた機能ユニットの数を超過するものから最小になるように、第1インストラクションバッチ及び第2インストラクションバッチを生成することができる。
【0025】
インストラクションバッチ生成部は、あるインストラクションバッチでソースとして使われて、あるインストラクションバッチでの遅延の発生を最小化するように、第1インストラクションバッチ及び第2インストラクションバッチを生成することができる。
【0026】
本発明の一態様によれば、プロセッサがバッチスレッドを処理する方法は、コード生成装置から生成された第1インストラクションバッチ及び第2インストラクションバッチを、複数の第1機能ユニットを含む第1機能ユニットバッチと、複数の第2機能ユニットを含む第2機能ユニットバッチとに入力する段階と、第1機能ユニットバッチ及び第2機能ユニットバッチが、それぞれ第1インストラクションバッチ及び第2インストラクションバッチを順次に行う段階と、を含みうる。
【0027】
インストラクションバッチを入力する段階は、第1インストラクションバッチ及び第2インストラクションバッチをスレッドグループ単位で入力することができる。
【0028】
第1インストラクションバッチ及び第2インストラクションバッチを行う段階は、各インストラクションバッチに対するスレッドグループを行う時、スレッドグループに含まれた各スレッドをインターリーブド(interleaved)方式でスイッチング(switching)しながら行うことができる。
【0029】
第1インストラクションバッチ及び第2インストラクションバッチを行う段階は、あるインストラクションバッチに対するあるスレッドグループの遂行途中で、特定スレッドでブロックが発生し、インストラクションバッチと依存関係にある他のインストラクションバッチに対する前記スレッドグループの遂行時にも続けば、他のインストラクションバッチに対してブロックが発生したスレッドをスレッドグループの最後に行うことができる。
【0030】
第1インストラクションバッチ及び第2インストラクションバッチを行う段階は、あるインストラクションバッチに対するスレッドグループを行う途中で、条件分岐が発生すれば、前記スレッドグループを2つ以上のサブスレッドグループに分割し、各分岐に対して前記分割されたサブスレッドグループを行うことができる。
【0031】
第1インストラクションバッチ及び第2インストラクションバッチを行う段階は、条件分岐に対する各分岐が終了して併合されれば、分割された2つ以上のサブスレッドグループをスレッドグループに再び併合して行うことができる。
【0032】
その他の実施形態の具体的な事項は、詳細な説明及び図面に含まれている。記載の技術の利点及び特徴、そして、それらを果たす方法は、添付される図面と共に詳細に後述されている実施形態を参照すると、明確になる。明細書の全般に亘って同じ参照符号は、同じ構成要素を指称する。
【0033】
<実施の形態の詳細な説明>
以下、バッチスレッド処理基盤のプロセッサ、そのプロセッサを利用したバッチスレッド処理方法、及びバッチスレッド処理のためのコード生成装置の実施形態を、図面を参考にして詳しく説明する。
【0034】
図1は、本発明の一実施形態によるプロセッサを示した図面である。
【0035】
図1を参照すれば、一実施形態によるプロセッサ100は、中央レジスタファイル110と1つ以上の機能ユニットバッチ120a、120b、120c、120dとを含む。図1には、上端と下端とに2個の中央レジスタファイル110が示されているが、これは、各機能ユニットバッチ120a、120b、120c、120dの入力ポート130及び出力ポート140を説明するために、便宜上、区分して図示したものであり、プロセッサ100が、2個の中央レジスタファイル110を含むことを意味するものではない。
【0036】
各機能ユニットバッチ120a、120b、120c、120dは、2つ以上の機能ユニットFU0、FU1、FU2、FU3を含む。また、各機能ユニットバッチ120a、120b、120c、120dは、1つ以上の入力ポート130及び1つ以上の出力ポート140を含み、その入力ポート130及び出力ポート140を通じて中央レジスタファイル110にアクセスすることができる。機能ユニットバッチ120a、120b、120c、120dは、中央レジスタファイル110を通じて相互間にデータ共有などの通信が可能である。
【0037】
機能ユニットバッチ120a、120b、120c、120dは、1つ以上のローカルレジスタファイル(Local Register File、LR)を含みうる。ローカルレジスタファイル(LR)は、1つ以上の機能ユニットに含まれ、機能ユニットの入出力データのための保存空間として使われ、FIFO(First In First Out)方式で動作する。
【0038】
本発明の一実施形態によるプロセッサ100は、機能ユニットバッチに含まれた機能ユニット、その機能ユニット間の連結及び機能ユニットのローカルレジスタファイル(LR)を用いてCGRAで動作することができる。連結はコネクションと言及されてもよい。また、2つ以上の機能ユニットFU0、FU1、FU2、FU3を含んでなる2つ以上の機能ユニットバッチ120a、120b、120c、120dを使って、SIMTで動作することが可能である。
【0039】
このために、機能ユニットバッチ120a、120b、120c、120dは、互いに同じ構造からなりうる。この際、機能ユニットバッチ120a、120b、120c、120dのそれぞれに含まれた機能ユニットFU0、FU1、FU2、FU3は、互いに異なる構造からなるようにする。しかし、機能ユニットバッチ120a、120b、120c、120dのそれぞれに含まれた機能ユニットFU0、FU1、FU2、FU3が、必ずしも互いに異なる構造からなるものではなく、必要に応じて2つ以上の機能ユニットが互いに同じ構造を有するように具現されうる。
【0040】
例えば、機能ユニットバッチ120a、120b、120c、120dは、互いに同じコンピュータパワーを有するように機能ユニットFU0、FU1、FU2、FU3を含みうる。ここで、コンピュータパワーとは、機能ユニットが行う演算(例:‘add’、‘sub’、‘mul’、‘div’など)を行う能力や性能等を意味し、機能ユニットバッチ120a、120b、120c、120dは、同じ演算を行う機能ユニットを含むことによって、同じコンピュータパワーを有させる。このように、一実施形態によるプロセッサ100は、同じコンピュータパワーを有する機能ユニットバッチ120a、120b、120c、120dを通じてSIMTで動作して、大量の並列データスレッド処理を支援することができる。
【0041】
一方、一般的なプロセッサは、各機能ユニットのALU(Arithmetic Logic Unit)ごとに中央レジスタファイルにアクセスするための1つ以上の入力ポート及び出力ポートを有するが、一実施形態によるプロセッサ100は、機能ユニットバッチ120a、120b、120c、120d単位で中央レジスタファイル110にアクセスするための1つ以上の入力ポート130と出力ポート140とを有させることによって、中央レジスタファイル110にアクセスするオーバーヘッドを減少させて、プロセッサの性能を増加させることができる。
【0042】
例えば、8個の機能ユニットを有した一般的なプロセッサが、各機能ユニットごとに2個の入力ポートと1個の出力ポートとを有するとすれば、そのプロセッサは、総16個の入力ポートと8個の出力ポートとを通じて中央レジスタファイルのアクセスがなされる。一方、一実施形態によるプロセッサ100は、8個の機能ユニットが4個ずつ2個の機能ユニットバッチに含まれ、各機能ユニットバッチが、2個の入力ポートと1個の出力ポートとを有すると仮定すれば、総4個の入力ポートと2個の出力ポートとを通じて中央レジスタファイルのアクセスがなされるので、入出力演算のためのオーバーヘッドが減少しうる。
【0043】
機能ユニットバッチのそれぞれ120a、120b、120c、120dは、コンパイルを通じて生成された1つ以上のインストラクションバッチを行うことができる。この際、各インストラクションバッチは、1つ以上のインストラクションを含み、各インストラクションは、対応する機能ユニットで順次に行われる。
【0044】
一方、機能ユニットバッチ120a、120b、120c、120dは、入力される1つ以上のインストラクションバッチに対して1つ以上のスレッドを含むスレッドグループ単位で順次に行うことができる。
【0045】
この際、機能ユニットバッチ120a、120b、120c、120dが、あるインストラクションバッチに対して所定スレッドグループを行う途中で、特定スレッドでブロックが発生する場合、そのブロックが発生したインストラクションバッチと依存関係にある他のインストラクションバッチに対して同じスレッドグループのスレッドを行う時、まだ発生したブロックが解けず、続いていれば、他のインストラクションに対しては、そのブロックが発生したスレッドを行わず、そのスレッドグループのあらゆるスレッドの遂行が終了する最後に行わせうる。
【0046】
これは、インストラクションバッチを行う途中で、何れか1つのスレッドが、ブロック発生インストラクションによって繋がる、あらゆるスレッドのブロック化を防止することによって、処理効率を増加させるためである。
【0047】
機能ユニットバッチ120a、120b、120c、120dが、あるインストラクションバッチに対してスレッドグループを行う途中で、条件分岐が発生すれば、そのスレッドグループを2つ以上のサブグループに分割し、各分岐に対してそれぞれ分割されたサブスレッドグループを行うことができる。また、各分岐に対する条件分岐が終了して併合されれば、分割されたサブスレッドグループを再び元のスレッドグループに併合して行うことができる。
【0048】
図2は、図1の実施形態によるプロセッサ100でバッチスレッドを処理する手続きを説明する例題プログラムの制御流れグラフである。図2は、あるインストラクションが他のインストラクションの実行後に実行されるさらに他のインストラクションとデータ依存度を有するように、11個のインストラクション(A〜K)が互いに一定のデータ依存度を有しながら行われることを示す。この際、レイテンシーは、それぞれのインストラクション(A〜K)遂行に必要なサイクル(cycle)を意味する。
【0049】
図3は、図2の例題が、一般的なSIMT構造で行う手続きを説明する図面である。128個のデータをそれぞれ他のスレッドで処理するとする時、総128個のスレッドが処理せねばならない。8個のALU(ALU0〜ALU7)を有した一般的なSIMTで、128個のスレッドを32個ずつ4個のスレッドグループに分けて、総11個(A〜K)のインストラクションに対して遂行させると仮定する。この際、一般的なSIMTで円滑に動作するように、各インストラクション(A〜K)のレイテンシーをいずれも4に統一させた場合、SIMTは、図3に示したような方式でインストラクションAからKまで順次に4個のスレッドグループを処理し、必要となった総サイクルは、180サイクルになる。
【0050】
図4Aないし図4Cは、図2の例題が、一般的なCGRAで行われる手続きを説明する図面である。図4Aは、図3に例示されたSIMTと同じ個数の機能ユニットからなる一般的なCGRAを例示したものであって、構成メモリまたはキャッシュメモリ(CMEM)からインストラクションを入力される。図4Bは、図2の例題が図4AのCGRAで行われるように、スケジューリングされた例である。図4Cは、図4Bのように、スケジューリングされた11個のインストラクション(A〜K)を行ったことを例示したものである。
【0051】
この際、CGRAの繰り返し(iteration)は、SIMTのスレッドに相応し、図3で説明したように、総128個のスレッドを処理するためには、128回の繰り返しが行われる。図4Bを参照すれば、11個のインストラクション(A〜K)を一回繰り返しを行うためには、総16サイクルのレイテンシーが必要となり、これを図4Cのように、開始区間(Initiation Interval、II)を2にして、総128回の繰り返しを行えば、総272サイクルが必要となる。
【0052】
図5A及び図5Bは、図2の例題が、図1の実施形態によるプロセッサ100で行う手続きを説明する図面である。
【0053】
図5Aは、図2の例題をそのプロセッサ100で行われるように、コンパイル段階から生成された3個のインストラクションバッチを示したものであって、インストラクションバッチ0は、4個のインストラクション(A、B、D、E)を含み、インストラクションバッチ1は、4個のインストラクション(C、F、G、H)を含み、インストラクションバッチ2は、最後の3個のインストラクション(I、J、K)を含む。
【0054】
図5Bは、プロセッサ100が、それぞれ4個の機能ユニットを有した2個の機能ユニットバッチを有した場合、何れか1つの機能ユニットバッチで3個のインストラクションバッチを順次に行ったことを示した図面である。インストラクションバッチ内の各インストラクションは、機能ユニットバッチ内の各機能ユニットで行われる。インストラクションバッチ内のデータ移動は、機能ユニットバッチ内のローカルレジスタファイルとインターコネクション(interconnection)とを通じてなされ、インストラクションバッチ間のデータ移動は、中央レジスタファイル110を通じてなされうる。
【0055】
図3とは同様に、総128個のスレッドを処理するとする時、2個の機能ユニットバッチが、3個のインストラクションバッチに対してそれぞれ64スレッドずつ行うことによって、総202サイクルが必要となる。例えば、128個のスレッドが、16個のスレッド単位でスケジューリングされたとする時、何れか1つの機能ユニットバッチで3個のインストラクションバッチを順次に行うが、16個のスレッドがインターリーブド方式でスイッチングしながら行うことができる。すなわち、インストラクションバッチ1つの入力を16個のスレッドに対して行い、次のインストラクションバッチに対して16個のスレッドを行う方式で最後のインストラクションバッチまで行い、再び最初のインストラクションバッチから新たな16個のスレッドに対して行う方式であらゆるスレッドを処理し、このような方式で2個の機能ユニットバッチで128個のスレッドに対して行う場合、総202サイクルが必要となる。
【0056】
図6A及び図6Bは、機能ユニットバッチにスキュードインストラクション(skewd instruction)が入力されるものを説明する図面である。図6A及び図6Bを参照すれば、一実施形態によるプロセッサ200は、各機能ユニットバッチが入力される1つ以上のインストラクションバッチを行う時、各機能ユニットバッチは、CGRAのように動作するので、各インストラクションバッチ内のインストラクションが、各機能ユニットに入力される時、時間に対して時差を置く方式で入力される。ここで、1つのバッチ機能ユニットによって行われるバッチインストラクションが、経時的に変更されるために、そのインストラクションは、下記で説明するように、スキュードインストラクションであり得る。
【0057】
図6Aに示したように、バッチインストラクションは、A−B−D−E(サイクル10)、C−B−D−E(サイクル17)、C−F−D−E(サイクル21)、C−F−G−E(サイクル25)、及びC−G−G−H(サイクル26)の順序で変更される。この場合に、A−B−D−EとC−F−G−Hが、バッチインストラクションである時、3つのスキュードインストラクションが、2つのバッチインストラクション間に挿入される方式で入力される。したがって、バッチ機能ユニットでパイプライン形態で連続した演算が可能である。スキュードインストラクションの特別な例で、サイクル17の場合、機能ユニットバッチ内の4個の機能ユニットには、4個のインストラクションC、B、D、Eが入力される。しかし、インストラクションCは、図5Aを参照すれば、インストラクションバッチ1に含まれ、残りのインストラクションB、D、及びEは、インストラクションバッチ0に属する。このように、同一サイクルに入力されるインストラクションのうちの少なくとも何れか1つが他のインストラクションバッチに属する場合に、そのサイクルに入力されるインストラクションをスキュードインストラクションであるとすれば、プロセッサ100は、各機能ユニットバッチに正確なスキュードインストラクションを入力するためのスキュードインストラクション情報(skewed instruction information)を必要とする。
【0058】
このようなスキュードインストラクション情報は、コンパイル段階でコード生成装置によって生成されうる。プロセッサ200は、スキュードインストラクション情報を用いて機能ユニットバッチのそれぞれのPC(Program Counter)を通じてバッチインストラクションメモリ(BIM)にアクセスして、該当するインストラクションを機能ユニットバッチの該当する機能ユニットに伝達することができる。
【0059】
図7A及び図7Bは、スキュードインストラクション入力のためのプロセッサの他の実施形態を示した図面である。
【0060】
図7Aを参照すれば、プロセッサ300は、中央レジスタファイル(図示せず)、2つ以上の機能ユニットを含む1つ以上の機能ユニットバッチ及び各機能ユニットバッチに含まれた機能ユニットに割り当てられる2つ以上のスキュードレジスタ310を含みうる。
【0061】
本実施形態によるプロセッサ300は、前述したスキュードインストラクションの入力をさらに効率的に処理させるために、機能ユニットに対応するスキュードレジスタ310をさらに含むものであって、スキュードレジスタ310を通じてバッチインストラクションメモリBIM0、BIM1、BIM2、BIM3に保存されたインストラクションを用いて何れか一サイクルに行われるスキュードインストラクションを生成して、割り当てられた機能ユニットに伝達することができる。機能ユニットバッチのそれぞれは、自身のPC値と各機能ユニットに割り当てられたスキュードレジスタ値とを用いてバッチインストラクションメモリにアクセスすることができる。
【0062】
この際、バッチインストラクションメモリBIM0、BIM1、BIM2、BIM3は、示したように、各機能ユニットに対応するように2つ以上に分けて構成されて、各バッチインストラクションメモリBIM0、BIM1、BIM2、BIM3は、対応する機能ユニットに伝達されるインストラクションを保存することができる。
【0063】
図7Bは、スキュードインストラクション入力のためのプロセッサのさらに他の実施形態であって、プロセッサ400は、図7Aのプロセッサ300に1つ以上のカーネルキュー420をさらに含みうる。これは、図7Aのように、バッチインストラクションメモリBIM0、BIM1、BIM2、BIM3を複数個備える必要なしに、図7Bのように、1つのバッチインストラクションメモリ(BIM)を使用可能にする。
【0064】
図7Bを参照すれば、プロセッサ400は、各機能ユニットバッチの機能ユニットに対応するように2つ以上のカーネルキュー420を含みうる。プロセッサ400は、バッチインストラクションメモリ(BIM)のカーネルで少なくとも一部のインストラクションを引き出してカーネルキュー420に保存することができる。また、各機能ユニットバッチは、自身のPCと割り当てられたスキュードレジスタの値とに基づいて、対応するカーネルキュー420に接近して、必要なインストラクションを読み出してスキュードインストラクションを生成し、そのスキュードインストラクションを機能ユニットに伝達されうる。
【0065】
図8は、本発明の一実施形態によるバッチスレッド基盤のプロセッサを支援するためのコード生成装置のブロック図である。
【0066】
図1及び図8を参照すれば、コード生成装置500は、プログラム分析部510及びインストラクションバッチ生成部520を含み、バッチスレッドを処理するプロセッサ100を支援するためのインストラクションバッチを生成することができる。
【0067】
プログラム分析部510は、処理される所定プログラムを分析し、該分析結果を生成することができる。例えば、プログラム分析部510は、プログラムのデータ間に依存度及びプログラム内に条件分岐文の存否などを分析することができる。
【0068】
インストラクションバッチ生成部520は、分析結果に基づいて、プロセッサ100の1つ以上の機能ユニットバッチ120a、120b、120c、120dで行われる1つ以上のインストラクションバッチを生成することができる。この際、各インストラクションバッチは、1つ以上のインストラクションを含みうる。
【0069】
インストラクションバッチ生成部520は、分析結果中の依存度分析情報に基づいて、各機能ユニットバッチ120a、120b、120c、120dに含まれた機能ユニットを用いてCGRAで動作するように、コードを生成し、または各機能ユニットバッチでSIMTで動作するように、1つ以上のインストラクションバッチに対するコードを生成することができる。
【0070】
インストラクションバッチ生成部520は、分析結果、プログラムに条件分岐文が存在すれば、その条件分岐文の各分岐を処理するインストラクション、例えば、条件が真であれば、第1経路を行い、偽であれば、第2経路を行う場合、第1経路を処理するインストラクションと、第2経路を処理するインストラクションとを互いに異なるインストラクションバッチに含ませる。
【0071】
また、コード生成装置500は、インストラクションバッチ生成部520によって生成された各分岐を処理するインストラクションバッチに対して何れか1つの機能ユニットバッチで順次に行わせるか、それぞれ他の機能ユニットバッチで分離行わせるインストラクションを生成することができる。これを通じて、一般的なSIMTやCGRAでの条件分岐の問題をさらに効率的に解決することができる。
【0072】
インストラクションバッチ生成部520は、各インストラクションバッチを生成する時、各インストラクションバッチの総レイテンシーが類似するように生成することができる。また、インストラクションバッチ生成部520は、各機能ユニットバッチ120a、120b、120c、120dで中央レジスタファイル110にアクセスするための入出力ポート数を考慮して、インストラクションバッチを生成することができる。例えば、あるインストラクションバッチから中央レジスタファイルに対する読み取り要請の数が、そのインストラクションバッチを行う機能ユニットバッチの読み取りポート数を超過しないようにし、インストラクションバッチの書き込み要請の数は、機能ユニットバッチの書き込みポートの数を超過しないように生成することができる。
【0073】
また、インストラクションバッチ生成部520は、各インストラクションバッチに含まれたインストラクションの数が、各機能ユニットバッチに含まれた機能ユニットの数を超過しないように生成することができる。図5Aを参照すれば、インストラクションバッチ0と1は、4個のインストラクションが含まれ、インストラクションバッチ2は、3個のインストラクションが含まれるように生成されたものであって、各インストラクションバッチに含まれたインストラクションの数は、各機能ユニットバッチ120a、120b、120c、120dに含まれた機能ユニットの数4を超過しない。
【0074】
一方、インストラクションバッチ生成部520は、特定インストラクションバッチで遅延が発生する演算(operation)、例えば、ブロックが発生する演算の結果は、その特定インストラクションバッチでソース(source)として使われないように、インストラクションバッチを生成することができる。一例として、スケジューリング時にブロックが発生する演算に対しては、インストラクションバッチの最初に位置させ、当該インストラクションバッチの最後に、その演算のスレッド遂行結果を利用させるか、インストラクションバッチの最後に位置させて、次のインストラクションバッチを行う前に、その演算を処理させうる。
【0075】
一方、コード生成装置500は、生成されたインストラクションバッチをあらゆる機能ユニットバッチに同様に入力するか、2つ以上の機能ユニットバッチに分離して入力させるインストラクションを生成することができる。
【0076】
コード生成装置500は、生成されたインストラクションバッチ情報及び各種インストラクション情報は、構成メモリまたはキャッシュメモリに保存することができる。一方、インストラクションバッチ生成部520は、図6A及び図6Bを通じて説明したように、スキュードインストラクション情報を生成することができる。
【0077】
インストラクションバッチ生成部520は、前述された。一実施形態によれば、インストラクションバッチ生成部520は、同時に行われるインストラクションを収集せず、順次に行われるインストラクションを収集することによって、バッチインストラクションを生成する。これにより、バッチインストラクションの生成に難点がなく、高効率を果たすことができる。複数のデータは、複数のバッチ機能ユニットによって同時に行われるために、このようなバッチ生成は、大量の並列データ処理の具現に効果的である。
【0078】
以下、VLIW(Very Long Instruction Word)とスーパースカラーアーキテクチャー(super−scalar architecture)との比較説明である。
【0079】
VLIWは、コンパイラが非常に長い命令語(very long instruction word)を生成し、複数のインストラクションを同時に実行されるように構成され、複数の機能ユニット(または、実行ユニット)が、単一サイクル内にVLIWを行わせるアーキテクチャーである。デジタル信号処理で広範囲に使われるVLIWアーキテクチャーは、同時に実行可能な十分なインストラクションを見つけるのによく失敗し、それは、効率を低下させる結果になりうる。そして、あらゆる機能ユニットが、同時に中央レジスタファイルにアクセスしなければならないために、中央レジスタファイルのハードウェアオーバーヘッドは、非効率的に増加する。
【0080】
スーパースカラーは、ハードウェアがランタイム時に同時に実行可能なインストラクションを見つけ、複数の実行ユニット(または、機能ユニット)が発見されたインストラクションを行うアーキテクチャーである。このアーキテクチャーも、同時に実行可能であり、インストラクションを見つけるのに困難さを有しており、非常に複雑なハードウェアをもたらしうる。
【0081】
一方、開示された実施形態は、複数のバッチ機能ユニットを活用して、同時に複数のインストラクションを行い、それは、同時に大量の並列データ処理の具現に効果的である。
【0082】
図9は、本発明の一実施形態によるバッチスレッド基盤のプロセッサを用いてバッチスレッドを処理する方法のフローチャートである。図9は、図1の実施形態によるプロセッサ100を用いてバッチスレッドを処理する方法を説明する図面であって、詳しくは、図1の以下を参照して説明したところによって解釈されるので、以下、簡単に説明する。
【0083】
まず、プロセッサ100は、コード生成装置から生成された1つ以上のインストラクションバッチを1つ以上の機能ユニットバッチ120a、120b、120c、120dに入力することができる(段階610)。この際、生成されたあらゆるインストラクションバッチを、あらゆる機能ユニットバッチ120a、120b、120c、120dにスレッド単位で割り当てて入力することができる。すなわち、各機能ユニットバッチ120a、120b、120c、120dにあらゆるインストラクションバッチを同様に入力して、順次に行わせるが、各機能ユニットバッチが、全体処理しなければならないスレッドグループのうちの一部のスレッドグループを処理させて、SIMTのように動作させる方式である。
【0084】
または、各機能ユニットバッチ120a、120b、120c、120dにインストラクションバッチを分けて入力することができる。例えば、生成されたインストラクションバッチが、4個であるとする時、4個のインストラクションバッチを各機能ユニットバッチ120a、120b、120c、120dに1つずつ入力して、MIMT方式でスレッドを処理させうる。または、2個の機能ユニットバッチ120a、120bには、同一の2個のインストラクションバッチを入力し、残りの2個の機能ユニットバッチ120c、120dに残りの2個のインストラクションバッチを入力することによって、SIMTとMIMTとを混合する方式で処理することができる。
【0085】
このように、各機能ユニットバッチ120a、120b、120c、120dにインストラクションバッチを分けて入力する場合、前述したように、条件分岐を処理する各インストラクションバッチを互いに異なる機能ユニットバッチ120a、120b、120c、120dに入力して、条件分岐の処理効率を増加させることができる。また、各機能ユニットバッチ120a、120b、120c、120dが独立して動作するために、何れか1つの機能ユニットバッチでブロックが発生した場合にも、他の機能ユニットバッチは、これに構わずにスレッド処理が可能となる。
【0086】
次いで、各機能ユニットバッチ120a、120b、120c、120dは、入力された1つ以上のインストラクションバッチを順次に行うことができる(段階620)。この際、各機能ユニットバッチ120a、120b、120c、120dは、前述したように、入力されるインストラクションバッチに対して各スレッドをインターリーブド方式でスイッチングし、各インストラクションバッチを行うことができる。
【0087】
一方、機能ユニットバッチ120a、120b、120c、120dが、あるインストラクションバッチに対して所定スレッドグループを行う途中で、特定スレッドでブロックが発生する場合、そのブロックが発生したインストラクションバッチと依存関係にある他のインストラクションバッチに対して同じスレッドグループのスレッドを行う時、まだ発生したブロックが解けず、続いていれば、他のインストラクションに対しては、そのブロックが発生したスレッドを行わず、そのスレッドグループのあらゆるスレッドの遂行が終了する最後に行わせうる。
【0088】
また、機能ユニットバッチ120a、120b、120c、120dが、あるインストラクションバッチに対してスレッドグループを行う途中で、条件分岐が発生すれば、そのスレッドグループを2つ以上のサブグループに分割し、各分岐に対してそれぞれ分割されたサブスレッドグループを行うことができる。また、各分岐に対する条件分岐が終了して併合されれば、分割されたサブスレッドグループを再び元のスレッドグループに併合して行うことができる。
【0089】
一方、本実施形態は、コンピュータで読み取り可能な記録媒体にコンピュータで読み取り可能なコードとして具現することが可能である。コンピュータで読み取り可能な記録媒体は、コンピュータシステムによって読み取れるデータが保存されるあらゆる種類の記録装置を含む。
【0090】
コンピュータで読み取り可能な記録媒体の例としては、ROM、RAM、CD−ROM、磁気テープ、フロッピー(登録商標)ディスク、光データ保存装置などがあり、また、キャリアウェーブ(例えば、インターネットを介した伝送)の形態で具現するものを含む。また、コンピュータで読み取り可能な記録媒体は、ネットワークで連結されたコンピュータシステムに分散されて、分散方式でコンピュータで読み取り可能なコードとして保存されて実行可能である。そして、本実施形態を具現するための機能的な(functional)プログラム、コード及びコードセグメントは、本発明が属する技術分野のプログラマーによって容易に推論されうる。
【0091】
当業者ならば、本発明がその技術的思想や必須的な特徴を変更せずとも、他の具体的な形態で実施可能であることを理解できるであろう。したがって、前述した実施形態は、あらゆる面で例示的なものであり、限定的ではないということを理解せねばならない。
【0092】
本発明は、バッチスレッド処理基盤のプロセッサ、そのプロセッサを利用したバッチスレッド処理方法、及びバッチスレッド処理のためのコード生成装置関連の技術分野に適用可能である。
【符号の説明】
【0093】
100 プロセッサ
110 中央レジスタファイル
120a〜120d 機能ユニットバッチ
130 入力ポート
140 出力ポート
図1
図2
図3
図4A
図4B
図4C
図5A
図5B
図6A
図6B
図7A
図7B
図8
図9