JP2009525545A - スレッドに最適化されたマルチプロセッサアーキテクチャ - Google Patents

スレッドに最適化されたマルチプロセッサアーキテクチャ Download PDF

Info

Publication number
JP2009525545A
JP2009525545A JP2008553428A JP2008553428A JP2009525545A JP 2009525545 A JP2009525545 A JP 2009525545A JP 2008553428 A JP2008553428 A JP 2008553428A JP 2008553428 A JP2008553428 A JP 2008553428A JP 2009525545 A JP2009525545 A JP 2009525545A
Authority
JP
Japan
Prior art keywords
processors
instruction
processor
register
thread
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
JP2008553428A
Other languages
English (en)
Other versions
JP4987882B2 (ja
Inventor
ラッセル・エイチ・フィッシュ・ザ・サード
Original Assignee
ラッセル・エイチ・フィッシュ・ザ・サード
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 ラッセル・エイチ・フィッシュ・ザ・サード filed Critical ラッセル・エイチ・フィッシュ・ザ・サード
Publication of JP2009525545A publication Critical patent/JP2009525545A/ja
Application granted granted Critical
Publication of JP4987882B2 publication Critical patent/JP4987882B2/ja
Expired - Fee Related legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

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
    • 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
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F12/00Accessing, addressing or allocating within memory systems or architectures
    • G06F12/02Addressing or allocation; Relocation
    • G06F12/08Addressing or allocation; Relocation in hierarchically structured memory systems, e.g. virtual memory systems
    • G06F12/0802Addressing of a memory level in which the access to the desired data or data block requires associative addressing means, e.g. caches
    • G06F12/0875Addressing of a memory level in which the access to the desired data or data block requires associative addressing means, e.g. caches with dedicated cache, e.g. instruction or stack
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F15/00Digital computers in general; Data processing equipment in general
    • G06F15/76Architectures of general purpose stored program computers
    • G06F15/78Architectures of general purpose stored program computers comprising a single central processing unit
    • G06F15/7807System on chip, i.e. computer system on a single chip; System in package, i.e. computer system on one or more chips in a single package
    • G06F15/781On-chip cache; Off-chip memory
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F15/00Digital computers in general; Data processing equipment in general
    • G06F15/76Architectures of general purpose stored program computers
    • G06F15/78Architectures of general purpose stored program computers comprising a single central processing unit
    • G06F15/7839Architectures of general purpose stored program computers comprising a single central processing unit with memory
    • G06F15/7842Architectures of general purpose stored program computers comprising a single central processing unit with memory on one IC chip (single chip microcontrollers)
    • G06F15/7846On-chip cache and off-chip main memory
    • 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
    • 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/30098Register arrangements
    • G06F9/3012Organisation of register space, e.g. banked or distributed register file
    • G06F9/30138Extension of register space, e.g. register cache
    • 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/30145Instruction analysis, e.g. decoding, instruction word fields
    • 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/32Address formation of the next instruction, e.g. by incrementing the instruction counter
    • G06F9/322Address formation of the next instruction, e.g. by incrementing the instruction counter for non-sequential address
    • 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/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/38Concurrent instruction execution, e.g. pipeline or look ahead
    • G06F9/3867Concurrent instruction execution, e.g. pipeline or look ahead using instruction pipelines
    • 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
    • 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)
  • General Physics & Mathematics (AREA)
  • Physics & Mathematics (AREA)
  • Computer Hardware Design (AREA)
  • Multimedia (AREA)
  • Microelectronics & Electronic Packaging (AREA)
  • Computing Systems (AREA)
  • Advance Control (AREA)
  • Memory System Of A Hierarchy Structure (AREA)
  • Multi Processors (AREA)
  • Image Processing (AREA)

Abstract

一態様において、本発明はシステムであり、(a)単一のチップ上の複数の並列プロセッサと、(b)チップ上に置かれていて、かつプロセッサの各々によってアクセス可能なコンピュータメモリとを備えていて、プロセッサの各々は、de minimis命令セットを処理するように動作可能であり、プロセッサの各々は、プロセッサの中の少なくとも3つの特定のレジスタの各々専用のローカルキャッシュを備えている。別の態様において、本発明はシステムであり、(a)単一のチップ上の複数の並列プロセッサと、(b)チップ上に置かれていて、かつプロセッサの各々によってアクセス可能なコンピュータメモリとを備えていて、プロセッサの各々は、スレッドレベルの並列処理のために最適化された命令セットを処理するように動作可能である。

Description

本出願は、2006年2月3日に出願された米国仮特許出願第60/764,955号に対する優先権を主張する。この仮出願の全内容は、ここでの引用により本願明細書に組み込まれるものとする。
コンピュータの速度は、2つの一般的な方法を用いて増加させることができる。命令実行速度を上げる、または並列により多くの命令を実行する。命令実行速度が、シリコン中の電子移動度の限界に近づくとき、並列法(parallelism)は、コンピュータの速度を上げるための最善の代替案になる。
並列法の以前の試みは、以下を含んでいる。
1.次の命令のフェッチング(fetching)を、現在の命令の実行とオーバーラップさせること。
2.命令のパイプライン化(pipelining)。命令パイプラインは、各命令をできるだけ多くの部分に分解し、次にシーケンシャル命令を並列実行ユニットの中にマッピングすることを試みる。理論上最高の改良は、多段階命令の非効率性、並列実行ユニットを満たされた状態に保つための十分なシーケンシャル命令を提供するための多くのソフトウェアプログラムの無能力、および、分岐、ループ、またはケース構文が実行ユニットの補充を必要とする状態に遭遇したとき、払われるかなりの時間ペナルティ(penalty)のために、めったに達成されない。
3.単一命令多重データ(Single instruction multiple data)すなわちSIMD。この種の技術は、インテルペンティアム(登録商標)3および他のプロセッサの中で実現されているように、インテルSSE命令セットの中で見つかる。この技術においては、単一の命令が複数のデータセット上で実行される。この技術は、特別なアプリケーション、例えばビデオグラフィックスレンダリングの用途にだけ役立つ。
4.ハイパーキューブ。この技術は、プロセッサおよびローカルメモリの大きな二次元アレイ(array)、時には三次元アレイを用いる。プロセッサのこれらのアレイをサポートするのに必要な通信および相互接続は、本質的に、それらを非常に専門化されたアプリケーションに限定する。
パイプラインは、1つの命令の実行の一部分、例えばフェッチ、デコード、実行、ストアなどを連続して実行する複数のシーケンシャルな段階から成る命令実行ユニットである。いくつかのパイプラインが並列に配置され得るので、全てのパイプラインが命令を実行している状態になるまで、プログラム命令が次々と各パイプラインに供給される。それから、満たされた命令は、最初のパイプラインで繰り返される。N個のパイプラインが命令および実行で満たされるとき、性能に対する効果は、単一の実行ユニットに対して実行速度をN倍増加させるのと理論的に同じである。
成功するパイプライン化は、以下に依存する。
1.命令の実行は、いくつかの連続した状態として定義されることが可能でなければならない。
2.各命令は、同じ数の状態を持っていなければならない。
3.命令当たりの状態の数は、並列実行ユニットの最大数を決定する。
パイプライン化は、並列のパイプラインの数に基づいて性能の上昇を成し遂げることができ、かつ、並列のパイプラインの数は、一命令の中の状態の数によって決定されるので、パイプラインは、複雑な複数の状態を持つ命令を助長する。
重度にパイプライン化されたコンピュータは、並列パイプライン実行ユニットから予想される理論的な性能の改善に近い性能を、めったに成し遂げることはない。このパイプラインペナルティ(penalty)のいくつかの理由は、以下を含んでいる。
1.ソフトウェアプログラムは、シーケンシャルな命令だけから構成されているわけではない。様々な研究は、実行フローの変化が8〜10命令毎に起こることを示している。プログラムのフローを変化させる分岐は、パイプラインを転覆させる。パイプラインの転覆を最小限にする試みは、複雑かつそれらの緩和において不完全でありがちである。
2.全ての命令に同じ数の状態を持つことを強いることは、しばしば最小公分母(すなわち、最も遅くて最も複雑な)命令の要求を満たす実行パイプラインに導く。パイプラインのため、全命令は、それらが必要とするか否かを考えないで、同じ数の状態にされる。例えば、論理演算(例えばANDまたはOR)は、ADDより1桁速く実行されるが、両者は、しばしば、実行のために同量の時間を割り当てられる。
3.パイプラインは、複数の状態を有する複雑な命令を助長する。2状態を必要とする可能性がある命令は、通常20状態を満たすように拡張される。なぜなら、それがパイプラインの深さであるからである。(インテルペンティアム(登録商標)4は、20状態のパイプラインを用いている。)
4.各パイプラインの状態のために必要な時間は、特定の状態に対する設計マージンまたは許容誤差に加えて、論理回路および関連するトランジスタによる伝播遅延が原因であるにちがいない。
5.パイプラインレジスタおよび他のリソースのアクセスのための調停は、調停論理のトランジスタの伝播遅延により、しばしば性能を低下させる。
6.状態を追加すると、速度が上がるよりはむしろ、実際には実行が遅くなるということ以前に、一命令が分割され得る状態の数に対する上限が存在する。いくつかの研究は、ディジタルイクイップメントコーポレーションのアルファプロセッサの最近の世代のパイプラインアーキテクチャがその地点を越え、かつ実際に以前のより短いパイプラインのバージョンのプロセッサより実行が遅いことを示している。
パイプラインを別々に分割すること
CPU設計の再考に対する1つの考え方は、複数(N個)の単純化されたプロセッサに分割された、パイプライン化された実行ユニットについて考えることである。(レジスタおよびいくつかの他のロジックは、このような設計においては複製されることが必要かもしれない。)N個の単純化されたプロセッサの各々は、上述したパイプラインアーキテクチャに勝る以下の利点がある。
1.パイプラインによる遅れがない。分岐予測が必要ない。
2.全ての命令に最も遅い命令と同じ実行時間を割り当てられるのではなく、命令に必要なだけの時間をとることができる。
3.命令は、必要な実行状態を減らすことによって単純化され、これによりパイプラインペナルティを減らすことができる。
4.パイプラインから除去される各状態によって伝播遅延を削減することができ、
かつこの状態のために必要な設計マージンを除くことができる。
5.レジスタの調停を除くことができる。
さらに、N個の単純化されたプロセッサを備えるシステムには、パイプライン化されたCPUに勝る以下の利点がある。
1.最大パイプライン並列性の制限がない。
2.パイプライン型プロセッサとは異なり、複数の独立型プロセッサは、使用しないときに、電力消費を減らすために、選択的に電源を切ることができる。
並列法への現在のアプローチに関する他の課題
並列法の多くの実施態様は、アムダールの法則の制限に屈する。並列法による加速は、課題の直列不可能(non-serializable)部分に起因するオーバーヘッドによって制限される。本質的には、並列法の量が増加するにつれて、それをサポートするために必要な通信が、並列法に起因する増進を圧倒する。
レッドライン(Redline)にあるストップライト(Stoplight)
現在のプロセッサの他の非効率性は、即時の計算要求に応ずるためにコンピューティングパワーを拡大縮小する能力がないことである。大部分のコンピュータは、何かが起こるのを待ちつつ、それらの時間の大部分を費やしている。それらは、入出力、次の命令、メモリアクセス、または時にはヒューマンインタフェースを待っている。この待機は、コンピューティングパワーの非効率的な浪費である。さらに、待機に費やされるコンピュータの時間は、しばしば電力消費および熱の発生を増加させる結果となる。
待機の原則に対する例外は、エンジンコントローラ、シグナルプロセッサ、およびファイアウォールルータのようなアプリケーションである。これらのアプリケーションは、課題のセットおよび解決策のセットの予め定められた性質のために、並列法を加速するための優れた候補である。N個の独立した乗算の積を必要とする課題は、N個の乗算器を用いれば、より速く解くことができる。
汎用コンピュータの認められた性能は、実際にはそのピークの性能である。最近、汎用コンピュータが忙しくなり始めたのは、高速なスクリーンリフレッシュを伴うビデオゲームを走らせること、大きなソースファイルをコンパイルすること、またはデータベースを検索することによる。最適な世界において、ビデオレンダリングは、特別な目的、シェーディング、変換、およびレンダリングハードウェアを考慮に入れている。このような特定用途のハードウェアに対するプログラミングについて考える1つの方法は、「スレッド」の使用である。
スレッドは、独立したプログラムであり、自己完結型であり、まれにしかデータを他のスレッドに伝達しない。スレッドの一般的な使用法は、ゆっくりとしたリアルタイムの動作からデータを収集して、整理された結果を提供することである。スレッドは、ディスプレイ上の変化を描画するために用いられることもある。スレッドは、他のスレッドとの更なる相互作用を要求する前に、数千または数百万の状態を通って遷移することができる。独立したスレッドは、並列法を通して性能が増強される機会を示している。
多くのソフトウェアコンパイラは、ソフトウェア設計プロセスを考慮に入れるために、スレッドの生成および管理をサポートする。同じ考慮は、好ましい実施形態におけるスレッドに最適化されたマイクロプロセッサ(TOMI)の中で実現されるスレッドレベル並列法の技術を介して、複数のCPUの並列処理をサポートする。
スレッドレベル並列法
スレッディングは、単一のCPU上のソフトウェアプログラムを考慮するために、よく理解された技術である。スレッドレベル並列法は、TOMIプロセッサの使用を通してプログラムの加速を成し遂げることができる。
他の並列法に勝るTOMIプロセッサの1つの重要な利点は、TOMIプロセッサが、現在のソフトウェアプログラミング技法に対して最小限の変更しか必要としないことである。新規なアルゴリズムが開発される必要はない。多くの既存のプログラムは、再コンパイルされる必要があるかもしれないが、実質的に書き直される必要はない。
効果的なTOMIコンピュータアーキテクチャは、多数の単純化されたプロセッサに関して構築されるべきである。異なるアーキテクチャが、異なるタイプのコンピューティング課題のために用いられ得る。
基本的なコンピュータの動作
汎用コンピュータにとって、頻度を下げる順として最も一般的な動作は、ロードおよびストア、シーケンシング、および数学(Math)およびロジックである。
ロードおよびストア
ロードおよびストアのパラメータは、ソースおよび宛先である。ロードおよびストアの力は、ソースおよび宛先の範囲である(例えば、4ギガバイトは、256バイトより強力な範囲である)。現在のソースおよび宛先と関連する局所性(locality)は、多くのデータセットにとって重要である。プラス1、マイナス1は最も役に立つ。現在のソースおよび宛先からのオフセットが増加するほど、次第に役立たなくなる。
ロードおよびストアは、メモリ階層によっても影響され得る。記憶装置からのロードは、CPUが実行することができる最も遅い動作である。
シーケンシング
分岐およびループは、基本的なシーケンシング命令である。テストに基づいてシーケンスが変わる命令は、コンピュータが決定を行うやり方である。
数学およびロジック
数学およびロジック動作は、3つの動作の中で使用が最も少ない。ロジック動作は、CPUが実行することができる最も速い動作であり、単一のロジックゲートの遅延と同じ程度に小さい遅延しか必要としない。数学動作は、より複雑である。なぜなら、上位ビットが下位ビットの演算の結果に依存するからである。32ビットADDは、桁上げ先回り制御を用いても、少なくとも32ゲートの遅延を必要とする。シフトおよび加算手法を用いるMULTIPLYは、32個のADDに相当するものを必要とする。
命令サイズのトレードオフ
完全な命令セットは、演算コードから成り、それは、無限の可能なソース、宛先、演算、および次の命令を選択するのに十分大きい。残念なことに、完全な命令セットの演算コードは無限に幅が広く、従って命令のバンド幅はゼロである。
高い命令バンド幅のためのコンピュータ設計は、最少の演算コードビットで最も多くの共通ソース、宛先、演算、および次の命令を能率的に定めることができる演算コードを有する命令セットの作成を必要とする。
幅の広い演算コードは、高い命令バスバンド幅の要求につながり、結果として生じるアーキテクチャは、フォンノイマンボトルネックによって急速に制限され、コンピュータの性能は、メモリから命令をフェッチする速度によって制限される。
メモリバスが64ビット幅である場合、各メモリサイクルの中で、単一の64ビット命令、2つの32ビット命令、4つの16ビット命令、または8つの8ビット命令をフェッチすることができる。32ビット命令は、16ビット命令の2倍役立つべきである。なぜなら、それは半分の命令バンド幅をカットしているからである。
命令セット設計の主な目的は、命令の冗長性を減らすことである。一般に、最適化された効率的な命令セットは、命令およびデータの局所性を利用する。最も簡単な命令の最適化は、ずっと以前になされた。大部分のコンピュータプログラムにとって、最も見込みのある次の命令は、メモリの中のシーケンシャルな次の命令である。従って、次の命令フィールドを有するあらゆる命令の代わりに、大部分の命令は、次の命令が現在の命令+1であると仮定する。ソースのための0ビットおよび宛先のための0ビットを有するアーキテクチャを構築することは可能である。
スタックアーキテクチャ
スタックアーキテクチャコンピュータは、ゼロオペランドアーキテクチャとも呼ばれる。スタックアーキテクチャは、プッシュダウンスタックの内容に基づいて、全ての動作を実行する。2オペランド動作は、スタックに両方のオペランドが存在することを必要とする。動作を実行するとき、両方のオペランドがスタックからPOPされ、動作が実行され、かつ結果がスタックにPUSHされて戻される。スタックアーキテクチャコンピュータは、非常に短い演算コードを有することができる。なぜなら、ソースおよび宛先は、スタックにあると暗示されているからである。
大部分のプログラムは、必要なときにスタックで必ずしも利用可能ではないグローバルレジスタの内容を必要とする。この発生を最小限にする試みは、スタックの先頭にあるオペランド以外のオペランドにアクセスすることを可能にするスタックインデクシングを含む。スタックインデクシングは、追加の演算コードビットがより大きい命令という結果をもたらすか、またはスタックインデックス値をスタック自体に配置するための追加の動作を必要とする。時には1つ以上の追加のスタックが定義される。より良好であるが最適ではない解決策は、コンビネーション スタック/レジスタ アーキテクチャである。
スタックアーキテクチャ動作は、明らかな最適化に逆らう方法で、しばしば冗長でもある。例えば、各POPおよびPUSH動作は、スタックがメモリの中で操作されるときに時間を浪費するメモリ動作を引き起こす可能性を有している。さらに、スタック動作は、次の動作のために直ちに必要となるかもしれないオペランドを消費する可能性があり、これにより、さらに別のメモリ動作の可能性によってオペランドの重複を必要とする。例えば、一次元アレイの全要素に15を乗算する動作である。
1つのスタックアーキテクチャにおいて、これは以下によって実行される。
1.アレイの開始アドレスをPUSHする
2.アドレスをDUPLICATEする(それで、我々は、アレイに結果をストアするためのアドレスを持つ。)
3.アドレスをDUPLICATEする(それで、我々は、アレイから読み出すためのアドレスを持つ。)
4.PUSH INDIRECT(スタックの先頭によって示されているアレイ位置の内容をPUSHする)
5.PUSH 15
6.MULTIPLY(15かける我々が第3行の中で読み出したアレイの内容)
7.SWAP(次の命令のためにスタックの先頭のアレイアドレスを得る。)
8.POP INDIRECT(乗算結果をPOPして、それをアレイに戻してストアする。)
9.INCREMENT(次のアレイ項目に対するポイント。)
10.アレイが完了するまで、ステップ2へ行く。
第9行のループカウンタは、追加のパラメータを必要とする。いくつかのアーキテクチャにおいて、このパラメータは、他のスタックに格納される。
仮定的なレジスタ/アキュムレータ アーキテクチャにおいて、この例は以下によって実現される。
1.アレイの開始アドレスをSTORE POINTERする
2.READ POINTER(アキュムレータに示されているアドレスの内容を読む。)
3.MULTIPLY 15
4.STORE POINTER(示されたアドレスの中へ結果をストアする。)
5.INCREMENT POINTER
6.アレイが完了するまで、第2行へ行く。
上記の例で、スタックアーキテクチャのための9ステップ対レジスタアーキテクチャのための5ステップを比較せよ。さらにまた、スタック動作は、スタック動作に起因して、余分のメモリアクセスのために少なくとも3回のあり得る機会を有している。仮定的なレジスタ/アキュムレータ アーキテクチャのループ制御は、レジスタの中で容易に処理され得る。
スタックは、式(expression)を評価するために役立ち、ほとんどのコンパイラでこのように用いられる。スタックは、入れ子にされた動作、例えばファンクションコールのためにも役立つ。ほとんどのCコンパイラは、ファンクションコールをスタックによって実行する。しかし、汎用記憶装置を補わないと、スタックアーキテクチャは、多くの追加データの転送および操作を必要とする。最適化のために、スタックPUSHおよびPOP動作は、また、数学およびロジック動作と区別しなければならない。しかし、上記の例から分かるように、スタックは、繰り返しデータをロードかつストアするとき、特に非効率的である。なぜならアレイアドレスがPUSH INDIRECTおよびPOP INDIRECTによって消費されるからである。
一態様において、本発明はシステムであり、(a)単一のチップ上の複数の並列プロセッサと、(b)チップ上に配置されていて、プロセッサの各々によってアクセス可能なコンピュータメモリとを備えていて、プロセッサの各々は、de minimis命令セットを処理するように動作可能であり、プロセッサの各々は、プロセッサ内の少なくとも3つの特定のレジスタの各々専用のローカルキャッシュを備えている。
様々な実施形態において、(1)ローカルキャッシュの各々のサイズは、チップ上のランダムアクセスメモリの1行に等しい。(2)関連するキャッシュを有する少なくとも3つの特定のレジスタは、命令レジスタ、ソースレジスタ、および宛先レジスタを含む。(3)de minimis命令セットは、7つの命令から成る。(4)プロセッサの各々は、単一のスレッドを処理するように動作可能である。(5)アキュムレータは、インクリメント命令を除く、あらゆる命令のためのオペランドである。(6)各命令のための宛先は、常にオペランドレジスタである。(7)3つのレジスタは自動インクリメントであり、3つのレジスタは自動デクリメントである。(8)各命令は、完了するのに1クロックサイクルしか必要としない。(9)命令セットは、BRANCH命令およびJUMP命令を備えていない。(10)各命令は、長さが、長くても8ビットである。(11)単一のマスタプロセッサは、並列プロセッサの各々を管理する役割を果たす。
別の態様において、本発明はシステムであり、(a)単一のチップ上の複数の並列プロセッサと、(b)チップ上に配置されていて、プロセッサの各々によってアクセス可能なコンピュータメモリとを備えていて、プロセッサの各々は、スレッドレベルの並列処理のために最適化された命令セットを処理するように動作可能である。
様々な実施形態において、(1)プロセッサの各々は、de minimis命令セットを処理するように動作可能である。(2)プロセッサの各々は、プロセッサ内の少なくとも3つの特定のレジスタの各々専用のローカルキャッシュを備えている。(3)ローカルキャッシュの各々のサイズは、チップ上のランダムアクセスメモリの1行に等しい。(4)少なくとも3つの特定のレジスタは、命令レジスタ、ソースレジスタ、および宛先レジスタを含む。(5)de minimis命令セットは、7つの命令から成る。(6)プロセッサの各々は、単一のスレッドを処理するように動作可能である。(7)単一のマスタプロセッサは、並列プロセッサの各々を管理する役割を果たす。
別の態様において、本発明は、単一チップ上の複数の並列プロセッサ、マスタプロセッサ、およびコンピュータメモリを用いるスレッドレベルの並列処理方法であり、複数のプロセッサの各々は、de minimis命令セットを処理して、単一のスレッドを処理するように動作可能であり、(a)ローカルキャッシュを複数のプロセッサの各々の中の3つの特定のレジスタの各々に割り当てるステップと、(b)単一のスレッドを処理するために、複数のプロセッサのうちの1つを割り当てるステップと、(c)プロセッサによって各々の割り当てられたスレッドを処理するステップと、(d)プロセッサによって処理された各スレッドからの結果を処理するステップと、(e)スレッドが処理された後に、複数のプロセッサのうちの1つの割り当てを解除するステップとを有している。
様々な実施形態において、(1)de minimis命令セットは、7つの命令から成る。(2)de minimis命令セットの中の命令は、長さが、長くても8ビットである。(3)de minimis命令セットの中の各命令は、1クロックサイクル内に処理される。
本発明の少なくとも1つの実施形態のTOMIアーキテクチャは、好ましくは、汎用コンピュータとして動作可能な最小限のロジックを用いる。最も一般的な動作には優先権が与えられる。大部分の動作は、可視的、規則的、かつコンパイラ最適化のために利用可能である。
一実施形態において、図1に示すように、TOMIアーキテクチャは、アキュムレータ、レジスタ、およびスタックアーキテクチャ上での変形である。この実施形態において、
1.アキュムレータアーキテクチャと同様に、アキュムレータは、インクリメント命令を除いて、常にオペランドのうちの1つである。
2.レジスタアーキテクチャと同様に、宛先は、常にオペランドレジスタのうちの1つである。
3.アキュムレータおよびプログラムカウンタは、レジスタ空間の中にもあり、従って操作され得る。
4.3つの特別なレジスタは、自動インクリメントおよび自動デクリメントであり、入出力のスタックおよびストリームを作成するのに役立つ。
5.全ての動作は、1クロックサイクル(および2状態:クロックハイ、クロックロー)を必要とする。
6.全ての命令は、長さが8ビットであり、命令デコードを単純化して速度を上げている。
7.BRANCHまたはJUMP命令がない。
8.図2に示すように、8ビット命令から3ビットのオペレータを選択することを可能にする7つの命令しかない。
好ましい実施形態のいくつかの利点は、以下を含む。
1.全ての動作は、パイプラインによって必要とされるものと同等のものによって抑えられるのではなく、ロジックによって許容される最大速度で動く。論理演算は最も高速である。数学演算は次に高速である。メモリアクセスを必要とする動作は最も遅い。
2.アーキテクチャは、パッケージピン、加算器桁上げ時間、および有用性のみによって制限される任意のデータ幅に比例する。
3.アーキテクチャは、汎用コンピュータの全ての動作を実行するのに必要な最小限の可能な機能に近い。
4.アーキテクチャは、非常に透明で、非常に規則的であり、大部分の動作は、最適化コンパイラで利用可能である。
アーキテクチャは、単一のモノリシックチップ上で、多数回、複製されるために十分簡単に設計されている。一実施形態は、メモリとモノリシックのCPUの複数のコピーを埋め込んでいる。32ビットCPUは、大部分のゲートはレジスタを定めている1,500ゲート足らずで実現され得る。好ましい実施形態におけるほとんど1,000個のTOMI CPUは、単一のインテルペンティアム(登録商標)4と同数のトランジスタを用いて実現され得る。
命令セット
命令セットのうちの7つの命令が、それらのビットマッピングと共に図2に示されている。各命令は、好ましくは単一の8ビットワードから成る。
アドレッシングモード
図3は、様々なアドレッシングモードの有効アドレスを示している。
アドレッシングモードは、以下の通りである。
即値
レジスタ
レジスタ 間接
レジスタ 間接 自動インクリメント
レジスタ 間接 自動デクリメント
特別なケース
レジスタ0およびレジスタ1の両方は、プログラムカウンタ(PC)を指す。オペランドとしてレジスタ0(PC)を持つ演算は、全て、アキュムレータキャリービット(C)が1に等しいという条件付きである。C=1であれば、PCの旧値はアキュムレータ(ACC)にスワップされる。オペランドとしてレジスタ1(PC)を持つ演算は、全て、無条件である。
分岐がない
分岐およびジャンプ動作は、通常、CPU設計者の課題である。なぜなら、それらが貴重な演算コード空間の多くのビットを必要とするからである。分岐機能は、LOADACC, xxを用いて所望の分岐アドレスをACCにロードして、次に、STOREACC, PC命令を用いて分岐を遂行することによって引き起こされ得る。分岐は、レジスタ0に保存したときのCの状態次第で、なされる。
スキップ
スキップは、INC, PCを実行することによって引き起こされ得る。実行は2サイクルを必要とし、1つはカレントPCインクリメントサイクルを完了させるためであり、1つはINCのためである。スキップは、レジスタ0をインクリメントしたときのCの状態次第で、なされる。
相対分岐
相対分岐は、所望のオフセットをACCにロードして、次にADD, PC命令を実行することによって引き起こされ得る。相対分岐は、レジスタ0に加算したときのCの状態次第で、なされる。
前方への分岐
前方への分岐は、後方への分岐より役に立つ。なぜなら、ループのために必要な後方への分岐の位置は、初めてループの先頭を通るプログラムステップのときPCを保存することによって、容易に捕獲されるからである。
相対分岐より効率的な前方への分岐は、分岐エンドポイントの最下位ビットをACCにロードして、次にPCにストアすることによって、引き起こされ得る。PCは、レジスタ0またはレジスタ1の使用に応じて、条件付または無条件の両方でアクセスされ得るので、前方への分岐もまた、宛先オペランドとしてのPCレジスタの選択(レジスタ0またはレジスタ1)に応じて、条件付または無条件となり得る。
例えば、
LOADI, #1C
STOREACC, PC
もしACCの最上位ビットがゼロであれば、最下位6ビットのみがPCレジスタに転送される。もし現在のPCレジスタの最下位6ビットがロードされるべきACC値より小さいのであれば、レジスタの最上位ビットは不変のままである。もし現在のPCレジスタの最下位6ビットがロードされるべきACC値より大きいのであれば、現在のPCレジスタはインクリメントされ、第7ビットでスタートする。
これは、効果的に分岐を31命令前方まで可能にする。前方への分岐のこの方法は、可能な場合はいつでも用いられるべきである。なぜなら、それは、相対分岐のための3命令に対して2命令しか必要としないだけでなく、最も遅い動作のうちの1つである加算器を通る経路を必要としないからである。図2Aは、動作中の前方への分岐を示している。
ループ
ループの先頭は、LOADACC, PCを用いてセーブすることができる。結果として生じるループ構文の先頭に対するポインタは、レジスタにストアされるか、またはオートインデクシングレジスタのうちの1つにプッシュされる。ループの末尾で、ポインタはLOADACC, EAによって検索され、STOREACC, PCを用いてPCにリストアされ、これにより後方へのループが引き起こされる。ループは、レジスタ0への保存によるCの状態次第で、なされ、これにより条件付き後方へのループが引き起こされる。
自己変更(modifying)コード
STOREACC, PCを用いて自己変更コードを書くことが可能である。命令は、引き起こされ、またはACCにフェッチされ、そして、次の命令として実行されるPCに格納される。この技術は、CASE構文を作成するために用いられ得る。
JUMPTABLEのN個のアドレスとベースアドレスとから成るメモリ内のジャンプテーブルアレイを仮定する。便宜のために、JUMPTABLEは、ローメモリ20の中にあるので、そのアドレスは、LOADIまたは1以上の右シフトADD, ACCが続くLOADIによって生成され得る。
ジャンプテーブルへのインデックスが、ACCの中にあり、かつジャンプテーブルのベースアドレスが、JUMPTABLEと名付けられた汎用レジスタの中にあると仮定する。
ADD, JUMPTABLE インデックスをジャンプテーブルのベースアドレスに加算する。
LOADACC, (JUMPTABLE) インデックスされたアドレスをロードする
STOREACC, PC ジャンプを実行する。
0000からスタートする低位メモリがシステムコールに割り当てられる場合、
各システムコールは、以下の通りに実行される。ここでSPECIAL_FUNCTIONは即値オペランド0−63の名前である。
LOADI, SPECIAL_FUNCTION システムコール番号をロードする
LOADACC, (ACC) システムコールのアドレスをロードする
STOREACC, PC 関数へジャンプする
右シフト
基本的なアーキテクチャは、右シフト演算を想定していない。もしこのような演算が必要であれば、好ましい実施形態の解決策は、汎用レジスタのうちの1つを「右シフトレジスタ」に指定することである。STOREACC, RIGHTSHIFTは、「右シフトレジスタ」への単一の位置を右シフトしたACCをストアする。ここで、その値は、LOADACC, RIGHTSHIFTによって読むことができる。
アーキテクチャのスケーラビリティ
TOMIアーキテクチャは、好ましくは8ビット命令を特徴とするが、データ幅は、制限される必要はない。図4は、いかにして4〜32ビットの任意の幅のデータ経路が容易に作成されるかを示している。より広い幅のデータ処理を行うことは、所望の幅に対して、レジスタセット、内部データ経路、およびALUの幅を増加させることを必要とするだけである。データ経路の上限は、加算器のキャリー伝播遅延およびトランジスタの予算によって制限されるのみである。
好適なTOMIアーキテクチャは、説明を簡単にするため、フォンノイマンメモリ構成として実現されるが、(別々のデータおよび命令バスを有する)ハーバードアーキテクチャによって実現することも可能である。
共通の数学演算
2の補数の数学は、いくつかの方法でなされ得る。汎用レジスタは、全て“1s”として予め設定され、ALLONESと名付けられる。オペランドは、OPERANDと名付けられたレジスタの中にあると仮定する。
LOADACC, ALLONES
XOR, OPERAND
INC, OPERAND “2s”の補数がOPERANDの中に残る。
共通のコンパイラ構造
大部分のコンピュータプログラムは、コンパイラによって生成される。従って、実用的なコンピュータアーキテクチャは、共通のコンパイラ構造に適合しているべきである。
Cコンパイラは、通常、ファンクションコールにパラメータを渡すためのスタックを維持する。S、X、またはYレジスタをスタックポインタとして用いることができる。ファンクションコールは、例えば、STOREACC, (X)+を用いて、スタックとして動作するオートインデクシングレジスタのうちの1つにパラメータをプッシュする。関数を入力すると、パラメータは、使用のために汎用レジスタにPOPされる。
スタック相対アドレッシング
汎用レジスタに都合よく適合させることができるときより、ファンクションコールを通過したより多くの要素があるときがある。以下の例のために、スタックプッシュ動作がスタックをデクリメントすると仮定する。もしSがスタックレジスタとして用いられているのであれば、スタックの先頭に対してN番目の項目を読むために、
LOADI, N
STOREACC, X
LOADACC, S
ADD, X
LOADACC, (X)
アレイへのインデクシング
アレイ関数にエントリすると、アレイのベースアドレスは、ARRAYと名付けられた汎用レジスタに置かれる。アレイの中のN番目の要素を読むために、
LOADI, N
STOREACC, X
LOADACC, ARRAY
ADD, X
LOADACC, (X)
Nワード要素アレイへのインデクシング
時々、アレイは、Nワード幅の要素に割り当てられる。アレイのベースアドレスは、ARRAYと名付けられた汎用レジスタに置かれる。5ワード幅アレイの中のN番目の要素の最初のワードにアクセスするために、
LOADI, N
STOREACC, X テンポラリレジスタにストアする
ADD, ACC 2をかける
ADD, ACC 再び2をかける=4
ADD, X プラス1=5
LOADACC, ARRAY
ADD, X アレイのベースアドレスをプラスする
LOADACC, (X)
ローカルTOMIキャッシング
キャッシュは、メインメモリと比べて、大きさにおいてより小型で、アクセスにおいてより高速なメモリである。減少されたアクセスタイムおよびプログラムおよびデータアクセスの局所性は、キャッシュ動作を可能にし、多くの動作のために好適なTOMIプロセッサの性能を増加させる。他の観点から見て、キャッシュは、TOMIプロセッサのメインメモリからの独立性を増加させることによって、並列処理性能を増加させる。キャッシュのメインメモリに対する相対的な性能およびキャッシュに、またはキャッシュから、他のメインメモリに、ロードまたはストアを要求する前に、TOMIプロセッサが実行可能なサイクル数は、TOMIプロセッサ並列法による性能の上昇の量を決定する。
TOMIローカルキャッシュは、TOMIプロセッサ並列法によって性能の上昇を強化する。図5に示すように、各TOMIプロセッサは、好ましくは3つの関連するローカルキャッシュを備えている。
命令−PCと関連する
ソース−Xレジスタと関連する
宛先−Yレジスタと関連する
これらのキャッシュの最適な大きさは、アプリケーションに依存する。典型的な実施形態は、各キャッシュに対して1024バイトを必要とする。換言すれば、1024の命令と、ソースおよび宛先の256の32ビットワードである。少なくとも2つの要因が、キャッシュの最適サイズを決定する。第1は、他のキャッシュのロードまたはストア動作が要求される前に、TOMIプロセッサが繰り返すことができる状態の数である。第2は、メインメモリの動作の間に可能なTOMIプロセッサ実行サイクルの数と関連するメインメモリからのキャッシュのロードまたはストア動作のコストである。
TOMIプロセッサのRAMの中への埋め込み
一実施形態において、広いバスは、大きな埋め込まれたメモリをキャッシュに接続するので、キャッシュに対するロードまたはストア動作は、速く起こることができる。RAMに埋め込まれたTOMIプロセッサで、全てのキャッシュのロードまたはストアは、RAMの列に対する単一のメモリサイクルから成る。一実施形態において、埋め込まれたメモリは、63個のTOMIプロセッサの要求に応答しているので、1つのTOMIプロセッサに対するキャッシュのロードまたはストアの応答時間は、他のTOMIプロセッサのキャッシュのロードまたはストアが完了する間、延長可能である。
図6に示すように、キャッシュは、関連するメモリアドレッシングレジスタX,Y,PCの変化に基づいて、ストアおよびロードされる。例えば、PCレジスタの全幅は、24ビットであり得る。PCキャッシュが1024バイトである場合、PCの下位10ビットは、PCキャッシュの中でのアクセスを定義する。上位14ビットの中に変化があるようにPCが書き込まれるとき、キャッシュロードサイクルが要求される。そのPCキャッシュと関連するTOMI CPUは、キャッシュロードサイクルが完了するまで実行を停止し、示された命令は、PCキャッシュからフェッチされ得る。
キャッシュダブルバッファリング
2次キャッシュは、キャッシュロード要求を予想してロードされ得る。2つのキャッシュは同一であり、PCの上位14ビットの内容に基づいて交互に選択されかつ選択から外される。上記の例では、PCの上位14ビットが、2次キャッシュの中に予め格納されたデータのそれと合うように変化するとき、2次キャッシュは、1次キャッシュとして選択されるようになる。旧1次キャッシュは、その時は2次キャッシュになる。大部分のコンピュータプログラムが線形にメモリの中で増加するので、本発明の一実施形態は、常にキャッシュの内容、現在のPCプラス1の上位14ビットによって示されるメインメモリの内容をフェッチする2次キャッシュを有する。
2次キャッシュの追加は、現在のキャッシュの境界線の外に移動するときに、TOMIプロセッサが、メモリデータがメインメモリからフェッチされるのを待たなければならない時間を減らす。2次キャッシュの追加は、TOMIプロセッサの複雑さをほとんど2倍にする。最適システムのために、複雑さが2倍になるのであれば、対応するTOMIプロセッサの性能も2倍になることで相殺されなければならない。さもないと、2次キャッシュのない2つのより簡単なTOMIプロセッサが、同じトランジスタ数で実現され得る。
高速乗算、浮動小数点演算、追加の機能
整数乗算および全ての浮動小数点演算は、特別な目的のハードウェアを用いてさえ、実行するために、多くのサイクルを必要とする。従って、それらは、基本的なTOMIプロセッサに含めるよりはむしろ、他のプロセッサを考慮に入れるべきである。デジタル信号処理(DSP)動作は、全乗算が多くのサイクルを必要とする場合であっても、しばしば、サイクル毎に結果を生じる高度にパイプライン化された乗算器を用いる。何度も同じアルゴリズムを繰り返す信号処理アプリケーションのために、このような乗算器アーキテクチャが最適であり、TOMIプロセッサに対する周辺プロセッサとして組み込まれ得るが、もしそれがTOMIプロセッサの中に直接組み込まれるのであれば、それは、たぶん複雑さを増加させ、かつ全体の性能を減少させる。図7は、広いシステムRAMバスを利用するために構成された追加の処理機能の一例を示している。
TOMI割り込みストラテジー
割り込みは、プロセッサの通常のシーケンシャル動作に対する外部イベントであり、それは、プロセッサに、その動作シーケンスを直ちに変えることを強いる。
割り込みの例は、外部装置による動作の完了またはいくつかのハードウェアによるエラー状態である。従来のプロセッサは、通常のシーケンシャル動作を素早く停止し、現在の動作の状態をセーブし、割り込みを引き起こしたどんなイベントでも処理するために、いくつかの特別な動作の実行を開始し、特別な動作が完了されたときに以前の状態を回復し、シーケンシャル動作を続けるために、どんな事でもする。割り込み処理品質の主要な基準は、応答時間である。
割り込みは、従来のプロセッサに対していくつかの課題を提起する。それらは、実行時間を不確定にする。それらは、状態をストアしてそれからリストアするプロセッササイクルを浪費する。それらは、プロセッサ設計を難しくし、あらゆるプロセッサ動作を遅くする遅延をもたらす可能性がある。
即時の割り込み応答は、エラー処理および現実世界の活動に直接結びついているプロセッサを除いて、大部分のプロセッサに対しては不必要である。
マルチプロセッサTOMIシステムの一実施形態において、1つのプロセッサのみが、主な割り込み機能を備えている。他の全てのプロセッサは、それらがいくつかの割り当てられた仕事を完了して、それら自身で停止するまで、中断されずに動く。または、それらがコーディネートプロセッサによって停止させられるまで動く。
入出力(I/O)
TOMIプロセッサ環境の一実施形態において、単一のプロセッサが、外部の世界に対する全てのインターフェースについて責任を負っている。
ダイレクトメモリアクセス(DMA)制御
一実施形態において、TOMIプロセッサシステムにおける外部の世界に対する即時の応答は、DMAコントローラを介して起こる。DMAコントローラは、外部装置によって要求されるときに、外部装置からシステムRAMに書き込みを行うための内部データバスにデータを転送する。同じコントローラが、また、要求されると、システムRAMから外部装置にデータを転送する。DMA要求は、内部バスアクセスに対する最高優先度を有する。
TOMIプロセッサのアレイの編成
本発明の好ましい実施形態のTOMIプロセッサは、かなりの数、複製され、かつモノリシックチップ上の追加の処理機能、非常に幅の広い内部バス、およびシステムメモリと結合されるように設計されている。このようなシステムのための例示的なメモリマップが図8に示されている。
各プロセッサのためのメモリマップは、そのプロセッサ用のローカルレジスタに対して、最初の32の位置(16進法の1F)を費やす(図3参照)。メモリマップの残りは、それらのキャッシュレジスタを通して全てのプロセッサによってアドレス指定可能である(図6参照)。システムRAMのアドレス指定能力は、ローカルキャッシュと関連している3つのレジスタPC,X,およびYの幅のみによって制限される。レジスタが24ビット幅である場合、全アドレス指定能力は4メガバイトであるが、上限はない。
一実施形態において、64個のTOMIプロセッサは、メモリと共にモノリシックに実現される。単一のマスタプロセッサが、その他の63個を管理する役割を果たす。スレーブプロセッサのうちの1つがアイドル状態で、クロックが動いていないとき、それは、ほとんど電力を消費しないし、ほとんど熱を発生しない。初期化時には、マスタプロセッサのみが使用可能である。マスタは、スレッドが開始すべき時間まで、フェッチングおよび実行の命令を開始する。各スレッドは、プレコンパイルされて、メモリにロードされる。スレッドを開始するために、マスタは、このスレッドをTOMI CPUのうちの1つに割り当てる。
プロセッサ稼働率
好ましく仕事をするためのTOMIプロセッサの稼働率のコーディネート(Coordination)は、図9に示すプロセッサ稼働率テーブルによって処理される。コーディネート(マスタ)プロセッサは、好ましくは以下の機能を実行することができる。
1.スレッドの実行アドレス、ソースメモリ、および宛先メモリを含むが、これらに限られない、そのスタック上にスレーブプロセッサのためにコールしているパラメータをプッシュする。
2.スレーブプロセッサを起動する。
3.ポーリングまたは割り込みに応答することによって、スレーブプロセッサスレッド完了イベントに応答する。
プロセッサ要求
コーディネートプロセッサは、稼働率テーブルからプロセッサを要求することができる。available_flagが「0」にセットされた最低位のプロセッサの数が戻される。すると、コーディネートプロセッサは、利用可能なプロセッサに関するavailable_flagを「1」にセットし、これによりスレーブプロセッサを起動する。プロセッサが利用可能でない場合、要求はエラーを返す。代替案として、プロセッサは、実行されるべき要求された仕事に関する優先順位レベルに基づいて、コーディネートプロセッサによって割り当てられ得る。優先順位方式に基づいてリソースを割り当てる技術は、従来技術において周知である。図10は、プロセッサ割り当ての3つの好適な構成要素を示している。コーディネートプロセッサを起動する動作、スレーブプロセッサの動作、および割り込み応答によるコーディネートプロセッサの結果処理。
段階的にスレーブプロセッサを起動すること
1.コーディネートプロセッサは、それ自身のスタック上へ走るためにスレッドに対するパラメータをプッシュする。パラメータは、以下のものを含む。スレッドの先頭アドレス、スレッドに対するソースメモリ、スレッドに対する宛先メモリ、および最後のパラメータカウント。
2.コーディネートプロセッサは、利用可能なプロセッサを要求する。
3.プロセッサ割り当てロジックは、その関連するavailable_flagをセットし、かつその関連するdone_flagをクリアする、数値的に最低のスレーブプロセッサの番号、またはエラーを返す。
4.エラーが返されると、コーディネートプロセッサは、スレーブプロセッサが利用可能になるまで要求を再試行するか、またはエラーを処理するためのいくつかの特別な動作を実行する。
5.利用可能なプロセッサ番号が返されたら、コーディネートプロセッサは、示されたプロセッサに対するavailable_flagをクリアする。この動作は、選択されたスレーブプロセッサのスタックに、スタックパラメータのparameter_count数をプッシュする。done_flagは、ゼロにクリアされる。
6.スレーブプロセッサは、先頭スタック項目を検索し、それをスレーブプロセッサのプログラムカウンタに転送する。
7.スレーブプロセッサは、次に、命令キャッシュの中に、プログラムカウンタによって示されるメモリカラムをフェッチする。
8.スレーブプロセッサは、命令キャッシュの始めから命令を実行し始める。最初の命令は、たぶん、スタックからコールしているパラメータを検索することである。
9.スレーブプロセッサは、命令キャッシュからのスレッドを実行する。スレッドが完了すると、その関連するdone_flagの状態をチェックする。done_flagがセットされている場合には、done_flagがクリアされるまで待つ。これは、コーディネートプロセッサがいかなる以前の結果も処理したことを示している。
10.スレーブプロセッサに関する割り込みベクトルが−1にセットされている場合には、done_flagをセットしても割り込みは発生しない。従って、コーディネートプロセッサは、done_flagがセットされるようにポーリングを行う。
コーディネートプロセッサが、done_flagがセットされたことを検出すると、スレーブプロセッサの結果を処理し、かつ、おそらく、新しい仕事をするためにスレーブプロセッサを再割り当てする。スレーブプロセッサの結果が処理されると、関連するコーディネートプロセッサは、関連するdone_flagをクリアする。
スレーブプロセッサに関する割り込みベクトルが−1に等しくない場合、関連するdone_flagをセットすると、コーディネートプロセッサに割り込みが発生し、かつ割り込みベクトルアドレスで割り込みハンドラを実行し始める。
関連するavailable_flagもまたセットされた場合、コーディネートプロセッサは、スレーブプロセッサのスタックにプッシュされたリターンパラメータを読み取ることもできる。
割り込みハンドラは、スレーブプロセッサの結果を処理し、かつ、おそらく、新しい仕事をするためにスレーブプロセッサを再割り当てする。スレーブプロセッサの結果が処理されると、コーディネートプロセッサ上で動作している割り込みハンドラは、関連するdone_flagをクリアする。
11.done_flagがクリアされると、スレーブプロセッサは、その関連するdone_flagをセットして、新しいstart_timeをセーブする。スレーブプロセッサは、仕事をし続けてもよいし、利用可能な状態に戻ってもよい。利用可能な状態に戻るために、スレーブプロセッサは、そのスタック上へリターンパラメータをプッシュし、続けてスタックカウントおよびそのavailable_flagをセットする。
メモリのロック
TOMIプロセッサは、それらのキャッシュを通してシステムメモリを読み書きする。完全にキャッシュに入れられたカラムは、一度に読み書きされる。いかなるプロセッサも、システムメモリの任意の部分を読むことができる。個々のプロセッサは、その排他的な書き込みのために、メモリのカラムをロックすることができる。このロックメカニズムは、プロセッサ間でのメモリ書き込みコンフリクトを回避する。
提案されたアプリケーション
並列法は、個々のプロセッサに対して仕事の独立した部分に入ると考えられるアプリケーションを効果的に加速する。うまく考えられた1つのアプリケーションは、ロボットの視覚のための画像操作である。画像操作アルゴリズムは、相関、等化、エッジ識別、および他の動作を含む。多くは、行列操作によって実行される。図11に示すように、このアルゴリズムは、非常にしばしば、うまく考えられる。
図11に例示されたイメージマップは、全イメージマップの矩形のサブセットに対する画像データを操作するために割り当てられたプロセッサを含む、24個のプロセッサを示している。
図12は、一実施形態において、TOMIシステムRAMが、どのように割り当てられ得るかを示している。システムRAMの1つのブロックは、画像キャプチャの画素を保持し、他のブロックは、処理された結果を保持する。
動作中に、コーディネートプロセッサは、一定時間毎に外部ソースから内部システムRAMに画像ピクセルを転送するために、DMAチャンネルを割り当てる。画像キャプチャの一般的な速度は、1秒当たり60画像である。
コーディネートプロセッサは、次に、Xレジスタによって用いられるべき画像マップのアドレス、Yレジスタによって用いられるべき処理された画像のアドレス、2のパラメータカウント、および画像処理アルゴリズムのアドレスをプッシュすることによって、スレーブプロセッサ1をイネーブルにする。コーディネートプロセッサは、その後、同様に、プロセッサ2から25をイネーブルにする。プロセッサは、画像処理アルゴリズムが完了するまで、それぞれ並列に実行を続ける。
アルゴリズムが完了すると、各プロセッサは、プロセッサ稼働率テーブル内のその関連するdone_flagをセットする。結果は、コーディネートプロセッサによって処理される。それは、完了のためにポーリングすることであるか、または“done”イベント上での割り込みに応答することである。
図13は、64個のプロセッサのモノリシックアレイのための例示的な平面図である。
本発明が、添付の図面を参照して例示のみのために記載されてきたこと、および、その改良および修正が、その範囲または精神から逸脱することなく、本発明に対してなされ得ることは言うまでもない。
一実施形態における例示的なTOMIアーキテクチャを示している。 例示的な命令セットを示している。 動作中の前方分岐を示している。 様々なアドレッシングモードの有効アドレスを示している。 4〜32ビットから如何にしてデータ経路が容易に作成されるかを示している。 例示的なローカルキャッシュを示している。 例示的なキャッシュ管理状態を示している。 幅の広いシステムRAMバスを活用するために構成された追加の処理機能の一実施形態を示している。 例示的なメモリマップを示している。 例示的なプロセッサ稼働率テーブルを示している。 プロセッサ割り当ての3つの構成要素を示している。 例示的なファクタリングを示している。 例示的なシステムRAMを示している。 64個のプロセッサのモノリシックアレイのための例示的な平面図を示している。

Claims (24)

  1. 単一のチップ上の複数の並列プロセッサと、
    前記チップ上に置かれていて、かつ前記プロセッサの各々によってアクセス可能なコンピュータメモリとを備えたシステムにおいて、
    前記プロセッサの各々は、de minimis命令セットを処理するように動作可能であり、
    前記プロセッサの各々は、前記プロセッサの中の少なくとも3つの特定のレジスタの各々専用のローカルキャッシュを備えていることを特徴とするシステム。
  2. 前記ローカルキャッシュの各々のサイズは、前記チップ上のランダムアクセスメモリの1行に等しいことを特徴とする請求項1に記載のシステム。
  3. 関連するキャッシュを有する少なくとも3つの特定のレジスタは、命令レジスタ、ソースレジスタ、および宛先レジスタを含むことを特徴とする請求項1に記載のシステム。
  4. 前記de minimis命令セットは、7つの命令から成ることを特徴とする請求項1に記載のシステム。
  5. 前記プロセッサの各々は、単一のスレッドを処理するように動作可能であることを特徴とする請求項1に記載のシステム。
  6. アキュムレータは、インクリメント命令を除く、あらゆる命令のためのオペランドであることを特徴とする請求項1に記載のシステム。
  7. 各命令のための宛先は、常にオペランドレジスタであることを特徴とする請求項1に記載のシステム。
  8. 3つのレジスタは自動インクリメントであり、かつ3つのレジスタは自動デクリメントであることを特徴とする請求項1に記載のシステム。
  9. 各命令は、完了するために1クロックサイクルのみを必要とすることを特徴とする請求項1に記載のシステム。
  10. 前記命令セットは、分岐命令およびジャンプ命令を備えていないことを特徴とする請求項1に記載のシステム。
  11. 各命令は、長さが最高でも8ビットであることを特徴とする請求項1に記載のシステム。
  12. 単一のマスタプロセッサが、前記並列プロセッサの各々を管理する役割を担っていることを特徴とする請求項1に記載のシステム。
  13. 単一のチップ上の複数の並列プロセッサと、
    前記チップ上に置かれていて、かつ前記プロセッサの各々によってアクセス可能なコンピュータメモリとを備えたシステムにおいて、
    前記プロセッサの各々は、スレッドレベルの並列処理のために最適化された命令セットを処理するように動作可能であることを特徴とするシステム。
  14. 前記プロセッサの各々は、de minimis命令セットを処理するように動作可能であることを特徴とする請求項13に記載のシステム。
  15. 前記プロセッサの各々は、前記プロセッサの中の少なくとも3つの特定のレジスタの各々専用のローカルキャッシュを備えていることを特徴とする請求項13に記載のシステム。
  16. 前記ローカルキャッシュの各々のサイズは、前記チップ上のランダムアクセスメモリの1行に等しいことを特徴とする請求項15に記載のシステム。
  17. 少なくとも3つの特定のレジスタは、命令レジスタ、ソースレジスタ、および宛先レジスタを含むことを特徴とする請求項15に記載のシステム。
  18. 前記de minimis命令セットは、7つの命令から成ることを特徴とする請求項14に記載のシステム。
  19. 前記プロセッサの各々は、単一のスレッドを処理するように動作可能であることを特徴とする請求項13に記載のシステム。
  20. 単一のマスタプロセッサが、前記並列プロセッサの各々を管理する役割を担っていることを特徴とする請求項13に記載のシステム。
  21. 単一のチップ上の複数の並列プロセッサ、マスタプロセッサ、およびコンピュータメモリを利用するスレッドレベルの並列処理の方法において、前記複数のプロセッサの各々は、de minimis命令セットを処理し、かつ単一のスレッドを処理するように動作可能であり、
    (a)ローカルキャッシュを、前記複数のプロセッサの各々の中の3つの特定のレジスタの各々に割り当てるステップと、
    (b)単一のスレッドを処理するために複数のプロセッサのうちの1つを割り当てるステップと、
    (c)前記プロセッサによって割り当てられた各スレッドを処理するステップと、
    (d)前記プロセッサによって処理された各スレッドからの結果を処理するステップと、
    (e)スレッドが処理された後に前記複数のプロセッサのうちの1つの割り当てを解除するステップとを有していることを特徴とする方法。
  22. de minimis命令セットは、7つの命令から成ることを特徴とする請求項21に記載の方法。
  23. de minimis命令セットの中の各命令は、長さが最高でも8ビットであることを特徴とする請求項21に記載の方法。
  24. de minimis命令セットの中の各命令は、1クロックサイクルの中で処理されることを特徴とする請求項21に記載の方法。
JP2008553428A 2006-02-03 2007-02-05 スレッドに最適化されたマルチプロセッサアーキテクチャ Expired - Fee Related JP4987882B2 (ja)

Applications Claiming Priority (3)

Application Number Priority Date Filing Date Title
US76495506P 2006-02-03 2006-02-03
US60/764,955 2006-02-03
PCT/US2007/003313 WO2007092528A2 (en) 2006-02-03 2007-02-05 Thread optimized multiprocessor architecture

Publications (2)

Publication Number Publication Date
JP2009525545A true JP2009525545A (ja) 2009-07-09
JP4987882B2 JP4987882B2 (ja) 2012-07-25

Family

ID=38345789

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2008553428A Expired - Fee Related JP4987882B2 (ja) 2006-02-03 2007-02-05 スレッドに最適化されたマルチプロセッサアーキテクチャ

Country Status (11)

Country Link
US (1) US8977836B2 (ja)
EP (2) EP2154607A3 (ja)
JP (1) JP4987882B2 (ja)
KR (1) KR101120398B1 (ja)
CN (1) CN101395578B (ja)
AT (1) ATE536585T1 (ja)
AU (1) AU2007212342B2 (ja)
CA (1) CA2642022A1 (ja)
HK (1) HK1127414A1 (ja)
RU (1) RU2427895C2 (ja)
WO (1) WO2007092528A2 (ja)

Cited By (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2010532905A (ja) * 2008-06-26 2010-10-14 ラッセル・エイチ・フィッシュ スレッドに最適化されたマルチプロセッサアーキテクチャ
JP2014532231A (ja) * 2011-09-30 2014-12-04 クアルコム,インコーポレイテッド Fifoロード命令

Families Citing this family (19)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
AU2007212342B2 (en) * 2006-02-03 2011-05-12 Russell H. Fish Iii Thread optimized multiprocessor architecture
US7962553B2 (en) * 2006-07-31 2011-06-14 Hewlett-Packard Development Company, L.P. Method and system for distribution of maintenance tasks in a multiprocessor computer system
US8755515B1 (en) 2008-09-29 2014-06-17 Wai Wu Parallel signal processing system and method
US8458439B2 (en) * 2008-12-16 2013-06-04 International Business Machines Corporation Block driven computation using a caching policy specified in an operand data structure
US8281106B2 (en) * 2008-12-16 2012-10-02 International Business Machines Corporation Specifying an addressing relationship in an operand data structure
US8407680B2 (en) * 2008-12-16 2013-03-26 International Business Machines Corporation Operand data structure for block computation
US8285971B2 (en) * 2008-12-16 2012-10-09 International Business Machines Corporation Block driven computation with an address generation accelerator
US8327345B2 (en) * 2008-12-16 2012-12-04 International Business Machines Corporation Computation table for block computation
WO2010092483A1 (en) * 2009-02-13 2010-08-19 Alexey Raevsky Devices and methods for optimizing data-parallel processing in multi-core computing systems
JP5367416B2 (ja) * 2009-03-04 2013-12-11 光洋サーモシステム株式会社 搬送ロボット装置
US9535876B2 (en) * 2009-06-04 2017-01-03 Micron Technology, Inc. Conditional operation in an internal processor of a memory device
US8527740B2 (en) * 2009-11-13 2013-09-03 International Business Machines Corporation Mechanism of supporting sub-communicator collectives with O(64) counters as opposed to one counter for each sub-communicator
KR101984635B1 (ko) 2012-07-19 2019-05-31 삼성전자주식회사 어플리케이션을 고속으로 처리하는 연산 처리 장치 및 방법
JP6099329B2 (ja) * 2012-08-02 2017-03-22 シャープ株式会社 端末、基地局、通信方法および集積回路
US9760511B2 (en) * 2014-10-08 2017-09-12 International Business Machines Corporation Efficient interruption routing for a multithreaded processor
WO2016099318A2 (ru) * 2014-12-19 2016-06-23 Сергей Анатольевич ГОРИШНИЙ Система и способ управления функционально связанными данными
RU2612569C2 (ru) * 2015-01-27 2017-03-09 Акционерное общество "Научно-исследовательский институт Авиационного оборудования" Способ автоматического управления избыточностью неоднородной вычислительной системы и устройство для его реализации
CN104699449B (zh) * 2015-04-03 2017-09-29 中国科学院软件研究所 一种基于gmp的大整数加法和减法多核并行化实现方法
CN111104062B (zh) * 2019-11-22 2023-05-02 中科寒武纪科技股份有限公司 存储管理方法、装置和存储介质

Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPH05143328A (ja) * 1991-11-20 1993-06-11 Fujitsu Ltd 情報処理装置におけるレジスタの読出制御方式
JP2005044361A (ja) * 2003-07-25 2005-02-17 Internatl Business Mach Corp <Ibm> システム・オン・チップ設計のための構成要素としての自己完結型プロセッサ・サブシステム
JP2005100264A (ja) * 2003-09-26 2005-04-14 Toshiba Corp スケジューリング方法および情報処理システム

Family Cites Families (18)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US530890A (en) * 1894-12-11 Patrick fitzgibbons
DE1979808U (de) 1967-01-12 1968-02-29 Hovalwerk Ag Ospelt Heizkessel zum verfeuern fluessiger oder gasfoermiger brennstoffe.
US3990054A (en) * 1974-11-05 1976-11-02 Honeywell Inc. Microprogram organization techniques
US4641238A (en) * 1984-12-10 1987-02-03 Itt Corporation Multiprocessor system employing dynamically programmable processing elements controlled by a master processor
US5050075A (en) * 1988-10-04 1991-09-17 Bell Communications Research, Inc. High performance VLSI data filter
US5440749A (en) 1989-08-03 1995-08-08 Nanotronics Corporation High performance, low cost microprocessor architecture
US5197140A (en) * 1989-11-17 1993-03-23 Texas Instruments Incorporated Sliced addressing multi-processor and method of operation
WO1991011765A1 (en) * 1990-01-29 1991-08-08 Teraplex, Inc. Architecture for minimal instruction set computing system
US5590345A (en) 1990-11-13 1996-12-31 International Business Machines Corporation Advanced parallel array processor(APAP)
EP0715251B1 (en) * 1994-11-29 2000-07-26 International Business Machines Corporation One cycle processor for real time processing
US5941981A (en) * 1997-11-03 1999-08-24 Advanced Micro Devices, Inc. System for using a data history table to select among multiple data prefetch algorithms
US6606704B1 (en) * 1999-08-31 2003-08-12 Intel Corporation Parallel multithreaded processor with plural microengines executing multiple threads each microengine having loadable microcode
DE10121792C2 (de) * 2000-05-26 2003-09-25 Ibm Universelle Ladeadresse/Wertevorhersageschema
US7039776B2 (en) * 2003-04-17 2006-05-02 Broadcom Corporation Patch memory system for a ROM-based processor
FI20040261A0 (fi) * 2004-02-18 2004-02-18 Nokia Corp Aikatiedon tarjoaminen
US7676646B2 (en) * 2005-03-02 2010-03-09 Cisco Technology, Inc. Packet processor with wide register set architecture
US8984256B2 (en) 2006-02-03 2015-03-17 Russell Fish Thread optimized multiprocessor architecture
AU2007212342B2 (en) 2006-02-03 2011-05-12 Russell H. Fish Iii Thread optimized multiprocessor architecture

Patent Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPH05143328A (ja) * 1991-11-20 1993-06-11 Fujitsu Ltd 情報処理装置におけるレジスタの読出制御方式
JP2005044361A (ja) * 2003-07-25 2005-02-17 Internatl Business Mach Corp <Ibm> システム・オン・チップ設計のための構成要素としての自己完結型プロセッサ・サブシステム
JP2005100264A (ja) * 2003-09-26 2005-04-14 Toshiba Corp スケジューリング方法および情報処理システム

Cited By (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2010532905A (ja) * 2008-06-26 2010-10-14 ラッセル・エイチ・フィッシュ スレッドに最適化されたマルチプロセッサアーキテクチャ
JP2014532231A (ja) * 2011-09-30 2014-12-04 クアルコム,インコーポレイテッド Fifoロード命令
US9823928B2 (en) 2011-09-30 2017-11-21 Qualcomm Incorporated FIFO load instruction

Also Published As

Publication number Publication date
EP1979808B1 (en) 2011-12-07
WO2007092528A9 (en) 2009-05-14
EP2154607A3 (en) 2010-07-14
US8977836B2 (en) 2015-03-10
CN101395578B (zh) 2013-01-09
RU2008135666A (ru) 2010-03-10
EP1979808A2 (en) 2008-10-15
US20070192568A1 (en) 2007-08-16
HK1127414A1 (en) 2009-09-25
EP2154607A2 (en) 2010-02-17
ATE536585T1 (de) 2011-12-15
CN101395578A (zh) 2009-03-25
KR20080109743A (ko) 2008-12-17
AU2007212342B2 (en) 2011-05-12
CA2642022A1 (en) 2007-08-16
AU2007212342A1 (en) 2007-08-16
KR101120398B1 (ko) 2012-02-24
WO2007092528A3 (en) 2008-08-28
JP4987882B2 (ja) 2012-07-25
EP1979808A4 (en) 2009-04-08
WO2007092528A2 (en) 2007-08-16
RU2427895C2 (ru) 2011-08-27

Similar Documents

Publication Publication Date Title
JP4987882B2 (ja) スレッドに最適化されたマルチプロセッサアーキテクチャ
US9934196B2 (en) Thread optimized multiprocessor architecture
Colwell et al. A VLIW architecture for a trace scheduling compiler
US8972699B2 (en) Multicore interface with dynamic task management capability and task loading and offloading method thereof
US20100115233A1 (en) Dynamically-selectable vector register partitioning
KR20080104073A (ko) 처리 유닛의 동적 로드 및 언로드
KR20090045944A (ko) 종속 명령 스레드 스케줄링
US20180173422A1 (en) Streaming engine with fetch ahead hysteresis
CN114610394B (zh) 指令调度的方法、处理电路和电子设备
US6785743B1 (en) Template data transfer coprocessor
US20230367604A1 (en) Method of interleaved processing on a general-purpose computing core
CN114510271B (zh) 用于在单指令多线程计算系统中加载数据的方法和装置
Cogswell et al. Macs: A predictable architecture for real time systems
CN117501254A (zh) 使用近存储器计算为复杂操作提供原子性
JP4384828B2 (ja) コプロセッサ装置およびデータ転送を容易にするための方法
CN114281414B (zh) Aigpu架构中urf寄存器的数据写入方法
CN117597691A (zh) 用于深度神经网络体系结构中的推理处理的稀疏性感知数据储存器
Lin et al. A Multithreading Architecture with Multiple Independent Shared Pipelines
Lin et al. Strategies for Implementing a Multithreaded Shared Pipeline Processor
Georg Designing a Dual Core Processor

Legal Events

Date Code Title Description
A621 Written request for application examination

Free format text: JAPANESE INTERMEDIATE CODE: A621

Effective date: 20091204

A977 Report on retrieval

Free format text: JAPANESE INTERMEDIATE CODE: A971007

Effective date: 20101007

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20101207

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20110906

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20111201

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: 20120403

A01 Written decision to grant a patent or to grant a registration (utility model)

Free format text: JAPANESE INTERMEDIATE CODE: A01

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20120425

R150 Certificate of patent or registration of utility model

Free format text: JAPANESE INTERMEDIATE CODE: R150

FPAY Renewal fee payment (event date is renewal date of database)

Free format text: PAYMENT UNTIL: 20150511

Year of fee payment: 3

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

LAPS Cancellation because of no payment of annual fees