JP5283810B2 - プロセッサおよびコプロセッサを含むコンピュータ・システム - Google Patents

プロセッサおよびコプロセッサを含むコンピュータ・システム Download PDF

Info

Publication number
JP5283810B2
JP5283810B2 JP2001503043A JP2001503043A JP5283810B2 JP 5283810 B2 JP5283810 B2 JP 5283810B2 JP 2001503043 A JP2001503043 A JP 2001503043A JP 2001503043 A JP2001503043 A JP 2001503043A JP 5283810 B2 JP5283810 B2 JP 5283810B2
Authority
JP
Japan
Prior art keywords
burst
coprocessor
instruction
processor
execution
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.)
Expired - Fee Related
Application number
JP2001503043A
Other languages
English (en)
Other versions
JP2003502728A5 (ja
JP2003502728A (ja
Inventor
オルギエッティ・アンドレア
マッカーシー・ドミニク・ポール
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.)
Hewlett Packard Development Co LP
Original Assignee
Hewlett Packard Development Co LP
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 Hewlett Packard Development Co LP filed Critical Hewlett Packard Development Co LP
Publication of JP2003502728A publication Critical patent/JP2003502728A/ja
Publication of JP2003502728A5 publication Critical patent/JP2003502728A5/ja
Application granted granted Critical
Publication of JP5283810B2 publication Critical patent/JP5283810B2/ja
Anticipated expiration legal-status Critical
Expired - Fee Related legal-status Critical Current

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/3877Concurrent instruction execution, e.g. pipeline or look ahead using a slave processor, e.g. coprocessor
    • G06F9/3879Concurrent instruction execution, e.g. pipeline or look ahead using a slave processor, e.g. coprocessor for non-native instruction execution, e.g. executing a command; for Java instruction set
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F13/00Interconnection of, or transfer of information or other signals between, memories, input/output devices or central processing units
    • G06F13/14Handling requests for interconnection or transfer
    • G06F13/20Handling requests for interconnection or transfer for access to input/output bus
    • G06F13/28Handling requests for interconnection or transfer for access to input/output bus using burst mode transfer, e.g. direct memory access DMA, cycle steal

Landscapes

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

Description

本発明は、メイン・プロセッサおよびコプロセッサを含むコンピュータ・アーキテクチャに関し、詳細にはこのようなアーキテクチャにおけるコプロセッサによるメモリ・リソースの使用に関する。
マイクロプロセッサをベースとするコンピュータ・システムは、典型的には、CPUのような汎用マイクロプロセッサに基づいている。このようなマイクロプロセッサは、幅広い範囲の計算タスクを処理するように十分に適合されるが、これらは必然的にすべてのタスクに合わせて最適化されるのではない。タスクが計算に集中する場合(媒体処理など)、CPUはしばしば実行に困難を生じる。
この問題への標準の手法の1つは、個々の計算的に困難なタスクを処理するように特に適合されたコプロセッサを使用することである。このようなコプロセッサは、ASIC(特定用途向けIC)を使用して構築することができる。これらは特定の計算タスクのために構築され、したがってこのようなタスクに合わせて最適化することができる。しかし、これらは使用において柔軟性がなく(これらが特定のタスクのみのために設計されるので)、一般に製造に時間がかかる。解決策としては、FPGA(フィールド・プログラム可能ゲート・アレイ)など、所与の計算タスクに特に適合された構成でプログラムすることができる、柔軟性のあるハードウェアの構築がある。このような構造が構成可能であるだけでなく、再構成可能である場合は、さらなる柔軟性が達成される。このような再構成可能な構造の一例がCHESSアレイであり、これは、国際特許出願第GB98/00262号、国際特許出願第GB98/00248号、1998年12月11日出願の米国特許出願第09/209,542号、およびその欧州の相当する欧州特許出願第98309600.9号において論じられている。
発明が解決しようとする課題
このようなコプロセッサの使用は、このような計算の効率を著しく改善することができるが、従来のアーキテクチャの構成がコプロセッサの有効性を抑制する可能性がある。計算をなおより有効にコプロセッサに移すことができる装置を達成することが、特にこれらの計算が大量のデータを処理することを含む場合、望ましい。
課題を解決するための手段
したがって、第1のプロセッサ、第1のプロセッサへのコプロセッサとして使用するための第2のプロセッサ、メモリ、バースト命令に従ってデータ・バーストにおいてメモリへ書き込まれるかあるいはそこから読み取られるデータをバッファに入れるための少なくとも1つのデータ・バッファ、バースト命令を実行するためのバースト・コントローラ、バースト・コントローラによる実行のためにバースト命令を順番に提供するためのバースト命令エレメントを含み、それによってバースト命令が第1のプロセッサからバースト命令エレメントへ提供され、バースト・コントローラによって実行されたバースト命令に従って少なくとも1つのデータ・バッファを通じて、データが第2のプロセッサによってメモリから読み取られ、そこへ書き込まれるコンピュータ・システムが提供される。
この装置は特に、コプロセッサが大きいブロックのデータで作業する場合、特にこのようなブロックのメモリ・アドレスが定期的に変わる場合に有利である。この装置により、このようなブロックを、メイン・プロセッサ(それらを使用するにあまり適していないシステム・コンポーネント・エレメントである)の関与を最小にして、有効にメイン・メモリに出し入れすることができる。
コプロセッサがデータ・バッファと類似の方法で制御される場合、特に効率的な構造を達成することができる。これは、第2のプロセッサの実行を制御するためのコプロセッサ命令を順番に提供するためのコプロセッサ命令エレメントにより行うことができる(コプロセッサ命令は初めに第1のプロセッサによって提供される)。コプロセッサ・コントローラがコプロセッサ命令をコプロセッサ命令エレメントから受信し、それに従って第2のプロセッサの実行を制御するのがよい。このコプロセッサ・コントローラは、コプロセッサと少なくとも1つのデータ・バッファの間の通信を制御することができ、たとえば、バスがコプロセッサ・コントローラとデータバッファの間に存在する場合、コプロセッサ・コントローラが、第2のプロセッサからバスに別々のデータ・ストリームの出入りのアクセスを制御することができる。
コプロセッサおよびバースト命令が実行するデータの可用性により、コプロセッサとバースト命令の実行を同期化するための同期化機構がある場合、特定の利点を得ることができる。これは、コプロセッサがコプロセッサ命令に基づいて実行する場合、特に十分に実施される。有効な手法は、データ・バッファにまだロードされていないデータに対し第2のプロセッサの実行を必要とするコプロセッサ命令の実行をブロックし、データが第2のプロセッサによってデータ・バッファへ提供されていない場合、データ・バッファからメモリへのデータの格納のためのバースト命令の実行をブロックするように、同期化機構を適合させることである。同期化機構を実行するための特に有効な方法は、カウンタを使用することであり、このカウンタは、適切なバーストおよびコプロセッサ命令を通じて増分あるいは減分することができ、特定の命令をさらに減分できない場合はブロックする。
さらなる態様では、本発明はコンピュータ・システムを動作する方法を提供し、これは、第1のプロセッサによる実行のためのコードを提供すること、第1のプロセッサへのコプロセッサとして動作する第2のプロセッサによって実行されるタスクをコードから抽出すること、コードおよびタスクから、少なくとも1つのデータ・バッファにより、第2のプロセッサによるアクセスのためにデータ・バーストにおいてメイン・メモリからデータを読み取り、そこへ書き込むことができるようにするためのバースト命令を決定すること、および少なくとも1つのデータ・バッファとメイン・メモリの間でデータの転送を制御するバースト・コントローラによるバースト命令の実行と共に、コプロセッサ上のタスクの実行を含む。
コードからのタスクの抽出に続いて、コプロセッサ・コントローラによる実行のためのコプロセッサ命令が、第2のプロセッサによるタスクの実行を制御するために決定されるのがよい。
タスクの実行の場合、コプロセッサ命令の実行とバースト命令の実行の間の同期化が同期化機構によって達成されるのがよい。この同期化機構は、第1の命令の正しい実行のために完了が必要である第2の命令が完了するまで、第1の命令をブロックすることを、有効に含むことができる。この機構は、適切なバーストまたはコプロセッサ命令を通じて増分あるいは減分することができるカウンタを使用することができる。
本発明の特定の実施形態を添付の図面を参照して、以下に説明する。
図1は、本発明の第1の実施形態によるシステムの基本エレメントを示す。本質的に、このシステムはプロセッサ1およびコプロセッサ2を含み、これらは、最大の計算効率のために、計算をプロセッサ1とコプロセッサ2の間で区分することができるよう構成されている。プロセッサ1は本質的にいかなる汎用プロセッサ(たとえば、i960)でもよく、コプロセッサ2は本質的に、著しくより高い有効性により計算の一部を処理することができるいかなるコプロセッサでもよい。ここで記載された特定のシステムでは、本質的に計算全体がプロセッサ1によるよりもコプロセッサ2によって処理されるが、本発明はこの特定の構成に限定されるものではない。
特に記載されたシステムでは、コプロセッサ2が再構成可能FPGAの形式であり、これについては以下でさらに述べられるが、コプロセッサ2の他の形式、たとえば、ASICS、DSPなどを代りに使用することができる(対応する修正を計算モデルに行うことが必要)。プロセッサ1およびコプロセッサ2は共にDRAMメイン・メモリ3へのアクセスを有するが、プロセッサ1はより高速なアクセス・メモリ4のキャッシュ、典型的にはSRAMへのアクセスも有する。DRAM3への効率的なアクセスが、情報の「バースト」の効率的なローディングおよび格納のためにDRAMと通信するように適合された「バースト・バッファ」メモリ5によって提供され、バースト・バッファについては以下でさらに記載される。バースト・バッファ5への命令が、バースト命令待ち行列6を通じて提供され、バースト・バッファ5がバースト・バッファ・コントローラ7の制御下で動作する。バースト・バッファのアーキテクチャは、以下に述べられる理由のため、コプロセッサ2に関連付けられたアーキテクチャにおいて、ミラーリングされる。コプロセッサ2への命令がコプロセッサ命令待ち行列8において提供され、コプロセッサがコプロセッサ・コントローラ9の制御下で動作する。バースト・バッファおよびコプロセッサの動作、およびそれらの関連付けられた命令待ち行列の同期化が、プロセッサ1自体による一般の方法ではなく、特定の機構によって達成される。この実施形態では、この機構がロード/実行セマフォ(semaphore)10および実行/格納セマフォ11を含み、これらは以下に記載される方法で動作する(他のこのような同期化機構が可能であり、これらについても以下に述べられる)。
システム・アーキテクチャにおけるエレメントの説明
このシステムの個々のエレメントが、以下でより詳細に論じられる。プロセッサ1は一般に計算を制御するが、計算自体におけるステップのいくつか(または、記載された実施形態では、すべて)がコプロセッサ2において実行されるような方法で制御する。プロセッサ1が、バースト命令待ち行列6を通じて特定のタスクのための命令、すなわち、バースト・バッファ・コントローラ7の構成、およびバースト・バッファ・メモリ5とメイン・メモリ3の間のデータの転送のための命令を提供する。さらに、コプロセッサ命令待ち行列8を通じて、プロセッサ1はさらなるタスクのための命令、すなわち、コプロセッサ・コントローラ9の構成、およびコプロセッサ2上の計算の開始のための命令を提供する。コプロセッサ2上で実行されるこの計算は、バースト・バッファ・メモリ5を通じてデータにアクセスする。
コプロセッサ命令待ち行列8の使用が有効にプロセッサ1をプロセッサ2の動作から減結合し、バースト命令待ち行列6の使用が有効にプロセッサ1をバースト・バッファ5から減結合する。この構成の特定の詳細は、以下でより詳細に論じられる。この減結合については、本発明のこの実施形態のための計算モデルに関連して、以下でさらに論じられる。
コプロセッサ2が、実際の計算のいくつかまたはすべてを実行する。特に適したコプロセッサはCHESS FPGA構造であり、これは、国際特許出願第GB98/00262号、国際特許出願第GB98/00248号、1998年12月11日出願の米国特許出願第09/209,542号、およびその欧州の相当する欧州特許出願第98309600.9号に記載されており、それらの出願の内容が参照により本明細書に組み込まれる。このコプロセッサは再構成可能であり、4ビットALUのチェッカーボード・アレイおよびスイッチング構造を含み、それにより、コプロセッサが構成可能であり、1つの4ビットALUからの出力を使用して別のALUへ命令することができる。CHESSアーキテクチャは特に、パイプライン計算に有効であり、ここでは入力および出力データ・ストリームと対話するように有効に適合される。コプロセッサ・コントローラ9(この動作が以下でさらに論じられる)が、高レベルの制御命令(計算の詳細に関する命令ではなく、コプロセッサ2の制御全体のための命令、たとえば「nサイクル実行する」)を、コプロセッサ命令待ち行列8から受信する。CHESSコプロセッサ2はコプロセッサ・コントローラ9の制御下で動作し、バッファ・バースト5との対話を通じてデータを受信し、格納する。したがって、CHESSコプロセッサ2は入力ストリーム上で動作して、出力ストリームを生成する。これは、CHESSコプロセッサの動作が非常に予測可能なので、効率的なプロセスにすることができる。このモデルに従った計算の詳細な動作が、後で論じられる。
プロセッサ1が、従来の方法によるSRAMにおける高速アクセス・メモリ・キャッシュ4へのアクセスを有するが、メイン・メモリはDRAM3として提供される。DRAMへの有効なアクセスが、バースト・バッファ5によって提供される。バースト・バッファは、欧州特許出願第97309514.4号、および1998年1月6日出願の対応する米国特許出願第09/3,526号において記載されており、それらの出願が参照により本明細書に組み込まれる。バースト・バッファ・アーキテクチャについては本明細書で簡単に記載されるが、このアーキテクチャの十分な詳細については、先の出願を参照していただきたい。
この実施形態で使用されたバースト・バッファ・アーキテクチャのバージョンのエレメント(前記の出願において論じられるように、変形も可能)が、図2および図3に示される。バースト・バッファ構成エレメントがプロセッサ1と通信する接続12が提供される。メモリ・バス16が、メイン・メモリ3(図2においては図示せず)への接続を提供する。このメモリ・バスはキャッシュ4と共有することができ、この場合、メモリ・データパス・アービタ58が、キャッシュ4との通信も可能にする。
この装置におけるバースト・バッファの全体の役割は、計算をコプロセッサ2上で実行できるようにすることであり、このコプロセッサ2とメイン・メモリ3の間のデータ転送を、両方が各システム構成エレメントの効率を最大にすると同時に全体のシステム効率を最大にする方法で行うことを含む。これは、以下のいくつかの技術の組み合わせによって達成される。
1)以下に記載されるようなバースト・バッファ5を使用した、DRAMへのバースト・アクセス、
2)「ダブル・バッファリング」とよばれる技術を使用した、コプロセッサ2上の計算の同時実行、およびメイン・メモリ3とバースト・バッファ・メモリ5の間のデータ転送、および
3)プロセッサ1の実行をコプロセッサ2およびバースト・バッファ・メモリ5の実行から、命令待ち行列の使用を通じて切り離すことである。
「ダブル・バッファリング」は、たとえば、コンピュータ・グラフィックスにおいて知られている技術である。本明細書で使用される形式では、バースト・バッファ・メモリ5の一部からのデータを消費すること、すなわち読み取ること、他のデータを同じメモリの異なる領域へ生成すること、すなわち書き込むことを含み、先に書き込まれた領域を読み取り、その逆もできるスイッチング機構を有する。
バースト・バッファの利点は、従来のDRAM構造の特徴の有効な利用である。DRAMは、正方行列におけるメモリ位置のアレイを含む。アレイにおけるエレメントにアクセスするには、行が最初に選択され(あるいは「開かれ」)なければならず、その後に適切な列の選択が続く。しかし、行が選択された後、その行における列への連続アクセスは、単に列アドレスを提供することによって実行することができる。行を開くことおよびその行にローカルな一連のアクセスを実行することの概念が、「バースト」と呼ばれる。媒体集中計算(典型的には、いかなるデータ依存アドレス指定もなしに長いアレイにアクセスする、規則正しいプログラム・ループを使用するアルゴリズムを含む)におけるように、データが規則正しい方法で構成されるとき、バーストの有効な使用が劇的に計算速度を向上させることができる。バースト・バッファは、バーストの効率的な使用を通じてDRAMからのデータにアクセスするように適合された、新しいメモリ構造である。
システムがいくつかのバースト・バッファを含むことができる。典型的には、各バースト・バッファがそれぞれのデータ・ストリームへ割り振られる。アルゴリズムが、異なる数のデータ・ストリームを有するので、固定量のSRAM26がバースト・バッファ・メモリ領域としてバースト・バッファに使用可能であり、この量が、必要とされるバッファの数に従って分割される。たとえば、固定SRAMの量が2Kバイトである場合、かつ、アルゴリズムが4つのデータ・ストリームを有する場合、メモリ領域を4つの512バイトのバースト・バッファに区分することができる。
このタイプのアーキテクチャでは、バーストが、以下によって定義されたアドレスの組を含む。
【数1】
バースト={B+S×i|B,S,i∈N∧0≦i<L}
ただし、Bは転送の基底アドレスであり、Sはエレメントの間のストライド(stride)であり、Lは長さであり、Nは自然数の組である。この式において明示的に定義されないが、バースト順序が、0からL−1まで増分するiによって定義される。したがって、バーストは、次の3個のエレメントからなる集合によって定義することができる。
(base_address,length,stride)
ソフトウェアでは、バーストをエレメントサイズによって定義することもできる。これは、バーストをバイト、ハーフワード、またはワードのサイズにすることができることを意味する。ストライドの単位は、このことを考慮しなければならない。「サイズド・バースト」は、次の形式の4個のエレメントからなる集合によって定義される。
(base_address,length,stride,size)
「チャネル・バースト」は、サイズがメモリへのチャネルの幅である、サイズド・バーストである。コンパイラが、ソフトウェア・サイズド・バーストからチャネル・バーストへのマッピングを担う。チャネル・バーストは、次の4個のエレメントからなる集合によって定義することができる。
(base_address,length,stride,width)
チャネル幅が32ビット(または4バイト)である場合、チャネル・バーストが常に以下の形式である。
(base_address,length,stride,4)
あるいは、3個のエレメントからなる集合(base_address,1ength,stride)に短縮される。
このメモリの制御およびバースト・バッファの割り振り(および解放)が、ソフトウェア処理によって高レベルで処理される。この実施形態では、「ダブル・バッファリング」が使用されるが、他の戦略も確かに可能であり、この判断は記憶の効率と簡潔性の間のトレードオフを含む。バースト・バッファ・メモリ領域26がメイン・メモリ3からデータをロードし、そこヘデータを格納し、これはメモリ・データパス・アービタ58を通じて行い、これがDMAコントローラ56の制御下で動作し、バースト命令待ち行列6を通じて受信される命令に応答する。データが、バースト・バッファ・メモリ領域26とプロセッサ1またはコプロセッサ2の間で、接続手段12を通じて交換される。図3に示すように、バースト・バッファ・システム5のための制御インタフェースは、1組のテーブルに基づいている。すなわち、バースト・バッファ・メモリへバーストし、そこからバーストするためのメイン・メモリの領域を記述するメモリ・アクセス・テーブル(MAT)65、およびバースト・バッファ・メモリの領域を記述するバッファ・アクセス・テーブル(BAT)66である。この実施形態では、デュアルポートSRAMの同次領域が、バースト・バッファ・メモリ領域26のために使用される。
MATおよびBATを使用しなかったバースト・バッファ構成(これも欧州特許出願第97309514.4号に記載されているようなもの)を、本発明の代替実施形態において使用することができ、MATおよびBATにおいて暗示的に符号化されたパラメータ(ソース・アドレス、宛先アドレス、長さ、ストライド)が、次いで、発行されたバースト転送毎に明示的に指定されなければならない。直接のアドレス、長さおよびストライドではなく、MATおよびBATを使用するための主な理由は、これが全体のコード・サイズを著しく減らすことである。本発明に関連して、これは典型的には重要というよりも有用である。
プロセッサ1から発信するバースト命令が、バースト命令待ち行列6により、バースト・バッファ5へ提供される。バースト命令待ち行列6からの命令が、バッファ制御エレメント54によって処理されて、MAT65およびBAT66におけるスロットが参照される。バッファ・コントローラは、8個のバースト制御レジスタ52からの制御入力も受信する。これらの2つのテーブルに含まれた情報が、実行時間で共に結び付けられて、完全なメイン・メモリ対バースト・バッファのトランザクションが記述される。出力がバッファ・コントローラ54から直接メモリ・アクセス(DMA)コントローラ56へ、よってメモリ・データパス・アービタ58へ提供されて、メイン・メモリ3とバースト・バッファ・メモリ領域26の間のトランザクションが実施される。
重要なバースト命令は、データをメイン・メモリ3からバースト・バッファ・メモリ領域26ヘロードするため、かつ、データをバースト・バッファ・メモリ領域26からメイン・メモリ3へ格納するために使用されるものである。これらの命令は「ロードバースト」および「ストアバースト」である。ロードバースト命令が、データ・ワードのバーストを、メモリ3における決定された位置からバースト・バッファのそれへ転送させる。対応するストアバースト命令もあり、これは、データ・ワードのバーストを、バースト・バッファの1つからメモリ3へ、メモリ3における特定のアドレスで開始して、転送させる。図1のアーキテクチャでは、追加の同期化命令も必要とされ、これらは以下でさらに論じられる。
命令のロードバーストおよびストアバーストは、通常のロードおよび格納命令とは異なり、これらは転送が起こっていなくとも単一のサイクルで完了する。本質において、ロードバーストおよびストアバースト命令が、メモリ・インタフェース16へバーストを実行するように伝えるが、これらはバーストが完了するまで待機しない。
基本動作は、2つのテーブル・エントリへ、メモリ・アクセスおよびバッファ・アクセス・テーブルのそれぞれにおける1つを索引付けする命令を発行することである。メモリ・アクセス・テーブルへの索引が、転送のメモリ側で使用された基底アドレス、エクステントおよびストライドを検索する。バッファ・アクセス・テーブルへの索引が、バースト・バッファ・メモリ領域内の基底アドレスを検索する。図示の実施形態では、マスキングおよびオフセットが索引値へ、コンテキスト・テーブル(これは欧州特許出願第97309514.4号においてさらに論じられている)によって提供されるが、代りに実アドレスを使用することが可能である。直接メモリ・アクセス(DMA)コントローラ56がパラメータを2つのテーブルから渡され、これらを使用して、要求された転送を指定する。
表1は、可能な命令セットを示す。
Figure 0005283810
ストアバースト命令(BB_ストアバースト)が、MATおよびBATにおけるパラメータを索引付け(index)し、これが要求された転送の特性を定義する。
block_incrementビットが設定される場合、MATにおいて索引付けされたエントリのmemaddrフィールドが、転送が完了するときに自動的に更新される(以下で論じられるように)。
ロードバースト命令(BB_ロードバースト)も、MATおよびBATにおけるパラメータを索引付けし、再度これが要求された転送の特性を定義する。前のように、block_incrementビットが設定される場合、MATにおいて索引付けされたエントリのmemaddrフィールドが、転送が完了するときに自動的に更新される。
必要とされた同期化命令が、Load−Execute IncrementおよびeXecute−Store Decrement(BB_LX_INCREMENTおよびBB_XS_DECREMENT)として提供される。BB_LX_INCREMENTの目的は、特定のデータのバーストにおけるコプロセッサ2の実行が、必要とされたデータがロードバースト命令の後に続いてバースト・バッファ・メモリ5に到着した後に起こるようにすることである。BB_XS_DECREMENTの目的は、ストアバースト命令の実行が、結果がメイン・メモリ3に格納され戻される(コプロセッサ2上の)計算の完了の後に続くようにすることである。
この実施形態では、これらの命令が動作する特定の機構は、2つのカウンタの組であり、それぞれ次のものを追跡する。すなわち、a)ストアバーストを受信する用意ができているバースト・バッファ・メモリ5における領域の数、およびb)完了されたロードバースト命令の数、である。
コプロセッサ2によるデータの要求が、LXカウンタを減分することによって実行されるが、データの可用性は、XSカウンタを増分することによって信号で通知される。これらのカウンタは、2つの特性を満たさなければならない。すなわち、これらがただ1つのシステム構成エレメントへいかなる所与のときにもアクセス可能でなければならないこと、およびこれらが使用不可能なデータを要求する処理を中断する能力を有していなければならないことである。
要求されるものにもっとも近く合致する既存の概念はセマフォであり、Dijkstra(「[Dijkstra 1968] E.Dijkstra,「Co−operating Sequential Processes」,F.Genuys(編集者),Programming Languages,New York:Academic Press,(1968),43−112ページ)に記載されている。したがって、用語「セマフォ」は、本発明の実施形態において使用されたカウンタを記載するために使用されるが、これらのカウンタがDijkstraによって記載されたセマフォには等しくないが広く類似していることに留意されたい。
セマフォの基本原理は以下の通りである。セマフォは整数値を含む。Wait()命令をセマフォ上で実行することはこの値をディクリメント(decrement、減分)するが、Signal()命令を実行することはこれをインクリメント(increment、増分)する。Wait()を、値がすでに0であるセマフォ上で実行すると、セマフォの値が増分されるまで、Wait()を実行しようと試みているソフトウェア処理またはハードウェア構成エレメントが停止する。
この実施形態では、BB_XS_DECREMENT命令がXSセマフォ(図1の11)上でWait()のように動作するが、BB_LX_INCREMENT命令はLXセマフォ(図1の10)上でSignal()のように動作する。以下で記載されるように、コプロセッサ・コントローラ9が、反対に、Wait()をLXセマフォ10上で、Signal()をXSセマフォ11上で実行する。これらの命令の意味は、Dijkstraの論文に記載されたものと同じにすることができるが、Signal()およびWait()動作の構成全体は元の論文に記載されたものとは著しく異なる。システムの正確さに必要な、あるイベントの相対的時間順序が守られるようにするため、これらの命令が適切な順序で(以下でさらに論じられるように)発行される。
メモリ・アクセス・テーブル(MAT)65が、以下で図3を参照して記載される。これは、バースト・トランザクションに含まれたメイン・メモリ位置に関連する情報を保持するメモリ記述子テーブルである。MATにおける各エントリは、メイン・メモリへのトランザクションを記述する、索引付けされたスロットである。この実施形態では、MAT65が16個のエントリを含むが、異なる実施がもちろん可能である。各エントリが以下の3個のフィールドを含む。
1.メモリ・アドレス(memaddr)。メイン・メモリにおける関連領域の開始アドレス。この位置が物理メモリ空間にあることが理想的であり、これは、仮想アドレス変換が2つの物理ページにまたがるバースト要求の結果となる可能性があり、これがメモリ・コントローラに難点を引き起こすからである。
2.エクステント(extent)。転送のエクステント。これは転送の長さであり、ストライドで乗算され、転送された最後のアドレス+1を与える。転送の長さは、エクステントをストライドにより除算することによって計算され、これは、転送が完了した後で、関連するBAT66(以下参照)のbufsizeフィールドへ自動的にコピーされる。
3.ストライド(stride)。転送における連続したエレメントの間の間隔。
memaddr:チャネル・バーストの第1のエレメントの32ビット、符号なし、語調整されたアドレスである。
extent:extentレジスタにおけるパラメータは、バースト転送の範囲を包含するアドレス・オフセットである。転送がSのストライドによって分離されたL個のエレメントを必要とする場合、エクステントはS*Lである。
stride:パラメータstrideは、アクセスの間でスキップされたバイト数である。転送ストライド間隔の値は、1から1024までの範囲に制限される。1024より大きい値は自動的に1024に切り捨てられる。このレジスタの読取りが、バーストのために使用された値を戻す(すなわち、切り捨てが必要であった場合、切り捨てられた値が戻される)。ストライドはメモリ・バス幅の倍数でなければならず、この場合は4バイトである。自動切り捨て(丸めなし)が、この位置合わせを実施するために実行される。
MATスロットによって含まれた値の一例は、以下のようになる可能性がある。
{0x1feelbad,128,16}
これは、32語(32個の4バイト語)バーストの結果となり、各語が4語(4個の4バイト語)によって分離される。
バースト命令の自動増分標識ビットは、MAT65にも関連している。このビットがバースト命令において設定される場合、もしバーストが32を越えて継続しているならば、開始アドレス・エントリがポイント・トゥ・ポイントで、次のメモリ位置へ増分される。これは、長いシーケンスのメモリ・アクセスにおいて次のバーストのための開始アドレスを計算することにおける、プロセッサ・オーバーヘッドを節減する。
バッファ・アクセス・テーブル(BAT)66が、以下で図3を参照して記載される。これもまたメモリ記述子テーブルであり、この場合はバースト・バッファ・メモリ領域26に関する情報を保持する。BAT66における各エントリが、バースト・バッファ・メモリ領域26へのトランザクションを記述する。MAT65の場合のように、BAT66が16個のエントリを含むが、もちろんMAT65の場合のように変わる可能性がある。この場合は各エントリが以下の2つのフィールドを含む。
1.バッファ・アドレス(bufaddr)。バッファ領域におけるバッファの開始。
2.バッファ・サイズ(bufsize)。最後の転送で使用されたバッファ領域のサイズ。
バッファ・アドレス・パラメータbufaddrは、バッファ領域におけるチャネル・バーストの第1のエレメントのためのオフセット・アドレスである。バースト・バッファ領域は、ハードウェアによってプロセッサのメモリ空間の領域へ物理的にマッピングされる。これは、バースト・バッファ領域にアクセスするときにプロセッサが絶対アドレスを使用しなければならないことを意味する。しかし、DMA転送は単にオフセットを使用し、そのため、ハードウェアが、要求されたいかなるアドレス解決をも管理することが必要である。不当に位置合わせされた値は、切り捨てによって自動的に位置合わせすることができる。このレジスタの読取りが、バーストのために使用された値を戻す(すなわち、切り捨てが必要であった場合、切り捨てられた値が戻される)。デフォルト値は0である。
パラメータbufsizeは、もっとも最近のバーストによって占有されたバッファ領域内の領域のサイズである。このレジスタは、そのエントリを目標としたバースト転送の完了時に、自動的に設定される。格納された値がバーストの長さであり、これは、0の値が使用されていないバッファ・エントリを指示するからであることに留意されたい。このレジスタに書き込むことができるが、これは、バッファが保存されリストアされるときに、文脈切り換え後にのみ有用である。デフォルト値は再度0である。
MATおよびBATエントリをプログラムすることが、BB_SET_MATおよびBB_SET_BAT命令の使用を通じて実行される。エントリ・パラメータが、現在の命令が参照するMAT(またはBAT)におけるエントリを決定する。
バースト・バッファ・アーキテクチャおよびその制御のための機構のさらなる詳細が、欧州特許出願第97309514.4号および対応する米国特許出願第09/3,526号において提供される。上記で提供された詳細は、主として、バースト・バッファ・システムのアーキテクチャエレメントを示し、バースト・バッファ・システムが実施することができる機能効果を、それが提供する入力および出力と共に示すように意図される。バースト・バッファ・システムが、特定のタイプの計算モデルに合わせて最適に適合され、これは、本明細書で、本発明の記載された実施形態のための計算モデルに展開される。この計算モデルについてさらに説明する。
バースト命令待ち行列6が上で記載された。この実施形態の著しい態様は、命令が類似の方法でコプロセッサへ、コプロセッサ命令待ち行列8を通じて提供されることである。コプロセッサ命令待ち行列8は、コプロセッサ・コントローラ9との接続において動作し、これは、コプロセッサがプロセッサ1から命令を受信する方法、およびそれがデータをバースト・バッファ・システム5と交換する方法を決定する。
コプロセッサ命令待ち行列8の使用は、プロセッサ1自体が計算自体から切り離される重要な効果を有する。したがって、計算中に、プロセッサ・リソースが他のタスクの実行のために使用可能である。プロセッサ1の動作がストールされることにつながる可能性のある唯一の状況は、命令待ち行列6、8の一方が命令で満たされることである。この場合は、プロセッサ1が、いずれかの待ち行列のための命令を、命令が消費されるよりも速い速度で生成するときに起こる可能性がある。この問題の解決策は入手可能である。事前定義の時間量の後、あるいは、いずれかの待ち行列において占有されたスロットの数が事前定義の量まで減分された事実によってトリガされた割り込みの受信の上で、文脈切り換えを実行してこれら2つの待ち行列にサービスするために戻るように、プロセッサ1へ要求することによって、有効性を改善することができる。反対に、プロセッサ1が、命令が消費される速度に遅れないでいることができないために、2つの待ち行列の一方が空になる場合、これらの命令の消費者(コプロセッサ・コントローラ9またはバースト・バッファ・コントローラ7)は、新しい命令がプロセッサ1によって生成されるまで、ストール(機能停止)する。
修正を、プロセッサ1からのそれ以上の関与がまったく必要とされないようにするアーキテクチャにも提供することができ、これらについては本明細書の最後の部分において論じられる。
コプロセッサ・コントローラ9の基本機能は、データをバースト・バッファ・メモリ5からコプロセッサ2へ(およびコプロセッサ2からバースト・バッファ・メモリ5へ)取り出すこと、コプロセッサの動作を制御すること、およびコプロセッサ2の実行をバースト・バッファ・メモリ5からの適切なロードまたはそれへの格納と同期化することである。これらの機能を達成するには、コプロセッサ・コントローラを、本質において、ある規則に従ってアドレスを生成することができる、相対的に簡素な状態機械にすることができる。
図4は、コプロセッサ・コントローラ9を、アーキテクチャの他の構成エレメントとの関係において示し、その構成エレメント、およびアーキテクチャ全体における他のエレメントとの接続も示す。その厳密な機能は、コプロセッサ2およびその初期化要件(ある場合は)によって必要とされた入力および出力のタイプに依存し、そのため、以下に記載されたものから詳細において変わる可能性がある。CHESSコプロセッサの場合、これらの入力および出力が、バースト・バッファ・メモリ5と交換された入力および出力データ・ストリームである。
コプロセッサ・コントローラ9は、次の2つの主なタスクを実行する。すなわち、1)コプロセッサ2とバースト・バッファ・メモリ5との間の通信の制御、および2)制御有限状態機械42の使用を通じたシステム状態の維持である。
コプロセッサ2がストリームにおけるデータにアクセスし、そのそれぞれがいくつかの制御レジスタ41の1つとの関連付けを与えられる。これらのレジスタ41のためのアドレスが、制御有限状態機械42によってアドレス指定ロジック43と共に、有限状態機械42によって生成されたシーケンスに従って、周期的な様式において生成される。
有限状態機械42内のクロックの各チックで、有限状態機械は、レジスタ41の(多くとも)1つが、そのために生成された新しいアドレス、およびレジスタ41がバースト・バッファ・メモリ5をアドレス指定できるようにするために使用されたアドレスを有するための許可を与える。同時に、適切な制御信号が有限状態機械42によって生成され、マルチプレクサ44へ送信されて、適切なアドレスが正しい読み/書き信号と共にバースト・バッファ・メモリ5へ送信されるようにする。特定の読み/書き信号が各レジスタ41に、全体の計算中で変化しない値と共に関連付けられる。
レジスタ41のために得られたアドレスがメモリをアドレス指定するために使用された後、一定量がその値へ追加され、これは一般にコプロセッサ2とバースト・バッファ・メモリ5との間の接続の幅と同じである。つまり、この接続の幅が4バイトである場合、カウンタ41に行われた増分が4となる。これは、本質的に、バースト・バッファのプログラミングにおける「ストライド」に比較可能である。
上述のコプロセッサ・コントローラの機構は、単一のバスに沿った異なるデータ・ストリームの多重化を可能にする。各データ・ストリームは、それ自体のポートを通じて単一の共有バスヘアクセスするとみなすことができる。
このシステムが、通信の完全性が保証されるように動作するためには、バスの他方の端でコプロセッサ2が、同期した方法でこのバスから読み取り、このバスへ書き込みする用意ができていることが必要である。アプリケーション・ソフトウェア(および具体的には、コプロセッサ2を構成するアプリケーション・ソフトウェアの一部まで)の責任は、つぎのことを保証することである。すなわち、1)2つのストリームが同時にバスにアクセスしようと試みないこと、および2)コプロセッサ2の実行がバースト・バッファ・メモリ5とのデータ転送と同期であることである。
この後者の要件は、コプロセッサ2が、2つのデバイスの間の接続上で、バースト・バッファ・メモリ5によって配置されたデータを読み取るため、かつその逆のための用意ができることを保証する。
通常は、複数の物理線をChessアレイ2とバースト・バッファ・メモリ5の間に設けることができるが、一般の多重化の必要性はなお残る。コプロセッサ2とバースト・バッファ・メモリ5の間の物理接続の数が、コプロセッサ2のための論理I/Oストリームの合計数以上でない限り、2つ以上の論理ストリームが同じワイヤ上で多重化されなければならないことが常に真となる。(バースト・バッファ・メモリ5に有利に使用されるように)高速SRAMの設計に関係した技術的な理由が、コプロセッサ2との複数の接続の使用を防止する。
コプロセッサ・コントローラ9は、コプロセッサ2を含むCHESSアレイの実行を制御するようにも動作し、それが指定数のクロック・サイクルで実行するようにする。これは、コプロセッサ2におけるパイプラインの内部状態に影響を与えない方法において、CHESSアレイを、その内部クロックを「ゲーティング」すること(つまり、停止すること)によって「フリーズ」する前に、指定数のサイクルだけチッキングする、制御有限状態機械42におけるカウンタによって達成される。このチックの数が、以下に記載されたCC_START_EXEC命令を使用して指定される。
コプロセッサ・コントローラ9が、プロセッサ1によって、コプロセッサ命令待ち行列8の使用を通じてプログラムされる。このコプロセッサ・コントローラ9のための可能な命令セットが、以下の表2において示される。
Figure 0005283810
前記の命令では、命令フォーマットの異なる選択を行うことができる。1つの可能なフォーマットは32ビットの数字であり、16ビットが演算コードを符号化し、16ビットが上述の任意選択のパラメータ値を符号化する。
個々の命令の意味は、以下の通りである。
・CC_CURRENT_PORTは、ポートの1つを、すべての後続のCC_PORT_xxx命令の受信者として、次のCC_CURRENT_PORTまで、選択する。
・CC_PORT_PERIOD()は、現在のポートの活動化の周期を、整数パラメータの値に設定する。
・CC_PORT_PHASE_START/CC_PORT_PHASE_END(start end)は、現在のポートの活動化の段階の開始/終了を、整数のパラメータ(start end)の値に設定する。
・CC_PORT_TIME_START/CC_PORT_TIME_END(tstartend)は、現在のポートの活動の最初/最後のサイクルを設定する。
・CC_PORT_ADDRESS(addrstart)は、現在のポートの現在のアドレスを、整数のパラメータaddrstartの値に設定する。
・CC_PORT_INCREMENT(addrincr)は、現在のポートのアドレス増分を、整数のパラメータaddrincrの値に設定する。
・CC_PORT_IS_WRITE(rw)は、現在のポートのためのデータ転送方向を、ブール・パラメータrwの値に設定する。
・CC_START_EXEC ncyclesは、コプロセッサ・コントローラ2の実行を、関連付けられた整数パラメータncyclesによって指定されたクロック・サイクルの数だけ開始する。
・CC_LXS_DECREMENTは、LXセマフォの値を(以前に記載されたように、中断の方法において)減分する。
・CC_XSS_INCREMENTは、XSセマフォの値を増分する。
カウンタ42の現在値、tcurが、tstartcur<tendであり、start(tcur mod)<endである場合、ポートが能動(つまり、バースト・バッファ・メモリ5との通信の制御を有する)として定義される。これは、たとえば、2つのストリームが、等しい周期、言わば5で存在し、一方が最初の4サイクルのためのBBメモリの制御を有し、他方が残りのサイクルのための制御を有する、システムの可能性を可能にする。
このアーキテクチャを使用するアルゴリズムを実行する処理は、最初にコプロセッサ2のプログラミング、次いでコプロセッサ・コントローラ9およびバースト・バッファ・コントローラ7のプログラミングまたは初期化と、その後に続くアルゴリズムの実際の実行を含む。
コプロセッサ2の初期化では、デバイスの実際の実施形態に特定の手段によって、構成がコプロセッサ自体にロードされることが、一般にもっとも直接になる。
コプロセッサ・コントローラ9のプログラミングでは、そのステップは次の通りである。
1.メイン・コプロセッサ・コントローラ9が、前に記載されたように、Chessアレイにおいて存在する各論理ストリーム毎の合計数、周期、段階およびアドレス増分に従って構成される。所望の機能を実行するためのコプロセッサ・コントローラ9のプログラミングの一例が、下に示される。
2.コプロセッサ・コントローラ9の構成における次のステップは、アドレス構成である。各論理ストリームの特性(周期、段階)がアルゴリズム中で同じであり続ける可能性が高いが、バースト・バッファ・メモリ5におけるコプロセッサ・コントローラ9によってアクセスされた実アドレスは変わる。それはこの可変性であり、これは、バースト・バッファ・コントローラ7がダブル・バッファリングを、バースト・バッファ・アーキテクチャ内で直接の方法で実行できるようにする。このダブル・バッファリングの効果は、先に述べられたように、コプロセッサ2に、それが連続ストリームと対話中である印象を与えることであるが、実際にはバッファが連続的に交換されている。
バースト・バッファ・コントローラ7も構成される必要がある。これを行うには、メイン・メモリ3からバースト・バッファ・メモリ5へのデータの転送を構成するために、適切なコマンドがバースト命令待ち行列6へ送信されなければならない。これらの命令(BB_SET_MATおよびBB_SET_BAT)が、BATおよびMAT内で適切なエントリを、コプロセッサ・コントローラ9のプログラミングに適合する方法で構成する。この実施形態では、MATおよびBATエントリをプログラムするための命令が、バースト命令待ち行列6を通じて発行される。代替の可能性は、プロセッサ1が読み書きするメモリ・マップ・レジスタの使用となる。この実施形態の場合のように、メモリ・マップ・レジスタから読み取られる可能性がなく(それらが存在しないので)、プロセッサ1がバースト・バッファ・コントローラ7の状態を照会することができないが、これは著しい制限ではない。さらに、この目的のためのバースト命令待ち行列6の使用は、バースト転送の実行によりMATおよびBATエントリを構成するための命令をインターリービングし、したがって、プロセッサ1の監視なしに正しい時間的意味を維持する可能性を可能とする。
これらのステップが実行された後、CHESSアレイの実際の実行を開始することができる。この実施形態では、CHESSアレイに指定数のサイクルで実行するように命令することのみが必要である。これは、正確な数のサイクルをパラメータとして、コプロセッサ命令待ち行列8におけるCC_START_EXEC命令へ書き込むことによって達成され、次いでこのデータをコプロセッサ・コントローラ9へ渡すことができるようにする。この値がコプロセッサ・コントローラ9に転送された1クロック・サイクル後、コントローラが値をバースト・バッファ・メモリ5とコプロセッサ2のCHESSアレイの間で転送することを開始し、CHESSアレイの実行を可能にする。
しかし、重要なステップを、計算に関係する命令がそれぞれの命令待ち行列に配置される前に追加しなければならない。これは、必要な同期化機構が、同期化およびダブル・バッファリングの原理をうまく実施するために適切であるようにするためである。この機構における基本エレメントは、コプロセッサ・コントローラ9がLXセマフォの値を減分しようと試み、上述のロジックに従って、それがそうできるようになるまでコプロセッサの動作を中断することである。このセマフォの初期値は0である。すなわち、したがって、コプロセッサ・コントローラ9およびコプロセッサ2がこの段階で「フリーズ」される。成功したロードバースト命令の後にLXセマフォの値がバースト・バッファ・コントローラ7によって増分されるときにのみ、コプロセッサ2がその実行を開始(あるいは再開)できるようになる。この効果を達成するため、CC_LX_DECREMENT命令がコプロセッサ命令待ち行列8において、「コプロセッサ2の実行を開始する」(CC_START_EXEC)命令の前に挿入される。以下に示されるように、対応する「LXセマフォを増分する」(BB_LX_INCREMENT)命令が、バースト命令待ち行列6において、対応するロードバースト命令の後に挿入される。
CHESS論理ストリームおよびバースト・バッファ・メモリ5の間の実際のデータの転送が、先に記載されたようなコプロセッサ・コントローラ9のプログラミングに従って実行される。
カウンタ42が実行しなければならないチックの数は、1つまたは複数の入力バーストを消費するためにどれだけの時間がかかるかに依存する。システムの正確さを保証することは、アプリケーション・ソフトウェアに任される。カウンタ42のプログラミングは、バッファが消費された後にコプロセッサ2の実行が停止するようにしなければならない。コプロセッサ命令待ち行列8における次の命令は、次のデータのバーストがバースト・バッファ・メモリ5に到着しているようにするため、同期化命令(つまり、CC_LX_DECREMENT)でなければならない。この命令(および場合によっては、必要とされたデータが使用可能になるまでの待機期間)の後に続いて、この新しいデータのバーストの初期アドレスがデータ・ストリームに割り当てられ(CC_PORT_ADDRESS命令により)、実行がCC_START_EXEC命令を介して再開される。この手順は出力ストリームの場合に類似している(重要な違いは、データがメイン・メモリ3からバースト・バッファ・メモリ5に到着するために必要としたものに等しい待機期間がなくなることである)。
計算モデル
計算モデル全体の例を図5を参照して説明する。この例は、アルゴリズムがこのアーキテクチャにおいて使用するためにどのように記録することができるかを指示し、一例として簡素なベクトル加算を使用し、これは従来のマイクロプロセッサ向けに以下のようにCでコーディングすることができる。
【表3】
int a[1024],b[1024],c[1024];
for(i=0;i<1024;i++)
a[i]=b[i]+c[i];
図1のアーキテクチャ上で元のベクトル加算ループ・ネストと同じ機能性を達成するようプロセッサ1を走らせるCコードの一部分は、次の通りである。
Figure 0005283810
この構成では、3つのポートがコプロセッサ・コントローラ9において使用され、すなわち、各入力ベクトルのためのもの(bおよびc)、および出力ベクトルのためのもの(a)である。行4、6および8の文は、これらの3つのポートを初期化するためのコード・マクロである。これらは、拡張されるとき、次の表のコマンドになる(これは行4を参照し、他の拡張されたマクロは直接類似している)。
【表5】
CC_CURRENT_PORT(0);
CC_PORT_INCREMENT(4);
CC_TRANSFER_SIZE(4);
CC_PORT_PERIOD(3);
CC_PORT_PHASE_START(0);
CC_PORT_PHASE_END(1);
CC_PORT_START_TIME(0);
CC_PORT_END_TIME(3*BLEN*MAXK+3);
CC_PORT_IS_WRITE(0);
このコードは、ポート0が、カウンタ42の3チック毎、正確にはチック0、3、6...3*BLEN*MAXK+3の4バイトのデータを読み取り、それが読み取るアドレスを毎回4バイト増分するという効果を有する。BLEN*MAXKは、合計する2つのベクトルの長さ(この場合、1024)であり、BLENはDRAMからの単一のデータのバーストの長さ(たとえば、64バイト)である。これらの値で、MAXKは1024/64=16に設定される。
行9から14は、バースト・バッファ転送のためのMATおよびBATを確立し、これらのテーブルにおけるエントリをメイン・メモリ3およびバースト・バッファ・メモリ5におけるアドレスに結合する。コマンドBIQ_SET_MAT(0,&b[0],BLEN*4,4,TRUE)はコード・マクロであり、これはBB_SET_MAT(0,&b[0],BLEN*4,4)に拡張され、MATにおけるエントリ0をアドレス&b[0]へ結合し、バースト長をBLEN*4バイトに(つまり、整数が32ビットの場合、BLEN整数)、ストライドを4に設定する。後に続く2行は、cおよびaに類似し、関係する。行BIQ_SET_BAT(0,0x0000,BLEN*4)は、BB_SET_BAT(0,0x0000,BLEN*4)に拡張され、BATのエントリ0をバースト・バッファ・メモリ5におけるアドレス0x0000へ結合する。後に続く2行は再度類似している。
この点まで、計算は行われていないが、コプロセッサ・コントローラ9およびバースト・バッファ・コントローラ7が設定されている。行15から38のループ・ネストは、実際の計算が行われるところである。このループはMAXK回繰り返され、各反復がBLENエレメント上で動作し、処理されたMAXK*BLENエレメントの合計を与える。このループは、コプロセッサ命令待ち行列8へ送信された命令の組CIQ_xxxで開始して、コプロセッサ2およびコプロセッサ・コントローラ9の動作を制御し、その後に、バースト・バッファ・コントローラ7およびバースト・バッファ・メモリ5を制御することが目的である、バースト命令待ち行列6へ送信された1組の命令が続く。これら2組の相対的な順序は、原理においては重要でなく、これは、異なるシステムエレメントの間の同期化が、セマフォによって明示的に保証されるからである。互いの後に実行する2つの異なるループを有すること(2つの命令待ち行列が十分深かったと仮定して)、または、2つの異なる制御のスレッドを有することさえも可能となる。
CIQ_xxx行は、ソース・コードを書くことを簡約にするコード・マクロである。これらの意味は、次の通りである。
CIQ_LXD(N):N個のCC_LXS_DECREMENT命令をコプロセッサ命令待ち行列8に挿入する。
CIQ_SA(ポート、アドレス):CC_CURRENT_PORT(ポート)およびCC_PORT_ADDRESS(アドレス)命令をコプロセッサ命令待ち行列8に挿入する。
CIQ_ST(cycleno):コプロセッサ2にカウンタ42のcyclenoチックだけ実行させるために、CC_EXECUTE_START(cycleno)命令を挿入する。
CIQ_XSI(N):N個のCC_XSS_INCREMENT命令をコプロセッサ命令待ち行列8に挿入する。
上に示したコードのネットの効果は、以下の通りである。すなわち、1)LXSセマフォ上で対応するロードバーストと同期化すること、2)コプロセッサ2上で計算を、カウンタ42の3*BLENチックだけ開始すること、および3)XSSセマフォ上で対応するストアバーストと同期化することである。
BIQ_xxx行は再度、ソース・コードを書くことを簡約にするコード・マクロである。これらの意味は、次の通りである。
BIQ_FLB(mate,bate):BB_ロードバースト(mate,bate,TRUE)命令をバースト命令待ち行列6に挿入する。
BIQ_LXI(N):N個のBB_LX_INCREMENT命令をバースト命令待ち行列6に挿入する。
BIQ_FSB(mate,bate):BB_ストアバースト(mate,bate,TRUE)命令をバースト命令待ち行列6に挿入する。
BIQ_XSD(N):N個のBB_XS_DECREMENT命令をバースト命令待ち行列6に挿入する。
上に示したコードのネットの効果は、メインDRAMメモリ3からバースト・バッファ・メモリ5へ2つのバーストをロードし、次いでLXセマフォ10の値を増分して、コプロセッサ2がその実行を上述のように開始できるようにすることである。最初のものを除くすべての反復において、コプロセッサ2の計算の結果が、次いで、ストアバースト命令を使用してメイン・メモリ3に戻すように格納される。2番目の反復が、最初の反復において実行された計算の結果を格納することを待機する必要は厳密にはないが、これはコプロセッサ2とバースト・バッファ・メモリ5の間の並行性を向上させる。
2つの変数eoおよびnot_eoの使用は、先に記載されたダブル・バッファリング効果を可能にするためにここで使用された機構である。
行39から42は、バースト・バッファ・メモリ5からメイン・メモリ3への最後のバースト転送を実行し、ループ本体の最初の反復におけるストアバースト命令の不在を補償する。
結果として生じる時間線は図6の通りである。ロードバースト601は最初の動作であり(これらが完了されるまで、コプロセッサ2がロード/実行セマフォによってストールされるので)、これらが完了されるとき、コプロセッサ2が602を実行開始することができる。バースト命令待ち行列6における次の命令は別のロードバースト601であり、これが、最初の2つのロードが終了するとすぐに実行される。次いで、バースト命令待ち行列6における次の命令がストアバースト603であり、これは、XSセマフォ11が、コプロセッサ2上の最初の計算が完了したことを信号で知らせるまで待機しなければならない。この処理は、ループ中で継続する。
上に示された例は非常に簡素なアルゴリズムの場合であるが、これは、より複雑である計算において必要とされる基本原理を例示する。当業者は、上に示された手法、原理および技術を、より複雑なアルゴリズムをこのアーキテクチャによる実行に適合させるために図1のアーキテクチャをプログラムすることに使用できる。
計算のためのツールチェーン
計算モデルの原理を、ハンド・コーディングによって直接の様式で活用することができる。つまり、手動でCコードを書いて、従来の方法でシステム構成エレメントの適切な動作をスケジュールするように適合されたCPU上で実行して(命令を適切な待ち行列に配置し、記載されたようにシステム構成エレメントを動作に設定し)、コプロセッサのための適切な構成を、そのコプロセッサを構成するための標準の合成ツールに従って提供することである。CHESSのような、構成可能またはFPGAに基づいたプロセッサでは、このツールが一般にハードウェア記述言語となる。CHESSに使用するための適切なハードウェア記述言語はJHDLであり、たとえば、Peter BellowsおよびBrad Hutchingsによる1998年4月の「JHDL−An HDL for Reconfigurable Systems」Proceedings of the IEEE Symposium on Field−Programmable Custom Computing Machinesに記載されている。
好ましい代替手法は、特定のツールチェーンがこの計算アーキテクチャのために使用されることである。このようなツールチェーンおよびその実際の動作のエレメントを次に簡単に説明する。
ツールチェーンは、従来の順次コードから、有効な動作に特に適合されたコードへ変換すること、およびシステム構成エレメントの相互運用の機能を有する。例示的ツールチェーンは入力としてCコードを受信し、出力として次のものを提供する。すなわち、1)計算の実行のためのCHESSコプロセッサ構成、2)データをシステム・メモリとバースト・バッファ・メモリの間で移動するためのバースト・バッファ・スケジュール、および3)データをCHESSコプロセッサとバースト・バッファ・メモリの間で移動するためのコプロセッサ・コントローラ構成である。
ツールチェーン自体は2つの構成エレメントを有する。第1のものはフロントエンドであり、これはCコードをその入力として取り、注釈付きのディペンデンスグラフをその出力として提供する。第2の構成エレメントはバックエンドであり、これはフロントエンドによって生成されたディペンデンスグラフを取り、これらからCHESS構成、バースト・バッファ・スケジュール、およびコプロセッサ・コントローラ構成を生成する。
フロントエンドの主なタスクは、計算を、それがコプロセッサ2において起こるように、適切に記述するグラフを生成することである。実行された主なステップの1つは、値に基づいた依存解析であり、これはW.PughおよびD.Wonnacottによる1993年12月の「An Exact Method for Analysis of Value−based Array Data Dependences」,University of Maryland,Institute for Advanced Computer Studies−Dept. of Computer Science,University of Marylandに記載されている。生成された出力は、CHESSアレイにおいて実施されるデータフローの記述、および(ロードバースト命令を介して)入力としてロードされるか、あるいは(ストアバースト命令を介して)出力として格納される必要のあるすべてのアドレスの表現、およびデータがメイン・メモリ3から検索され、それへ格納されなければならない順序の表現である。これは、バースト・バッファ・コントローラ7のための効率的なスケジュールが導出される基礎である。
一例として、4タップFIRフィルタのためのCコードを仮定する場合、次の表のようになる。
【表6】
int i,j,src[],kernel[],dst[];
for(i=0 ; i<1000; i++)
for(j=0;j<4; j++)
dst[i]=dst[i]+src[4+i-j]*kernel[j];
テキスト・ファイルとして提供された、フロントエンド、出力への入力として、次の形式を有する。
Figure 0005283810
このテキスト・ファイルは注釈付きのグラフの表現である。グラフ自体が、図7に示される。このグラフは、フロントエンド・アルゴリズムによって判明された依存性を明瞭に示す。エッジ81が、依存性が存在する条件、および適用可能である場合の依存性の距離によりマーク付けされる。記述は、必要とされる機能性を有するハードウェア構成エレメントを生成するに必要なすべての情報を含む。
コンパイル・ツールチェーンのバックエンドは、ある基本機能を有する。1つは、フロントエンドから得られた、拡張されたディペンデンスグラフをスケジュールし、時間変更することである。これは、十分に機能的なCHESS構成を得るために必要である。スケジューリングは、拡張されたディペンデンスグラフにおけるノード82のそれぞれが活動化される時点を決定することを含み、時間変更は、たとえば、エッジが値を適切な瞬間に伝播するようにするための遅延の挿入を含む。スケジューリングは、シフト線形スケジューリングを使用して実行することができ、これはハードウェア合成において幅広く使用される技術である。時間変更は、ハードウェア合成における共通で静かな直接のタスクであり、適切な数のレジスタを回路に追加して、回路における異なる経路が適切な時点で交わるようにすることのみを含む。この点で、コプロセッサ2(ここでは、CHESSコプロセッサ)の機能性の完全な記述を有する。この記述が図8に示される。次いで、この記述を適切なツールへ渡して、この機能性を有するCHESSコプロセッサをプログラムするために必要な一連の信号(一般に「ビットストリーム」と呼ばれる)を生成することができる。
バックエンドの必要とされる別の機能は、バースト・バッファおよびコプロセッサ・コントローラ・スケジュールの生成である。CHESS構成が得られた後、これにメイン・メモリからの値を入れる必要があるとき、および値をメイン・メモリへ戻すように格納でき、バースト・バッファ・スケジュールを確立できるときが明らかである。したがって、バースト・バッファ・メモリ5にロードされ、そこから格納される必要のあるすべてのデータのアドレス空間を、バースト・バッファ・コントローラ7が動作できる固定のデータのバーストに分割することを含む、ステップが提供される。
たとえば、上に提示されたFIRの例では、入力アレイ(src[])が適切なサイズのいくつかのバーストに分割され、アルゴリズムのために必要とされたすべてのアドレス範囲が包含されるようになる。このツールチェーンは長さBlenのバーストを使用して(Blenは2の累乗であり、このツールチェーンへの実行パラメータとして指定される)、できるだけ多くの入力アドレス空間を包含する。このバースト長でそれ以上達成できないとき、ツールチェーンは、長さを減分するバースト、すなわち、Blen/2、Blen/4、Blen/8、...、2、1を、このアルゴリズムのために必要とされたあらゆる入力アドレスが唯一のバーストに属するまで使用する。
これらのバーストのそれぞれについて、ロードされたデータのいずれかが必要とされる、反復空間におけるもっとも早い点が計算される。すなわち、各入力バーストに対して、反復空間において関連付けられた1点があり、そこでは、それより早い反復が、バーストによってロードされたデータのいずれをも必要としないことが保証される。コプロセッサ2の実行が反復空間におけるこの点に到達するときを検出することは容易である。したがって、次のものが作成される。すなわち、1)データをバースト・バッファ・メモリ5に移動するための、関連アドレスのためのロードバースト命令、および2)コプロセッサ2の実行が関連ロードバースト命令と同期化されることを保証するための、対応する同期化点(CC_LX_DECREMENT/BB_LX_INCREMENTの組)である。
計算および通信の効果的なオーバーラップを達成するには、バスを介したデータの転送に関連付けられた待ち時間を隠すために、ロードバースト命令が予め発行されなければならない。
アルゴリズムによって包含されなければならないすべての出力アドレス空間が、類似のロジックに従って出力バーストに区分される。再度、出力空間が、可変長のバーストに区分される。
ツールチェーンは、1)関連アドレスのためのストアバースト命令、および2)対応する同期化点(BB_XS_DECREMENT/CC_XS_INCREMENTの組)を作成する。
この点で、我々は、次のことに関連する情報を有する。すなわち、1)ロードバーストおよびストアバースト命令の相対的順序、およびそれらの実行のパラメータ(アドレスなど)、および2)コプロセッサ2上で実行される計算に相対的なそれらの位置である。
次いで、この情報が使用されて、上述のFIRの例のように、全体の計算を編成するための適切なCコードが生成される。
実際のコード生成段階(つまり、プロセッサ1上で実行するためのCコードの排出)を、http://www.cs.umd.edu/projects/omega/で入手可能である、Omega Library of the University of Marylandに含まれたコード生成ルーチンと、その後に続いて、これらのルーチンの総称出力を上述の形式に変換する、カスタマイズされたスクリプトを使用して実施することができる。
実験結果−画像たたみこみ
画像たたみこみアルゴリズムが、次の表のループ・ネストによって記述される。
【表8】
for(i=0;i<IMAGE_HEIGHT;i++)
for(j=0;j<IMAGE_WIDTH;j++)
for(k=0;k<KERNEL_HEIGHT;k++)
for(l=0;1<KERNEL_WIDTH;l++)
Dest[i,j]+=Source[(i+1)-k,(j+1)-l]*C[k,l];
境界条件を簡約するために、ソース画像を、垂直方向においてKERNEL_HEIGHT−1画素、水平方向においてKERNEL_WIDTH−1画素だけ拡張するために、複製が使用された。2つのカーネル、すなわち共にメディアン・フィルタ(median filtering)を実行する3x3カーネルおよび5x5カーネルが、システム性能を評価することに使用される。
図9および図10は、(BBCとして示す)本発明の一実施形態によるアーキテクチャの性能を、バースト・バッファ(BBとして示す)を使用した従来のプロセッサ、および従来のプロセッサおよびキャッシュの組み合わせ(キャッシュとして示す)に対するものとして例示する。2つのバージョンのアルゴリズムが実施され、1つは32ビットの画素により、1つは8ビットの画素による。同じ実験測定値が、異なる画像サイズで、8x8から128x128までの範囲で、異なるバースト長でとられた。
図から分かるように、BBC実装が、BBおよびキャッシュ実装に勝る高い性能上の利点を示した。このアルゴリズムは相対的に複雑であり、BBおよびキャッシュ実装におけるシステムの性能全体が非常にコンピュータ制約的(computer bound)であり、アルゴリズムが高度に複雑であるためにCPUがついていけない。本発明の実施形態を使用すると、計算がCHESSアレイ上で(その固有の並行性により)実行されるので計算が大いに効果的であり、性能はあえていうとIO制約的(IO bound)である。最も、IOもバースト・バッファの有効な使用を通じて効率的である。マルチメディア命令(MIPS MDMXなど)がBBまたはキャッシュ実施におけるCPUの性能を向上させることができ、これは、それらがいくつかの算術命令の並列実行を可能にできるからである。それでもなお、性能向上の結果は、この構成において専用コプロセッサを使用して得られた性能レベルに到達する可能性が低い。
修正および変形形態
プロセッサ1をコプロセッサ2およびバースト・バッファ・メモリ5から切り離す機能を、命令待ち行列6、8以外によって達成することができる。有効な代替物は、2つの待ち行列を、図12に記載されたような、命令をバースト・バッファ・メモリ5およびコプロセッサ2へ発行することに完全に専用にされた2つの小型プロセッサ(それぞれが各待ち行列用)と置換することである。バースト命令待ち行列が(図1の実施形態を参照して)バースト・コマンド・プロセッサ106によって置換され、コプロセッサ命令待ち行列が、コプロセッサ・コマンド・プロセッサ108によって置換される。これは、これらの2つの構成エレメントによって実行された唯一のタスクとなるので、これらがコプロセッサ2およびバースト・バッファ7からそれぞれ切り離される必要はなくなる。コマンド・プロセッサ106、108のそれぞれが、コマンドをコプロセッサまたはバースト・バッファ(適切なように)へ発行することによって動作でき、次いで、そのコマンドがその実行を完了するまで何も行わず、別のコマンドを発行することなどができる。これは、設計を複雑にするが、メイン・プロセッサ1をその残りの、命令を待ち行列へ発行する単純なタスクから解放する。プロセッサ1によって実行される唯一の作業は、次いで、これらの2つのプロセッサの初期設定となり、これは計算の開始直前に行われる。したがって、計算中に、プロセッサ1が完全にコプロセッサ2およびバースト・バッファ・メモリ5の実行から切り離される。
2つの従来の、しかしより小型のマイクロプロセッサ(あるいは、別法として、2つの制御の独立スレッドを実行する唯一のプロセッサ)を使用することができ、それぞれが適切なコード(ループ・ネスト)の関連部分を実行する。別法として、外部挙動がコードの関連部分の実行を反映する、2つの汎用状態機械を合成することができる(つまり、これらが同じ命令のシーケンスを提供する)。このような状態機械のハードウェアの複雑さおよびコストは、同等の専用プロセッサのものよりも著しく低くなる。このような状態機械が、メイン・プロセッサ1によって、上述のものに類似した方法でプログラムされる。主な違いは、イベントの繰り返しも符号化されることである。すなわち、これは、プロセッサ1が、多少の(複雑である場合は)命令における1つのアルゴリズムの挙動を符号化できるために必要である。イベントのx回の繰り返しを得るために、プロセッサ1がx個の命令を待ち行列に挿入する必要はないが、この繰り返しパラメータを命令定義において符号化しなければならない。
上に示したように、特に有効な機構は、有限状態機械(FSM:Finite StateMachine)を待ち行列の代りに使用して、メイン・プロセッサ1の実行をコプロセッサ2およびバースト・バッファ・コントローラ7の実行から切り離すことである。この機構が以下でより詳細に論じられる。
図1に例示されたアーキテクチャでは、異なるI/Oストリームの実行を駆動するための命令を、コプロセッサ2の実行のための命令と混合することができる。これは、システム構成エレメントの間の相互関係がコンパイル時に知られており、したがって、異なるシステム構成エレメントへの命令を正しい順序でソース・コードにおいてインタリーブすることができるので、可能である。
2つの状態機械を、まったく同じ方法による実行のためのこれらの命令を発行するように、構築することができる。このような状態機械の一方は、コプロセッサ2の挙動を制御し、必要とされるようなCC_xxx_xxx命令を発行し、他方はバースト・バッファ・コントローラ7の挙動を制御し、必要とされるようなBB_xxx_xxx命令を発行する。
このような状態機械を、いくつかの異なる方法において実施することができる。1つの代替手法が図13に示される。上で提示されたベクトル加算の例を参照して、この状態機械150(コプロセッサ2のためのものであるが、バースト・バッファ・コントローラ7のための同等のマシンが直接類似している)が、以下のパターンから構築された命令のシーケンスを実施する。
【表9】
CC_LX_DECREMENT、
CC_LX_DECREMENT、
CC_START_EXEC、
CC_XS_INCREMENT
メインの状態機械150が効果的に、より簡素な状態機械151、152、153に分割され、それぞれが1種類の命令の実行を制御する。周期および段階(これが、コプロセッサ2とバースト・バッファ・コントローラ7の間で通信するI/Oストリームに関連付けることができる周期および段階とは、何の関係も有していないことに留意されたい)が、より簡素な状態機械のそれぞれに関連付けられる。状態機械150のハードウェアは、典型的には、意図されたアプリケーションの要件を満たすために十分な数の、このようなより簡素な状態機械のアレイを含む。
イベント・カウンタ154が定義される。イベント・カウンタ154の役割は、(この場合、コプロセッサ2のための)命令が順番に送信されることを可能にすることである。イベント・カウンタ154が増分される毎に、M*周期+段階=イベント・カウンタの値であるような値Mが存在する場合、状態機械i(すなわち、より簡素な状態機械151、152、153の1つ)が、比較ロジック155を通じた実行のために選択され、その命令が実行される。アプリケーション・ソフトウェアの責任は、2つの異なる状態機械がこの式を満たすことができないようにすることである。この命令の実行が完了されるとき、イベント・カウンタ154が再度増分される。このイベントのシーケンスは、次のように要約することができる。
1:イベントカウンタを増分する、すなわち、EC++
2:M*周期+段階=ECであるようなMが存在する場合、状態機械iを実行のために選択する
3:このような状態機械iが発見された場合、状態機械iによって記述された命令を実行する(これは、中断動作を含むことができる)
4:1へ戻る
命令の実行に関係する多少の余分なパラメータ(読み/書きするためのアドレス、CC_START_EXECのための実行の長さなど)が、状態機械150において符号化されなければならない。複数の状態機械が、典型的には異なるパラメータを有する所与の命令を発行することができることに留意されたい。
このシステムは、周期的挙動を生成するために特に十分に動作する。しかし、イベントが一度だけ起こらなければならない場合、これは容易に、無限周期および有限段階を有する簡素な状態機械において符号化することができ、唯一の帰結は、この簡素な状態機械が一度だけ使用されることである。
この手法はそれ自体を変更することができる。たとえば、この機構に柔軟性を追加するには、可能な選択肢は、1つまたは複数の簡素な状態機械の実行を所定の「時間ウィンドウ」に制限するために、「開始時間」および「終了時間」パラメータを簡素な状態機械に追加することである。
これらの状態機械のプログラミングは、システムの初期化中に、たとえば、プロセッサ1によって割り当てられたメモリマップ・レジスタの使用を通じて起こる。代替物は、これらの状態機械をメイン・メモリ3の事前定義の領域から、おそらくは専用チャネルおよび直接メモリ・アクセス(DMA)機構の使用を通じて、プログラムするために必要なすべてのパラメータのローディングとなる。
2つの専用マイクロプロセッサを使用する、提案された他の代替機構は、図1のアーキテクチャのためのプログラミング・モデルに著しい修正を必要としない。すなわち、メイン・プロセッサ1をプログラムするために使用された同じ技術を、コプロセッサ2のために意図されたコマンドをバースト・バッファ・コントローラ7のために意図されたものから分割する追加ステップと共に、使用することができる。実現可能であるが、この構成は、状態機械の手法に関して不利である可能性がある。これらのプロセッサに、システムの複雑さに加えて、メイン・メモリ3または他のDRAMへのアクセスを提供することが必要となる。システムのコストおよび複雑さは、2つのマイクロプロセッサをこのように追加すること(およびそれらが非常に簡素な計算を実行するためにのみ存在することにおいて、十分に利用しないこと)によっても増大される。
図1およびその代替物のアーキテクチャを越えた様々な開発も、本発明の本質の原理から逸れることなく行うことができる。3つのこれらの開発の分野が以下に記載される。すなわち、パイプライン、データ依存条件/知られていない実行時間、およびメモリへの非アフィン・アクセスである。
パイプライン・アーキテクチャは、アプリケーションがそれらの入力データ・ストリーム上で複数の変換が実行されることを必要とする値を有する。たとえば、たたみこみの直後に続いて相関を行うことができる。この種類の構成を収容するために、アーキテクチャおよび計算モデルへの変更が必要となる。アーキテクチャ上では、逐次的にバッファされたCHESSアレイ、またはより大きい区分されたCHESSアレイ、または計算段階の間に再構成されたCHESSアレイを提供することができる。図11Aおよび図11Bは、このようなアプリケーションを処理するために有効であり、複数のCEESSアレイを含む、異なるパイプライン・アーキテクチャを示す。図11Aは、プロセッサ143から命令された互い違いのCHESS/バースト・バッファ・パイプラインによる構成、およびメイン・メモリ144とのデータの交換を示し、CHESSアレイ141がデータを第1の組のバースト・バッファ142から受信して、これを第2の組のバースト・バッファ145へ渡し、この第2の組のバースト・バッファ145がさらにCHESSアレイ146と対話する(潜在的には、このパイプラインを、さらなる組のCHESSアレイおよびバースト・バッファにより継続させることができる)。同期化はより複雑になり、近接したCHESSアレイの間、および近接したバースト・バッファの組の間の通信を含むが、同じ汎用パイプラインを後に続けて、バースト・バッファの効率的な使用、およびCHESSアレイの間の効率的な同期化を可能にすることができる。すなわち、セマフォを使用して、パイプラインの逐次段階によって実行された計算の正確さを保証することができる。
図11Bは、異なるタイプの計算パイプラインを示し、2つのCHESSアレイ151、156の間にSRAMキャッシュ155を有し、第1の組のバースト・バッファ152へ提供されたロード、および第2の組のバースト・バッファ157によって提供された格納を有する。プロセッサ153およびメイン・メモリ154の役割は、本質的に他の実施形態から不変である。同期化はこの構成においてそれほど困難でない可能性があるが、この構成が並行性をそれほど効果的でなく活用する可能性がある。
上述のようなアーキテクチャにおけるコプロセッサの効率的な使用上の1つの制約は、コプロセッサ実施の実行時間が知られるべきであることである(効率的なスケジューリングを可能にするため)。これは、多数の媒体処理ループについて達成可能である。しかし、実行時間がコンパイル時に知られていない場合、ツールチェーンにおけるスケジューリング要件を緩和させる必要があり、プロセッサ、コプロセッサおよびバースト・バッファの間の同期化および通信プロトコルにおいて、適切な許容が行われる必要がある。コプロセッサ・コントローラは、この状況のための特定の構成も必要とする。
別の拡張は、バースト・バッファ・メモリへの非アフィン参照を可能にすることである。上で使用されたバースト・バッファ・モデルでは、すべてのアクセスがAI+Fのタイプであり、ただしAは定数行列、Iは反復ベクトル、Fは定数ベクトルである。この制限されたアクセス・モデルの使用により、コプロセッサ・コントローラおよびプロセッサが予め、どのデータがいずれかの所与の時点で必要とされるかを知ることができ、論理ストリームの効率的な作成が可能となる。このアーキテクチャへのこの有意性は、全体として、どのように非アフィン・アクセスを完全に任意の方法で提供することができるかが不明瞭である(同期化機構が失敗するように思われる)が、非アフィン・アレイ・アクセスを使用してルックアップ・テーブルを参照することが可能になるということである。これは、ルックアップ・テーブルをバースト・バッファにロードすることによって行うことができ、次いで、コプロセッサが、後続アクセスのためのルックアップ・テーブルの開始に相対的なバースト・バッファ・アドレスを生成することができる。このようなアドレスを、それらが使用されるときより十分に前もって生成できるようにすること(場合によっては、これを、同期化機構への精練化によって達成することができる)、およびこのタイプの回帰参照を支持するように論理ストリーム機構を修正することが必要となる。
したがって、図1のアーキテクチャへの多数の変形形態および拡張を、特許請求の範囲に記載されたような本発明から逸脱することなく、実行することができる。
本発明の第1の実施形態によるシステムの基本エレメントを示す図。 図1のシステムにおいて使用されたバースト・バッファ構造のアーキテクチャを示す図である。 図2のバースト・バッファ構造のさらなる機能を示す図である。 図1のシステムにおいて使用されたコプロセッサ・コントローラの構造、および他のシステム構成エレメントとの関係を示す図である。 図1のシステム上で使用可能な計算モデルを例示するための一例を示す図である。 図5の例のための計算およびI/O動作のための時間線を示す図。 図1のシステムのためのコードを提供するために有用なツールチェーンのフロントエンドからの出力として提供された、注釈付きグラフを示す図。 図7における仕様から導出された、コプロセッサの内部構成を示す図。 32ビット・ピクセルを使用する5x5画像たたみこみのための代替アーキテクチャの性能を示す図である。 8ビット・ピクセルを使用する5x5画像たたみこみのための、図9を生成するために使用された代替アーキテクチャの性能を示す図である。 本発明のさらなる実施形態を使用する代替パイプライン・アーキテクチャを示す図である。 本発明のさらなる実施形態を使用する代替パイプライン・アーキテクチャを示す図である。 図1のアーキテクチャにおける、コプロセッサ命令待ち行列およびバースト命令待ち行列の代替として使用可能な、2つの補助プロセッサを示す図。 図1のアーキテクチャにおけるコプロセッサ命令待ち行列の代替としての状態機械の実施を示す図である。

Claims (17)

  1. 第1のプロセッサと、
    前記第1のプロセッサへのコプロセッサとして使用するための第2のプロセッサと、
    メモリと、
    バースト命令に従ってデータ・バーストにおいて前記メモリに書き込みまたは読み取るデータを入れるための、少なくとも1つのデータ・バッファと、
    前記バースト命令を実行するためのバースト・コントローラと、
    前記バースト・コントローラによる実行のためにバースト命令を順番に提供するためのバースト命令エレメントと、
    コプロセッサ命令およびバースト命令の実行を、前記コプロセッサ命令およびバースト命令が実行するデータの可用性により、同期化するための同期化機構と
    を含み、
    バースト命令が前記第1のプロセッサによって前記バースト命令エレメントへ提供され、前記バースト・コントローラによって実行されたバースト命令に従って前記少なくとも1つのデータ・バッファを通じて、データが、前記第2のプロセッサへの入力データとして前記メモリから読み取られ、前記第2のプロセッサからの出力データとして前記メモリへ書き込まれ、
    前記同期化機構は、
    特定のバースト命令の実行により増分され、特定のコプロセッサ命令の実行により減分される第1のカウンタを少なくとも含み、
    前記第1のカウンタを、第1の低しきい値を越えてさらに減分することができないとき、前記第2のプロセッサの関連付けられた実行のためのコプロセッサ命令がストールあるいは防止され、
    前記第1のカウンタを、第1の高しきい値を越えてさらに増分することができないとき、前記少なくとも1つのバッファから前記メモリへのデータの関連付けられた格納のためのバースト命令がストールあるいは防止される
    コンピュータ・システム。
  2. 前記第2のプロセッサの実行を順番に制御するためのコプロセッサ命令を提供するためのコプロセッサ命令エレメントをさらに含み、前記コプロセッサ命令が前記第1のプロセッサによって提供される、
    請求項1に記載のコンピュータ・システム。
  3. コプロセッサ・コントローラをさらに含み、
    前記コプロセッサ・コントローラがコプロセッサ命令を前記コプロセッサ命令エレメントから受信し、前記第2のプロセッサの実行を、受信されたコプロセッサ命令に従って制御し、前記コプロセッサと前記少なくとも1つのデータ・バッファの間の通信を制御する、
    請求項2に記載のコンピュータ・システム。
  4. 前記同期化機構が、前記少なくとも1つのデータ・バッファにまだロードされていないデータにおける前記第2のプロセッサの実行を必要とするコプロセッサ命令の実行をブロックするように適合され、前記少なくとも1つのデータ・バッファから前記メモリへのデータの格納のためのバースト命令の実行を、このようなデータが前記第2のプロセッサによって前記少なくとも1つのデータ・バッファへ提供されていない場合にブロックするように適合される、
    請求項1に記載のコンピュータ・システム。
  5. 前記同期化機構は、
    特定のコプロセッサ命令の実行により増分され、特定のバースト命令の実行により減分される第2のカウンタをさらに含み、
    前記第2のカウンタを、第2の低しきい値を越えてさらに減分することができないとき、前記少なくとも1つのバッファから前記メモリへのデータの関連付けられた格納のためのバースト命令がストールあるいは防止される、
    請求項に記載のコンピュータ・システム。
  6. 前記第2のカウンタを、第2の高しきい値を越えてさらに増分すること
    ができないとき、前記第2のプロセッサの関連付けられた実行のためのコプロセッサ命令がストールあるいは防止される、
    請求項に記載のコンピュータ・システム。
  7. 前記バースト命令エレメントは、命令キューである、
    請求項1に記載のコンピュータ・システム。
  8. 前記バースト命令エレメントは、さらに加えられたプロセッサである、
    請求項1に記載のコンピュータ・システム。
  9. 前記バースト命令エレメントは、プログラム可能な状態機械である、
    請求項1に記載のコンピュータ・システム。
  10. 前記第1のプロセッサは、コンピュータ装置の中央処理装置である、
    請求項1に記載のコンピュータ・システム。
  11. コンピュータ・システムを動作する方法であって、
    第1のプロセッサ、および前記第1のプロセッサへのコプロセッサとして動作する第2のプロセッサによる実行のためのコードを提供することと、
    前記第2のプロセッサによって実行されるタスクを提供することとしての、前記コードの一部の識別することと、
    前記タスクを提供するコードを、コプロセッサ・コントローラによる実行のためのコプロセッサ命令で置換すること
    を含み、
    前記コプロセッサ命令は、
    前記第2のプロセッサによる前記タスクの実行を制御するように決定され、
    前記コードおよび前記タスクから、少なくとも1つのデータ・バッファにより、前記第2のプロセッサによるアクセスのためにデータ・バーストにおいてメイン・メモリからデータを読み取り、そこへ書き込むことができるようにするためのバースト命令を決定することと、
    前記少なくとも1つのデータ・バッファと前記メイン・メモリの間でデータの転送を制御するバースト・コントローラによるバースト命令の実行と共に、前記コプロセッサ上で前記タスクを実行することと
    を含み、
    前記タスクの実行において、コプロセッサ命令の実行とバースト命令の実行の間の同期化が、同期化機構によって達成され、
    前記同期化機構は、
    特定のバースト命令の実行により増分され、特定のコプロセッサ命令の実行により減分される第1のカウンタを少なくとも含み、
    前記第1のカウンタを、第1の低しきい値を越えてさらに減分することができないとき、前記第2のプロセッサの関連付けられた実行のためのコプロセッサ命令がストールあるいは防止され、
    前記第1のカウンタを、第1の高しきい値を越えてさらに増分することができないとき、前記少なくとも1つのバッファから前記メモリへのデータの関連付けられた格納のためのバースト命令がストールあるいは防止される
    方法。
  12. バースト命令を決定する前記ステップが、前記バースト命令を、前記第1のプロセッサによって実行される前記コードの一部内に含めることをさらに含む、
    請求項11に記載の方法。
  13. バースト命令を決定する前記ステップが、前記コードから前記第2のプロセッサによってアクセスされるメモリ・アドレスを決定すること、および少なくとも1つのデータ・バッファにより、前記第2のプロセッサによるアクセスのためにデータ・バーストにおいてメイン・メモリからデータを読み取り、そこへ書き込むことができるように、前記第2のプロセッサによって行われるメモリ・アクセスを編成することをさらに含む、
    請求項11に記載の方法。
  14. 前記同期化機構が、前記第1の命令の正しい実行のために完了が必要である第2の命令が完了するまで、前記第1の命令をブロックすることを含む、
    請求項11に記載の方法。
  15. 前記コプロセッサ命令エレメントは、命令キューである、
    請求項2に記載のコンピュータ・システム。
  16. 前記コプロセッサ命令エレメントは、さらに加えられたプロセッサである、
    請求項2に記載のコンピュータ・システム。
  17. 前記コプロセッサ命令エレメントは、プログラム可能な状態機械である、
    請求項2に記載のコンピュータ・システム。
JP2001503043A 1999-06-15 2000-06-15 プロセッサおよびコプロセッサを含むコンピュータ・システム Expired - Fee Related JP5283810B2 (ja)

Applications Claiming Priority (3)

Application Number Priority Date Filing Date Title
EP99304659.8 1999-06-15
EP99304659A EP1061439A1 (en) 1999-06-15 1999-06-15 Memory and instructions in computer architecture containing processor and coprocessor
PCT/GB2000/002331 WO2000077627A1 (en) 1999-06-15 2000-06-15 Memory and instructions in computer architecture containing processor and coprocessor

Publications (3)

Publication Number Publication Date
JP2003502728A JP2003502728A (ja) 2003-01-21
JP2003502728A5 JP2003502728A5 (ja) 2007-07-26
JP5283810B2 true JP5283810B2 (ja) 2013-09-04

Family

ID=8241459

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2001503043A Expired - Fee Related JP5283810B2 (ja) 1999-06-15 2000-06-15 プロセッサおよびコプロセッサを含むコンピュータ・システム

Country Status (5)

Country Link
US (1) US6782445B1 (ja)
EP (2) EP1061439A1 (ja)
JP (1) JP5283810B2 (ja)
DE (1) DE60045093D1 (ja)
WO (1) WO2000077627A1 (ja)

Families Citing this family (62)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US7266725B2 (en) 2001-09-03 2007-09-04 Pact Xpp Technologies Ag Method for debugging reconfigurable architectures
DE19651075A1 (de) 1996-12-09 1998-06-10 Pact Inf Tech Gmbh Einheit zur Verarbeitung von numerischen und logischen Operationen, zum Einsatz in Prozessoren (CPU's), Mehrrechnersystemen, Datenflußprozessoren (DFP's), digitalen Signal Prozessoren (DSP's) oder dergleichen
DE19654595A1 (de) 1996-12-20 1998-07-02 Pact Inf Tech Gmbh I0- und Speicherbussystem für DFPs sowie Bausteinen mit zwei- oder mehrdimensionaler programmierbaren Zellstrukturen
DE59710317D1 (de) 1996-12-27 2003-07-24 Pact Inf Tech Gmbh VERFAHREN ZUM SELBSTÄNDIGEN DYNAMISCHEN UMLADEN VON DATENFLUSSPROZESSOREN (DFPs) SOWIE BAUSTEINEN MIT ZWEI- ODER MEHRDIMENSIONALEN PROGRAMMIERBAREN ZELLSTRUKTUREN (FPGAs, DPGAs, o.dgl.)
US6542998B1 (en) 1997-02-08 2003-04-01 Pact Gmbh Method of self-synchronization of configurable elements of a programmable module
US8686549B2 (en) 2001-09-03 2014-04-01 Martin Vorbach Reconfigurable elements
DE19861088A1 (de) 1997-12-22 2000-02-10 Pact Inf Tech Gmbh Verfahren zur Reparatur von integrierten Schaltkreisen
DE10081643D2 (de) 1999-06-10 2002-05-29 Pact Inf Tech Gmbh Sequenz-Partitionierung auf Zellstrukturen
JP2004506261A (ja) 2000-06-13 2004-02-26 ペーアーツェーテー イクスペーペー テクノロジーズ アクチエンゲゼルシャフト パイプラインctプロトコルおよびct通信
US8058899B2 (en) 2000-10-06 2011-11-15 Martin Vorbach Logic cell array and bus system
US9037807B2 (en) 2001-03-05 2015-05-19 Pact Xpp Technologies Ag Processor arrangement on a chip including data processing, memory, and interface elements
US7844796B2 (en) 2001-03-05 2010-11-30 Martin Vorbach Data processing device and method
US7210129B2 (en) * 2001-08-16 2007-04-24 Pact Xpp Technologies Ag Method for translating programs for reconfigurable architectures
US7444531B2 (en) 2001-03-05 2008-10-28 Pact Xpp Technologies Ag Methods and devices for treating and processing data
US7155602B2 (en) 2001-04-30 2006-12-26 Src Computers, Inc. Interface for integrating reconfigurable processors into a general purpose computing system
US7210022B2 (en) * 2001-05-15 2007-04-24 Cloudshield Technologies, Inc. Apparatus and method for interconnecting a processor to co-processors using a shared memory as the communication interface
US7657877B2 (en) 2001-06-20 2010-02-02 Pact Xpp Technologies Ag Method for processing data
US7996827B2 (en) 2001-08-16 2011-08-09 Martin Vorbach Method for the translation of programs for reconfigurable architectures
US7434191B2 (en) 2001-09-03 2008-10-07 Pact Xpp Technologies Ag Router
US8686475B2 (en) 2001-09-19 2014-04-01 Pact Xpp Technologies Ag Reconfigurable elements
AU2002254549A1 (en) * 2001-12-05 2003-06-23 Src Computers, Inc. An interface for integrating reconfigurable processors into a general purpose computing system
US7653736B2 (en) * 2001-12-14 2010-01-26 Nxp B.V. Data processing system having multiple processors and a communications means in a data processing system
WO2003060747A2 (de) 2002-01-19 2003-07-24 Pact Xpp Technologies Ag Reconfigurierbarer prozessor
EP2043000B1 (de) 2002-02-18 2011-12-21 Richter, Thomas Bussysteme und Rekonfigurationsverfahren
US8914590B2 (en) 2002-08-07 2014-12-16 Pact Xpp Technologies Ag Data processing method and device
DE10221206B4 (de) * 2002-05-13 2008-04-03 Systemonic Ag Burst Zugriffsverfahren auf Co-Prozessoren
US20040006667A1 (en) * 2002-06-21 2004-01-08 Bik Aart J.C. Apparatus and method for implementing adjacent, non-unit stride memory access patterns utilizing SIMD instructions
US7657861B2 (en) 2002-08-07 2010-02-02 Pact Xpp Technologies Ag Method and device for processing data
AU2003286131A1 (en) 2002-08-07 2004-03-19 Pact Xpp Technologies Ag Method and device for processing data
US7394284B2 (en) 2002-09-06 2008-07-01 Pact Xpp Technologies Ag Reconfigurable sequencer structure
WO2004042562A2 (en) * 2002-10-31 2004-05-21 Lockheed Martin Corporation Pipeline accelerator and related system and method
US20040136241A1 (en) 2002-10-31 2004-07-15 Lockheed Martin Corporation Pipeline accelerator for improved computing architecture and related system and method
US7430652B2 (en) * 2003-03-28 2008-09-30 Tarari, Inc. Devices for performing multiple independent hardware acceleration operations and methods for performing same
EP1676208A2 (en) 2003-08-28 2006-07-05 PACT XPP Technologies AG Data processing device and method
US20050055594A1 (en) * 2003-09-05 2005-03-10 Doering Andreas C. Method and device for synchronizing a processor and a coprocessor
JP2005202767A (ja) 2004-01-16 2005-07-28 Toshiba Corp プロセッサシステム、dma制御回路、dma制御方法、dmaコントローラの制御方法、画像処理方法および画像処理回路
US7743376B2 (en) * 2004-09-13 2010-06-22 Broadcom Corporation Method and apparatus for managing tasks in a multiprocessor system
US20060085781A1 (en) 2004-10-01 2006-04-20 Lockheed Martin Corporation Library for computer-based tool and related system and method
US7472261B2 (en) * 2005-11-08 2008-12-30 International Business Machines Corporation Method for performing externally assisted calls in a heterogeneous processing complex
US8250503B2 (en) 2006-01-18 2012-08-21 Martin Vorbach Hardware definition method including determining whether to implement a function as hardware or software
US8032734B2 (en) * 2006-09-06 2011-10-04 Mips Technologies, Inc. Coprocessor load data queue for interfacing an out-of-order execution unit with an in-order coprocessor
US9946547B2 (en) * 2006-09-29 2018-04-17 Arm Finance Overseas Limited Load/store unit for a processor, and applications thereof
US7594079B2 (en) 2006-09-29 2009-09-22 Mips Technologies, Inc. Data cache virtual hint way prediction, and applications thereof
US20080082793A1 (en) * 2006-09-29 2008-04-03 Mips Technologies, Inc. Detection and prevention of write-after-write hazards, and applications thereof
US7934063B2 (en) 2007-03-29 2011-04-26 International Business Machines Corporation Invoking externally assisted calls from an isolated environment
US7817657B1 (en) 2007-06-14 2010-10-19 Xilinx, Inc. Circuit for processing network packets
US8144702B1 (en) * 2007-06-14 2012-03-27 Xilinx, Inc. Generation of a pipeline for processing a type of network packets
US7788470B1 (en) * 2008-03-27 2010-08-31 Xilinx, Inc. Shadow pipeline in an auxiliary processor unit controller
EP2996035A1 (en) 2008-10-15 2016-03-16 Hyperion Core, Inc. Data processing device
US9104403B2 (en) * 2010-08-18 2015-08-11 Freescale Semiconductor, Inc. Data processing system having selective redundancy and method therefor
JP2012252374A (ja) * 2011-05-31 2012-12-20 Renesas Electronics Corp 情報処理装置
US9880852B2 (en) * 2012-12-27 2018-01-30 Intel Corporation Programmable hardware accelerators in CPU
US10936198B2 (en) 2016-07-26 2021-03-02 MemRay Corporation Resistance switching memory-based coprocessor and computing device including the same
US10929059B2 (en) 2016-07-26 2021-02-23 MemRay Corporation Resistance switching memory-based accelerator
JP2018120448A (ja) * 2017-01-26 2018-08-02 ソニーセミコンダクタソリューションズ株式会社 演算処理装置および情報処理システム
US11294678B2 (en) 2018-05-29 2022-04-05 Advanced Micro Devices, Inc. Scheduler queue assignment
US11138009B2 (en) * 2018-08-10 2021-10-05 Nvidia Corporation Robust, efficient multiprocessor-coprocessor interface
US11334384B2 (en) * 2019-12-10 2022-05-17 Advanced Micro Devices, Inc. Scheduler queue assignment burst mode
US11249766B1 (en) 2020-09-14 2022-02-15 Apple Inc. Coprocessor synchronizing instruction suppression
US11948000B2 (en) 2020-10-27 2024-04-02 Advanced Micro Devices, Inc. Gang scheduling for low-latency task synchronization
US12066955B2 (en) * 2021-05-19 2024-08-20 Hughes Network Systems, Llc System and method for enhancing throughput during data transfer
CN116804915B (zh) * 2023-08-28 2023-12-15 腾讯科技(深圳)有限公司 基于存储器的数据交互方法、处理器、设备以及介质

Family Cites Families (15)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US4099236A (en) * 1977-05-20 1978-07-04 Intel Corporation Slave microprocessor for operation with a master microprocessor and a direct memory access controller
JPS5840214B2 (ja) * 1979-06-26 1983-09-03 株式会社東芝 計算機システム
US4589067A (en) * 1983-05-27 1986-05-13 Analogic Corporation Full floating point vector processor with dynamically configurable multifunction pipelined ALU
US6438683B1 (en) * 1992-07-28 2002-08-20 Eastman Kodak Company Technique using FIFO memory for booting a programmable microprocessor from a host computer
US5708830A (en) * 1992-09-15 1998-01-13 Morphometrix Inc. Asynchronous data coprocessor utilizing systolic array processors and an auxiliary microprocessor interacting therewith
US5884050A (en) * 1996-06-21 1999-03-16 Digital Equipment Corporation Mechanism for high bandwidth DMA transfers in a PCI environment
US5784582A (en) * 1996-10-28 1998-07-21 3Com Corporation Data processing system having memory controller for supplying current request and next request for access to the shared memory pipeline
EP0853283A1 (en) * 1997-01-09 1998-07-15 Hewlett-Packard Company Computer system with memory controller for burst transfer
DE69727465T2 (de) * 1997-01-09 2004-12-23 Hewlett-Packard Co. (N.D.Ges.D.Staates Delaware), Palo Alto Rechnersystem mit Speichersteuerung für Stossbetrieb-Übertragung
EP0862118B1 (en) 1997-01-09 2004-02-04 Hewlett-Packard Company, A Delaware Corporation Computer system comprising a memory controller for burst transfer
EP0858168A1 (en) 1997-01-29 1998-08-12 Hewlett-Packard Company Field programmable processor array
EP0858167A1 (en) 1997-01-29 1998-08-12 Hewlett-Packard Company Field programmable processor device
DE69827589T2 (de) 1997-12-17 2005-11-03 Elixent Ltd. Konfigurierbare Verarbeitungsanordnung und Verfahren zur Benutzung dieser Anordnung, um eine Zentraleinheit aufzubauen
EP0924625B1 (en) 1997-12-17 2004-11-17 Elixent Limited Configurable processing device and method of using said device to construct a central processing unit
US6442671B1 (en) * 1999-03-03 2002-08-27 Philips Semiconductors System for priming a latch between two memories and transferring data via the latch in successive clock cycle thereafter

Also Published As

Publication number Publication date
DE60045093D1 (de) 2010-11-25
EP1061439A1 (en) 2000-12-20
WO2000077627A1 (en) 2000-12-21
EP1104562A1 (en) 2001-06-06
US6782445B1 (en) 2004-08-24
JP2003502728A (ja) 2003-01-21
EP1104562B1 (en) 2010-10-13

Similar Documents

Publication Publication Date Title
JP5283810B2 (ja) プロセッサおよびコプロセッサを含むコンピュータ・システム
JP6243935B2 (ja) コンテキスト切替方法及び装置
US10203958B2 (en) Streaming engine with stream metadata saving for context switching
US7904702B2 (en) Compound instructions in a multi-threaded processor
US20220179652A1 (en) Inserting null vectors into a stream of vectors
JP3752224B2 (ja) コンピュータ・システムにおいて命令を処理する方法および装置
JP2003505753A (ja) セル構造におけるシーケンス分割方法
US20230385063A1 (en) Streaming engine with early exit from loop levels supporting early exit loops and irregular loops
KR20030074047A (ko) 멀티 프로세서 시스템
EP1061438A1 (en) Computer architecture containing processor and coprocessor
US7383424B1 (en) Computer architecture containing processor and decoupled coprocessor
JPH0228721A (ja) プロセシング・システム
EP0521486B1 (en) Hierarchical structure processor
US11900117B2 (en) Mechanism to queue multiple streams to run on streaming engine
US6327648B1 (en) Multiprocessor system for digital signal processing
WO2004092949A2 (en) Processing system with instruction-and thread-level parallelism
JP3789937B2 (ja) ベクトルプロセッサのためのチャンク連鎖
US20230004391A1 (en) Streaming engine with stream metadata saving for context switching
WO2020237231A1 (en) Inserting predefined pad values into a stream of vectors
JP2004515856A (ja) ディジタル信号処理装置
JP2668987B2 (ja) データ処理装置
US20230251970A1 (en) Padding and suppressing rows and columns of data
US12019561B2 (en) Pseudo-first in, first out (FIFO) tag line replacement
JP3668643B2 (ja) 情報処理装置
JP3743155B2 (ja) パイプライン制御型計算機

Legal Events

Date Code Title Description
A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20070604

A621 Written request for application examination

Free format text: JAPANESE INTERMEDIATE CODE: A621

Effective date: 20070604

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20100629

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20100901

A02 Decision of refusal

Free format text: JAPANESE INTERMEDIATE CODE: A02

Effective date: 20110628

RD02 Notification of acceptance of power of attorney

Free format text: JAPANESE INTERMEDIATE CODE: A7422

Effective date: 20110708

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20111024

A911 Transfer to examiner for re-examination before appeal (zenchi)

Free format text: JAPANESE INTERMEDIATE CODE: A911

Effective date: 20111027

A912 Re-examination (zenchi) completed and case transferred to appeal board

Free format text: JAPANESE INTERMEDIATE CODE: A912

Effective date: 20120302

A711 Notification of change in applicant

Free format text: JAPANESE INTERMEDIATE CODE: A711

Effective date: 20120820

RD02 Notification of acceptance of power of attorney

Free format text: JAPANESE INTERMEDIATE CODE: A7422

Effective date: 20120821

RD04 Notification of resignation of power of attorney

Free format text: JAPANESE INTERMEDIATE CODE: A7424

Effective date: 20121023

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20130529

LAPS Cancellation because of no payment of annual fees