JP2014216021A - バッチスレッド処理のためのプロセッサ、コード生成装置及びバッチスレッド処理方法 - Google Patents

バッチスレッド処理のためのプロセッサ、コード生成装置及びバッチスレッド処理方法 Download PDF

Info

Publication number
JP2014216021A
JP2014216021A JP2014088265A JP2014088265A JP2014216021A JP 2014216021 A JP2014216021 A JP 2014216021A JP 2014088265 A JP2014088265 A JP 2014088265A JP 2014088265 A JP2014088265 A JP 2014088265A JP 2014216021 A JP2014216021 A JP 2014216021A
Authority
JP
Japan
Prior art keywords
batch
instruction
functional unit
thread
functional
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Granted
Application number
JP2014088265A
Other languages
English (en)
Other versions
JP6502616B2 (ja
Inventor
武 ▲きょん▼ 鄭
Moo-Kyoung Chung
武 ▲きょん▼ 鄭
秀 晶 柳
Soo Jung Ryu
秀 晶 柳
淵坤 趙
Enkon Cho
淵 坤 趙
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Samsung Electronics Co Ltd
Original Assignee
Samsung Electronics Co Ltd
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Samsung Electronics Co Ltd filed Critical Samsung Electronics Co Ltd
Publication of JP2014216021A publication Critical patent/JP2014216021A/ja
Application granted granted Critical
Publication of JP6502616B2 publication Critical patent/JP6502616B2/ja
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/38Concurrent instruction execution, e.g. pipeline or look ahead
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/46Multiprogramming arrangements
    • G06F9/466Transaction processing
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/40Transformation of program code
    • G06F8/41Compilation
    • G06F8/45Exploiting coarse grain parallelism in compilation, i.e. parallelism between groups of instructions
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/38Concurrent instruction execution, e.g. pipeline or look ahead
    • G06F9/3836Instruction issuing, e.g. dynamic instruction scheduling or out of order instruction execution
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/38Concurrent instruction execution, e.g. pipeline or look ahead
    • G06F9/3836Instruction issuing, e.g. dynamic instruction scheduling or out of order instruction execution
    • G06F9/3851Instruction issuing, e.g. dynamic instruction scheduling or out of order instruction execution from multiple instruction streams, e.g. multistreaming
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/38Concurrent instruction execution, e.g. pipeline or look ahead
    • G06F9/3836Instruction issuing, e.g. dynamic instruction scheduling or out of order instruction execution
    • G06F9/3853Instruction issuing, e.g. dynamic instruction scheduling or out of order instruction execution of compound instructions
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/38Concurrent instruction execution, e.g. pipeline or look ahead
    • G06F9/3885Concurrent instruction execution, e.g. pipeline or look ahead using a plurality of independent parallel functional units
    • G06F9/3887Concurrent instruction execution, e.g. pipeline or look ahead using a plurality of independent parallel functional units controlled by a single instruction for multiple data lanes [SIMD]
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/38Concurrent instruction execution, e.g. pipeline or look ahead
    • G06F9/3885Concurrent instruction execution, e.g. pipeline or look ahead using a plurality of independent parallel functional units
    • G06F9/3888Concurrent instruction execution, e.g. pipeline or look ahead using a plurality of independent parallel functional units controlled by a single instruction for multiple threads [SIMT] in parallel
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/38Concurrent instruction execution, e.g. pipeline or look ahead
    • G06F9/3885Concurrent instruction execution, e.g. pipeline or look ahead using a plurality of independent parallel functional units
    • G06F9/3889Concurrent instruction execution, e.g. pipeline or look ahead using a plurality of independent parallel functional units controlled by multiple instructions, e.g. MIMD, decoupled access or execute
    • G06F9/3891Concurrent instruction execution, e.g. pipeline or look ahead using a plurality of independent parallel functional units controlled by multiple instructions, e.g. MIMD, decoupled access or execute organised in groups of units sharing resources, e.g. clusters

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Software Systems (AREA)
  • General Engineering & Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Physics & Mathematics (AREA)
  • Multimedia (AREA)
  • Advance Control (AREA)
  • Devices For Executing Special Programs (AREA)
  • Executing Machine-Instructions (AREA)

Abstract

【課題】 バッチスレッド処理基盤のプロセッサ、そのプロセッサを利用したバッチスレッド処理方法、及びバッチスレッド処理のためのコード生成装置を提供する。
【解決手段】バッチスレッド処理基盤のプロセッサに関するものであって、プロセッサは、中央レジスタファイルと、2つ以上の機能ユニットと、中央レジスタファイルにアクセスするための1つ以上のポートを含む1つ以上の機能ユニットバッチと、を含み、機能ユニットバッチは、1つ以上のインストラクションを含むインストラクションバッチを行うが、インストラクションバッチ内の1つ以上のインストラクションを順次に行うことができる。
【選択図】 図1

Description

本発明は、バッチスレッド処理基盤のプロセッサ、そのプロセッサを用いてバッチスレッドを処理する方法と、そのバッチスレッド処理基盤のプロセッサを支援するためのコード生成装置等に関する。
粗粒度再設定可能アレイ(Coarse Grain Reconfigurable Array:以下、CGRAと称する)は、多数の機能ユニット(FU:Function Unit)を配列(array)形態で有しているハードウェアであって、速い速度の演算のために使われる。CGRAは、ソフトウェアパイプライン技術を活用して、それぞれのデータ間の依存度(dependency)が存在しても、処理効率(throughput)を最大化することができる。しかし、データ処理過程のあらゆるスケジュールが、コンパイル段階でなされるために、コンパイル時間が長く、マルチスレッド(multi thread)の具現において、ハードウェアオーバーヘッドが大きくて、メモリアクセスなどの定義されていない、遅延時間の長い演算を行う時、効率が落ちる。
一方、SIMT(Single Instruction Multiple Thread)は、CGRAのように多数の機能ユニットを有し、1つのインストラクションを多数の機能ユニットが使って、各機能ユニットが、1つのスレッドを行う構造である。SIMTは、多数の機能ユニットが同じインストラクション順序で多数のデータをそれぞれ処理するので、同じ過程で多くのデータを処理しなければならない大量の並列データ処理アプリケーション(massively parallel data processing application)に有利である。また、演算遅延(operationlatency)が長い場合、他のスレッドを行うスレッドスイッチング(threadswitching)を通じて効率を高めうる。しかし、データ処理過程でそれぞれのデータ間に依存度が存在する場合、その処理が非常に難しいという問題がある。
本発明が解決しようとする課題は、バッチスレッド処理基盤のプロセッサ、そのプロセッサを利用したバッチスレッド処理方法、及びバッチスレッド処理のためのコード生成装置を提供することである。
一観点によるプロセッサは、
中央レジスタファイルと、
複数の第1機能ユニットと、前記第1機能ユニットが前記中央レジスタファイルにアクセスするための第1入力ポートと、第1出力ポートとを含む第1機能ユニットバッチと、
複数の第2機能ユニットと、前記第2機能ユニットが前記中央レジスタファイルにアクセスするための第2入力ポートと、第2出力ポートとを含む第2機能ユニットバッチと、を含み、
前記第1機能ユニットバッチは、プログラムをなす1つ以上の第1インストラクションを含む第1インストラクションバッチを受信して、前記1つ以上の第1インストラクションを順次に行い、前記第2機能ユニットバッチは、前記プログラムをなす1つ以上の第2インストラクションを含む第2インストラクションバッチを受信して、前記1つ以上の第2インストラクションを順次に行う、プロセッサである。
本発明の一実施形態によるプロセッサを示した図面である。 例題プログラムの制御流れグラフである。 図2の例に関し、一般的なSIMT構造で行われる手続きを説明する図面である。 図2の例に関し、一般的なCGRAで行われる手続きを説明する図面である。 図2の例に関し、一般的なCGRAで行われる手続きを説明する図面である。 図2の例に関し、一般的なCGRAで行われる手続きを説明する図面である。 図2の例に関し、一実施形態によるプロセッサで行われる手続きを説明する図面である。 図2の例に関し、一実施形態によるプロセッサで行われる手続きを説明する図面である。 本発明の一実施形態によるプロセッサの機能ユニットバッチにスキュードインストラクションが入力される例を説明する図面である。 本発明の一実施形態によるプロセッサの機能ユニットバッチにスキュードインストラクションが入力される例を説明する図面である。 スキュードインストラクション入力のためのプロセッサの他の実施形態を示した図面である。 スキュードインストラクション入力のためのプロセッサのさらに他の実施形態を示した図面である。 本発明の一実施形態によるバッチスレッド基盤のプロセッサを支援するためのコード生成装置のブロック図である。 本発明の一実施形態によるバッチスレッド基盤のプロセッサを用いてバッチスレッドを処理する方法のフローチャートである。
<実施の形態の概要>
本発明の一態様によれば、プロセッサは、中央レジスタファイルと、複数の第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ローカルレジスタファイルをさらに含みうる。
第1機能ユニットバッチは、複数の第1機能ユニット、複数の第1機能ユニット間の連結及び1つ以上の第1ローカルレジスタファイルを用いてCGRAで動作し、第2機能ユニットバッチは、複数の第2機能ユニット、複数の第2機能ユニット間の連結及び1つ以上の第2ローカルレジスタファイルを用いてCGRAで動作することができる。
この際、第1機能ユニットバッチの構造は、第2機能ユニットバッチの構造と同一であり得る。
この際、複数の第1機能ユニットは、1つ以上の第1インストラクションを処理し、複数の第2機能ユニットは、1つ以上の第2インストラクションを処理することができる。
この際、第1機能ユニットバッチは、特定サイクルの間にスキュードインストラクションバッチ情報(skewed instruction batch information)を用いて少なくとも1つ以上の第2インストラクションのうちの少なくとも何れか1つを実行し、第2機能ユニットバッチは、特定サイクルの間にスキュードインストラクションバッチ情報を用いて少なくとも1つ以上の第1インストラクションのうちの少なくとも何れか1つを実行することができる。
この際、第1インストラクションバッチは、複数の第1インストラクションバッチを含み、第2インストラクションバッチは、複数の第2インストラクションバッチを含み、第1機能ユニットバッチは、複数の第1インストラクションバッチが入力されれば、複数の第1インストラクションバッチのそれぞれを1つ以上のスレッドを含むスレッドグループ単位で順次に行い、第2機能ユニットバッチは、複数の第2インストラクションバッチが入力されれば、複数の第2インストラクションバッチのそれぞれをスレッドグループ単位で順次に行うことができる。
この際、第1機能ユニットバッチと第2機能ユニットバッチは、あるインストラクションバッチに対するスレッドグループの遂行途中で、特定スレッドでブロック(block)が発生し、ブロックがインストラクションバッチと依存関係にある他のインストラクションバッチに対するスレッドグループの遂行時にも続けば、他のインストラクションバッチに対して前記ブロックが発生したスレッドをスレッドグループの最後に行うことができる。
第1機能ユニットバッチと第2機能ユニットバッチは、あるインストラクションバッチに対するスレッドグループを行う途中で、条件分岐が発生すれば、スレッドグループを2つ以上のサブスレッドグループに分割し、各分岐に対して分割された2つ以上のサブスレッドグループを行うことができる。
第1機能ユニットバッチと第2機能ユニットバッチは、条件分岐に対する各分岐が終了して併合されれば、分割された2つ以上のサブスレッドグループをスレッドグループに再び併合して行うことができる。
本発明の他の態様によれば、プロセッサは、中央レジスタファイルと、複数の第1機能ユニットと、第1機能ユニットが、中央レジスタファイルにアクセスするための第1入力ポート及び第1出力ポートを含む第1機能ユニットバッチと、複数の第2機能ユニットと、第2機能ユニットが、中央レジスタファイルにアクセスするための第2入力ポート及び第2出力ポートを含む第2機能ユニットバッチと、複数の第1機能ユニット及び複数の第2機能ユニットのそれぞれに割り当てられるスキュードレジスタと、を含み、スキュードレジスタのうちの何れか1つを通じてバッチインストラクションメモリに保存されたインストラクションを用いて何れか一サイクルに行われるスキュードインストラクションを生成し、該生成されたスキュードインストラクションをスキュードレジスタの何れか1つに割り当てられた各機能ユニットに伝達することができる。
この際、バッチインストラクションメモリは、そのバッチインストラクションメモリに対応する機能ユニットに伝達するインストラクションを保存するように、複数の第1機能ユニットと複数の第2機能ユニットとのそれぞれに対応する2つのユニットに提供されうる。
プロセッサは、バッチインストラクションメモリのカーネルから引き出された少なくとも一部のインストラクションを保存する1つ以上のカーネルキュー(Kernel Queue)をさらに含み、スキュードレジスタを通じて各カーネルキューに保存されたインストラクションを用いて何れか一サイクルに行われるスキュードインストラクションを生成して、前記割り当てられた各機能ユニットに伝達することができる。
本発明の一態様によれば、コード生成装置は、複数の第1機能ユニットを含む第1機能ユニットバッチと複数の第2機能ユニットを第2機能ユニットバッチとを含むプロセッサで処理される所定プログラムを分析するプログラム分析部と、分析結果に基づいて、第1機能ユニットバッチ及び第2機能ユニットバッチでそれぞれ行われる1つ以上のインストラクションを含む第1インストラクションバッチと第2インストラクションバッチとを生成するインストラクションバッチ生成部と、を含みうる。
インストラクションバッチ生成部は、分析結果、前記プログラムに条件分岐文が存在すれば、その条件分岐文の各分岐を処理するインストラクションは、互いに異なるインストラクションバッチに含ませる。
インストラクションバッチ生成部は、各インストラクションバッチの総レイテンシー(latency)が類似するように、前記第1インストラクションバッチ及び第2インストラクションバッチを生成することができる。
インストラクションバッチ生成部は、第1インストラクションバッチ及び第2インストラクションバッチが行われる第1機能ユニットバッチまたは第2機能ユニットバッチの読み取りポート及び書き込みポートの数に基づいて、第1インストラクションバッチ及び第2インストラクションバッチを生成することができる。
インストラクションバッチ生成部は、中央レジスタファイルに対する第1インストラクションバッチ及び第2インストラクションバッチの読み取り要請及び書き込み要請の数が、第1インストラクションバッチ及び第2インストラクションバッチを行う第1機能ユニットバッチまたは第2機能ユニットバッチの読み取りポート及び書き込みポートの数を超過するものから最小になるように、第1インストラクションバッチ及び第2インストラクションバッチを生成することができる。
インストラクションバッチ生成部は、インストラクションバッチのそれぞれに含まれたインストラクションの数が、第1インストラクションバッチ及び第2インストラクションバッチを行う第1機能ユニットバッチまたは第2機能ユニットバッチに含まれた機能ユニットの数を超過するものから最小になるように、第1インストラクションバッチ及び第2インストラクションバッチを生成することができる。
インストラクションバッチ生成部は、あるインストラクションバッチでソースとして使われて、あるインストラクションバッチでの遅延の発生を最小化するように、第1インストラクションバッチ及び第2インストラクションバッチを生成することができる。
本発明の一態様によれば、プロセッサがバッチスレッドを処理する方法は、コード生成装置から生成された第1インストラクションバッチ及び第2インストラクションバッチを、複数の第1機能ユニットを含む第1機能ユニットバッチと、複数の第2機能ユニットを含む第2機能ユニットバッチとに入力する段階と、第1機能ユニットバッチ及び第2機能ユニットバッチが、それぞれ第1インストラクションバッチ及び第2インストラクションバッチを順次に行う段階と、を含みうる。
インストラクションバッチを入力する段階は、第1インストラクションバッチ及び第2インストラクションバッチをスレッドグループ単位で入力することができる。
第1インストラクションバッチ及び第2インストラクションバッチを行う段階は、各インストラクションバッチに対するスレッドグループを行う時、スレッドグループに含まれた各スレッドをインターリーブド(interleaved)方式でスイッチング(switching)しながら行うことができる。
第1インストラクションバッチ及び第2インストラクションバッチを行う段階は、あるインストラクションバッチに対するあるスレッドグループの遂行途中で、特定スレッドでブロックが発生し、インストラクションバッチと依存関係にある他のインストラクションバッチに対する前記スレッドグループの遂行時にも続けば、他のインストラクションバッチに対してブロックが発生したスレッドをスレッドグループの最後に行うことができる。
第1インストラクションバッチ及び第2インストラクションバッチを行う段階は、あるインストラクションバッチに対するスレッドグループを行う途中で、条件分岐が発生すれば、前記スレッドグループを2つ以上のサブスレッドグループに分割し、各分岐に対して前記分割されたサブスレッドグループを行うことができる。
第1インストラクションバッチ及び第2インストラクションバッチを行う段階は、条件分岐に対する各分岐が終了して併合されれば、分割された2つ以上のサブスレッドグループをスレッドグループに再び併合して行うことができる。
その他の実施形態の具体的な事項は、詳細な説明及び図面に含まれている。記載の技術の利点及び特徴、そして、それらを果たす方法は、添付される図面と共に詳細に後述されている実施形態を参照すると、明確になる。明細書の全般に亘って同じ参照符号は、同じ構成要素を指称する。
<実施の形態の詳細な説明>
以下、バッチスレッド処理基盤のプロセッサ、そのプロセッサを利用したバッチスレッド処理方法、及びバッチスレッド処理のためのコード生成装置の実施形態を、図面を参考にして詳しく説明する。
図1は、本発明の一実施形態によるプロセッサを示した図面である。
図1を参照すれば、一実施形態によるプロセッサ100は、中央レジスタファイル110と1つ以上の機能ユニットバッチ120a、120b、120c、120dとを含む。図1には、上端と下端とに2個の中央レジスタファイル110が示されているが、これは、各機能ユニットバッチ120a、120b、120c、120dの入力ポート130及び出力ポート140を説明するために、便宜上、区分して図示したものであり、プロセッサ100が、2個の中央レジスタファイル110を含むことを意味するものではない。
各機能ユニットバッチ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を通じて相互間にデータ共有などの通信が可能である。
機能ユニットバッチ120a、120b、120c、120dは、1つ以上のローカルレジスタファイル(Local Register File、LR)を含みうる。ローカルレジスタファイル(LR)は、1つ以上の機能ユニットに含まれ、機能ユニットの入出力データのための保存空間として使われ、FIFO(First In First Out)方式で動作する。
本発明の一実施形態によるプロセッサ100は、機能ユニットバッチに含まれた機能ユニット、その機能ユニット間の連結及び機能ユニットのローカルレジスタファイル(LR)を用いてCGRAで動作することができる。連結はコネクションと言及されてもよい。また、2つ以上の機能ユニットFU0、FU1、FU2、FU3を含んでなる2つ以上の機能ユニットバッチ120a、120b、120c、120dを使って、SIMTで動作することが可能である。
このために、機能ユニットバッチ120a、120b、120c、120dは、互いに同じ構造からなりうる。この際、機能ユニットバッチ120a、120b、120c、120dのそれぞれに含まれた機能ユニットFU0、FU1、FU2、FU3は、互いに異なる構造からなるようにする。しかし、機能ユニットバッチ120a、120b、120c、120dのそれぞれに含まれた機能ユニットFU0、FU1、FU2、FU3が、必ずしも互いに異なる構造からなるものではなく、必要に応じて2つ以上の機能ユニットが互いに同じ構造を有するように具現されうる。
例えば、機能ユニットバッチ120a、120b、120c、120dは、互いに同じコンピュータパワーを有するように機能ユニットFU0、FU1、FU2、FU3を含みうる。ここで、コンピュータパワーとは、機能ユニットが行う演算(例:‘add’、‘sub’、‘mul’、‘div’など)を行う能力や性能等を意味し、機能ユニットバッチ120a、120b、120c、120dは、同じ演算を行う機能ユニットを含むことによって、同じコンピュータパワーを有させる。このように、一実施形態によるプロセッサ100は、同じコンピュータパワーを有する機能ユニットバッチ120a、120b、120c、120dを通じてSIMTで動作して、大量の並列データスレッド処理を支援することができる。
一方、一般的なプロセッサは、各機能ユニットのALU(Arithmetic Logic Unit)ごとに中央レジスタファイルにアクセスするための1つ以上の入力ポート及び出力ポートを有するが、一実施形態によるプロセッサ100は、機能ユニットバッチ120a、120b、120c、120d単位で中央レジスタファイル110にアクセスするための1つ以上の入力ポート130と出力ポート140とを有させることによって、中央レジスタファイル110にアクセスするオーバーヘッドを減少させて、プロセッサの性能を増加させることができる。
例えば、8個の機能ユニットを有した一般的なプロセッサが、各機能ユニットごとに2個の入力ポートと1個の出力ポートとを有するとすれば、そのプロセッサは、総16個の入力ポートと8個の出力ポートとを通じて中央レジスタファイルのアクセスがなされる。一方、一実施形態によるプロセッサ100は、8個の機能ユニットが4個ずつ2個の機能ユニットバッチに含まれ、各機能ユニットバッチが、2個の入力ポートと1個の出力ポートとを有すると仮定すれば、総4個の入力ポートと2個の出力ポートとを通じて中央レジスタファイルのアクセスがなされるので、入出力演算のためのオーバーヘッドが減少しうる。
機能ユニットバッチのそれぞれ120a、120b、120c、120dは、コンパイルを通じて生成された1つ以上のインストラクションバッチを行うことができる。この際、各インストラクションバッチは、1つ以上のインストラクションを含み、各インストラクションは、対応する機能ユニットで順次に行われる。
一方、機能ユニットバッチ120a、120b、120c、120dは、入力される1つ以上のインストラクションバッチに対して1つ以上のスレッドを含むスレッドグループ単位で順次に行うことができる。
この際、機能ユニットバッチ120a、120b、120c、120dが、あるインストラクションバッチに対して所定スレッドグループを行う途中で、特定スレッドでブロックが発生する場合、そのブロックが発生したインストラクションバッチと依存関係にある他のインストラクションバッチに対して同じスレッドグループのスレッドを行う時、まだ発生したブロックが解けず、続いていれば、他のインストラクションに対しては、そのブロックが発生したスレッドを行わず、そのスレッドグループのあらゆるスレッドの遂行が終了する最後に行わせうる。
これは、インストラクションバッチを行う途中で、何れか1つのスレッドが、ブロック発生インストラクションによって繋がる、あらゆるスレッドのブロック化を防止することによって、処理効率を増加させるためである。
機能ユニットバッチ120a、120b、120c、120dが、あるインストラクションバッチに対してスレッドグループを行う途中で、条件分岐が発生すれば、そのスレッドグループを2つ以上のサブグループに分割し、各分岐に対してそれぞれ分割されたサブスレッドグループを行うことができる。また、各分岐に対する条件分岐が終了して併合されれば、分割されたサブスレッドグループを再び元のスレッドグループに併合して行うことができる。
図2は、図1の実施形態によるプロセッサ100でバッチスレッドを処理する手続きを説明する例題プログラムの制御流れグラフである。図2は、あるインストラクションが他のインストラクションの実行後に実行されるさらに他のインストラクションとデータ依存度を有するように、11個のインストラクション(A〜K)が互いに一定のデータ依存度を有しながら行われることを示す。この際、レイテンシーは、それぞれのインストラクション(A〜K)遂行に必要なサイクル(cycle)を意味する。
図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サイクルになる。
図4Aないし図4Cは、図2の例題が、一般的なCGRAで行われる手続きを説明する図面である。図4Aは、図3に例示されたSIMTと同じ個数の機能ユニットからなる一般的なCGRAを例示したものであって、構成メモリまたはキャッシュメモリ(CMEM)からインストラクションを入力される。図4Bは、図2の例題が図4AのCGRAで行われるように、スケジューリングされた例である。図4Cは、図4Bのように、スケジューリングされた11個のインストラクション(A〜K)を行ったことを例示したものである。
この際、CGRAの繰り返し(iteration)は、SIMTのスレッドに相応し、図3で説明したように、総128個のスレッドを処理するためには、128回の繰り返しが行われる。図4Bを参照すれば、11個のインストラクション(A〜K)を一回繰り返しを行うためには、総16サイクルのレイテンシーが必要となり、これを図4Cのように、開始区間(Initiation Interval、II)を2にして、総128回の繰り返しを行えば、総272サイクルが必要となる。
図5A及び図5Bは、図2の例題が、図1の実施形態によるプロセッサ100で行う手続きを説明する図面である。
図5Aは、図2の例題をそのプロセッサ100で行われるように、コンパイル段階から生成された3個のインストラクションバッチを示したものであって、インストラクションバッチ0は、4個のインストラクション(A、B、D、E)を含み、インストラクションバッチ1は、4個のインストラクション(C、F、G、H)を含み、インストラクションバッチ2は、最後の3個のインストラクション(I、J、K)を含む。
図5Bは、プロセッサ100が、それぞれ4個の機能ユニットを有した2個の機能ユニットバッチを有した場合、何れか1つの機能ユニットバッチで3個のインストラクションバッチを順次に行ったことを示した図面である。インストラクションバッチ内の各インストラクションは、機能ユニットバッチ内の各機能ユニットで行われる。インストラクションバッチ内のデータ移動は、機能ユニットバッチ内のローカルレジスタファイルとインターコネクション(interconnection)とを通じてなされ、インストラクションバッチ間のデータ移動は、中央レジスタファイル110を通じてなされうる。
図3とは同様に、総128個のスレッドを処理するとする時、2個の機能ユニットバッチが、3個のインストラクションバッチに対してそれぞれ64スレッドずつ行うことによって、総202サイクルが必要となる。例えば、128個のスレッドが、16個のスレッド単位でスケジューリングされたとする時、何れか1つの機能ユニットバッチで3個のインストラクションバッチを順次に行うが、16個のスレッドがインターリーブド方式でスイッチングしながら行うことができる。すなわち、インストラクションバッチ1つの入力を16個のスレッドに対して行い、次のインストラクションバッチに対して16個のスレッドを行う方式で最後のインストラクションバッチまで行い、再び最初のインストラクションバッチから新たな16個のスレッドに対して行う方式であらゆるスレッドを処理し、このような方式で2個の機能ユニットバッチで128個のスレッドに対して行う場合、総202サイクルが必要となる。
図6A及び図6Bは、機能ユニットバッチにスキュードインストラクション(skewd instruction)が入力されるものを説明する図面である。図6A及び図6Bを参照すれば、一実施形態によるプロセッサ200は、各機能ユニットバッチが入力される1つ以上のインストラクションバッチを行う時、各機能ユニットバッチは、CGRAのように動作するので、各インストラクションバッチ内のインストラクションが、各機能ユニットに入力される時、時間に対して時差を置く方式で入力される。ここで、1つのバッチ機能ユニットによって行われるバッチインストラクションが、経時的に変更されるために、そのインストラクションは、下記で説明するように、スキュードインストラクションであり得る。
図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)を必要とする。
このようなスキュードインストラクション情報は、コンパイル段階でコード生成装置によって生成されうる。プロセッサ200は、スキュードインストラクション情報を用いて機能ユニットバッチのそれぞれのPC(Program Counter)を通じてバッチインストラクションメモリ(BIM)にアクセスして、該当するインストラクションを機能ユニットバッチの該当する機能ユニットに伝達することができる。
図7A及び図7Bは、スキュードインストラクション入力のためのプロセッサの他の実施形態を示した図面である。
図7Aを参照すれば、プロセッサ300は、中央レジスタファイル(図示せず)、2つ以上の機能ユニットを含む1つ以上の機能ユニットバッチ及び各機能ユニットバッチに含まれた機能ユニットに割り当てられる2つ以上のスキュードレジスタ310を含みうる。
本実施形態によるプロセッサ300は、前述したスキュードインストラクションの入力をさらに効率的に処理させるために、機能ユニットに対応するスキュードレジスタ310をさらに含むものであって、スキュードレジスタ310を通じてバッチインストラクションメモリBIM0、BIM1、BIM2、BIM3に保存されたインストラクションを用いて何れか一サイクルに行われるスキュードインストラクションを生成して、割り当てられた機能ユニットに伝達することができる。機能ユニットバッチのそれぞれは、自身のPC値と各機能ユニットに割り当てられたスキュードレジスタ値とを用いてバッチインストラクションメモリにアクセスすることができる。
この際、バッチインストラクションメモリBIM0、BIM1、BIM2、BIM3は、示したように、各機能ユニットに対応するように2つ以上に分けて構成されて、各バッチインストラクションメモリBIM0、BIM1、BIM2、BIM3は、対応する機能ユニットに伝達されるインストラクションを保存することができる。
図7Bは、スキュードインストラクション入力のためのプロセッサのさらに他の実施形態であって、プロセッサ400は、図7Aのプロセッサ300に1つ以上のカーネルキュー420をさらに含みうる。これは、図7Aのように、バッチインストラクションメモリBIM0、BIM1、BIM2、BIM3を複数個備える必要なしに、図7Bのように、1つのバッチインストラクションメモリ(BIM)を使用可能にする。
図7Bを参照すれば、プロセッサ400は、各機能ユニットバッチの機能ユニットに対応するように2つ以上のカーネルキュー420を含みうる。プロセッサ400は、バッチインストラクションメモリ(BIM)のカーネルで少なくとも一部のインストラクションを引き出してカーネルキュー420に保存することができる。また、各機能ユニットバッチは、自身のPCと割り当てられたスキュードレジスタの値とに基づいて、対応するカーネルキュー420に接近して、必要なインストラクションを読み出してスキュードインストラクションを生成し、そのスキュードインストラクションを機能ユニットに伝達されうる。
図8は、本発明の一実施形態によるバッチスレッド基盤のプロセッサを支援するためのコード生成装置のブロック図である。
図1及び図8を参照すれば、コード生成装置500は、プログラム分析部510及びインストラクションバッチ生成部520を含み、バッチスレッドを処理するプロセッサ100を支援するためのインストラクションバッチを生成することができる。
プログラム分析部510は、処理される所定プログラムを分析し、該分析結果を生成することができる。例えば、プログラム分析部510は、プログラムのデータ間に依存度及びプログラム内に条件分岐文の存否などを分析することができる。
インストラクションバッチ生成部520は、分析結果に基づいて、プロセッサ100の1つ以上の機能ユニットバッチ120a、120b、120c、120dで行われる1つ以上のインストラクションバッチを生成することができる。この際、各インストラクションバッチは、1つ以上のインストラクションを含みうる。
インストラクションバッチ生成部520は、分析結果中の依存度分析情報に基づいて、各機能ユニットバッチ120a、120b、120c、120dに含まれた機能ユニットを用いてCGRAで動作するように、コードを生成し、または各機能ユニットバッチでSIMTで動作するように、1つ以上のインストラクションバッチに対するコードを生成することができる。
インストラクションバッチ生成部520は、分析結果、プログラムに条件分岐文が存在すれば、その条件分岐文の各分岐を処理するインストラクション、例えば、条件が真であれば、第1経路を行い、偽であれば、第2経路を行う場合、第1経路を処理するインストラクションと、第2経路を処理するインストラクションとを互いに異なるインストラクションバッチに含ませる。
また、コード生成装置500は、インストラクションバッチ生成部520によって生成された各分岐を処理するインストラクションバッチに対して何れか1つの機能ユニットバッチで順次に行わせるか、それぞれ他の機能ユニットバッチで分離行わせるインストラクションを生成することができる。これを通じて、一般的なSIMTやCGRAでの条件分岐の問題をさらに効率的に解決することができる。
インストラクションバッチ生成部520は、各インストラクションバッチを生成する時、各インストラクションバッチの総レイテンシーが類似するように生成することができる。また、インストラクションバッチ生成部520は、各機能ユニットバッチ120a、120b、120c、120dで中央レジスタファイル110にアクセスするための入出力ポート数を考慮して、インストラクションバッチを生成することができる。例えば、あるインストラクションバッチから中央レジスタファイルに対する読み取り要請の数が、そのインストラクションバッチを行う機能ユニットバッチの読み取りポート数を超過しないようにし、インストラクションバッチの書き込み要請の数は、機能ユニットバッチの書き込みポートの数を超過しないように生成することができる。
また、インストラクションバッチ生成部520は、各インストラクションバッチに含まれたインストラクションの数が、各機能ユニットバッチに含まれた機能ユニットの数を超過しないように生成することができる。図5Aを参照すれば、インストラクションバッチ0と1は、4個のインストラクションが含まれ、インストラクションバッチ2は、3個のインストラクションが含まれるように生成されたものであって、各インストラクションバッチに含まれたインストラクションの数は、各機能ユニットバッチ120a、120b、120c、120dに含まれた機能ユニットの数4を超過しない。
一方、インストラクションバッチ生成部520は、特定インストラクションバッチで遅延が発生する演算(operation)、例えば、ブロックが発生する演算の結果は、その特定インストラクションバッチでソース(source)として使われないように、インストラクションバッチを生成することができる。一例として、スケジューリング時にブロックが発生する演算に対しては、インストラクションバッチの最初に位置させ、当該インストラクションバッチの最後に、その演算のスレッド遂行結果を利用させるか、インストラクションバッチの最後に位置させて、次のインストラクションバッチを行う前に、その演算を処理させうる。
一方、コード生成装置500は、生成されたインストラクションバッチをあらゆる機能ユニットバッチに同様に入力するか、2つ以上の機能ユニットバッチに分離して入力させるインストラクションを生成することができる。
コード生成装置500は、生成されたインストラクションバッチ情報及び各種インストラクション情報は、構成メモリまたはキャッシュメモリに保存することができる。一方、インストラクションバッチ生成部520は、図6A及び図6Bを通じて説明したように、スキュードインストラクション情報を生成することができる。
インストラクションバッチ生成部520は、前述された。一実施形態によれば、インストラクションバッチ生成部520は、同時に行われるインストラクションを収集せず、順次に行われるインストラクションを収集することによって、バッチインストラクションを生成する。これにより、バッチインストラクションの生成に難点がなく、高効率を果たすことができる。複数のデータは、複数のバッチ機能ユニットによって同時に行われるために、このようなバッチ生成は、大量の並列データ処理の具現に効果的である。
以下、VLIW(Very Long Instruction Word)とスーパースカラーアーキテクチャー(super−scalar architecture)との比較説明である。
VLIWは、コンパイラが非常に長い命令語(very long instruction word)を生成し、複数のインストラクションを同時に実行されるように構成され、複数の機能ユニット(または、実行ユニット)が、単一サイクル内にVLIWを行わせるアーキテクチャーである。デジタル信号処理で広範囲に使われるVLIWアーキテクチャーは、同時に実行可能な十分なインストラクションを見つけるのによく失敗し、それは、効率を低下させる結果になりうる。そして、あらゆる機能ユニットが、同時に中央レジスタファイルにアクセスしなければならないために、中央レジスタファイルのハードウェアオーバーヘッドは、非効率的に増加する。
スーパースカラーは、ハードウェアがランタイム時に同時に実行可能なインストラクションを見つけ、複数の実行ユニット(または、機能ユニット)が発見されたインストラクションを行うアーキテクチャーである。このアーキテクチャーも、同時に実行可能であり、インストラクションを見つけるのに困難さを有しており、非常に複雑なハードウェアをもたらしうる。
一方、開示された実施形態は、複数のバッチ機能ユニットを活用して、同時に複数のインストラクションを行い、それは、同時に大量の並列データ処理の具現に効果的である。
図9は、本発明の一実施形態によるバッチスレッド基盤のプロセッサを用いてバッチスレッドを処理する方法のフローチャートである。図9は、図1の実施形態によるプロセッサ100を用いてバッチスレッドを処理する方法を説明する図面であって、詳しくは、図1の以下を参照して説明したところによって解釈されるので、以下、簡単に説明する。
まず、プロセッサ100は、コード生成装置から生成された1つ以上のインストラクションバッチを1つ以上の機能ユニットバッチ120a、120b、120c、120dに入力することができる(段階610)。この際、生成されたあらゆるインストラクションバッチを、あらゆる機能ユニットバッチ120a、120b、120c、120dにスレッド単位で割り当てて入力することができる。すなわち、各機能ユニットバッチ120a、120b、120c、120dにあらゆるインストラクションバッチを同様に入力して、順次に行わせるが、各機能ユニットバッチが、全体処理しなければならないスレッドグループのうちの一部のスレッドグループを処理させて、SIMTのように動作させる方式である。
または、各機能ユニットバッチ120a、120b、120c、120dにインストラクションバッチを分けて入力することができる。例えば、生成されたインストラクションバッチが、4個であるとする時、4個のインストラクションバッチを各機能ユニットバッチ120a、120b、120c、120dに1つずつ入力して、MIMT方式でスレッドを処理させうる。または、2個の機能ユニットバッチ120a、120bには、同一の2個のインストラクションバッチを入力し、残りの2個の機能ユニットバッチ120c、120dに残りの2個のインストラクションバッチを入力することによって、SIMTとMIMTとを混合する方式で処理することができる。
このように、各機能ユニットバッチ120a、120b、120c、120dにインストラクションバッチを分けて入力する場合、前述したように、条件分岐を処理する各インストラクションバッチを互いに異なる機能ユニットバッチ120a、120b、120c、120dに入力して、条件分岐の処理効率を増加させることができる。また、各機能ユニットバッチ120a、120b、120c、120dが独立して動作するために、何れか1つの機能ユニットバッチでブロックが発生した場合にも、他の機能ユニットバッチは、これに構わずにスレッド処理が可能となる。
次いで、各機能ユニットバッチ120a、120b、120c、120dは、入力された1つ以上のインストラクションバッチを順次に行うことができる(段階620)。この際、各機能ユニットバッチ120a、120b、120c、120dは、前述したように、入力されるインストラクションバッチに対して各スレッドをインターリーブド方式でスイッチングし、各インストラクションバッチを行うことができる。
一方、機能ユニットバッチ120a、120b、120c、120dが、あるインストラクションバッチに対して所定スレッドグループを行う途中で、特定スレッドでブロックが発生する場合、そのブロックが発生したインストラクションバッチと依存関係にある他のインストラクションバッチに対して同じスレッドグループのスレッドを行う時、まだ発生したブロックが解けず、続いていれば、他のインストラクションに対しては、そのブロックが発生したスレッドを行わず、そのスレッドグループのあらゆるスレッドの遂行が終了する最後に行わせうる。
また、機能ユニットバッチ120a、120b、120c、120dが、あるインストラクションバッチに対してスレッドグループを行う途中で、条件分岐が発生すれば、そのスレッドグループを2つ以上のサブグループに分割し、各分岐に対してそれぞれ分割されたサブスレッドグループを行うことができる。また、各分岐に対する条件分岐が終了して併合されれば、分割されたサブスレッドグループを再び元のスレッドグループに併合して行うことができる。
一方、本実施形態は、コンピュータで読み取り可能な記録媒体にコンピュータで読み取り可能なコードとして具現することが可能である。コンピュータで読み取り可能な記録媒体は、コンピュータシステムによって読み取れるデータが保存されるあらゆる種類の記録装置を含む。
コンピュータで読み取り可能な記録媒体の例としては、ROM、RAM、CD−ROM、磁気テープ、フロッピー(登録商標)ディスク、光データ保存装置などがあり、また、キャリアウェーブ(例えば、インターネットを介した伝送)の形態で具現するものを含む。また、コンピュータで読み取り可能な記録媒体は、ネットワークで連結されたコンピュータシステムに分散されて、分散方式でコンピュータで読み取り可能なコードとして保存されて実行可能である。そして、本実施形態を具現するための機能的な(functional)プログラム、コード及びコードセグメントは、本発明が属する技術分野のプログラマーによって容易に推論されうる。
当業者ならば、本発明がその技術的思想や必須的な特徴を変更せずとも、他の具体的な形態で実施可能であることを理解できるであろう。したがって、前述した実施形態は、あらゆる面で例示的なものであり、限定的ではないということを理解せねばならない。
本発明は、バッチスレッド処理基盤のプロセッサ、そのプロセッサを利用したバッチスレッド処理方法、及びバッチスレッド処理のためのコード生成装置関連の技術分野に適用可能である。
100 プロセッサ
110 中央レジスタファイル
120a〜120d 機能ユニットバッチ
130 入力ポート
140 出力ポート

Claims (26)

  1. 中央レジスタファイルと、
    複数の第1機能ユニットと、前記第1機能ユニットが前記中央レジスタファイルにアクセスするための第1入力ポートと、第1出力ポートとを含む第1機能ユニットバッチと、
    複数の第2機能ユニットと、前記第2機能ユニットが前記中央レジスタファイルにアクセスするための第2入力ポートと、第2出力ポートとを含む第2機能ユニットバッチと、を含み、
    前記第1機能ユニットバッチは、プログラムをなす1つ以上の第1インストラクションを含む第1インストラクションバッチを受信して、前記1つ以上の第1インストラクションを順次に行い、前記第2機能ユニットバッチは、前記プログラムをなす1つ以上の第2インストラクションを含む第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機能ユニットバッチは、あるインストラクションバッチに対するスレッドグループの遂行途中で、特定スレッドでブロックが発生し、前記ブロックが、前記インストラクションバッチに依存する他のインストラクションバッチに対する前記スレッドグループの遂行時までも続く場合、前記他のインストラクションバッチに対して前記ブロックが発生したスレッドを前記スレッドグループの最後に行う、請求項7に記載のプロセッサ。
  9. 前記第1機能ユニットバッチ及び第2機能ユニットバッチは、あるインストラクションバッチに対するスレッドグループを行う途中で、条件分岐が発生する場合、前記スレッドグループを2つ以上のサブスレッドグループに分割し、各分岐に対して分割された2つ以上のサブスレッドグループを行う、請求項7に記載のプロセッサ。
  10. 前記第1機能ユニットバッチ及び第2機能ユニットバッチは、前記条件分岐に対する各分岐が終了して併合する場合、前記分割された2つ以上のサブスレッドグループを前記スレッドグループに併合し、該スレッドグループを実行する、請求項9に記載のプロセッサ。
  11. 中央レジスタファイルと、
    複数の第1機能ユニットと、前記第1機能ユニットが前記中央レジスタファイルにアクセスするための第1入力ポートと、第1出力ポートとを含む第1機能ユニットバッチと、
    複数の第2機能ユニットと、前記第2機能ユニットが前記中央レジスタファイルにアクセスするための第2入力ポートと、第2出力ポートとを含む第2機能ユニットバッチと、
    前記複数の第1機能ユニット及び複数の第2機能ユニットのそれぞれに割り当てられるスキュードレジスタと、を含み、
    前記スキュードレジスタのうちの何れか1つを通じてバッチインストラクションメモリに保存されたインストラクションを用いて何れか一サイクルに行われるスキュードインストラクションを生成し、該生成されたスキュードインストラクションを、前記スキュードレジスタの何れか1つに割り当てられた各機能ユニットに伝達する、プロセッサ。
  12. 前記バッチインストラクションメモリは、該バッチインストラクションメモリに対応する機能ユニットに伝達するインストラクションを保存するように、複数の第1機能ユニットと複数の第2機能ユニットとのそれぞれに対応する2つのユニットに提供される、請求項11に記載のプロセッサ。
  13. 前記バッチインストラクションメモリのカーネルから引き出された少なくとも一部のインストラクションを保存する1つ以上のカーネルキューをさらに含み、
    前記スキュードレジスタを通じて前記各カーネルキューに保存されたインストラクションを用いて何れか一サイクルに行われるスキュードインストラクションを生成して、前記割り当てられた各機能ユニットに伝達する請求項11に記載のプロセッサ。
  14. 複数の第1機能ユニットを含む第1機能ユニットバッチと複数の第2機能ユニットを第2機能ユニットバッチとを含むプロセッサで処理される所定プログラムを分析するプログラム分析部と、
    前記分析結果に基づいて、前記第1機能ユニットバッチ及び第2機能ユニットバッチでそれぞれ行われる1つ以上のインストラクションを含む第1インストラクションバッチと第2インストラクションバッチとを生成するインストラクションバッチ生成部と、
    を含むコード生成装置。
  15. 前記インストラクションバッチ生成部は、前記プログラムに条件分岐文が前記分析結果として存在する場合、該条件分岐文の各分岐を処理するインストラクションが、異なるインストラクションバッチに含まれることを許容する、請求項14に記載のコード生成装置。
  16. 前記インストラクションバッチ生成部は、各インストラクションバッチの総レイテンシーが類似するように、前記第1インストラクションバッチ及び第2インストラクションバッチを生成する、請求項14に記載のコード生成装置。
  17. 前記インストラクションバッチ生成部は、第1インストラクションバッチ及び第2インストラクションバッチが行われる第1機能ユニットバッチまたは第2機能ユニットバッチの読み取りポート及び書き込みポートの数に基づいて、前記第1インストラクションバッチ及び第2インストラクションバッチを生成する、請求項14ないし16のうち何れか1項に記載のコード生成装置。
  18. 前記インストラクションバッチ生成部は、第1インストラクションバッチ及び第2インストラクションバッチを行う第1機能ユニットバッチまたは第2機能ユニットバッチの読み取りポート及び書き込みポートの数を超過することによる、中央レジスタファイルに対する前記第1インストラクションバッチ及び第2インストラクションバッチの読み取り要請及び書き込み要請の数が最小になるように、前記第1インストラクションバッチ及び第2インストラクションバッチを生成する請求項17に記載のコード生成装置。
  19. 前記インストラクションバッチ生成部は、第1インストラクションバッチ及び第2インストラクションバッチを行う第1機能ユニットバッチまたは第2機能ユニットバッチに含まれた機能ユニットの数を超過することによる、インストラクションバッチのそれぞれに含まれたインストラクションの数が最小になるように、前記第1インストラクションバッチ及び第2インストラクションバッチを生成する請求項14ないし18のうち何れか1項に記載のコード生成装置。
  20. 前記インストラクションバッチ生成部は、あるインストラクションバッチでソースとして使用されることによる前記あるインストラクションバッチでの遅延の発生を最小化するように、前記第1インストラクションバッチ及び第2インストラクションバッチを生成する請求項14ないし19のうち何れか1項に記載のコード生成装置。
  21. プロセッサがバッチスレッドを処理する方法において、
    コード生成装置から生成された第1インストラクションバッチ及び第2インストラクションバッチを、複数の第1機能ユニットを含む第1機能ユニットバッチと、複数の第2機能ユニットを含む第2機能ユニットバッチとに入力する段階と、
    前記第1機能ユニットバッチ及び第2機能ユニットバッチが、それぞれ第1インストラクションバッチ及び第2インストラクションバッチを順次に行う段階と、
    を含むバッチスレッド処理方法。
  22. 前記インストラクションバッチを入力する段階において、
    第1インストラクションバッチ及び第2インストラクションバッチをスレッドグループ単位で入力する、請求項21に記載のバッチスレッド処理方法。
  23. 前記第1インストラクションバッチ及び第2インストラクションバッチを行う段階において、
    前記スレッドグループに含まれた各スレッドをインターリーブド方式で切り替えながら、各インストラクションバッチに対するスレッドグループが実行される、請求項22に記載のバッチスレッド処理方法。
  24. 前記第1インストラクションバッチ及び第2インストラクションバッチを行う段階において、
    あるインストラクションバッチに対するあるスレッドグループの遂行途中で、特定スレッドでブロックが発生し、前記ブロックが、前記インストラクションバッチに依存する他のインストラクションバッチに対する前記スレッドグループの遂行時までも続く場合、前記他のインストラクションバッチに対して前記ブロックが発生したスレッドを前記スレッドグループの最後に行う、請求項22に記載のバッチスレッド処理方法。
  25. 前記第1インストラクションバッチ及び第2インストラクションバッチを行う段階において、あるインストラクションバッチに対するスレッドグループを行う途中で、条件分岐が発生する場合、前記スレッドグループを2つ以上のサブスレッドグループに分割し、各分岐に対して前記分割された2つ以上のサブスレッドグループを行う、請求項22に記載のバッチスレッド処理方法。
  26. 前記第1インストラクションバッチ及び第2インストラクションバッチを行う段階において、前記条件分岐に対する各分岐が終了して併合される場合、前記分割された2つ以上のサブスレッドグループを前記スレッドグループに併合し、該スレッドグループを実行する、請求項25に記載のバッチスレッド処理方法。
JP2014088265A 2013-04-22 2014-04-22 バッチスレッド処理のためのプロセッサ、コード生成装置及びバッチスレッド処理方法 Active JP6502616B2 (ja)

Applications Claiming Priority (2)

Application Number Priority Date Filing Date Title
KR1020130044435A KR20140126195A (ko) 2013-04-22 2013-04-22 배치 쓰레드 처리 기반의 프로세서, 그 프로세서를 이용한 배치 쓰레드 처리 방법 및 배치 쓰레드 처리를 위한 코드 생성 장치
KR10-2013-0044435 2013-04-22

Publications (2)

Publication Number Publication Date
JP2014216021A true JP2014216021A (ja) 2014-11-17
JP6502616B2 JP6502616B2 (ja) 2019-04-17

Family

ID=50549014

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2014088265A Active JP6502616B2 (ja) 2013-04-22 2014-04-22 バッチスレッド処理のためのプロセッサ、コード生成装置及びバッチスレッド処理方法

Country Status (5)

Country Link
US (1) US20140317626A1 (ja)
EP (1) EP2796991A3 (ja)
JP (1) JP6502616B2 (ja)
KR (1) KR20140126195A (ja)
CN (1) CN104111818B (ja)

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2020522825A (ja) * 2017-03-14 2020-07-30 アズールエンジン テクノロジーズ ヂュハイ インク.Azurengine Technologies Zhuhai Inc. 再構成可能並列処理

Families Citing this family (9)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN104636206B (zh) * 2015-02-05 2018-01-05 北京创毅视讯科技有限公司 一种系统性能的优化方法和装置
US9830731B2 (en) * 2015-04-01 2017-11-28 Mediatek Inc. Methods of a graphics-processing unit for tile-based rendering of a display area and graphics-processing apparatus
US10733016B1 (en) * 2019-04-26 2020-08-04 Google Llc Optimizing hardware FIFO instructions
CN110609705B (zh) * 2019-09-20 2021-05-11 深圳市航顺芯片技术研发有限公司 一种提高mcu总线效率的方法、智能终端、存储介质及芯片
US11900156B2 (en) * 2019-09-24 2024-02-13 Speedata Ltd. Inter-thread communication in multi-threaded reconfigurable coarse-grain arrays
CN111026443B (zh) * 2019-11-18 2023-05-05 中国航空工业集团公司西安航空计算技术研究所 一种基于算法特征的simt系统
CN111414198B (zh) * 2020-03-18 2023-05-02 北京字节跳动网络技术有限公司 一种请求处理方法及装置
CN113285931B (zh) * 2021-05-12 2022-10-11 阿波罗智联(北京)科技有限公司 流媒体的传输方法、流媒体服务器及流媒体系统
CN116627494B (zh) * 2022-02-10 2024-05-10 格兰菲智能科技有限公司 处理器以及指令并行发射的处理方法

Citations (9)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2003346140A (ja) * 2002-05-23 2003-12-05 Sony Corp 画像処理装置およびその方法
WO2007027671A2 (en) * 2005-08-29 2007-03-08 Searete Llc Scheduling mechanism of a hierarchical processor including multiple parallel clusters
WO2007143278A2 (en) * 2006-04-12 2007-12-13 Soft Machines, Inc. Apparatus and method for processing an instruction matrix specifying parallel and dependent operations
US7447873B1 (en) * 2005-11-29 2008-11-04 Nvidia Corporation Multithreaded SIMD parallel processor with loading of groups of threads
JP2009157773A (ja) * 2007-12-27 2009-07-16 Fujitsu Microelectronics Ltd カウンタ制御回路、動的再構成回路およびループ処理制御方法
JP2011203920A (ja) * 2010-03-25 2011-10-13 Fuji Xerox Co Ltd データ処理装置
US20120089813A1 (en) * 2010-10-07 2012-04-12 Jin Tai-Song Computing apparatus based on reconfigurable architecture and memory dependence correction method thereof
JP2012508939A (ja) * 2008-11-24 2012-04-12 インテル コーポレイション シーケンシャル・プログラムを複数スレッドに分解し、スレッドを実行し、シーケンシャルな実行を再構成するシステム、方法および装置
US20130007415A1 (en) * 2011-07-01 2013-01-03 Babayan Boris A Method and apparatus for scheduling of instructions in a multi-strand out-of-order processor

Family Cites Families (7)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US4968977A (en) * 1989-02-03 1990-11-06 Digital Equipment Corporation Modular crossbar interconnection metwork for data transactions between system units in a multi-processor system
DE19756591B4 (de) * 1997-12-18 2004-03-04 Sp3D Chip Design Gmbh Vorrichtung zum hierarchischen Verbinden einer Mehrzahl von Funktionseinheiten in einem Prozessor
KR100663709B1 (ko) * 2005-12-28 2007-01-03 삼성전자주식회사 재구성 아키텍처에서의 예외 처리 방법 및 장치
US20100026897A1 (en) * 2008-07-30 2010-02-04 Cinnafilm, Inc. Method, Apparatus, and Computer Software for Modifying Moving Images Via Motion Compensation Vectors, Degrain/Denoise, and Superresolution
US20100274972A1 (en) * 2008-11-24 2010-10-28 Boris Babayan Systems, methods, and apparatuses for parallel computing
KR101581882B1 (ko) * 2009-04-20 2015-12-31 삼성전자주식회사 재구성 가능한 프로세서 및 그 재구성 방법
CN102147722B (zh) * 2011-04-08 2016-01-20 深圳中微电科技有限公司 实现中央处理器和图形处理器功能的多线程处理器及方法

Patent Citations (9)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2003346140A (ja) * 2002-05-23 2003-12-05 Sony Corp 画像処理装置およびその方法
WO2007027671A2 (en) * 2005-08-29 2007-03-08 Searete Llc Scheduling mechanism of a hierarchical processor including multiple parallel clusters
US7447873B1 (en) * 2005-11-29 2008-11-04 Nvidia Corporation Multithreaded SIMD parallel processor with loading of groups of threads
WO2007143278A2 (en) * 2006-04-12 2007-12-13 Soft Machines, Inc. Apparatus and method for processing an instruction matrix specifying parallel and dependent operations
JP2009157773A (ja) * 2007-12-27 2009-07-16 Fujitsu Microelectronics Ltd カウンタ制御回路、動的再構成回路およびループ処理制御方法
JP2012508939A (ja) * 2008-11-24 2012-04-12 インテル コーポレイション シーケンシャル・プログラムを複数スレッドに分解し、スレッドを実行し、シーケンシャルな実行を再構成するシステム、方法および装置
JP2011203920A (ja) * 2010-03-25 2011-10-13 Fuji Xerox Co Ltd データ処理装置
US20120089813A1 (en) * 2010-10-07 2012-04-12 Jin Tai-Song Computing apparatus based on reconfigurable architecture and memory dependence correction method thereof
US20130007415A1 (en) * 2011-07-01 2013-01-03 Babayan Boris A Method and apparatus for scheduling of instructions in a multi-strand out-of-order processor

Cited By (8)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2020522825A (ja) * 2017-03-14 2020-07-30 アズールエンジン テクノロジーズ ヂュハイ インク.Azurengine Technologies Zhuhai Inc. 再構成可能並列処理
US10956360B2 (en) 2017-03-14 2021-03-23 Azurengine Technologies Zhuhai Inc. Static shared memory access with one piece of input data to be reused for successive execution of one instruction in a reconfigurable parallel processor
US11176085B2 (en) 2017-03-14 2021-11-16 Azurengine Technologies Zhuhai Inc. Reconfigurable parallel processing with various reconfigurable units to form two or more physical data paths and routing data from one physical data path to a gasket memory to be used in a future physical data path as input
US11182334B2 (en) 2017-03-14 2021-11-23 Azurengine Technologies Zhuhai Inc. Shared memory access for reconfigurable parallel processor using a plurality of memory ports each comprising an address calculation unit
US11182335B2 (en) 2017-03-14 2021-11-23 Azurengine Technologies Zhuhai Inc. Circular reconfiguration for reconfigurable parallel processor using a plurality of memory ports coupled to a commonly accessible memory unit
US11182333B2 (en) 2017-03-14 2021-11-23 Azurengine Technologies Zhuhai Inc. Private memory access for reconfigurable parallel processor using a plurality of memory ports each comprising an address calculation unit
US11182336B2 (en) 2017-03-14 2021-11-23 Azurengine Technologies Zhuhai Inc. Reconfigurable parallel processing with a temporary data storage coupled to a plurality of processing elements (PES) to store a PE execution result to be used by a PE during a next PE configuration
US11226927B2 (en) 2017-03-14 2022-01-18 Azurengine Technologies Zhuhai Inc. Reconfigurable parallel processing

Also Published As

Publication number Publication date
CN104111818B (zh) 2019-01-18
CN104111818A (zh) 2014-10-22
KR20140126195A (ko) 2014-10-30
JP6502616B2 (ja) 2019-04-17
EP2796991A3 (en) 2015-12-02
US20140317626A1 (en) 2014-10-23
EP2796991A2 (en) 2014-10-29

Similar Documents

Publication Publication Date Title
JP6502616B2 (ja) バッチスレッド処理のためのプロセッサ、コード生成装置及びバッチスレッド処理方法
JP6159825B2 (ja) ハードウェアポインタを使用したsimdコア内での分岐ブランチに対するソリューション
CN105389158B (zh) 数据处理系统、编译器、处理器的方法和机器可读介质
US8683468B2 (en) Automatic kernel migration for heterogeneous cores
JP6103647B2 (ja) プロセッサシステム及びアクセラレータ
Elteir et al. Performance characterization and optimization of atomic operations on amd gpus
EP2951682B1 (en) Hardware and software solutions to divergent branches in a parallel pipeline
Banerjee et al. Hybrid algorithms for list ranking and graph connected components
US9665354B2 (en) Apparatus and method for translating multithread program code
US11526432B2 (en) Parallel processing device
TWI587137B (zh) 經改良之單一指令多重資料(simd)的k最近鄰居法之實施技術
Ino et al. GPU-Chariot: A programming framework for stream applications running on multi-GPU systems
US20150074378A1 (en) System and Method for an Asynchronous Processor with Heterogeneous Processors
Shao et al. Map-reduce inspired loop parallelization on CGRA
Forsell et al. REPLICA MBTAC: multithreaded dual-mode processor
US20230071941A1 (en) Parallel processing device
Schaffer Design and Implementation of a Multithreaded Associative SIMD Processor
Tanase et al. Fundamentals and Compiler Framework
US20130061028A1 (en) Method and system for multi-mode instruction-level streaming
JP2002318689A (ja) 資源使用サイクルの遅延指定付き命令を実行するvliwプロセッサおよび遅延指定命令の生成方法
Baudisch et al. Efficient handling of arrays in dataflow process networks
de Oliveira Castro et al. Automatic mapping of stream programs on multicore architectures
Miller et al. Exploiting data structure locality in the dataflow model
Cohen et al. Mapping and Scheduling on Multi-core Processors using SMT Sol-vers
Mishra Parallelize streaming applications on Microgrid CPUs: A novel application on a scalable, multicore architecture.

Legal Events

Date Code Title Description
A621 Written request for application examination

Free format text: JAPANESE INTERMEDIATE CODE: A621

Effective date: 20170413

A977 Report on retrieval

Free format text: JAPANESE INTERMEDIATE CODE: A971007

Effective date: 20180529

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20180626

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20180921

TRDD Decision of grant or rejection written
A01 Written decision to grant a patent or to grant a registration (utility model)

Free format text: JAPANESE INTERMEDIATE CODE: A01

Effective date: 20190219

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20190322

R150 Certificate of patent or registration of utility model

Ref document number: 6502616

Country of ref document: JP

Free format text: JAPANESE INTERMEDIATE CODE: R150

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250