JP6960479B2 - 再構成可能並列処理 - Google Patents

再構成可能並列処理 Download PDF

Info

Publication number
JP6960479B2
JP6960479B2 JP2019572353A JP2019572353A JP6960479B2 JP 6960479 B2 JP6960479 B2 JP 6960479B2 JP 2019572353 A JP2019572353 A JP 2019572353A JP 2019572353 A JP2019572353 A JP 2019572353A JP 6960479 B2 JP6960479 B2 JP 6960479B2
Authority
JP
Japan
Prior art keywords
data
memory
pes
instruction
arrangement
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.)
Active
Application number
JP2019572353A
Other languages
English (en)
Other versions
JP2020522825A (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.)
Azurengine Technologies Zhuhai Inc
Original Assignee
Azurengine Technologies Zhuhai Inc
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 Azurengine Technologies Zhuhai Inc filed Critical Azurengine Technologies Zhuhai Inc
Publication of JP2020522825A publication Critical patent/JP2020522825A/ja
Application granted granted Critical
Publication of JP6960479B2 publication Critical patent/JP6960479B2/ja
Active 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/34Addressing or accessing the instruction operand or the result ; Formation of operand address; Addressing modes
    • G06F9/345Addressing or accessing the instruction operand or the result ; Formation of operand address; Addressing modes of multiple operands or results
    • 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/80Architectures of general purpose stored program computers comprising an array of processing units with common control, e.g. single instruction multiple data processors
    • G06F15/8007Architectures of general purpose stored program computers comprising an array of processing units with common control, e.g. single instruction multiple data processors single instruction multiple data [SIMD] multiprocessors
    • G06F15/8023Two dimensional arrays, e.g. mesh, torus
    • 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/7867Architectures of general purpose stored program computers comprising a single central processing unit with reconfigurable architecture
    • 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/0806Multiuser, multiprocessor or multiprocessing cache systems
    • G06F12/0815Cache consistency protocols
    • 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/16Handling requests for interconnection or transfer for access to memory bus
    • G06F13/1668Details of memory controller
    • G06F13/1673Details of memory controller using buffers
    • 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/7821Tightly coupled to memory, e.g. computational memory, smart memory, processor in 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/7867Architectures of general purpose stored program computers comprising a single central processing unit with reconfigurable architecture
    • G06F15/7871Reconfiguration support, e.g. configuration loading, configuration switching, or hardware OS
    • 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/7867Architectures of general purpose stored program computers comprising a single central processing unit with reconfigurable architecture
    • G06F15/7871Reconfiguration support, e.g. configuration loading, configuration switching, or hardware OS
    • G06F15/7875Reconfiguration support, e.g. configuration loading, configuration switching, or hardware OS for multiple contexts
    • 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/7867Architectures of general purpose stored program computers comprising a single central processing unit with reconfigurable architecture
    • G06F15/7871Reconfiguration support, e.g. configuration loading, configuration switching, or hardware OS
    • G06F15/7878Reconfiguration support, e.g. configuration loading, configuration switching, or hardware OS for pipeline reconfiguration
    • 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/7867Architectures of general purpose stored program computers comprising a single central processing unit with reconfigurable architecture
    • G06F15/7885Runtime interface, e.g. data exchange, runtime control
    • 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/7867Architectures of general purpose stored program computers comprising a single central processing unit with reconfigurable architecture
    • G06F15/7885Runtime interface, e.g. data exchange, runtime control
    • G06F15/7889Reconfigurable logic implemented as a co-processor
    • 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/80Architectures of general purpose stored program computers comprising an array of processing units with common control, e.g. single instruction multiple data processors
    • G06F15/8046Systolic arrays
    • 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/80Architectures of general purpose stored program computers comprising an array of processing units with common control, e.g. single instruction multiple data processors
    • G06F15/8053Vector processors
    • G06F15/8061Details on data memory access
    • 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/80Architectures of general purpose stored program computers comprising an array of processing units with common control, e.g. single instruction multiple data processors
    • G06F15/8053Vector processors
    • G06F15/8061Details on data memory access
    • G06F15/8069Details on data memory access using a cache
    • 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/80Architectures of general purpose stored program computers comprising an array of processing units with common control, e.g. single instruction multiple data processors
    • G06F15/8053Vector processors
    • G06F15/8092Array of vector 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/30003Arrangements for executing specific machine instructions
    • G06F9/30007Arrangements for executing specific machine instructions to perform operations on data operands
    • G06F9/3001Arithmetic instructions
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30003Arrangements for executing specific machine instructions
    • G06F9/3004Arrangements for executing specific machine instructions to perform operations on 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
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30003Arrangements for executing specific machine instructions
    • G06F9/30076Arrangements for executing specific machine instructions to perform miscellaneous control operations, e.g. NOP
    • G06F9/3009Thread control instructions
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30098Register arrangements
    • 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/34Addressing or accessing the instruction operand or the result ; Formation of operand address; Addressing modes
    • 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/3802Instruction prefetching
    • G06F9/3808Instruction prefetching for instruction reuse, e.g. trace cache, branch target 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/38Concurrent instruction execution, e.g. pipeline or look ahead
    • G06F9/3836Instruction issuing, e.g. dynamic instruction scheduling or out of order instruction execution
    • G06F9/3851Instruction issuing, e.g. dynamic instruction scheduling or out of order instruction execution from multiple instruction streams, e.g. multistreaming
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/38Concurrent instruction execution, e.g. pipeline or look ahead
    • G06F9/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/3887Concurrent instruction execution, e.g. pipeline or look ahead using a plurality of independent parallel functional units controlled by a single instruction for multiple data lanes [SIMD]
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/44Arrangements for executing specific programs
    • G06F9/445Program loading or initiating
    • G06F9/44505Configuring for program initiating, e.g. using registry, configuration files
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2212/00Indexing scheme relating to accessing, addressing or allocation within memory systems or architectures
    • G06F2212/10Providing a specific technical effect
    • G06F2212/1016Performance improvement
    • G06F2212/1021Hit rate improvement
    • YGENERAL TAGGING OF NEW TECHNOLOGICAL DEVELOPMENTS; GENERAL TAGGING OF CROSS-SECTIONAL TECHNOLOGIES SPANNING OVER SEVERAL SECTIONS OF THE IPC; TECHNICAL SUBJECTS COVERED BY FORMER USPC CROSS-REFERENCE ART COLLECTIONS [XRACs] AND DIGESTS
    • Y02TECHNOLOGIES OR APPLICATIONS FOR MITIGATION OR ADAPTATION AGAINST CLIMATE CHANGE
    • Y02DCLIMATE CHANGE MITIGATION TECHNOLOGIES IN INFORMATION AND COMMUNICATION TECHNOLOGIES [ICT], I.E. INFORMATION AND COMMUNICATION TECHNOLOGIES AIMING AT THE REDUCTION OF THEIR OWN ENERGY USE
    • Y02D10/00Energy efficient computing, e.g. low power processors, power management or thermal management

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • Computer Hardware Design (AREA)
  • Software Systems (AREA)
  • Computing Systems (AREA)
  • Mathematical Analysis (AREA)
  • Mathematical Optimization (AREA)
  • Pure & Applied Mathematics (AREA)
  • Computational Mathematics (AREA)
  • Microelectronics & Electronic Packaging (AREA)
  • Multimedia (AREA)
  • Advance Control (AREA)
  • Memory System Of A Hierarchy Structure (AREA)
  • Multi Processors (AREA)

Description

[関連する出願]
本出願は2017年3月14日に提出されたタイトルが「Reconfigurable Parallel Processing」である米国特許仮出願62/471,340、2017年3月15日に提出されたタイトルが「Circular Reconfiguration for Reconfigurable Parallel Processor」である米国特許仮出願62/471,367、2017年3月15日に提出されたタイトルが「Private Memory Structure for Reconfigurable Parallel Processor」である米国特許仮出願62/471,368、2017年3月15日に提出されたタイトルが「Shared Memory Structure for Reconfigurable Parallel Processor」である米国特許仮出願62/471,372、2017年3月17日に提出されたタイトルが「Static Shared Memory Access for Reconfigurable Parallel Processor」である米国特許仮出願62/472,579の優先権を主張し、これらの出願の内容が参照により本明細書に取り組まれる。
本明細書の開示内容はコンピュータアーキテクチャに関し、特に再構成可能プロセッサに関する。
大量の処理アレイを備えた再構成可能コンピューティングアーキテクチャは、計算能力のニーズを満たしながら電力及びシリコン面積効率を維持することができる。フィールドプログラマブルゲートアレイ(FPGA:field−programmable gate array)とは異なり、粗粒度再構成可能アーキテクチャ(CGPA:Coarse−Grained Reconfigurable Architecture)は、算術論理演算ユニット(ALU:arithmetic logic unit)などのより大きな処理素子をその構築モジュールとして用いる。それは、高レベル言語を用いて処理素子(PE)アレイを迅速にプログラムする再構成可能性特徴を提供する。CGRAの一つの典型的な設計は図1に示される。それは、PEアレイ、配置メモリ、フレームバッファーとしてのメモリユニット、PE間の相互接続部材及びPEからフレームバッファーまでの相互接続部材から構成される。
一般的には、CGRAはループレベルの並列性を探索するための方法である。それはスレッドレベルの並列性の処理に専用されない。一回の反復から次回の反復のいかなるデータ依存性、並列性は大きく制限される。したがって、多数の設計では、2Dアレイのサイズは8×8PEアレイに制限される。
グラフィック処理ユニット(GPU:Graphics processing unit)アーキテクチャは、同じ命令複数スレッド(SIMT:Same Instruction Multiple Thread)方式で並列スレッドを実行する方法を提供する。それは特に大規模な並列コンピューティングアプリケーションに適す。これらのアプリケーションでは、通常、スレッド間に依存性がないと仮定される。このタイプの並列性がソフトウェアタスク内のループレベルの並列性を超えている(CGRAはループレベルの並列性のために設計される)。スレッドレベルの並列性はシングルコア実行を超えてマルチコア実行まで容易に拡張することができる。スレッドレベルの並列性が最適化チャンスを提供し、そしてPEアレイをより効率的かつ高性能にし、8×8よりも容易に大きくする。しかしながら、GPUは再構成可能ではない。したがって、本分野においてCGRAとGPUの両者の処理能力を利用できる次世代のプロセッサを開発する必要がある。
本開示の内容は大規模な並列データ処理のための装置、方法及びシステムを説明する。本開示の内容の様々な実施形態によるプロセッサは、CGRAに類似したプログラマブルプロセッサアレイを使用してGPUに類似した大規模なスレッドレベル並列性を利用するように設計されてもよい。一つの実施形態では、プロセッサは、SIMTアーキテクチャと同様に、互いに同一であるが異なるデータを有するスレッドを効果的に処理することができる。ソフトウェアプログラムのデータ依存グラフは、無限の長さの仮想データパスにマッピングされてもよい。その後、仮想データパスは複数の物理データパスに適することができるセグメントに分割されてもよく、各物理データパスがその配置環境を有することができる。シーケンサは、各PEの配置をその配置FIFOに割り当てることができ、そしてスイッチボックスに類似する。ガスケットメモリ(gasket memory)は1つの物理データパス配置の出力を一時的に記憶し、次の配置のための処理素子に返すことに用いられてもよい。メモリポートは読み取り及び書き込みのためのアドレスを計算することに用いられてもよい。FIFOは各PEが独立して動作することを許可することに用いられてもよい。メモリユニットに記憶されたデータは、プライベート又は共有メモリアクセス方法でアクセスされてもよい。ソフトウェアプログラムの異なる部分の同じデータは、メモリ間のデータ移動を減らすように異なるアクセス方法でアクセスされてもよい。
PEアレイを有する従来技術のCGRAを概略的に示す。 本開示の実施形態によるプロセッサを概略的に示す。 本開示の実施形態によるプロセッサのためのメモリシステムを概略的に示す。 本開示の実施形態によるプライベートメモリアクセスモードのための第一のメモリマッピングを概略的に示す。 本開示の実施形態によるプライベートメモリアクセスモードのための第二のメモリマッピングを概略的に示す。 本開示の実施形態による共有メモリアクセスのためのメモリマッピングを概略的に示す。 本開示の実施形態によるメモリポートのための第一のメモリアクセス配置を概略的に示す。 本開示の実施形態によるメモリポートのための第二のメモリアクセス配置を概略的に示す。 本開示の実施形態によるプロセッサのためのスイッチボックスを概略的に示す。 本開示の実施形態によるプロセッサのための処理素子を概略的に示す。 本開示の実施形態によるプロセッサのための別の処理素子を概略的に示す。 本開示の実施形態によるプロセッサのための列間スイッチボックスを概略的に示す。 本開示の実施形態によるプロセッサのためのガスケットメモリを概略的に示す。 本開示の実施形態による実行カーネルの依存グラフを概略的に示す。 本開示の実施形態によるプロセッサにマッピングされる仮想データパスにおける図9Aの実行カーネルの依存グラフを概略的に示す。 本開示の実施形態によるプロセッサの物理データパスに分割される図9Bの仮想データパスを概略的に示す。 本開示の実施形態によるプロセッサのためのパイプライン動作を概略的に示す。 本開示の実施形態によるプロセッサのための配置プロセスを概略的に示す。 本開示の実施形態によるプロセッサのための配置プロセスを概略的に示す。 本開示の実施形態によるプロセッサのための配置プロセスを概略的に示す。 本開示の実施形態によるプロセッサのための配置プロセスを概略的に示す。 本開示の実施形態によるプロセッサのための配置プロセスを概略的に示す。 本開示の実施形態によるプロセッサのための配置プロセスを概略的に示す。 本開示の実施形態によるプロセッサのための配置プロセスを概略的に示す。 本開示の実施形態によるプロセッサのための配置プロセスを概略的に示す。 本開示の実施形態によるプロセッサのための配置プロセスを概略的に示す。 本開示の実施形態によるプロセッサを使用して命令ストリームを実行するためのパイプライン動作を概略的に示す。 本開示の実施形態によるプロセッサを使用して命令ストリームを実行するための減少されたパイプライン動作を概略的に示す。 本開示の実施形態による実行カーネルを実行するための方法のフローチャートである。 本開示の実施形態による再構成のための方法のフローチャートである。 本開示の実施形態による再構成のための別の方法のフローチャートである。 本開示の実施形態による再構成のための別の方法のフローチャートである。 本開示の実施形態によるメモリにアクセスするための方法のフローチャートである。 本開示の実施形態によるメモリにアクセスするための別の方法のフローチャートである。 本開示の実施形態による一つのセグメントのデータを再利用するための方法のフローチャートである。
ここで本教示の実施形態を詳細に参照し、その例が図面に示される。一致性のために、異なる図面における同じ素子は同じ図面記号で表される。実施形態と組み合わせて本教示を説明するが、理解すべきものとして、それは本教示をこれらの実施形態に限定することを意図するものではない。逆に、本教示は、代替実施形態、修正及び同等物をカバーすることを意図しており、これらの代替実施形態、修正と同等物が添付の特許請求の範囲によって限定された本教示の精神及び範囲内に含まれてもよい。
また、本教示の実施形態の以下の詳細な説明では、本教示に対する完全な理解を提供するように、多くの具体的な詳細を説明する。しかしながら、当業者は、これらの具体的な詳細がない場合でも本教示を実践することができることを理解する。他の場合でも、本教示の実施形態の各態様を不必要に曖昧にしないために、周知の方法、プロセス、コンポーネント及び回路を詳細に説明しない。
図2はプロセッサの実施形態によるプロセッサ200を概略的に示す。プロセッサ200はダイレクトメモリアクセス(DMA)モジュール202、配置メモリ204、シーケンサ206、制御プロセッサ208、プログラムキャッシュ210、メモリユニット212、PEアレイ214及びガスケットメモリ216を備えることができる。DMAモジュール202は、外部バス230に結合されてもよく、そして制御プロセッサ208によって制御されてもよい。DMAモジュール202は、実行可能命令と実行不可能データを外部バス230から出し入れすることに用いられてもよい。プログラムキャッシュ210は、DMAモジュール202の動作を制御するために制御プロセッサ208によって用いられる命令とデータを記憶することができる。一つの実施形態では、プログラムキャッシュ210に記憶された命令とデータは、シーケンサプログラムを処理するために制御プロセッサ208によって用いられてもよい。
注意すべきものとして、本明細書に用いられる、2つのコンポーネント間の「結合」(例えば一つのコンポーネントが別のコンポーネントに「結合」されること)は、2つのコンポーネントの間の電子接続を指すことができ、それが電子配線、電子素子(例えば抵抗器、トランジスタ)などを介する接続を含むことができるがこれらに限定されない。また、いくつかの実施形態では、プロセッサ200は大規模なスレッドレベルの並列処理に用いられるように構成されてもよい。例えば、PEアレイ214における一つの処理素子(PE)は複数の算術論理演算ユニット(ALU)を含むことができ、これらの算術論理演算ユニットが(例えばそれぞれ別々のスレッドで)異なるデータに対して同じ動作を実行するように構成されてもよい。即ち、複数のALUを有するこれらの実施形態では、各PEは、単一命令複数スレッド(SIMT:Single Instruction Multiple Threads)方式で動作するように構成されてもよい。一つの実施形態では、ベクトルアドレスとベクトルデータ入力を有するPEはベクトルデータ出力を生成することができる。いくつかの実施形態では、スレッドはストリームとも呼ばれてもよい。
同時に実行されるマルチスレッドにデータを提供するために、いくつかの実施形態では、プロセッサ200のコンポーネント間のいくつかの関連する電子接続はベクトル形態を呈する。例えば、HxGのベクトルアドレスはHつのGビットアドレスを有することができ、KxWのベクトルデータ接続はKつのWビットデータを有することができる。注意すべきものとして、いかなる図面に示されないが、異なるコンポーネント間のデータ又はアドレス接続に1つ又は複数の信号線が付随することができる。例えば、ビジー信号線は第一のコンポーネントと第二のコンポーネントの間に存在してもよく、そして第一のコンポーネントが有効なデータ又はアドレス信号の受信を準備しないことを示すためのビジー信号を第二のコンポーネントに伝送するために第一のコンポーネントによって用いられてもよい。また、有効な信号線は第一のコンポーネントと第二のコンポーネントの間に存在してもよく、そして有効なデータ又はアドレス信号が既に接続線に配置されたことを示すための有効信号を第一のコンポーネントに伝送するために第二のコンポーネントによって用いられてもよい。
配置メモリ204は、1つ又は複数のデータパスのための実行可能命令及び/又はデータロード命令からなるデータパスプログラムを記憶することができる。一つの実施形態では、配置メモリ204に記憶されたデータパスプログラムはコンパイルされた命令の(複数の)シーケンスであってもよい。例えば、データパスプログラムはPEアレイ214によって実行される命令を含むことができ、該命令が、条件が満たされる場合にどのPEによって実行される構成情報、及び各データパスコンポーネントがどのようにデータを保存又は送信するかを示す。
シーケンサ206は配置メモリ204に記憶された命令を復号し、復号された命令をメモリユニット212と物理データパスに移動することができる。物理データパスはPEアレイ214の様々なコンポーネント(例えば、PEアレイ214の、データの実行、ステージング及び/又は移動に関与するコンポーネント)とガスケットメモリ216を含むことができる。復号された命令は、配置パッケージと呼ばれ又は配置と簡単に呼ばれてもよいパッケージの内の様々なコンポーネントに送信されてもよい。復号された命令以外、一つのコンポーネントの配置パッケージは、いくつかの他のパラメータ(例えば、一つの配置設定で、指定された命令が繰り返し実行される回数又はデータがデータ切り替えユニットを通過する回数)を含むことができる。一つの実施形態では、物理データパス配置は、物理データパスプログラムと呼ばれてもよく、該物理データパスプログラムが物理データパスに含まれる様々なコンポーネントの個々の配置を含むことができる。示されないが、シーケンサ206をデータパスのコンポーネントに接続する配置バスが存在してもよく、バスをそれぞれ介してこれらのコンポーネントに伝送される各配置によって用いられてもよい。
メモリユニット212は、外部バス230から受信されたデータを記憶し、そしてPEアレイ214によって生成された実行結果データを(これらの結果が外部バス230を介して送信される前に)記憶するためのデータステージングエリアであってもよい。いくつかの実施形態では、メモリユニット212はプロセッサ200の外部の大型メモリシステムのプロセッサ内のキャッシュであってもよい。PEアレイ214は複数のメモリポート(MP)220.1−220.N、複数のスイッチボックス(SB)222.1−222.N、複数の処理素子(PE)218.1−218.Nと複数の列間スイッチボックス(ICSB)224.1−224.Nを含むことができる。図2に示す例では、PEアレイ214は1行の処理素子218.1−218.N(例えば1次元アレイ)を含むことができ、それがNつのPEを含むことができ、ここでNが整数である。本明細書の実施形態では、数Nが32であってもよい。しかし、これは例であり、そして他の実施形態で16、32、64などの別の整数であってもよいがこれらに限定されない。示されたこれらの例数は2の冪であってもよいが、一つの実施形態では、1行におけるPEの数が2の冪である必要がない。いくつかの実施形態では、PEアレイ214は、複数行の処理素子(例えば1行又は複数行のPEがPE218.1−218.Nの下に配置されてもよい)を含むことができる2次元アレイであってもよい。注意すべきものとして、説明するために、PEアレイ214は、MP、SB、ICSBとPEの複合体であってもよく、そしてこれらのコンポーネントをまとめて呼ばれるために用いられる。いくつかの実施形態では、メモリユニット212とMP220.1−220.Nはマルチポートメモリユニットとまとめて呼ばれてもよい。
複数のMP220.1−220.NはPEアレイ241とメモリユニット212の間のデータストリームのゲートウェイであってもよい。各MP220.1−220.Nはそれぞれメモリユニット212に結合されてメモリユニット212から読み取られ、メモリユニット212に書き込むことができる。MP220.1とMP220.N以外、全てのMPはいずれも2つの隣接するMPに結合されてもよく、これにより、各MPは1番目のMPからデータを受信し、及び/又は第二のMPへデータを送信するように構成されてもよい。MP間の電子結合は一方向のデータフロー(例えば、一つの計算配置指定データが1つのMPから次のMPに流れることができる)を提供することができる。例えば、図2に示すように、一方向のデータフローに対して、MP220.1はMP220.2に結合されてもよく、一方向のデータフローに対して、MP220.2はMP220.3に結合されてもよい。最後のMP220.Nは例外であってもよく、そしてデータの一時的な記憶を提供できるガスケットメモリに216に結合される。1番目のMP220.1は、ガスケットメモリ216から一方向のデータフローを受信することができるため、別の例外であってもよい。いくつかの実施形態では、MP220.1−220.NはPE行方向に沿ってデータルーティングバスを形成することができる。即ち、データがMP間にルーティングする方向は、データがPE間にルーティングする方向に平行することができる。2次元PEアレイを有する実施形態では、各MP220.1−220.Nは1列のPEによって共有されてもよい。一つの実施形態では、ガスケットメモリ216は、PEアレイからデータを収集して新しい配置のためにPEアレイにフィードバックするように、データバッファ(例えば先入れ先出し(FIFO:First−In−First−Out)型)として用いてもよい。
いくつかの実施形態では、PEとMPは、一つの配置のための命令で静的にプログラムすることができる。例えば、命令はパイプライン段階としてPE及びMPにプログラムされてもよく、そして一つの配置期間に命令が変更されない。アドレス計算命令とメモリアクセス命令(例えば読み取り又は記憶)はメモリポート(MP)にマッピングされてもよく、そして他の命令はPEにマッピングされてもよい。
図2に示すように、ICSB224.1−224.Nのそれぞれが対応するSB222.1−222.Nと2つの隣接するICSBに結合されてもよく、ICSB224.1及びICSB224.Nを除く。ICSB224.1はMP222.1、ガスケットメモリ216とICSB224.2に結合されてもよい。また、ICSB224.Nは、MP222.N、ガスケットメモリ216とICSB224.N−1に結合されてもよい。いくつかの実施形態では、ICSB220.1−220.NはPE行方向に沿って別のデータルーティングバスを形成することができる。即ち、データがICSB間にルーティングする方向は、データがPE間にルーティングする方向に平行することができる。ICSBもデータ切り替えユニットと呼ばれてもよい。一つの実施形態では、1つ又は複数のICSBは1つ又は複数のPEをバイパスするようにデータをルーティングすることに用いられてもよい。
SB222.1−222.Nは、隣接するPEに、PEからデータルーティングバス及びMP220.1−220.Nによって形成されたデータルーティングバスとICSB224.1−224.Nによって形成されたデータルーティングバスまでのデータ切り替えを提供するように構成されてもよい。例えば、スイッチボックス222.1は、データをガスケットメモリ216、MP220.1とICSB224.1から処理素子218.1に伝送するためのデータ切り替えを提供するように構成されてもよい。また、スイッチボックス222.1は、ガスケットメモリ216、MP220.1とICSB224.1の間にデータをルーティングするように構成されてもよい。別の例として、スイッチボックス222.2は、データを処理素子218.1、MP220.2とICSB224.2から処理素子218.2に伝送するためのデータ切り替えを提供するように構成されてもよい。また、スイッチボックス222.2は、処理素子218.2、MP220.2とICSB224.2の間にデータをルーティングするように構成されてもよい。別の例として、スイッチボックス222.Nは、データをPE218.N−1、MP220.NとICSB224.Nから処理素子218.Nに伝送するためのデータ切り替えを提供するように構成されてもよい。また、スイッチボックス222.Nは、PE218.N−1、MP220.NとICSB224.Nの間にデータをルーティングするように構成されてもよい。SBもデータ切り替えユニットと呼ばれてもよい。
例示的なデータパスはMP222.1〜222.Nの例示的な内部接続によって示されてもよい。例えば、図2に示すように、MP222.1はPE218.1の2つの入力がMP2201からの2つの出力に結合されてもよいことを示すことができ、MP222.2はPE218.2の2つの入力がMP220.2からの2つの出力に結合されてもよいこと、及びPE218.2の2つの入力がPE218.1からの2つの出力に結合されてもよいことを示すことができ、MP222.3はPE218.3の2つの入力がMP220.3からの2つの出力に結合されてもよいこと、及びPE218.3の2つの入力がPE218.2からの2つの出力に結合されてもいことを示すことができ、これによって類推し、MP222.Nが、PE218.Nの2つの入力がMP220.Nからの2つの出力に結合されてもよいこと及びPE218.Nの2つの入力がPE218.N−1からの2つの出力に結合されてもよいことを示すことができるまで続く。
言葉遣いを簡素化するために、MP220はMP220.1〜220.Nのうちの一つを指すことができ、SB222はSB22.1〜222.Nのうちの一つを指すことができ、PE218はPE218.1〜218.Nのうちの一つを指すことができ、ICSB224はICSB224.1〜224.Nのうちの一つを指すことができる。
図3Aは本開示の実施形態によるプロセッサのためのメモリシステムを概略的に示す。メモリシステムはメモリユニット300と複数のメモリポート220.1〜220.Nを備えることができる。メモリユニット300は図2におけるメモリユニット212の実施形態であってもよく、そして複数のメモリバンク(例えば、302.1と表記されるメモリバンク0、302.Nと表記されるメモリバンク1、302.Nと表記されるメモリバンクN−1など)と複数のメモリキャッシュ304.1〜304.Nを含むことができる。メモリバンク302のそれぞれが対応するメモリキャッシュ304に結合されてもよい。例えば、メモリバンク302.1はメモリキャッシュ304.1に結合されてもよく、メモリバンク302.2はメモリキャッシュ304.2に結合されてもよく、メモリバンク302.Nはメモリキャッシュ304.Nに結合されてもよく、これによって類推する。各メモリキャッシュ304は複数のメモリポート220.1〜220.Nの全てに個別に結合されてもよい。例えば、メモリキャッシュ304.1はMP220.1〜220.Nに結合されてもよく、メモリキャッシュ304.2はMP220.1〜220.Nに結合されてもよく、メモリキャッシュ304.NはMP220.1〜220.Nに結合されてもよく、これによって類推する。
メモリユニット300に個別に結合された全てのメモリキャッシュ304.1〜304.Nに加えて、MP220.1〜220.4は行方向データルーティングバスを形成するために連鎖されてもよく、同時に、MP220.1とMP220.Nはそれぞれガスケットメモリ216に一端で結合される(図2に示される)。MP220.1〜220.Nのそれぞれはさらに書き込みデータ(WData)入力306と読み取りデータ(RData)出力308を含むことができる。例えば、MP220.1は書き込みデータ入力306.1と読み取りデータ出力308.1を含むことができ、MP220.2は書き込みデータ入力306.2と読み取りデータ出力308.2を含むことができ、MP220.Nは書き込みデータ入力306.Nと読み取りデータ出力308.Nを含むことができる。書き込みデータ入力306と読み取りデータ出力308はSB222.1〜222.Nの対応する出力及び入力に結合されてもよい。一つの実施形態では、書き込みデータ入力306のそれぞれと読み取りデータ出力データ308のそれぞれがベクトルデータ接続用に構成されてもよい。例えば、書き込みデータ入力306.1は一つの32x32入力又は2つの32x16入力であってもよく、そして読み取りデータ出力308.1は一つの32x32出力又は2つの32x32出力であってもよい。本明細書で使用される場合、データ入力又はデータ出力もデータポートと呼ばれてもよい。
メモリユニット300とMP220.1〜220.Nは、プライベートメモリアクセスモードと共有メモリアクセスモードの2つのアクセスモードをサポートすることができ、これらのモードがプライベートメモリアクセス方法と共有メモリアクセス方法とも呼ばれてもよい。一つのMPでは、ベクトルアドレスを使用して複数のデータユニットを読み取り又は書き込むことができる。一つのベクトルのためのこれらのアドレスは互いに異なる可能性がある。ライベートメモリアクセスモードにおいて、ベクトルアドレスのうちの一つのアドレスはスレッドインデックスに従って一つのメモリバンクにルーティングされてもよい。一つのスレッドのための全てのプライベートデータは、同じメモリバンクに配置されてもよい。共有メモリアクセスモードにおいて、各MPは、スレッドインデックスに関わらず、定義された領域のいずれかの位置にアクセスすることができる。スレッドで共有される全てのデータは、全てのメモリバンクに分散されてもよい。
メモリユニットの構造は、エラー!レファレンスソース取得できなかったに示される。一つの例として、PEアレイの各列には、複数のバスが通過する一つのMPがある可能性がある。メモリポートは、共有(例えば共有メモリアクセスモード)又はプライベート(例えばプライベートメモリアクセスモード)として構成されてもよい。各メモリポートはさらにデータキャッシュネットワークに結合されてもよい。
図3Bは本開示の実施形態によるプライベートメモリアクセスモードのための第一のメモリマッピングを概略的に示す。各メモリバンク302.1〜302.Nは複数の「ワード(word)」を含むことができる。図3Bに示す実施形態では、メモリバンクにおける各ワードは512ビット幅であってもよく、そして32つのデータユニットを含むことができ、これらのデータユニットがそれぞれ16ビットであってもよい。エラー!レファレンスソース取得できなかった。スレッド「i」の連続したデータユニットは、Si(0)、Si(1)、......と呼ばれてもよく、そしてメモリバンクiに記憶される。例えば、スレッドゼロ(「0」)のためのデータユニットS0(0)、S0(1)〜S0(31)は、メモリバンク302.1の1番目のワードに記憶されてもよく、そしてスレッド0のためのデータユニットS0(32)、S0(33)〜S0(63)は、メモリバンク302.1の2番目のワードに記憶されてもよく、これによって類推する。同様に、スレッド1(「1」)のためのデータユニットS1(0)、S1(1)〜S1(31)は、メモリバンク302.2の1番目のワードに記憶されてもよく、そしてスレッド1のためのデータユニットS1(32)、S1(33)〜S1(63)は、メモリバンク302.2の2番目のワードに記憶されてもよく、これによって類推する。また、スレッド31のためのデータユニットS31(0)、S31(1)〜S31(31)は、メモリバンク302.Nの1番目のワードに記憶されてもよく、そしてスレッド31のためのデータユニットS31(32)、S31(33)〜S31(63)は、メモリバンクN−1の2番目のワードに記憶されてもよく、これによって類推する。
この第一のメモリマッピングの一つの実施形態では、異なるスレッドのためのデータユニットは、異なるメモリバンクに記憶されてスレッドNのための第一のバンクに折り返すことを意図することができる。例えば、N=32の場合、32番目のスレッドのためのデータユニットはメモリバンク0に記憶されてもよく(例えば、メモリバンク0のデータユニットS32(0)〜S32(31))、33番目のスレッドのためのデータユニットはメモリバンク1に記憶されてもよく(例えば、メモリバンク1のデータユニットS33(0)〜S33(31))、63番目のスレッドのためのデータユニットはメモリバンクN−1に記憶されてもよく(例えば、メモリバンク0のデータユニットS63(0)〜S63(31))、これによって類推する。
図3Bの同じメモリ構造の場合、異なる方式でデータをマッピングすることができる。図3Cは本開示の実施形態によるプライベートメモリアクセスモードのための第二のメモリマッピングを概略的に示す。図3Cに示すメモリユニット300は図3Aにおける同じ複数のメモリバンクを含むことができ、図3Cのメモリバンク302.1〜302.Nの各ワードも512ビット幅であってもよく、そして各データユニットは16ビット幅である。エラー!レファレンスソース取得できなかった。スレッドiの連続したデータユニットは、依然としてメモリバンクiに記憶されてもよいが、異なるワードに記憶される。例えば、スレッド0のためのデータユニットS0(0)、S0(1)などは、メモリバンク302.1で列方向に異なるワードに記憶されてもよく、スレッド1のためのデータユニットS1(0)、S0(1)などは、メモリバンク302.2で列方向に異なるワードに記憶されてもよく、スレッド32のためのデータユニットS31(0)、S31(1)などは、メモリバンク302.Nで列方向に異なるワードに記憶されてもよく、これによって類似する。
この第二のメモリマッピングの一つの実施形態では、異なるスレッドのためのデータユニットは、異なるメモリバンクに記憶されてスレッドNとNの整数倍(例えば2N、3Nなど)の第一のバンクに折り返すことを意図することができる。そして、同じインデックスを有する異なるスレッドの一つのグループのデータユニットはメモリバンクの同じワードにマッピングされてもよい。例えば、N=32の場合、32番目のスレッドのためのデータユニットはメモリバンク302.1の異なるワードに記憶されてもよく(例えば、第二列のメモリバンク302.1のデータユニットS32(0)〜S32(99)、その中データユニットS0(m)とS32(m)が同じワードに位置し、mがスレッド内のデータインデックスである)、33番目のスレッドのためのデータユニットはメモリバンク302.2の異なるワードに記憶されてもよく(例えば、第二列のメモリバンク302.2のデータユニットS33(0)〜S33(99)、その中データユニットS1(m)とS33(m)が同じワードに位置し、mがスレッド内のデータインデックスである)、63番目のスレッドのためのデータユニットはメモリバンク302.Nの異なるワードに記憶されてもよく(例えば、メモリバンク0のデータユニットS63(0)〜S63(99)、その中データユニットS31(m)とS63(m)が同じワードに位置し、mがスレッド内のデータインデックスである)、これによって類推する。各ワードが32つのデータユニットを有するため、メモリバンク302.1の第1行の最後のデータユニットはスレッド992の第一のデータユニットS992(0)であってもよく、メモリバンク302.2の第1行の最後のデータユニットはスレッド993の第一のデータユニットS993(0)であってもよく、これによって類推し、メモリバンク302.Nの第1行の最後のデータユニットはスレッド1023の第一のデータユニットS1023(0)であってもよいまで続く。注意すべきものとして、スレッドは99つ以上のデータユニットを有することで、そしてSi(99)(例えばS0(99)など)はスレッドの最後のデータユニットではない可能性があり、そして点線はより多くのデータユニットが存在し且つメモリバンクに記憶されることを示す可能性がある。
スレッド1024とより多くのスレッドのためのデータユニットはメモリバンク0の第1列からラップアラウンドされてもよく、これによって類推する。例えば、mがインデックスである場合、スレッド1024、1056そのまま2016までのデータユニット(例えばS1024(m)、S1056(m)そのままS2016(m)まで)はメモリバンク0の一つのワードに記憶さてもよく、スレッド1025、1057そのまま1057までのデータユニット(例えばS1025(m)、S1057(m)そのままS2017(m)まで)はメモリバンク1の一つのワードに記憶さてもよく、スレッド105、1087そのまま2047までのデータユニット(例えばS1055(m)、S1087(m)そのままS2047(m)まで)はメモリバンクN−1の一つのワードに記憶さてもよい。
図3Dは本開示の実施形態による共有メモリアクセスのためのメモリマッピングの一つの例を概略的に示す。図3Dに示すメモリユニット300は図3Aにおける同じ複数のメモリバンクを含むことができ、図3Dのメモリバンク302.1〜302.Nの各ワードも512ビット幅であってもよく、そして各データユニットは16ビット幅である。この例では、共有メモリアクセスのためのメモリマッピング(連続したデータユニットA(0)、A(1))はインターリーブ方式で異なるメモリバンクに記憶されてもよい。例えば、N=32の場合、A(0)、A(1)、A(2)などはNつのメモリバンクに分散してもよく、ここでA(1)がメモリバンク0に存在し、A(2)がメモリバンク1に存在し、これによって類推して、A(31)がメモリバンクN−1に存在するまで続き、そしてラップアラウンドし、ここでA(N)がメモリバンク0のA(0)と同じワードに存在し、A(N+1)がメモリバンク1のA(1)と同じワードに存在し、これによって類推して、A(N+31)がメモリバンクN−1のA(31)と同じワードに存在するまで続き、そしてこれによって類推してラップアラウンドし、A(992)(例えばA(31N))がメモリバンク0のA(0)と同じワードに存在するまで続き、A(993)(例えばA(31N+1))がメモリバンク1のA(1)と同じワードに存在するまで続き、これによって類推してA(1023)(例えばA(31N+31))がメモリバンクN−1のA(31)と同じワードに存在するまで続く。メモリバンクの1つのワードが充填されてもよい場合、より多くの連続したデータユニットはメモリバンクの別のワードに分散してもよい。例えば、A(1024)、A(1056)〜A(2016)はメモリバンク0の別のワードに存在してもよく、A(1025)、A(1057)〜A(2017)はメモリバンク1の別のワードに存在してもよく、これによって類推して、A(1055)、A(1087)〜A(2047)がメモリバンクN−1の別のワードに存在するまで続く。
プライベート又は共有メモリアクセスモードに関わらず、メモリユニット300のキャッシュ304.1−304.Nのそれぞれは、対応するメモリバンクからのメモリワードをそれぞれ一時的に格納できる複数のキャッシュラインを含むことができる。例えば、キャッシュ304.1は、メモリバンク302.1(例えばメモリバンク0)から取得された一つのワードを一時的に記憶するようにそれぞれ構成されてもよい複数のキャッシュラインを含むことができ、キャッシュ304.2は、メモリバンク302.2(例えばメモリバンク1)から取得された一つのワードを一時的に記憶するようにそれぞれ構成される複数のキャッシュラインを含むことができ、キャッシュ304.Nは、メモリバンク302.Nから取り出された一つのワードを一時的に記憶するようにそれぞれ構成される複数のキャッシュラインを含むことができ、これによって類推する。要求された1つ又は複数のデータセグメント(例えば1つ又は複数のデータユニット)がキャッシュに存在しない場合、キャッシュミスが発生する可能性がある。一つの実施形態では、キャッシュミスが発生する場合、メモリユニット300のメモリバンク(例えば図3B、図3C又は図3D)の一つのメモリワードを一つのキャッシュラインとしてキャッシュに抽出することができる。一般的には、キャッシュサイズが大きくなるほど、メモリワードを記憶するためのキャッシュラインがより多くなり、そしてキャッシュミス率が低くなることが予想される。いくつかの実施形態では、キャッシュのメモリユニットはレジスタとして実施されてもよい。
メモリユニット212におけるデータ記憶はキャッシュ304.1〜304.Nを介してMP220.1〜220.Nによってアクセスされてもよい。各列のメモリポート(MP)は、メモリの動作、例えばアドレス計算と発行読み取り及び/又は記憶動作を実行するために同じコンポーネントが配置されてもよい。いくつかの実施形態では、一つのキャッシュ304は同時に複数のMPによってアクセスされてもよい。各MPはプライベートメモリアクセスモードと共有メモリアクセスモードの2つのアクセスモードを提供するように構成されてもよい。SIMTの性質により、異なるスレッドのためのMPにマップされたメモリ読み取り又は書き込み命令は、同一のタイプに属し、即ち共有又はプライベートである。また、MPは、配置期間におけるプライベート又は共有メモリアクセスモードのために構成されてもよい。
図4Aは本開示の実施形態によるメモリポート(MP)400のための第一のメモリアクセス配置を概略的に示す。MP400はメモリポート220の実施形態であってもよい。図4Aに示す第一のメモリアクセス配置はプライベートメモリアクセスモードのための一つの配置例であってもよい。動作中、MP400は、シーケンサから物理データパスのためのメモリポート(MP)配置を受信することができ、そしてMP配置が、該物理データパスに対してMP400がプライベートメモリアクセスモードのために構成されてもよいことを指定することができる。MP400は、アドレス計算ユニット402とカウンタ404を含むことができる。アドレス計算ユニット402は、ベースアドレスを第一の入力とし、オフセットを第2の入力とし、そしてカウンタ404から第三の入力を取得することができる。ベースアドレスは全てのスレッドのための共通アドレスであってもよい。オフセットはMP400のアドレス入力ポートに結合されてもよく、該ポートがベクトルアドレスを受信するように構成されてもよい。ベクトルアドレスは、各並列スレッドのための各アドレスを含むことができ、そしてこれらのアドレスがアドレスオフセットと呼ばれてもよい。一つの実施形態では、第一のメモリアクセス配置におけるベースアドレスはスレッド0のデータユニット0(例えば50(0))の開始アドレスを含むことができる。並列スレッドの数はPEにおけるALUの数及びベクトルアドレスとベクトルデータバスの幅によって制限される可能性がある。例えば、PEのALUベクトル内のALUの数がNであり、ベクトルアドレスがNつのアドレスを含むことができ、ベクトルデータバスがNつのデータバスを含むことができる場合、並列スレッドがNつであってもよい。オフセット入力はNつのスレッドのためのベクトルアドレスであってもよい。各アドレスオフセット(例えばベクトルアドレスにおける各アドレス)は個別にプログラム/計算されてもよい。
カウンタ404からの第三の入力は、アドレス計算ユニット402にスレッド番号(例えばインデックス)を提供することができ、したがって、カウンタ404は、スレッドカウンタと呼ばれてもよい。一つの実施形態では、アドレスベクトル、読み取りデータベクトルと書き込みデータベクトルは、異なるスレッドのデータが異なるメモリバンクにマッピングされるように、一対一のマッピングにより各メモリバンクに簡単に分割されてもよい。例えば、ベクトルアドレスのうちのi番目のアドレスは、スレッドi(小文字「i」がスレッド番号を表し、1番目のスレッドに対して0から始まることができる)に用いられてもよく、カウンタ404は、アドレス計算ユニット402にスレッド番号ベクトルを提供することができ、これにより、アドレス計算ユニット402はNつのアドレスを、この例でALUのベクトルサイズに対応するA_0、A_1、......、A_N−1として生成することができる。ベクトルアドレスのうちの各アドレスは、アドレスA_i及び対応するメモリバンクの対応するアドレス出力にマッピングされてもよい(例えば、A_0がメモリバンク0のキャッシュ304.1のためのアドレスポート410.1に結合され、A_N−1がメモリバンクN−1のキャッシュ304.Nのためのアドレスポート410.Nに結合されるなど)。ベクトル書き込みデータポートWData 406のi番目のデータラインはWD_iにマッピングされてもよい(例えばWD_0がメモリバンク0のキャッシュ304.1のための書き込みデータポート412.1に結合され、WD_N−1がメモリバンクN−1のキャッシュ304.Nのための書き込みデータポート412.Nに結合されるなど)。ベクトル読み取りデータポートRData 408のi番目のデータラインはRD_iにマッピングされてもよい(例えばRD_0がメモリバンク0のキャッシュ304.1のための書き込みデータポート414.1に結合され、RD_N−1がメモリバンクN−1のキャッシュ304.Nのための読み取りデータポート414.Nに結合されるなど)。この配置では、バススイッチが不要である可能性があり、このレベルでメモリの競合がない可能性がある。
注意すべきものとして、メモリバンクの数は、ベクトルサイズと同じである必要がない。例えば、ベクトル(例えばベクトルALU、ベクトルアドレス、ベクトルデータポート)のベクトルサイズ=V、PEアレイの列数=N、メモリユニットのメモリバンク数=Mが可能であり、V、N及びMは全て異なってもよい。便宜上、本明細書で大文字Nは、本明細書でベクトルサイズ、PEの列数及びメモリバンクの数を表すことができるが、異なるコンポーネントにおいてNで表される数は同じでも異なってもよい。
数字Nより大きいスレッド数に対して、アドレス計算ユニット402とカウンタ404はNつのメモリバンクにラップアラウンドするメモリマッピングを生成することができる。例えば、スレッド32は、メモリバンク0のキャッシュ304.1にマップされてもよく(例えば、図3B及び図3CでS32(0)がメモリバンク302.1にマッピングされる)、スレッド63は、メモリバンクN−1のキャッシュ304.Nにマップされてもよい(例えば、図3Bと図3CでS63(0)がメモリバンク302.Nにマッピングされる)。
図4Bは本開示の実施形態によるMP400のための第二のメモリアクセス配置を概略的に示す。図4Bに示す第二のメモリアクセス配置は共有メモリアクセスモードのための一つの配置例であってもい。動作中、MP400は、シーケンサから物理データパスのためのメモリポート(MP)配置を受信することができ、そしてMP配置が、該物理データパスに対してMP400が共有メモリアクセスモードのために構成されてもよいことを指定することができる。アドレス計算ユニット402は、ベースアドレスを第一の入力とし、オフセットを第2の入力とすることができ、図4Aにおける第一のメモリアクセス配置と同じである。しかし、カウンタ404は共有メモリアクセスモードに用いられなく、そしてカウンタ404からの入力を無視することができる。共有メモリのベースアドレスは全てのスレッドに共通であるが、オフセットはスレッドごとに異なる可能性がある。アドレス計算ユニット402はNつのアドレスを、この例でALUのベクトルサイズに対応するA_0、A_1、……、A_N−1として生成することができる。図4Aにおける第一のメモリアクセス配置(各アドレスA_iが1つのメモリバンクにマッピングされてもよく)と逆に、第二のメモリアクセス配置では、アドレス計算ユニット402からのNつのアドレスは、複数のアドレス選択ユニット(例えば、「選択2」ユニット416.1〜416.N)に送信されてもよい。各アドレス選択ユニット416.1〜416.Nは、マスクを入力(例えば「バンク0」、.....、及び「バンクN−1」)として用いることができ、そして特定のメモリバンクのアドレスに対して、対応する選択ユニットによって選択することができ、そのためいくつかのアドレスを選択することができる。選択可能なアドレスの上限数は、設計上の考慮事項に依存してもよく、例えば2、3又はそれ以上である。
また、ベクトルアドレスは固定数のアドレスを有するため、複数のアドレスが1つのメモリバンクに向けられている場合、1つ又は複数のメモリバンクが指定されたアドレスを有しない可能性がある。選択されたアドレスはメモリバンクのキャッシュのためのメモリポート(例えば、メモリバンク0のキャッシュ304.1のためのアドレスポート426.1、メモリバンクN−1のキャッシュ304.Nのためのアドレスポート426.Nなど)にマッピングされてもよい。例えば、一つの実施例では、Nつのアドレスから最大2つのアドレスを選択することができ、そして各アドレスポート426.1〜426.Nは、対応するメモリバンクに最大2つのメモリアドレスを送信するように構成されてもよい。
1つのメモリバンクに対して複数のアドレスを選択できるため、書き込みデータ選択ユニット(例えば「選択2」ユニット418.1〜418.N)と読み取りデータ選択ユニット(例えば「選択」ユニット420.1〜420.N)を提供し、複数のデータポートをベクトルデータポートWData 406とRData 408から一つのメモリバンクにマッピングすることができる。書き込みデータ選択ユニット418.1〜418.Nのそれぞれは、対応するデータ選択ユニット416.1〜416.Nから入力を取得し、書き込みデータラインWD_0〜WD_N−1からの複数の書き込みデータラインを、選択されたメモリバンクのための対応する書き込みデータポート(例えば、メモリバンク0のキャッシュ304.1のための書き込みデータポート422.1、メモリバンクN−1のキャッシュ304.Nのための書き込みデータポート422.N)にマッピングすることができる。読み取りデータ選択ユニット420.1〜420.Nのそれぞれは、対応するデータ選択ユニット418.1〜418.Nから送信された、対応するデータ選択ユニット416.1〜416.Nから入力を取得し、読み取りデータラインRD_0〜RD_N−1からの複数の読み取りデータラインを、選択されたメモリバンクのための対応する読み取りデータポート(例えば、メモリバンク0のキャッシュ304.1のための読み取りデータポート424.1、メモリバンクN−1のキャッシュ304.Nのための読み取りデータポート422.N)にマッピングすることができる。Nつのアドレスから最大2つのアドレスを選択することができる実施形態では、アドレスポート426.1〜426.N、書き込みデータポート422.1〜422.Nと読み取りデータポート424.1〜424.Nの幅はアドレスポート410.1〜410.N、書き込みデータポート412.1〜412.Nと読み取りデータポート414.Nの幅の2倍であってもよい。
プロセッサの実施形態は、大量のALUを含み、大規模な並列スレッドをサポートすることができる。メモリアクセスが非常に忙しい可能性がある。要求を満たすためにマルチポートメモリを使用すると、コストが非常に高い可能性がある。大量のメモリバンクを使用すると、複雑さも非常に高くなる可能性がある。プライベートメモリアクセスの例は、メモリ構造の複雑さを軽減し、並列処理のための多くの典型的なメモリアクセスモードをサポートすることができる。いくつかの典型的なプライベートメモリアクセスモードがリストされる。
Figure 0006960479
Figure 0006960479
いくつかの実施形態では、プライベートメモリアクセスにより、全てのスレッドからのランダムスデータアクセスが同時に許可されてもよく、しかし、スレッドごとに異なるメモリ領域にアクセスすることができる。これにより、プログラマーは、複雑なデータのベクトル化と基礎となるプロセッサハードウェアアーキテクチャの詳細な知識を必要とせずに、従来のスタイルでソフトウェアを作成することができる。これにより、同じ命令マルチスレッド(SIMT)プログラミングがPEアレイの実施形態に応用されてもよい。即ち、1つの命令が1つのPEの複数のスレッドによって同時に実行されてもよい。
オーバーラップしない性質のため、合計スループットは、全てのスレッドのスループットの合計になる可能性がある。プライベートメモリアクセスモードの実施形態は、各スレッドからの同時アクセスによる大きなスループットをサポートすることができる。第一及び第二のメモリデータマッピングは典型的なプライベートメモリアクセスモードで最小のメモリ競合を許可することができる。プライベートメモリアクセスの実施形態はメモリシステムの複雑さを低減させることができる。メモリバンクの数を大幅に削減することができる。並列キャッシュ構造は、キャッシュ内の各コンテンツが一意である可能性があるため、合計キャッシュサイズを削減することができる。また、プライベートメモリアクセスの実施形態は、複数のメモリポートからの同時キャッシュアクセスを許可することにより、メモリバンクへのアクセスを大幅に減らすことができる。
一つの実施形態では、32x32のALUを有するPEアレイサイズの場合、プライベートメモリアクセス配置を使用すると、32つのメモリバンクのみを必要とする可能性がある(例えば、図4Aに示される)。各スレッドで使用される異なるアドレスをサポートするための従来設計に対して、これは1024つのメモリバンクからのメモリバンクの数を大幅に削減させることができる。
異なるメモリアクセスモードでは、異なるマッピング方法を使用することができ、図3Bと図3Cのマッピングは図4Aに示すメモリアクセス配置の実施形態によってアドレス生成命令を使用してサポートされてもよい。
図3Bの第一のメモリマッピングは表1におけるケース1、ケース2、ケース3とケース4をよく処理することができる。表1におけるケース6では、範囲がキャッシュサイズ内であれば、よく処理することもできる。図3Cの第二のメモリマッピングは表1におけるケース1、ケース2、ケース3とケース5をよく処理することができる。
いくつかの実施形態では、レジスタオーバーフローが発生する可能性がある。レジスタオーバーフローは、コンパイラがマシンコードを生成している時に、マシンが有するレジスタの数よりも多くのライブ変数があるため、一部の変数がメモリに転送又はオーバーフローされる可能性があるというシナリオを指す可能性がある。レジスタオーバーフローのためのメモリは、各スレッドに対してプライベートである可能性があり、これらのオーバーフローした変数はプライベートメモリに記憶される必要がある可能性がある。レジスタオーバーフローのための全てのアドレスオフセットが各スレッドに対して同じである可能性があるため、それは表1のケース5の非ユニティストライドモードに類似しており、図3Cに示すように、オーバーフローした変数が第二のメモリマッピングを使用して記憶されてもよく、メモリの競合がない可能性がある。
共有メモリアクセスモードの例は、メモリ構造の複雑さを軽減し、並列処理のための多くの典型的なメモリアクセスモードをサポートすることができる。いくつかの典型的な共有メモリアクセスモードがリストされる。
Figure 0006960479
Figure 0006960479
いくつかの実施形態では、共有メモリアクセスにより、各並列スレッドからのランダムデータアクセスが同時に許可されてもよい。全てのスレッドは、メモリユニットの共通領域のいずれかの箇所にアクセスすることができる。一つの実施形態では、共通領域は、全てのメモリバンクを含む共有メモリ空間であってもよい。別の実施形態では、共通領域は、複数のメモリバンクにわたる共有メモリ空間であってもよい。これにより、プログラマーは、複雑なデータのベクトル化と基礎となるプロセッサハードウェアアーキテクチャの詳細な知識を必要とせずに、従来のスタイルでソフトウェアを作成することができる。これにより、SIMTプログラミングがPEアレイの実施形態に応用されてもよい。
共有メモリアクセスの実施形態はメモリシステムの複雑さを低減させることができる。メモリバンクの数を大幅に削減することができる。並列キャッシュ構造は、キャッシュ内の各コンテンツが一意である可能性があるため、合計キャッシュサイズを削減することができる。また、共有メモリアクセスの実施形態は、複数のメモリポートからの同時キャッシュアクセスを許可することにより、メモリバンクへのアクセスを大幅に減らすことができる。
注意すべきものとして、図2に示すように、各MPは2つの読み取りデータポート(メモリユニット212からMPへの2つの矢印と対応するSBへの2つの矢印、例えばMP220.1の場合、上部のメモリユニット212からの2つの矢印と下部のSB222.1への2つの矢印)と2つの書き込みデータポート(メモリユニット212への2つの矢印と対応するSBからの2つの矢印、例えば、MP220.1の場合、上部のメモリユニット212からの2つの矢印と下部のSB222.1への2つの矢印)を提供することができ、次のMP又はガスケットメモリ216からの2つの入力と次のMP又はガスケットメモリ216への2つの出力(例えば、MP間の左から右へ、MP220.Nからガスケットメモリ216へ、ガスケットメモリ216からMP220.1への2つの水平矢印)をさらに提供することができる。即ち、いくつかの実施例では、MP400は、2つの並列データアクセス動作のための2つの並列メモリアクセス、例えば2つの読み取り、2つの書き込み又は1つの読み取りと1つの書き込みを提供するように図4A及び図4Bに示す重複する一つのグループのコンポーネントを有することができる。いくつかの実施形態では、2つの並列データアクセス動作はベクトルデータ動作であってもよい。即ち、2つの読み取り動作は2つのベクトルデータ読み取り(例えば、2Nセグメントのデータを読み取り、Nが並列スレッドの数である)であってもよく、2つの書き込み動作は2つのベクトルデータ書き込み(例えば、2Nのセグメントのデータを書き込み、Nが並列スレッドの数である)であってもよく、一つの読み取りと一つの書き込み動作は一つのベクトルデータ読み取りと一つのベクトルデータ書き込み(例えば、Nセグメントのデータを読み取り、Nセグメントのデータを書き込み、Nが並列スレッドの数である)であってもよい。例えば、一つの実施形態では、並列する一つの読み取りと一つの書き込み動作を実行するために、MPは同じ列のPEのためにNセグメントのデータを読み取り、同時に前の列のPEによって生成されたNセグメントのデータを書き込むことができる。
一つの実施形態では、32x32のALUを有するPEアレイサイズの場合、共有メモリアクセス配置を使用すると、32つのメモリバンクのみを必要とする可能性がある(例えば、図4Bに示すように)。各スレッドで使用される異なるアドレスをサポートするための従来設計に対して、これは1024つのメモリバンクからのメモリバンクの数を大幅に削減させることができる。
図5は本開示の実施形態によるスイッチボックス(SB)500を概略的に示す。SB500はSB222の実施形態であってもよく、そして複数のデータ入力とデータ出力、及びデータ出力をデータ入力に結合してデータ切り替えを行うための相互接続部材を含むことができる。SB500のデータ入力はデータ入力502.1、502.2、512.1、512.2、514.1と514.2を含むことができる。SB500のデータ出力はデータ出力504.1、504.2、506.1、506.2、508.1、508.2、510.1と510.2を含むことができる。SB500はさらに配置バッファ518及び対応する配置入力516を含むことができる。配置バッファ518は、先入れ先出しバッファとして実施されてもよく、C−FIFO518と呼ばれる。配置入力516は、外部から配置バスに結合されてもよく、SB500がシーケンサ206から配置を受信するために該配置バスがシーケンサ206に結合される。SB500のための配置はSB配置と呼ばれてもよい。また、SB500はさらに複数のカウンタ520.1〜520.8を含むことができ、該複数のカウンタがそれぞれデータ出力に対応し、例えば、カウンタ520.1がデータ出力504.1に用いられ、カウンタ520.2がデータ出力504.2に用いられ、カウンタ520.3がデータ出力506.1に用いられ、カウンタ520.4がデータ出力506.2に用いられ、カウンタ520.5がデータ出力508.1に用いられ、カウンタ520.6がデータ出力508.2に用いられ、カウンタ520.7がデータ出力510.1に用いられ、カウンタ520.8がデータ出力510.2に用いられる。
SB500の各データ入力はいくつかのデータ出力に結合されてもよい。例えば、データ入力502.1はデータ出力506.1、506.2、508.2、510.1と510.2に結合されてもよく、データ入力502.2はデータ出力506.1、506.2、508.1、510.1と510.2に結合されてもよく、データ入力512.1はデータ出力504.1、504.2、506.1、506.2と508.1に結合されてもよく、データ入力512.2はデータ出力504.1、504.2、506.1、506.2と508.2に結合されてもよく、データ入力514.1はデータ出力504.1、506.1、506.2、508.1と510.2に結合されてもよく、データ入力514.1はデータ出力504.2、506.1、506.2、508.2と510.1に結合されてもよい。
外部的に、PEアレイ214内のSB500の位置に応じて、データ入力502.1及び502.2、データ出力504.1及び504.2は、MP220又は別のSB222(例えば複数行のPEアレイ内)に結合されてもよい。データ入力514.1及び514.2はPE218又はガスケットメモリ216に結合されてもよい。データ入力512.1及び512.2、データ出力510.1及び510.2は、別のSB222(例えば複数行のPEアレイ内)又はICSB224に結合されてもよい。データ出力506.1、506.2、508.1及び508.2はPE218に結合されてもよい。データ出力506.1、506.2、508.1及び508.2から出力されたデータ信号は、A、B、C、Dとして示されてもよく、そしてデータ入力514.1、514.2から入力されたデータ信号は、X、Yとして示されてもよい。これらのデータ信号A、B、C、D及びX、Yは、本明細書で説明されるように、PE218への入力データ信号、PE218からの出力データ信号であってもよい。
データ出力のカウンタ520.1−520.8のそれぞれは、通過するデータのカウントを個別に行うことができる。1つ又は複数の配置がC−FIFO518にロードされてもよい場合、各配置はカウント数を指定することができる。一つの配置の実行期間に、全てのカウンタはデータが通過する回数を個別にカウントすることができる。全てのカウンタが配置によって指定されたカウント数に達する場合、次の配置を応用することができる。類似の方法はICSB224、PE218、ガスケットメモリ216とメモリポート220の内部に応用されてもよい。これらのカウンタがこのようなカウンタを備える可能性のある各コンポーネントの配置と再構成を容易にするため、これらのカウンタは再構成カウンタと呼ばれてもよく、そしてこのようなカウンタを備えるコンポーネントは、再構成可能ユニットと呼ばれてもよい。プロセッサ200の実施形態は、様々な再構成可能ユニットを使用して大規模な並列データ処理を提供することができ、そして再構成可能並列プロセッサ(RPP:reconfigurable parallel processor)と呼ばれてもよい。
図6は本開示の実施形態による処理素子(PE)600を概略的に示す。PE600はPE218の実施形態であってもよい。PE600は算術論理演算ユニット(ALU)602、複数のデータバッファ(例えば、D−FIFO604.1、604.2、604.3及び604.4)、カウンタ606、複数のデータ出力(例えば608.1及び608.2)、複数のデータ入力(例えば610.1、610.2、610.3及び610.4)、配置入力612と配置バッファ(例えばC−FIFO)614)を備えることができる。一つの実施形態では、ALU602は、1つのALU(例えば、1つのALUは、一つのセグメントのデータを一回処理するように構成され、スカラーALUと呼ばれてもよい)であってもよい。いくつかの他の実施形態では、ALU602は、ALUのベクトル(又はベクトルALUと呼ばれる)、例えば、NつのALU(NがALUのベクトルサイズと呼ばれてもよい)であってもよく、同じ命令マルチデータ(SIMD)はベクトルの全てのALUに応用されてもよい。注意すべきものとして、スカラーALUはベクトルサイズが1であるベクトルALUの特殊な例である可能性がある。
データ入力610.1、610.2、610.3及び610.4から受信されたデータ信号はA、B、C、Dとして示されてもよく、そしてデータ出力608.1及び608.2から出力されたデータ信号は、X、Yとして示されてもよい。ALU602が1つのALUであってもよい実施形態では、各データ入力610.1、610.2、610.3又は610.4及び各データ出力608.1又は608.2は、Mビット幅(それがALUの幅と一致することができる)を有することができる。例えば、8ビットのALUの場合、各入力と出力は8ビットであってもよく、16ビットのALUの場合、各入力と出力は16ビットであってもよく、32ビットのALUの場合、各入力と出力は32ビットであってもよく、これによって類推する。また、各入力データ信号A、B、C、Dと各出力データ信号X、Yは、Mビットであってもよい。ALU602がALUのベクトルであってもよい実施形態では、各データ入力610.1、610.2、610.3又は610.4はNつのMビットの入力のベクトルであってもよく、各データ出力608.1又は608.2はNつのMビットの出力のベクトルであってもよい。また、各入力データ信号A、B、C、Dと各出力データ信号X、Yは、NxMビットであってもよい。
データバッファ604.1〜604.4は、入力610.1、610.2、610.3及び610.4に結合され、データセグメントを一時的に記憶することができる。しかしながら、いくつかの実施形態では、データバッファは出力として構成されてもよい。PEが独立して動作することを許可するように、D−FIFO604.1−604.4は、PEのタイミングを分離することに用いられてもよい。一つの実施形態では、バッファはFIFO(例えば、データバッファのためのD−FIFO、配置バッファのためのC−FIFO)として実施されてもよい。
配置バッファC−FIFO614は、配置入力612から配置を受信することができ、該配置入力が配置バスを介して外部からシーケンサ206に結合されてもよく、そしてデータパスの実行が開始する前に受信された配置を記憶することができる。PE600のための配置はPE配置と呼ばれてもよい。PE600は、1つの配置のための命令で静的にプログラムされてもよく、例えば、命令がパイプライン段階としてPE600にプログラムされてもよい。1つの配置期間に、命令を変更しなくてもよい。配置を行う場合、D−FIFO610.1、610.2、610.3及び610.4にデータがあり、出力ポート608.1及び608.2が忙しくないと、ALU602(例えば、特定の実施形態の1つのALU又はALUのベクトルに依存する)の動作をトリガすることができる。配置パラメータのうちの一つは命令のための指定された実行回数に対する数であってもよい。カウンタ606は、指定された数でプログラムされてもよく、命令を実行することによりデータを処理する回数をカウントすることに用いられる。実行の回数が指定された数に達する場合、新しい配置を応用することができる。したがって、各PEで再構成能力を提供することができる。一つの実施形態では、命令のための指定された実行回数はNUM_EXECと呼ばれ、このNUM_EXECが1つの配置のためのデータパスにわたって使用されてもよい。
複数行のPEアレイ214を有する一つの実施形態では、各列内のPEは機能的に互いに異なってもよいが、各行に沿ったPEは、重複パターン(例えば機能的に重複する)に従う。第1行のPEにおけるALUは第一のグループの命令を実行することができ、第2行のPEにおけるALUは第一のグループの命令と異なる第二のグループの命令を実行することができる。即ち、PE600の異なる実施形態では、ALU602は、異なる構造又は異なる機能的コンポーネントを含むことができる。いくつかの実施形態では、プロセッサの1行又は複数行のPEは、比較的単純で少ないスペースを使用するALUを含むことができ、同じプロセッサの別の行のPEは、比較的複雑でより多くのスペースを使用するALUを含むことができる。比較的単純なALUによって実行される一つのグループの命令は比較的複雑なALUによって実行される一つのグループの命令と異なってもよい。例えば、PE600の一つの実施形態は、一つのグループ命令を実行するALU602(例えば、一つのALU又はALUのベクトル)を有することができ、これらの命令が比較的単純な構造、例えば加算(例えばA+B)、減算(例えば、A−B)などを必要とするがこれらに限定されなく、PE600の別の実施形態は命令を実行するALU602を有することができ、これらの命令がより複雑な構造、例えば乗算(例えば、AにBを掛ける(A*B)、MAD(積和演算(MAC)操作)(例えばA*B+C)を必要とするがこれらに限定されない。
図6Bは本開示の別の実施形態による別の処理素子(PE)620を概略的に示す。処理素子620はPE218の代替実施形態であってもよい。図6Bに示すように、PE620は処理素子600に類似する構造を有し、そして複数のインジケータ「S」622.1〜622.4を含み、これらのインジケータのそれぞれが1つの対応するD−FIFOに関連付けられてもよい点で異なる。例えば、インジケータ622.1はD−FIFO604.1に関連付けられてもよく、インジケータ622.2はD−FIFO 604.2に関連付けられてもよく、インジケータ622.3はD−FIFO604.3に関連付けられてもよく、インジケータ622.4はD−FIFO604.4に関連付けられてもよい。これらのインジケータは、静的読み取り配置(静的ロード配置とも呼ばれる)に用いられてもよい。例えば、一つの配置期間に、該配置に従って、命令がPEによって指定された回数(例えばNUM_EXEC=3)実行されるように設定されてもよい。命令を実行すると、4つのD−FIFO604.1〜604.4からの全てのデータを使用することができる。インジケータ622.2を設定してもよく、他のインジケータ622.1、622.3及び622.4を設定しなくてもよい。命令を繰り返すとともに、D−FIFO604.2のデータを使用することができるが、D−FIFO604.1、604.3及び604の新しいデータが命令の繰り返しごとに用いられてもよい。
図7は本開示の実施形態による列間スイッチボックス(ICSB)700を概略的に示す。ICSB700はICSB7224の実施形態であってもよく、そして複数のデータ入力とデータ出力、及びデータ出力をデータ入力に結合してデータ切り替えを行うための相互接続部材を含むことができる。ICSB700のデータ入力はデータ入力704.1、704.2と710.1〜710.4を含むことができる。ICSB700のデータ出力はデータ出力506.1、506.2、506.1と708.1〜708.4を含むことができる。ICSB700はさらに配置バッファ702及び対応する配置入力712を含むことができる。配置バッファ702は、先入れ先出しバッファとして実施されてもよく、C−FIFO702と呼ばれる。配置入力712は、外部から配置バスに結合されてもよく、該配置バスがシーケンサ206に結合される。また、ICSB700はさらに複数のカウンタ714.1〜714.6を含むことができ、該複数のカウンタがそれぞれデータ出力に対応し、例えば、カウンタ714.1がデータ出力708.1に用いられ、カウンタ714.2がデータ出力708.2に用いられ、カウンタ714.3がデータ出力708.3に用いられ、カウンタ714.4がデータ出力708.4に用いられ、カウンタ714.5がデータ出力706.1に用いられ、カウンタ714.6がデータ出力706.2に用いられる。
ICSB700の各データ入力はいくつかの選択されたデータ出力に結合されてもよい。例えば、データ入力704.1はデータ出力708.1〜708.4に結合されてもよく、データ入力704.2はデータ出力708.1〜708.4に結合されてもよく、データ入力710.1はデータ出力706.1〜706.2、及び708.1に結合されてもよく、データ入力710.2.2はデータ出力706.1〜706.2、及び708.2に結合されてもよく、データ入力710.3はデータ出力706.1〜706.2、及び708.3に結合され、データ入力710.4はデータ出力706.1〜706.2、及び708.4に結合されてもよい。
外部的に、データ入力704.1及び704.2、データ出力706.1及び706.2は、SB222に結合されてもよい。データ入力710.1〜710.4は隣接するICSB224又はガスケットメモリ216に結合されてもよい。データ出力708.1〜708.4は別の隣接するICSB224又はガスケットメモリ216に結合されてもよい。
データ出力のカウンタ714.1−714.6のそれぞれは、通過するデータのカウントを個別に行うことができる。1つ又は複数の配置がC−FIFO702にロードされてもよい場合、各配置はカウント数を指定することができる。ICSB700のための配置はICSB配置と呼ばれてもよい。PEアレイ214の一つの配置の実行期間に、全てのカウンタはデータが通過する回数を個別にカウントすることができる。全てのカウンタが配置によって指定されたカウント数に達する場合、次の配置を応用することができる。この実施形態はSB222、PE218、ガスケットメモリ216とメモリポート220の内部に応用されてもよい実施形態に類似することができる。
図8は本開示の実施形態によるガスケットメモリ800を概略的に示す。ガスケットメモリ800は図2に示すガスケットメモリ216の実施形態であってもよい。ガスケットメモリ800はデータを一時的に記憶するための複数のデータバッファを備えることができる。データバッファは、先入れ先出し(FIFO)バッファとして実施されてもよく、そしてD−FIFO(例:D−FIFO802.1−802.F、Fが8以上の整数である)と呼ばれる。また、ガスケットメモリ800は、複数のデータ入力(例えば、814.1−814.2、816.1−816.2及び818.1−818.4)、複数のデータ出力(例えば、808.1−808.2、810.1−810.2及び812.1−812.4)、入力配置バッファ(例えば入力C−FIFO804)、出力配置バッファ(例えば出力C−FIFO806)、配置入力816、複数の入力カウンタ820.1−820.L(Lが4以上の整数である)、及び複数の出力カウンタ822.1−822.2を含むことができる。
MP220.N、PE218.N及びICSB224.Nからの外部接続は、それぞれデータ入力814.1−814.2、816.1−816.2及び818.1−818.4での入力として使用されてもよい。また、MP220.1、SB222.1及びICSB224.1への外部接続は、それぞれデータ出力808.1−808.2、810.1−810.2及び812.1−814.4で出力を生成することができる。配置入力816は、シーケンサ206から配置を受信するためにガスケットメモリ800の配置バスを介して外部からシーケンサ206に結合されてもよい。ガスケットメモリ800のための配置はガスケットメモリ配置と呼ばれてもよい。シーケンサ206から入力配置と出力配置という2種類の配置を受信することができる。入力C−FIFO804は、LつのD−FIFO802.5−802.Fから選択された、入力ICSBポート818.1−818.4に結合されるいくつかのデータFIFOのための入力配置をこれらの選択されたD−FIFOの入力として記憶することができる。出力C−FIFO806は、LつのD−FIFO802.5−802.Fから選択された、ICSBポート812.1−812.4に結合されるいくつかのデータFIFOのための配置を記憶することができる。
ICSB入力を記憶するためのガスケットD−FIFO802.5−802.Fの数は入力又は出力ICSBポートの数以上になる可能性がある。いくつかの実施形態では、本明細書で説明されるように、物理データパスの少なくとも一部をバイパスできるデータ接続が存在することができる。例えば、同じ物理データパス配置では、1つのPE218によって生成された実行結果は、別のPE218に対して必要ではない可能性があるが、将来の配置で使用されてもよい。実行結果のためのこれらのデータ信号は、SB222及びICSB224を介してガスケットメモリ216にルーティングされ、将来の配置のためにガスケットメモリ216のD−FIFOに記憶されてもよい。したがって、いくつかの実施形態では、ガスケットメモリ800は、入力ポート又は出力ポートの数よりも多くのD−FIFOを有してもよい。
データ入力での入力カウンタ820.1−820.Lのそれぞれとデータ出力での出力カウンタ822.1−822.4のそれぞれは通過するデータのカウントを個別に行うことができる。1つ又は複数の入力配置と出力配置が入力C−FIFO804と出力C−FIFO806にロードされてもよい場合、各配置はカウント数を指定することができる。一つの配置の実行期間に、全てのカウンタはデータが通過する回数を個別にカウントすることができる。全てのカウンタが配置によって指定されたカウント数に達する場合、次の配置を応用することができる。
図9Aは本開示の実施形態による実行カーネル900の依存グラフを概略的に示す。一つの実施形態では、1つのループ(例えば、1つのルーチン又は1つのサブルーチン)で実行されてもよい命令のシーケンスは、実行カーネルと呼ばれてもよく又は簡単にカーネルと呼ばれてもよい。グループ内の命令には依存関係がある可能性がある。例えば、カーネル900は、依存グラフでA−Kとして示される命令を有することができる。命令Aは、カーネル900の依存グラフの第一の命令であってもよい。命令Bと命令Cは、命令Aの出力を必要とする可能性がある。命令Dと命令Kの両者は命令Bの出力を必要とする可能性がある。命令Dも命令Cの出力を必要とする可能性がある。命令Eと命令Fの両者は命令Dの出力を必要とする可能性がある。命令G、命令Hと命令Iは命令Fの出力を必要とする可能性がある。命令Fの出力に加えて、命令Gは命令Eの出力を必要とする可能性がある。命令Jはそれぞれ命令G、命令Hと命令Iの出力を必要とする可能性がある。また、最後、命令Kは命令Bと命令Iの出力を必要とする可能性がある。本開示の実施形態によれば、カーネル900の依存グラフは、プロセッサによって実行されるデータパスにマッピングされてもよい。
図9Bは本開示の実施形態によるプロセッサにマッピングされる仮想データパス(VDP:virtual data path)における図9Aの実行カーネル900の依存グラフを概略的に示す。いくつかの実施形態では、カーネルの依存グラフからプロセッサへのマッピングは、複数の要因、例えば、PEアレイのサイズ、PE間の接続、メモリアクセス能力などによって制限される可能性がある。注意すべきものとして、図2におけるプロセッサ200は1列のPEを備えたプロセッサの一つの実施形態を概略的に示しているが、図9Bに示す実施形態では、カーネル900の仮想データパスは、2行(「2」)PEを有するプロセッサにマッピングされてもよい。一般的には、本開示の実施形態によるプロセッサは、1−D又は2−Dデータパス(処理素子(PE)アレイと相互接続部材を含む)を利用して大規模な並列データを処理することができる。各データパスは複数のセクションに分割されてもよい。1−Dデータパスでは、セクションは1列にメモリポート、スイッチボックス、PE及びICSBを含むことができ、2−Dデータパスでは、セクションは1列にメモリポート、2つ又はそれ以上のスイッチボックス、2つ又はそれ以上のPE及びICSBを含むことができる。データパスを各セクションで同一にすることができる。これにより、カーネルの依存グラフが仮想データパスにマッピングされることを許可し、該仮想データパスが1次元のデータパスセクションの必要な回数の繰り返し(例えば制限されなく、又はさらには理論的に無限)を含むことができる。例えば、カーネルの命令はPEの列にマッピングされてもよく、行方向に繰り返して拡張する(例えば、必要に応じて行の先頭からループバックする)ことができる。
図9Cは本開示の実施形態によるプロセッサの物理データパスに分割される図9Bの仮想データパスを概略的に示す。一つの実施形態では、コンパイラの作業を簡素化するために、物理データパス(PDP)が繰り返し構造を有するようにすることができる。例えば、各列が同じであってもよく、各PDPは同じ量の重複列を含むことができる。図9Cに示すように、2x2のPEアレイに対して、図9BのVDPは3つのPDP(例えばPDP1、PDP2及びPDP3)に分割されてもよく、そのためこの3つのPDPが同じ構造を有することができる。2x2のPEアレイは、RPPの実施形態のPEアレイ全体であってもよく、又はRPPの別の実施形態のNxN(例えば、例としてNが32である)のPEアレイの一部であってもよい。1つのPDPのPE間(例、A−B及びC、B−D、C−Dなど)、2つの連続したPDPの間(例D−E及びF、G−J、H−J、F−Iなど)と連続しないPDPの間(例えばB−K)に多くの接続が存在する可能性がある。一つのPDPでは、PEアレイ内の全てのPEが現在のPDPのための配置を応用することができ、一つの命令からのデータが依存性に従って別の命令に直接流れることができる。例えば、PEはPDP1で命令Aを実行するように配置され、このPEからのデータはこのPEから、命令B及びCを実行するように構成されるPEに直接流れることができる。PDP間では、1つのPDPからのデータは、一時的に記憶するようにガスケットメモリに流れることができる。データは、新しい配置のうちの次の物理データパスへの入力としてガスケットメモリから流れることができる。例えば、一つの配置では、PEはPDP1で命令Bを実行するように構成されてもよく、このPEからのデータはガスケットメモリに記憶されてもよく、将来の配置においてPDP3で命令Kを実行するように構成されるPEの入力として使用される。
図10は本開示の実施形態によるプロセッサのためのパイプライン動作を概略的に示す。図10に示すパイプライン動作の例は図9Cの4つのPE(PE0、PE1、PE2とPE3)にマッピングされた2x2PEアレイの物理データパスであってもよい。図9Cに示すように、仮想データパスのA、B、C、…Kの命令は、PDP即ちPDP1、PDP2とPDP3に分割されてもよい。PE0は、PDP1で命令Aを実行し、PDP2で命令Eを実行し、PDP3で命令Iを実行するように構成されてもよい。PE1は、PDP1で命令Bを実行し、PDP2で命令Fを実行し、PDP3で命令Jを実行するように構成されてもよい。PE2は、PDP1で命令Cを実行し、PDP2で命令Gを実行し、PDP3で命令Kを実行するように構成されてもよい。PE3は、PDP1で命令Dを実行し、PDP2で命令Hを実行し、PDP3で命令を実行しないように構成されてもよい。
動作中、1つのPEの全ての並列スレッドが同じ命令を実行することができ、各命令が1つのPEでパイプライン段階として複数回実行されてもよい。即ち、各PEはパイプライン段階として命令をNUM_EXEC回実行するように構成されてもよい。例えば、各PEがベクトルサイズが1であるALUベクトルを含むことができる実施形態では、各命令は、各PEでALUベクトルにより4回実行するように構成されてもよい。4回の実行は各スレッドが異なる陰影で処理される4つのスレッドによって表されてもよい。例えば、PDP1では、PE0は命令Aを4回実行するように構成されてもよく、PE1は命令Bを4回実行するように構成されてもよく、PE2は命令Cを4回実行するように構成されてもよく、PE3は命令Dを4回実行するように構成されてもよい。PDP2では、PE0は命令Eを4回実行するように構成されてもよく、PE1は命令Fを4回実行するように構成されてもよく、PE2は命令Gを4回実行するように構成されてもよく、PE3は命令Hを4回実行するように構成されてもよい。PDP3では、PE0は命令Iを4回実行するように構成されてもよく、PE1は命令Jを4回実行するように構成されてもよく、PE2は命令Kを4回実行するように構成されてもよく、PE3は命令を実行しないように構成されてもよい。この実施形態では、異なる命令間にデータ依存性が存在する可能性があるため、別の命令に依存する命令を実行するスレッドが時間的に後に実行されてもよい。例えば、命令Bが命令Aの実行結果からのデータに依存してもよく、そのため、命令Bを実行する第一のスレッドは後の周期で、命令Aを実行するスレッドに従うことができ、命令Bを実行する第二のスレッドは後の周期で、命令Aを実行するスレッドに従うことができ、命令Bを実行する第三のスレッドは後の周期で、命令Aを実行する第三のスレッドに従うことができ、命令Bを実行する第四のスレッドは後の周期で、命令Aを実行する第四のスレッドに従うことができる。静的再構成スキームと命令の依存性により、DPD再構成中にいくつかの時間が失われる可能性があり、例えば、PDP1からPDP2への移行中に、PE2が1つのアイドル周期を有する可能性がある。各PEが、ベクトルサイズNが1よりも大きいALUを有する実施形態では、各PEはNつの並列スレッドを一回実行することができ、図10の各陰影付きスレッドはNつのスレッドを表すことができる。
様々な実施形態では、ガスケットメモリは、再構成中に効率損失を低減する方法を提供することができる。例えば、再構成(例えば、PDP1の命令CとPDP2の命令Gの間のPE2の再構成)中にいくつかのアイドルスロットが存在する可能性があり、スレッドの数が多い場合、アイドルスロットはビジー周期合計と比較して重要ではない可能性がある。
図11A−図11Iは本開示の実施形態によるプロセッサの配置プロセスを概略的に示す。配置プロセスはデータパス(DP)配置及び再構成を示すことができる。シーケンサユニット(SEQ)1102は、シーケンサ206の実施形態であってもよく、各PE(例えば、PE_0 1104、PE_1 1106とPE_2 1108)とスイッチボックス(SB)(例えばSB_1 1110、SB_2 1112、ICSB_1 1114とICSB_2 1116)に命令/配置をスケジューリングすることができる。PE 1104、1106及び1108のそれぞれはPE218の実施形態であってもよい。SB 1110及び1112のそれぞれはSB222の実施形態であってもよい。ICSB1114及び1116のそれぞれはICSB224の実施形態であってもよい。図11AのPE及びSB(SB及びICSBを含む)のそれぞれは、配置バス(SEQ1102からの点線として示される)を介してSEQ1102に結合されてもよい。この例では、実行カーネルの仮想データパス(VDP)は、2つの物理データパス(PDP)にマッピングされてもよい。注意すべきものとして、この例示的なカーネルは、図9A−図9C及び図10に示すデータパスの例と異なってもよい。PEは、図10の例のPE0、PE1、PE2及びPE3と区別するために、数字の前に下線を有する(例え11A−図11IのPE_0、PE_1及びPE_2)ように示されてもよい。
図11A−図11Iの配置プロセスの例では、第一のPDP(例えば、それは、図9Cのデータパスの例と区別するために数字の前に下線を有するPDP_1と呼ばれてもよい)は、データルーティングPE_0→PE_1、PE_1→PE_2を使用することができ、第二のPDP(例えば、それは図9Cに示すデータパスの例と区別するためにPDP_2と呼ばれてもよい)は異なるルーティングPE_0→PE_1、(PE_0,PE_1)→PE_2を使用することができる。即ち、1番目のPDPでは、PE_1はその動作のためにPE_0の出力に依存することができ、PE_2はその動作のためにPE_1の出力に依存することができ、2番目のPDPでは、PE_1はその動作にPE_0の出力に依存することができ、PE_2はその動作のためにPE_1の出力とPE_0の出力の両者に依存することができる。
エラー!レファレンスソース取得できなかった。図11Aは、最初にDP全体が構成されていないことを示す。全てのPEはデフォルト状態にある可能性がある。一つの実施形態では、このデフォルト状態は、STALLと呼ばれるデフォルト動作命令によって実施されてもよい。PEはSTALLとしてプログラムされてもよいが、それぞれの入力データFIFOは空であってもよく、且つデータの受信を準備する。しかしながら、ビジー信号は0に設定されてもよい。したがって、全てのSBは停止(stalled)する可能性があり、そして信号がルーティングされなくてもよい。例えば、コンポーネント間の全てのデータ接続(例えばPE_0 1104とSB_1110の間、SB_1 1110とICSB_1 1114の間、SB_1 1110とPE_1 1106の間、PE_1 1106とSB_2 1112の間、SB_2 1112とICSB_2 1116の間、SB_2 1112とPE_2 1108の間のデータ接続)は、データが通過できないことを示すために点線で表されてもよい。
図11BはSEQ1102が第一の命令INS1をPE_0 1104にロードし始めることができるが、SB_1 1110及びICSB_1 1114が依然として停止する可能性があることを示している。例えば、SEQ1102からPE_0 1104までの配置接続は開いていて破線で示されてもよく、逆に他の配置接続は閉じられていて点線で示されてもよい。INST1がこの実行カーネルの第一の命令であってもよく、いかなる他の条件に依存しないため、PE_0 1104は出力の生成を準備することができるが、SB_1 1110からの出力ビジー信号によってブロックされる。この段階では、データはコンポーネント間のデータ接続を通過できず、データ接続は点線で表されてもよい。
図11Cに示すように、この段階では、SEQ1102は、SB_1 1110とICSB_1 1114の両者をプログラムした可能性があり、PE_0→PE_1からのデータルートを開くことができる。例えば、SEQ1102からSB_1 1110及びICSB_1 1114までの配置接続は開いていて破線で示されてもよく、逆に他の配置接続は閉じられていて点線で示されてもよい。PE_0 1104は出力を生成することができ、これらの出力がSB_1 1110(例えば、内部接続が開いていることを内部の点線で示すSB_1 1110)を介してPE_1 1106にルーティングされてもよい。PE_1 1106は、PE_0 1104から出力を受信することができ、PE_1 1106が構成されない場合でも、これらのデータ信号をそのデータバッファー(例えばD−FIFO)に記憶することができる。PE_0 1104とSB_1 1110の間、及びSB_1 1110とPE_1 1106の間のデータ接続は、データが通過できることを示すために実線で示されてもよい。二重線の矢印1118は、このデータフローを示すことができる。
1番目のPDPでは、PE_0 1104からの出力がPE_1 1106のみによって必要とされるため、この時に、データがICSB_1 1114を通過する必要がない。したがって、ICSB_1 1114の配置が既にプログラムされた(例えばその内部接続が破線で示される)可能性があるが、データがICSB_1 1114(それがSB_1 1110に点線で接続される)に到達しなく、且つICSB_1 1114が静止を維持する可能性がある。
図11Dに示す段階では、SEQ1102からPE_1 1106までの配置接続は開いて破線で示されてもよい。逆に、他の配置接続は閉じられていて点線で示されてもよい。SEQ1102は第二の命令INST2をPE_1 1106に配置することができ、そしてPE_1 1106は実行及び出力の生成を準備することができるが、SB_2 1112からの出力ビジー信号によってブロックされる。同時に、PE_0 1104から生成されたデータはPE_1 1106のD−FIFOに連続して送信されてもよい。この段階では、コンポーネント間の全てのデータ接続は図11Cと同じであってもよい。
図11Eにおいて、この段階では、SEQ1102からSB_2 1112とICSB1116までの配置接続は開いて破線で示されてもよい。逆に、他の配置接続は閉じられていて点線で示されてもよい。SB_2 1112を構成して開くことができる場合、PE_1 1106はINS2の実行を開始し、出力を生成することができる。これらの出力はSB_2 1112(例えば、内部接続が開いていることを内部の点線で示すSB_2 1112)を介してPE_2 1108にルーティングされてもよい。PE_2 1108は、PE_1 1106から出力を受信することができ、PE_2 1108が構成されない場合でも、これらのデータ信号をそのデータバッファー(例えばD−FIFO)に記憶することができる。PE_1 1106とSB_2 1112の間、及びSB_2 1112とPE_2 1108の間のデータ接続は、データが通過できることを示すために実線で示されてもよい。二重線の矢印1120は、このデータフローを示すことができる。
1番目のPDPでは、PE_2 1108への入力がPE_1 1106のみからのものである可能性があるため、この時にデータがICSB_2 1116を通過する必要がない。したがって、ICSB_1 1116の配置が既にプログラムされた(例えばその内部接続が破線で示される)可能性があるが、データがICSB_2 1116(例えば、それがSB_2 1112に破線で接続される)を通過しなく、且つICSB_2 1116が静止を維持する可能性がある。
図11Fに示す段階では、SEQ1102からPE_2 1108までの配置接続は開いて破線で示されてもよい。逆に、他の配置接続は閉じられていて点線で示されてもよい。また、第一のPDPの最後の命令INS3はPE_2 1108にプログラムされてもよい。図示されないが、この段階では、ガスケットメモリ(例えば、ガスケットメモリ216の実施形態)への配置接続も開かれてもよく、そしてガスケットメモリのデータ接続もプログラムされてもよい。PE_2 1108はINS3を実行することができ、結果がガスケットメモリに記憶されてもよい。一つの実施形態では、現在まで、PDP_1配置全体が完了でき、各PE(例えば、PE_0 1104、PE_1 1106及びPE_2 1108)は、対応する命令を指定された回数(例えば、NUM_EXEC)個別に実行することができる。各SB(例えばSB_1 1110及びSB_2 1112)と各ICSB(例えばICSB_1 1114及びICSB_2 1116)は、PDP_1に対してそれぞれの配置を指定された回数(例:NUM_EXEC)実行することもできる。
いくつかの実施形態では、(例えば実行カーネルの依存グラフ)VDPのPDPのための配置は、コンポーネントに個別に送信されてもよく、同時に各コンポーネントが現在の配置に従って動作することができる。例えば、PE(例えばPE_0 1104、PE_1 1106及びPE_2 1108)、SB(例えばSB_1 1110及びSB_2 1112)とICSB(例えばICSB_1 1114及びICSB_2 1116)は、それらのPDP_1のための対応する配置で動作するとともに、SEQ1102から同じVDPの他のPDPのこれらのコンポーネントのそれぞれのための後続の配置を受信することができる。一つの実施形態では、配置バスを介してシーケンサ206から一つのコンポーネントのための複数の配置をバッチで送信することができ、一つのコンポーネントのための複数の配置を送信する限り、いかなる他のコンポーネントの動作を遅くしたり妨ぐことがない。
したがって、PDP_1を実行することができるが、コンポーネントはPDP_2のための全ての配置を受信した可能性がある。図11Gに示すように、この段階で、PE_0 1104の全てのスレッド(例えば、ALUベクトル602内の全てのALU)がPDP_1を完了するまでPE_0 1104を第4の命令INS4に再構成することができる。例えば、PE_0 1104は、配置バッファーC−FIFO614にあるPDP_2配置を適用することにより、それ自体で再構成することができる。同様に、INS1からの最後のデータが既にSB_1 1114を通過した場合でも、SB_1 1114は再構成することができる。SB_1 1110の新しいPDP_2の配置(例えば、ICSB_1 1114に接続された新しい破線)により、INS4からの第一の出力データは、ICSB_1 1114に送信されてもよい。しかしながら、ICSB_2 1116が再構成されていない可能性があるため、ICSB_1 1114へのデータ信号は、ICSB_2 1116からのビジー信号によってブロックされる可能性がある。
図15Hに示す段階で、PE_1 1106、SB_2 1112、ICSB_2 1116は、PDP_1で指定された実行回数に達する可能性があり、そして再構成されてもよい。例えば、PE_1 1106は、5番目の命令INS5に再構成されてもよく、PE_0 1104からのデータもICSB_1 1114を介してPE_2 1108のD−FIFOに到達できるように、SB_2 1112及びICSB_2 1116は、再構成されてもよい。SB_2 1112内部の新しい破線は、SB_2 1112を介してICSB_2 1116をPE_2 1108に接続するように示されてもよい。PE_0 1104からPE_2 1108へのデータフローは、二重矢印1122(例えばPE_0 1104−ICSB_1 1114)及び1124(例えばICSB_1 1114−PE_2 1108)によって示されてもよい。
図15Iに示す段階で、最終に、PE_2 1108はPDP_1のための指定された実行回数に達することができ、PDP_2のための最後の命令INS6に再構成されてもよい。PDP_2配置全体はデータパスコンポーネントに適用されてもよい。PDP_2配置のためのコンポーネントは、PDP_2配置に対して回数実行カーネル全体を完了するために、それぞれ指定された回数実行できる。
図12Aは本開示の実施形態によるプロセッサを使用して命令ストリームを実行するためのパイプライン動作を概略的に示す。共有メモリアクセスモードでは、同じ命令を実行する全てのスレッドによって一つのメモリアドレスにアクセスすることができる。同じアドレスから全てのスレッドにデータをロードするために、パイプラインはこれらの全てのスレッドのために同じデータを抽出し続け、メモリユニットに不要なトラフィックを生成することができる。この例における命令は、図11A−図11Iに示す例における命令と区別するために、数字の前に下線を有するように示されてもよい。図12Aに示すパイプライン化された命令の実行例では、命令Ins_0は、データロード命令「ロードx[j]」であってもよく、メモリポートは、パイプラインステージ1202としてIns_0を3回実行するように構成されてもよい(例えば、ロード命令を実行するように構成されるメモリポートに対して、NUM_EXECが3である)。データセグメントx[j]は全てのスレッドに共通であってもよく、同じアドレスからロードされる。例えば、データセグメントx[j]はベクトルxのj番目のデータセグメントであってもよく、そしてこのj番目のデータセグメントが全てのスレッドによって使用されてもよい。一つのPEがNつのALUを有する実施形態では、1つのブロック(例えば、一つのスレッドブロック)で表されるNつの並列スレッドが存在してもよく、そしてパイプラインステージ1202は、Ins_0を3xN回実行するように構成されてもよい。
命令Ins_1はデータロード命令「ロードa[k][j]」であってもよく、そしてメモリポートは、パイプラインステージ1204としてIns_1を3回実行するように構成されてもよい。Ins_1によってロードされるデータセグメントは、異なるスレッドに対して異なる可能性があり、異なるスレッドに対して、異なるアドレスからロードすることができる。例えば、a[k][j]はk番目のスレッドのj番目のデータセグメントであってもよく、ここで1番目のスレッドブロックにおける各スレッドに対して、kが0からN−1(エンドポイントを含む)の間の整数であってもよく、2番目のスレッドブロックにおける各スレッドに対して、kがNから2N−1(エンドポイントを含む)の間の整数であってもよく、第三のスレッドブロックにおける各スレッドに対して、kが2Nから3N−1(エンドポイントを含む)の間の整数であってもよい。
一つの実施形態では、メモリポートが2つのデータロード命令を並列して実行するように構成される場合、パイプラインステージ1202及び1204は、同じメモリポートで実行されてもよい。例えば、図2にMP220のそれぞれとメモリユニット212の間の2つの並列読み取りデータラインと2つの並列書き込みデータラインが示される。また、スイッチボックス500は、並列入力データラインがどのようにPEに切り替えるか(例えば、502.1及び502.2から506.1、506.2、508.1又は508.2に切り替える)を示す。別の実施形態では、パイプラインステージ1202及び1204は、2つの異なるメモリポートで実行されてもよい。
命令Ins_2は、乗算命令「y=a[k][j]x[j]」であってもよく、ここでデータセグメントx[j]がIns_0によってロードされ、a[k][j]がIns_1によってロードされ、そしてPEは、パイプラインステージ1206としてIns_2を3回実行するように構成されてもよい(例えば、NUM_EXECが3であり、全てのスレッドに対して合計3xN回)。したがって、各PE又はMPはパイプラインステージとしてNUM_EXEC量の命令を実行するように構成されてもよい。
命令Ins_4はデータロード命令「ロードx[j+1」であってもよく、そしてメモリポートは、パイプラインステージ1208としてIns_4を3回実行するように構成されてもよい。データセグメントx[j+1]は全てのスレッドに共通であってもよく、同じアドレスからロードされる。例えば、データセグメントx[j+1]はベクトルxのj+1番目のデータセグメントであってもよく、そしてこのj+1番目のデータセグメントが全てのスレッドによって使用されてもよい。命令Ins_5はデータロード命令「ロードa[k][j+1]」であってもよく、そしてメモリポートは、パイプラインステージ1210としてIns_5を3回実行するように構成されてもよい。Ins_5によってロードされるデータセグメントは、異なるスレッドに対して異なる可能性があり、異なるスレッドに対して、異なるアドレスからロードすることができる。例えば、a[k][j+1]はk番目のスレッドのj+1番目のデータセグメントであってもよく、ここで1番目のスレッドブロックにおける各スレッドに対して、kが0からN−1(エンドポイントを含む)の間の整数であってもよく、2番目のスレッドブロックにおける各スレッドに対して、kがNから2N−1(エンドポイントを含む)の間の整数であってもよく、第三のスレッドブロックにおける各スレッドに対して、kが2Nから3N−1(エンドポイントを含む)の間の整数であってもよい。一つの実施形態では、メモリポートが2つのデータロード命令を並列して実行するように構成される場合、パイプラインステージ1208及び1210は、同じメモリポートで実行されてもよい。別の実施形態では、パイプラインステージ1208及び1210は、2つの異なるメモリポートで実行されてもよい。
命令Ins_6は、乗算命令「y=a[k][j+1]*x[j+1]」であってもよく、ここでデータセグメントx[j+1]がIns_4によってロードされ、a[k][j+1]がIns_5によってロードされ、そしてPEは、パイプラインステージ1212としてIns_6を6回実行するように構成されてもよい。
図12Aのパイプライン化された命令の実行例では、多くのメモリ読み取りを繰り返す必要がない可能性があるが、Ins_0とIns_4が繰り返すことができる。図12Bは本開示の実施形態によるプロセッサを使用して命令ストリームを実行するための減少されたパイプライン動作を概略的に示す。一つの実施形態では、コンパイラ又は他の方法(例えば、シーケンサ)は、図12Aの命令シーケンスにおける静的読取りを識別することができ、そして繰り返し動作が1回に減少されてもよい。例えば、静的ロード命令(例えばIns_0及びIns_4)はNUM_EXEC=1でプログラムされてもよい(例えば、これは実行データを抽出するためのMPに応用されてもよい)。図12Bに示すように、パイプラインステージ1202Aおよび1208Aは、それぞれ一つのブロックであってもよい。一つの実施形態では、インジケータSは、PE及びMPのD−FIFOと隣接するPE及びMPで実施されてもよく(例えばPE620におけるインジケータ622)、静的負荷からデータを受信するいずれかのPE及びMPに対して、静的負荷からデータを受信する、PE又はMPのD−FIFOと隣接するインジケータSを設置することができる。例えば、パイプラインステージ1206でIns_2を実行するように構成されるPEは、パイプラインステージ1202Aのために構成される(複数の)MP及びMP1204からデータをそれぞれ受信するD−FIFOを含むことができ、そしてインジケータSがパイプラインステージ1202Aからデータを受信するD−FIFOと隣接するように構成されてもよい。同様に、パイプラインステージ1212でIns_6を実行するように構成されるPEは、パイプラインステージ1208A及び1210のためにそれぞれ構成される(複数の)MPからデータを受信するD−FIFOを含むことができ、そしてインジケータSがパイプラインステージ1208Aからデータを受信するD−FIFOと隣接するように設置されてもよい。NUM_EXEC=1の場合、パイプラインステージ1202A及び1208Aにおけるデータロード動作は、該配置に対して一回だけ実行されてもよい。静的指示Sが与えられた場合、パイプラインステージ1206及び1212を実行するように構成されるPEは、その動作を3回実行できる(例えばそのNUM_EXECが依然として3に等しい)が、指示Sを有するD−FIFOからのデータはNUM_EXEC回数再利用されてもよい。
いくつかの実施形態では、減少されたパイプラインステージを有するこのような動作モードは、他の命令に一般化されてもよい。一つの実施形態では、異なるスレッドに対して同じ結果を生成することができる命令に対して、同じ方法を使用して電力消費を削減することができる。例えば、1つのPEからの結果は、同じ物理データパスにおける別のPEの異なるスレッドのための入力として使用されてもよく、又は一つの物理データパスにおけるPEからの結果は、別の物理データパスにおけるPEの異なるスレッドのための入力として使用されてもよく、ここで指示Sが対応するD−FIFOに用いられて繰り返して使用されるように設定される。
図13を参照すると、本開示の実施形態による実行カーネルを実行するための方法1300のフローチャートが示される。ブロック1302で、実行カーネルはプロセッサで仮想データパスにマッピングされてもよい。例えば、図9Bに示すように、例示的なプロセッサ200によって実行カーネルを仮想データパスにマッピングすることができる。実行カーネルはプロセッサによって実行される命令シーケンスを含むことができる。一つの実施形態では、プロセッサは、ガスケットメモリを含む様々な再構成可能ユニットを含むことができる。また、一つの実施形態では、該プロセスは、重複列を形成する様々な再構成可能ユニットを含むことができる。ブロック1304で、仮想データパスは1つ又は複数の物理データパスに分割されてもよい。例えば、図9Cに示すように、仮想データパスは3つの物理データパスに分割されてもよい。一つの実施形態では、様々な再構成可能ユニットは、命令シーケンスを実行するための1つ又は複数の物理データパスを形成することができる。また、一つの実施形態では、1つ又は複数の物理データパスのそれぞれは、重複列にそれぞれ適合することができる。例えば、第一の物理データパスと第二の物理データパスは、それぞれ重複列に適合することができる。ブロック1306で、配置はプロセッサの様々な再構成可能ユニットに送信されてもよい。様々な再構成可能ユニットは、配置に従って、命令シーケンスを実行するための1つ又は複数の物理データパスを形成することができる。ブロック1308で、プロセッサは、配置に従って様々な再構成可能ユニットを動作させることにより、1つ以上の物理データパスを完了するために実行されてもよい。一つの実施形態では、1つの物理データパスからのデータは、ガスケットメモリにルーティングして将来の物理データパスで入力として使用されてもよい。
図14を参照すると、本開示の実施形態によるプロセッサを再構成するための方法1400のフローチャートが示される。ブロック1402で、複数の配置をプロセッサの複数の再構成可能ユニットに送信することができる。複数の配置は、命令シーケンスを実行するための複数の物理データパスを形成するように複数の再構成可能ユニットに用いられてもよい。一つの実施形態では、複数の配置のそれぞれは、指定された数(例えば、本明細書で説明されるNUM_EXEC数)を含むことができる。ブロック1404で、複数の再構成可能ユニットのそれぞれで、対応する動作を指定された回数繰り返すことができる。例えば、複数の再構成可能ユニットは、第一の再構成可能処理素子(PE)を含むことができ、第一の再構成可能PEが複数の物理データパスのうちの第一の物理データパスにおいて、命令シーケンスの第一の命令を指定された回数実行することができる。ブロック1406で、各再構成可能ユニットは新しい配置に再構成されてもよい。一つの実施形態では、各再構成可能ユニットがそれぞれの対応する動作を指定された回数繰り返した後、各再構成可能ユニットは再構成することができる。例えば、第一の再構成可能PEは、複数の物理データパスのうちの第2の物理データパスにおいて第2の構成に従って、命令シーケンスにおける第二の命令を指定された回数実行するように構成されてもよい。
図15を参照すると、本開示の実施形態によるプロセッサを再構成するための方法1500のフローチャートが示される。ブロック1502で、プロセッサの再構成可能ユニットで第一の配置と第二の配置を受信することができる。例えば、図11A−図11IのPE_0 1104は、第一の命令INS1を含むことができる第一の配置と、第4の命令INS4を含むことができる第2の配置とを受信することができる。PE_0 1104は、これらの配置をその配置バッファ(例えば、C−FIFO614)に記憶することができる。ブロック1504で、第一の動作は、第一の配置に従って第一回数実行されてもよい。PE_0 1104は、第一の配置におけるNUM_EXECに従って命令INS1を複数回実行することができる。第一の配置は命令シーケンスの第一の部分を実行するための第一の物理データパス(例えばPDP_1)の一部であってもよい。ブロック1506で、再構成可能ユニットは、第二の構成に従って第二の動作を第2回数実行するように再構成されてもよい。例えば、第二の配置を応用して第二の配置におけるNUM_EXECに基づいて命令INS4を複数回実行してPE_0 1104を再構成することができる。第二の配置は命令シーケンスの第二の部分を実行するための第二の物理データパス(例えばPDP_2)の一部であってもよい。
図16を参照すると、本開示の実施形態によるプロセッサを再構成するための方法1600のフローチャートが示される。ブロック1602で、第一の命令は再構成可能な処理素子で複数回実行されてもよい。該実行は第一の物理データパスの一部とする第一の配置に従って実行されてもよい。例えば、PE_2は、PDP_1の一部とする配置に従ってINS3をNUM_EXEC回実行するように構成されてもよい。ブロック1604で、再構成可能ユニットからの実行結果はガスケットメモリに送信されてもよい。例えば、INS3を実行するためのPE_2からの実行結果は、ガスケットメモリに送信されてもよい。一つの実施形態では、第一の命令が再構成可能ユニットで複数回実行される場合、実行結果は、第一の命令が実行されるたびにガスケットメモリに送信されてもよい。例えば、ガスケットメモリは連続実行結果を、そのデータバッファの1つ(例えばD−FIFO802.3−802.Fのいずれか)に記憶する可能性がある。ブロック1606では、ガスケットメモリに記憶された実行結果は、ガスケットメモリから第二の物理データパスに送信されてもよい。例えば、命令INS3を実行するためのPE_2からの実行結果は、第二の物理データパスでPEによって実行される命令の入力として用いられてもよい。その後、ガスケットメモリに記憶された実行結果は、第二の物理データパスを実行するためにガスケットメモリからこのPEに送信されれてもよい。
図17を参照すると、本開示の実施形態によるメモリにアクセスするための方法1700のフローチャートが示される。ブロック1702では、メモリユニットのための複数のメモリアドレスは、並列スレッドのためのメモリポート内のアドレス計算ユニットによって生成されてもよい。例えば、メモリポートは、並列スレッドで同じ命令を実行するように構成される複数の算術論理演算ユニット(ALU)を有することができる処理素子に、メモリユニットへのメモリアクセスを提供することができる。一つの実施形態では、メモリポートは、複数の処理素子(PE)にメモリユニットへのアクセスを提供する複数のメモリポートのうちの1つであってもよい。複数のPEのそれぞれは、並列スレッドで同じ命令を実行するように構成される複数の算術論理演算ユニット(ALU)を有することができる。ブロック1704で、メモリユニット内の複数のメモリバンクにアクセスすることができ、ここで各スレッドが異なるメモリバンクにアクセスする。一つの実施形態では、プライベートメモリアクセスモードで、各スレッドは異なるメモリバンクにアクセスしてそのデータを取得することができる。
図18を参照すると、本開示の実施形態によるメモリにアクセスするための方法1800のフローチャートが示される。ブロック1802では、メモリユニットのための複数のメモリアドレスは、並列スレッドのためのメモリポート内のアドレス計算ユニットによって生成されてもよい。メモリポートは、並列スレッドで同じ命令を実行するように構成される複数の算術論理演算ユニット(ALU)を有する処理素子にメモリアクセスを提供することができる。一つの実施形態では、メモリポートは、並列スレッドで同じ命令を実行するように構成される複数の算術論理演算ユニット(ALU)を有する複数の処理素子にメモリユニットへのメモリアクセスを提供するための複数のメモリポートのうちの一つであってもよい。ブロック1804では、メモリユニット内の複数のメモリバンクにアクセスすることができ、ここで全てのスレッドがメモリユニットの共通領域にアクセスする。一つの実施形態では、共有メモリアクセスモードで、PEによって行われる並列実行のそれぞれは、共通領域内のいずれかの箇所にアクセスすることができる。即ち、共通領域は、全てのスレッドの共有メモリスペースであってもよい。
図19は本開示の実施形態による一つのセグメントのデータを再利用するための方法1900のフローチャートである。ブロック1902では、PEで適用される1つの配置期間に、一つのセグメントのデータはプロセッサの処理素子(PE)で全てのスレッドによって共有及び再利用されることを確定することができる。例えば、一つの実施形態では、PEの一つの配置期間に、共有メモリアクセスモードが応用されてもよい。一つのセグメントのデータ(例えば定数)は、全てのスレッドに共通であってもよく、そして全てのスレッドによって共有及び再利用されてもよい。ブロック1904では、該セグメントのデータをPEのデータバッファに一回ロードすることができる。一つの実施形態では、該セグメントのデータが共有及び再利用されてもよい。そのため、データロード動作は一回実行される必要がある可能性がある。ブロック1906では、該セグメントのデータが再利用されることを示すように、データバッファに関連するインジケータを設置することができる。一つの実施形態では、PE内のデータバッファはインジケータビット「S」を有することができ、データバッファ内の一つのセグメントのデータが再利用される必要がある場合、このインジケータ「S」を設置することができる。ブロック1908では、該セグメントのデータを入力として再利用することで、同じ命令を複数回実行することができる。一つの実施形態では、PEは配置によって指定された数(例えばNUM_EXEC)に基づき、パイプラインステージとして同じ命令を繰り返して実行することができる。
本開示の内容は再構成可能並列処理のための装置、システム及び方法を提供する。例えば、RPPの実施形態は処理素子(PE)アレイと相互接続部材からなる1−D又は2−Dデータパスを利用して大規模な並列データを処理することができる。データパスは、各セクション(例えば(複数のPEの1列、MPとデータルーティングユニット)で同じになることができ、これにより、カーネルの依存グラフから仮想データパスへのマッピングが許可され、該仮想データパスが1次元においてデータパスセクションを無限に繰り返すことができる。
RPPの実施形態は、仮想データパスが物理データパスに分割される場合と同様に、ガスケットメモリを利用して仮想データパスのデータ出力を一時的に記憶することができる。ガスケットメモリは、データバッファー(例えばFIFO)のように機能してデータを次の配置の物理データパスにフィードバックすることができる。
RPPの実施形態は、さらにメモリポート(MP)が各列のデータパスに接続される1次元メモリユニットを有することができる。仮想データパス全体でアクセスする全てのデータはメモリユニットに記憶されてもよい。新しい配置を行うたびに、MPは、データが変化しないように維持される一方で、異なる方式でメモリユニットにアクセスするように構成されてもよい。RPPの実施形態は、プライベートメモリアクセスと共有メモリアクセスのメモリアクセスタイプを分けることができる。プライベートメモリアクセスは特定のスレッドに専用されてもよく、同時に異なるスレッド間で重複アクセスを許可しない。共有メモリアクセスは全てのスレッドで共通領域にアクセスすることを許可することができる。共有タイプとプライベートタイプに対して異なるメモリを定義しない。RPPの実施形態は、データを同じメモリスペースに記憶することができるが、異なるアクセス方法を提供する。これにより、プライベートメモリから共有メモリへの不必要なデータの移動が排除され、逆の場合も同様である。
RPPの実施形態は、マルチスレッド処理のための大規模な並列処理を許可するために最適化されてもよい。一つの例では、1行の32つのPEを有し且つ各PEが32つの算術論理演算ユニット(ALU)を有する場合、1024つのALUは一つのRPPコアに含まれてもよい。いくつかの実施形態では、マルチコアプロセッサは複数のRPPを含むことができる。
RPPの実施形態は再構成メカニズムに従って再構成されてもよい。1つ又は複数の再構成カウンタを含むRPPの様々なコンポーネントは、再構成可能ユニットと呼ばれてもよい。例えば、PE(例えばPE218)、切り替えユニット(例えばSB222とICSB224)とメモリユニット(例えばMP220、ガスケットメモリ216)のそれぞれは、PEにおけるカウンタ606、SBにおけるカウンタ520、ICSBにおけるカウンタ714、ガスケットメモリにおけるカウンタ820及び822とMPにおける類似のカウンタ(図4A又は図4Bに示されない)などの1つ又は複数の再構成カウンタを含むことができる。スレッド間に依存性がない可能性がる場合、データ処理はパイプライン化されてもよい。全てのスレッド(例えば、1つの物理データパスのための4つのスレッドブロック)が処理されるまで、同一の命令が複数回実行されてもよい。再構成可能ユニットのカウンタがプログラムされた数に達する場合、再構成可能ユニットは、その配置を新しいコンテキストに置き換えることができる。このような再構成は、各PE、スイッチボックスとメモリアクセスユニットで同じ方式で完了されてもよい。切り替えのための最小アイドル時間で自己再構成を実現することができる。
例示的な再構成メカニズムは、全てのスレッドが処理された後に配置が一回だけ切り替えられるため、構成に費やされる電力を削減することができる。これにより、各PEを最も早い時間に個別に切り替えることにより、配置間のアイドル時間を短縮することもできる。これにより、中間データを記憶するために必要なメモリを削減することができる。
いくつかの実施形態では、共有メモリアクセスモードで、全てのスレッドは同じアドレスを用いてデータをロードすることができる。動作のパイプライン性質により、全てのスレッドの1番目のデータロード命令のみを実行する必要がある可能性がある。ロードされたデータは、メモリアクセストラフィックと消費電力を削減するために、全てのスレッドと共有されてもよい。
本明細書で説明される技術は、デジタル論理ゲートのうちの1つ又は複数の特定用途向け集積回路(ASIC)で実施されてもよく、又は有形のプロセッサ可読メモリ記憶媒体に格納された命令を実行するプロセッサによって実施されてもよい。
一つの実施形態では、開示された方法及び動作のいずれかは、1つ又は複数のコンピュータ可読記憶媒体に記憶されたコンピュータ実行可能命令を含むソフトウェアで実施されてもよい。1つ又は複数のコンピュータ読み取り可能記憶媒体は、非一時的コンピュータ読み取り可能メディア(例えばリムーバブル又は非リムーバブル磁気ディスク、磁気テープ又はカセット、ソリッドステートドライブ(SSD)、ハイブリッドハードドライブ、CD−ROM、CD−RW、DVD又は他の有形の記憶媒体)、揮発性メモリコンポーネント(例えばDRAM又はSRAM)又は不揮発性メモリコンポーネント(例えばハードドライブ)を含むことができる。コンピュータ実行可能命令は、プロセッサ(例えば、マイクロコントローラ、マイクロプロセッサ、デジタル信号プロセッサなど)で実行されてもよい。また、本開示の実施形態は、汎用プロセッサ、グラフィックスプロセッサ、マイクロコントローラ、マイクロプロセッサ又はデジタルシグナルプロセッサとして使用されてもよい。
本明細書では、様々な態様及び実施形態が開示されたが、他の態様及び実施形態は当業者にとって明らかである。本明細書で開示される様々な態様及び実施形態は、例示を目的とするものであり、限定することを意図するものではなく、真の範囲及び精神は添付の特許請求の範囲によって示される。

Claims (7)

  1. それぞれが配置バッファを含む複数の処理素子(PE)と、
    前記複数のPEのそれぞれの配置バッファに結合され、1つ又は複数のPE配置を前記複数のPEに割り当てるように構成されるシーケンサと、
    前記複数のPEに結合され前記複数のPEのうち少なくとも1つのPEの実行結果を記憶するように構成されるガスケットメモリとを備え
    仮想データパスを分割した各物理データパスに対応する期間毎に、前記複数のPEのそれぞれの配置バッファに、当該物理データパスの相異なる命令に対応するPE配置が割り当てられ、
    前記複数のPEのそれぞれにおいては、前記各物理データパスに対応する期間内において、当該PEの配置バッファに割り当てられたPE配置のもとで複数のスレッドが実行される
    プロセッサ。
  2. 前記シーケンサからスイッチボックス配置を受信するために前記シーケンサに結合されそれぞれが前記複数のPEのうちの対応するPEに関連付けられ、そして前記スイッチボックス配置に従って前記対応するPEに入力データ切り替えを提供するように構成される複数のスイッチボックスをさらに備え、
    前記複数のスイッチボックス及びそれらに関連付けられたPEは複数列に配置され、前記複数列の第1列における第一のスイッチボックスは、前記ガスケットメモリと前記複数列の第1列における1番目のPEの間に結合され、前記複数列の最後の列における2番目のPEが前記ガスケットメモリに結合されることを特徴とする
    請求項1に記載のプロセッサ。
  3. 前記複数のPEにデータ記憶を提供するように構成されるメモリユニットと、
    それぞれが前記複数列の異なる列に配置され、前記メモリユニットにアクセスするために前記複数のPEによって用いられる複数のメモリポートと、
    前記シーケンサからICSB配置を受信するために前記シーケンサに結合され、前記ICSB配置に従って前記複数列の隣接する列間にデータ切り替えを提供するように構成される複数の列間スイッチボックス(ICSB)とをさらに備え、
    前記複数のメモリポート(MP)は、前記シーケンサから前記MP配置を受信するために前記シーケンサに結合され、一つのMP配置期間にプライベートアクセスモード又は共有アクセスモードで動作するように構成されることを特徴とする
    請求項2に記載のプロセッサ。
  4. 前記メモリユニットに記憶された一つのセグメントのデータは、前記メモリユニット内で移動することなく、プログラムの異なる部分で前記プライベートアクセスモード及び前記共有アクセスモードを通じてアクセスされることを特徴とする
    請求項3に記載のプロセッサ。
  5. 前記複数列のそれぞれに2つ又はそれ以上のPEが含まれ、前記複数のPEが2行又はそれ以上に形成され、
    第1行のPEは、第一のグループの命令を実行するように構成され、第2行のPEは、第二のグループの命令を実行するように構成され、前記第二のグループの命令のうちの少なくとも一つの命令が前記第一のグループの命令に位置しなく、前記複数列が同じであり且つ重複列を形成することを特徴とする
    請求項2から請求項4のいずれか一項に記載のプロセッサ。
  6. 前記複数のメモリポートのそれぞれは、ベクトルアドレスを使用して前記メモリユニットにアクセスするように構成され、前記プライベートアクセスモードで、前記ベクトルアドレスの1つのアドレスがスレッドインデックスに従って前記メモリユニットの1つのメモリバンクにルーティングされ、一つのスレッドの全てのプライベートデータが同一のメモリバンクに位置し、
    前記複数のメモリポートのそれぞれは、ベクトルアドレスを使用して前記メモリユニットにアクセスするように構成され、前記共有アクセスモードで、前記ベクトルアドレスの1つのアドレスが前記スレッドインデックスに関わらずに定義された領域においてメモリバンクにわたってルーティングされ、全てのスレッドに共有されるデータが全てのメモリバンクに分散することを特徴とする
    請求項3に記載のプロセッサ。
  7. それぞれが配置バッファを含む複数の処理素子(PE)と、
    前記複数のPEのそれぞれの配置バッファに結合され、1つ又は複数のPE配置を前記複数のPEに割り当てるように構成されるシーケンサと、
    前記複数のPEに結合され、前記複数のPEのうちの少なくとも1つのPEの実行結果を記憶するように構成されるガスケットメモリとを備えるプロセッサの動作方法であって、
    仮想データパスを分割した各物理データパスに対応する期間毎に、前記複数のPEのそれぞれの配置バッファに、当該物理データパスの相異なる命令に対応するPE配置を割り当て、
    前記複数のPEのそれぞれにおいて、前記各物理データパスに対応する期間内において、当該PEの配置バッファに割り当てられたPE配置のもとで複数のスレッドを実行させる
    プロセッサの動作方法。
JP2019572353A 2017-03-14 2018-03-13 再構成可能並列処理 Active JP6960479B2 (ja)

Applications Claiming Priority (11)

Application Number Priority Date Filing Date Title
US201762471340P 2017-03-14 2017-03-14
US62/471,340 2017-03-14
US201762471368P 2017-03-15 2017-03-15
US201762471367P 2017-03-15 2017-03-15
US201762471372P 2017-03-15 2017-03-15
US62/471,372 2017-03-15
US62/471,367 2017-03-15
US62/471,368 2017-03-15
US201762472579P 2017-03-17 2017-03-17
US62/472,579 2017-03-17
PCT/US2018/022106 WO2018169911A1 (en) 2017-03-14 2018-03-13 Reconfigurable parallel processing

Publications (2)

Publication Number Publication Date
JP2020522825A JP2020522825A (ja) 2020-07-30
JP6960479B2 true JP6960479B2 (ja) 2021-11-05

Family

ID=63519289

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2019572353A Active JP6960479B2 (ja) 2017-03-14 2018-03-13 再構成可能並列処理

Country Status (5)

Country Link
US (12) US10776311B2 (ja)
EP (1) EP3596609A1 (ja)
JP (1) JP6960479B2 (ja)
CN (5) CN110494851B (ja)
WO (1) WO2018169911A1 (ja)

Families Citing this family (32)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US11768689B2 (en) 2013-08-08 2023-09-26 Movidius Limited Apparatus, systems, and methods for low power computational imaging
US9910675B2 (en) * 2013-08-08 2018-03-06 Linear Algebra Technologies Limited Apparatus, systems, and methods for low power computational imaging
JP6960479B2 (ja) * 2017-03-14 2021-11-05 アズールエンジン テクノロジーズ ヂュハイ インク.Azurengine Technologies Zhuhai Inc. 再構成可能並列処理
US11328037B2 (en) * 2017-07-07 2022-05-10 Intel Corporation Memory-size- and bandwidth-efficient method for feeding systolic array matrix multipliers
US11114138B2 (en) * 2017-09-15 2021-09-07 Groq, Inc. Data structures with multiple read ports
US11243880B1 (en) 2017-09-15 2022-02-08 Groq, Inc. Processor architecture
US11868804B1 (en) 2019-11-18 2024-01-09 Groq, Inc. Processor instruction dispatch configuration
US11360934B1 (en) 2017-09-15 2022-06-14 Groq, Inc. Tensor streaming processor architecture
US11170307B1 (en) 2017-09-21 2021-11-09 Groq, Inc. Predictive model compiler for generating a statically scheduled binary with known resource constraints
KR102502526B1 (ko) * 2018-04-16 2023-02-23 에밀 바덴호르스트 프로세서 및 프로세서 작동 방법
US11455370B2 (en) 2018-11-19 2022-09-27 Groq, Inc. Flattened input stream generation for convolution with expanded kernel
GB2580316B (en) 2018-12-27 2021-02-24 Graphcore Ltd Instruction cache in a multi-threaded processor
US10983948B2 (en) * 2019-03-07 2021-04-20 Raytheon Company Reconfigurable computing appliance
TWI719433B (zh) * 2019-03-22 2021-02-21 美商葛如克公司 具有多讀取埠之資料結構、處理器、及用於具有多讀取埠之資料結構之方法
TWI751882B (zh) * 2019-03-22 2022-01-01 美商葛如克公司 具有多讀取埠之資料結構、處理器、及用於具有多讀取埠之資料結構之方法
US11169957B2 (en) * 2019-03-31 2021-11-09 Intel Corporation Systems and methods for reconfigurable systolic arrays
CN110034920B (zh) * 2019-04-09 2023-03-31 中国人民解放军战略支援部队信息工程大学 粗粒度可重构密码逻辑阵列的映射方法及装置
US11144466B2 (en) * 2019-06-06 2021-10-12 Intel Corporation Memory device with local cache array
WO2021014017A1 (en) * 2019-07-25 2021-01-28 Technische Universiteit Eindhoven A reconfigurable architecture, for example a coarse-grained reconfigurable architecture as well as a corresponding method of operating such a reconfigurable architecture
US11442731B2 (en) * 2019-10-17 2022-09-13 Arm Limited Data processing systems including an intermediate buffer with controlled data value eviction
US11054998B1 (en) 2019-12-12 2021-07-06 Facebook, Inc. High bandwidth memory system with distributed request broadcasting masters
KR20210092078A (ko) 2020-01-15 2021-07-23 삼성전자주식회사 병렬 연산 처리를 수행하는 메모리 장치 및 그 동작방법, 그리고 메모리 장치를 제어하는 메모리 컨트롤러의 동작방법
CN111324461B (zh) * 2020-02-20 2023-09-01 西安芯瞳半导体技术有限公司 内存分配方法、装置、计算机设备和存储介质
WO2021187027A1 (ja) * 2020-03-18 2021-09-23 日本電気株式会社 情報処理装置及び情報処理方法
US11455272B2 (en) * 2020-12-10 2022-09-27 Axis Semiconductor, Inc. Energy efficient microprocessor with index selected hardware architecture
CN114625421A (zh) * 2020-12-11 2022-06-14 上海阵量智能科技有限公司 Simt指令处理方法及装置
CN112506853A (zh) * 2020-12-18 2021-03-16 清华大学 零缓冲流水的可重构处理单元阵列及零缓冲流水方法
DE102021203225A1 (de) * 2021-03-30 2022-10-06 Robert Bosch Gesellschaft mit beschränkter Haftung Vorrichtung und Verfahren zur Ermittlung von Adresswerten
CN112995067B (zh) * 2021-05-18 2021-09-07 中国人民解放军海军工程大学 一种粗粒度可重构数据处理架构及其数据处理方法
CN113032329B (zh) * 2021-05-21 2021-09-14 千芯半导体科技(北京)有限公司 基于可重构存算芯片的计算结构、硬件架构及计算方法
TWI831564B (zh) * 2022-11-09 2024-02-01 晶心科技股份有限公司 可配置的記憶體系統及其記憶體管理方法
US11995030B1 (en) 2022-11-10 2024-05-28 Azurengine Technologies, Inc. Reconfigurable parallel processor with stacked columns forming a circular data path

Family Cites Families (92)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5179530A (en) * 1989-11-03 1993-01-12 Zoran Corporation Architecture for integrated concurrent vector signal processor
US5581778A (en) * 1992-08-05 1996-12-03 David Sarnoff Researach Center Advanced massively parallel computer using a field of the instruction to selectively enable the profiling counter to increase its value in response to the system clock
JPH0675930A (ja) * 1992-08-27 1994-03-18 Toshiba Corp 並列プロセッサシステム
US5479624A (en) * 1992-10-14 1995-12-26 Lee Research, Inc. High-performance interleaved memory system comprising a prime number of memory modules
US5513366A (en) * 1994-09-28 1996-04-30 International Business Machines Corporation Method and system for dynamically reconfiguring a register file in a vector processor
US5960211A (en) * 1995-12-15 1999-09-28 Hughes Aircraft Data formatting method and apparatus for a data processing array
US5900011A (en) 1996-07-01 1999-05-04 Sun Microsystems, Inc. Integrated processor/memory device with victim data cache
US5889947A (en) * 1996-12-16 1999-03-30 International Business Machines Corporation Apparatus and method for executing instructions that select a storage location for output values in response to an operation count
US6154829A (en) * 1997-10-20 2000-11-28 Matsushita Electric Industrial Co., Ltd. Cascaded arithmetic pipeline data processor
US6748517B1 (en) * 1999-06-22 2004-06-08 Pts Corporation Constructing database representing manifold array architecture instruction set for use in support tool code creation
US6347346B1 (en) * 1999-06-30 2002-02-12 Chameleon Systems, Inc. Local memory unit system with global access for use on reconfigurable chips
JP2001092657A (ja) * 1999-09-22 2001-04-06 Toshiba Corp 中央演算装置、コンパイル方法、及びコンパイルプログラムを記録した記録媒体
US20040015899A1 (en) 2000-10-06 2004-01-22 Frank May Method for processing data
US7210129B2 (en) * 2001-08-16 2007-04-24 Pact Xpp Technologies Ag Method for translating programs for reconfigurable architectures
US7320065B2 (en) * 2001-04-26 2008-01-15 Eleven Engineering Incorporated Multithread embedded processor with input/output capability
US20030056091A1 (en) 2001-09-14 2003-03-20 Greenberg Craig B. Method of scheduling in a reconfigurable hardware architecture with multiple hardware configurations
US8412915B2 (en) * 2001-11-30 2013-04-02 Altera Corporation Apparatus, system and method for configuration of adaptive integrated circuitry having heterogeneous computational elements
EP1483682A2 (de) 2002-01-19 2004-12-08 PACT XPP Technologies AG Reconfigurierbarer prozessor
US9170812B2 (en) * 2002-03-21 2015-10-27 Pact Xpp Technologies Ag Data processing system having integrated pipelined array data processor
US7328314B2 (en) * 2002-06-19 2008-02-05 Alcatel-Lucent Canada Inc. Multiprocessor computing device having shared program memory
US7159099B2 (en) * 2002-06-28 2007-01-02 Motorola, Inc. Streaming vector processor with reconfigurable interconnection switch
AU2003254126A1 (en) * 2002-07-23 2004-02-09 Gatechance Technologies Inc Pipelined reconfigurable dynamic instruciton set processor
US7571303B2 (en) 2002-10-16 2009-08-04 Akya (Holdings) Limited Reconfigurable integrated circuit
US7412586B1 (en) * 2003-07-29 2008-08-12 Colorado State University Research Foundation Switch memory architectures
JP4104538B2 (ja) 2003-12-22 2008-06-18 三洋電機株式会社 リコンフィギュラブル回路、リコンフィギュラブル回路を備えた処理装置、リコンフィギュラブル回路における論理回路の機能決定方法、回路生成方法および回路
US20050216700A1 (en) 2004-03-26 2005-09-29 Hooman Honary Reconfigurable parallelism architecture
JP4484756B2 (ja) * 2004-06-21 2010-06-16 三洋電機株式会社 リコンフィギュラブル回路および処理装置
JP4275013B2 (ja) * 2004-06-21 2009-06-10 三洋電機株式会社 データフローグラフ処理装置、処理装置、リコンフィギュラブル回路。
JP4451733B2 (ja) * 2004-06-30 2010-04-14 富士通マイクロエレクトロニクス株式会社 半導体装置
GB2417105B (en) * 2004-08-13 2008-04-09 Clearspeed Technology Plc Processor memory system
US7941794B2 (en) 2004-08-30 2011-05-10 Sanyo Electric Co., Ltd. Data flow graph processing method and processing apparatus provided with reconfigurable circuit
GB0420004D0 (en) 2004-09-09 2004-10-13 Koninkl Philips Electronics Nv Interconnections in SIMD processor architectures
US8155113B1 (en) * 2004-12-13 2012-04-10 Massachusetts Institute Of Technology Processing data in a parallel processing environment
GB2423840A (en) 2005-03-03 2006-09-06 Clearspeed Technology Plc Reconfigurable logic in processors
US7581079B2 (en) * 2005-03-28 2009-08-25 Gerald George Pechanek Processor composed of memory nodes that execute memory access instructions and cooperate with execution nodes to execute function instructions
EP1868293A1 (en) * 2005-04-05 2007-12-19 Matsushita Electric Industrial Co., Ltd. Computer system, data structure showing configuration information, and mapping device and method
US7734895B1 (en) 2005-04-28 2010-06-08 Massachusetts Institute Of Technology Configuring sets of processor cores for processing instructions
CN100395680C (zh) * 2005-05-26 2008-06-18 华为技术有限公司 一种异步时钟域参数的配置方法及装置
US8560795B2 (en) * 2005-06-30 2013-10-15 Imec Memory arrangement for multi-processor systems including a memory queue
JP4720436B2 (ja) * 2005-11-01 2011-07-13 株式会社日立製作所 リコンフィギュラブルプロセッサまたは装置
CN1776660A (zh) * 2005-12-02 2006-05-24 浙江大学 一种用于可重构计算阵列的数据耦合器
US20070139074A1 (en) 2005-12-19 2007-06-21 M2000 Configurable circuits with microcontrollers
JP2007249843A (ja) * 2006-03-17 2007-09-27 Fujitsu Ltd 再構成可能な演算装置
GB0605349D0 (en) * 2006-03-17 2006-04-26 Imec Inter Uni Micro Electr Reconfigurable multi-processing coarse-grain array
US7577820B1 (en) * 2006-04-14 2009-08-18 Tilera Corporation Managing data in a parallel processing environment
US7506134B1 (en) 2006-06-16 2009-03-17 Nvidia Corporation Hardware resource based mapping of cooperative thread arrays (CTA) to result matrix tiles for efficient matrix multiplication in computing system comprising plurality of multiprocessors
CN101169866B (zh) * 2006-10-26 2010-09-01 朱明程 自重构片上多媒体处理系统及其自重构实现方法
CN101364214A (zh) * 2007-08-08 2009-02-11 顾士平 动态可重构指令计算机处理器及实现方法
KR101098758B1 (ko) 2007-09-20 2011-12-26 서울대학교산학협력단 Fp-ra를 구성하는 pe 구조 및 그 fp-ra제어하는 fp-ra 제어 회로
US8181003B2 (en) * 2008-05-29 2012-05-15 Axis Semiconductor, Inc. Instruction set design, control and communication in programmable microprocessor cores and the like
JP5163306B2 (ja) 2008-06-19 2013-03-13 富士通セミコンダクター株式会社 動的再構成回路およびデータ送信制御方法
CN101655777B (zh) * 2008-08-21 2011-08-17 英业达股份有限公司 数据交换盒及数据交换方法
JP2010146102A (ja) * 2008-12-16 2010-07-01 Sanyo Electric Co Ltd 演算処理装置および記憶領域割当方法
CN101782893B (zh) * 2009-01-21 2014-12-24 上海芯豪微电子有限公司 可重构数据处理平台
KR101553648B1 (ko) * 2009-02-13 2015-09-17 삼성전자 주식회사 재구성 가능한 구조의 프로세서
US9606807B2 (en) * 2009-06-04 2017-03-28 Micron Technology, Inc. Direct communication with a processor internal to a memory device
US9223578B2 (en) * 2009-09-25 2015-12-29 Nvidia Corporation Coalescing memory barrier operations across multiple parallel threads
US8271763B2 (en) * 2009-09-25 2012-09-18 Nvidia Corporation Unified addressing and instructions for accessing parallel memory spaces
KR101636377B1 (ko) * 2009-10-23 2016-07-06 삼성전자주식회사 재구성 프로세서, 재구성 제어 장치 및 방법, 그리고, 스레드 모델링 방법
JP2011170758A (ja) * 2010-02-22 2011-09-01 Panasonic Electric Works Co Ltd プロセッサ
JP5504985B2 (ja) 2010-03-11 2014-05-28 富士ゼロックス株式会社 データ処理装置
CN102012803B (zh) * 2010-11-25 2014-09-10 中国人民解放军国防科学技术大学 支持多宽度simd和多粒度simt的可配置矩阵寄存器单元
JP5760532B2 (ja) * 2011-03-14 2015-08-12 株式会社リコー プロセッサ装置及びその演算方法
CN102184090B (zh) * 2011-05-27 2013-12-04 清华大学 一种动态可重构处理器及其固定数的调用方法
US8966457B2 (en) * 2011-11-15 2015-02-24 Global Supercomputing Corporation Method and system for converting a single-threaded software program into an application-specific supercomputer
WO2013100783A1 (en) * 2011-12-29 2013-07-04 Intel Corporation Method and system for control signalling in a data path module
US9262174B2 (en) * 2012-04-05 2016-02-16 Nvidia Corporation Dynamic bank mode addressing for memory access
US9710306B2 (en) * 2012-04-09 2017-07-18 Nvidia Corporation Methods and apparatus for auto-throttling encapsulated compute tasks
US10203934B2 (en) * 2012-07-11 2019-02-12 Intel Corporation Parallell processing of a single data buffer
US9280344B2 (en) * 2012-09-27 2016-03-08 Texas Instruments Incorporated Repeated execution of instruction with field indicating trigger event, additional instruction, or trigger signal destination
US9558003B2 (en) * 2012-11-29 2017-01-31 Samsung Electronics Co., Ltd. Reconfigurable processor for parallel processing and operation method of the reconfigurable processor
US9449257B2 (en) * 2012-12-04 2016-09-20 Institute Of Semiconductors, Chinese Academy Of Sciences Dynamically reconstructable multistage parallel single instruction multiple data array processing system
US9015656B2 (en) * 2013-02-28 2015-04-21 Cray Inc. Mapping vector representations onto a predicated scalar multi-threaded system
US8860457B2 (en) 2013-03-05 2014-10-14 Qualcomm Incorporated Parallel configuration of a reconfigurable instruction cell array
KR20140126195A (ko) * 2013-04-22 2014-10-30 삼성전자주식회사 배치 쓰레드 처리 기반의 프로세서, 그 프로세서를 이용한 배치 쓰레드 처리 방법 및 배치 쓰레드 처리를 위한 코드 생성 장치
EP2806361B1 (en) * 2013-05-22 2020-03-04 Teknologian Tutkimuskeskus VTT Memory unit for emulated shared memory architectures
US9535705B1 (en) 2013-08-13 2017-01-03 Asher Hazanchuk Flexible hardware programmable scalable parallel processor
US20150074353A1 (en) * 2013-09-06 2015-03-12 Futurewei Technologies, Inc. System and Method for an Asynchronous Processor with Multiple Threading
US20150268963A1 (en) * 2014-03-23 2015-09-24 Technion Research & Development Foundation Ltd. Execution of data-parallel programs on coarse-grained reconfigurable architecture hardware
CN103984560B (zh) * 2014-05-30 2017-09-19 东南大学 基于大规模粗粒度嵌入式可重构系统及其处理方法
US10061591B2 (en) 2014-06-27 2018-08-28 Samsung Electronics Company, Ltd. Redundancy elimination in single instruction multiple data/thread (SIMD/T) execution processing
KR102277439B1 (ko) 2014-10-21 2021-07-14 삼성전자주식회사 재구성 가능 프로세서 및 그 동작 방법
US9977678B2 (en) * 2015-01-12 2018-05-22 International Business Machines Corporation Reconfigurable parallel execution and load-store slice processor
GB2536211B (en) 2015-03-04 2021-06-16 Advanced Risc Mach Ltd An apparatus and method for executing a plurality of threads
CN104699465B (zh) * 2015-03-26 2017-05-24 中国人民解放军国防科学技术大学 向量处理器中支持simt的向量访存装置和控制方法
US9804666B2 (en) 2015-05-26 2017-10-31 Samsung Electronics Co., Ltd. Warp clustering
CN104933008B (zh) * 2015-06-24 2018-12-14 东南大学 可重构系统和可重构阵列结构及其应用
CN105302525B (zh) * 2015-10-16 2018-01-05 上海交通大学 用于多层次异构结构的可重构处理器的并行处理方法
CN105487838B (zh) * 2015-11-23 2018-01-26 上海交通大学 一种动态可重构处理器的任务级并行调度方法与系统
US10185699B2 (en) 2016-03-14 2019-01-22 Futurewei Technologies, Inc. Reconfigurable data interface unit for compute systems
US11853244B2 (en) * 2017-01-26 2023-12-26 Wisconsin Alumni Research Foundation Reconfigurable computer accelerator providing stream processor and dataflow processor
JP6960479B2 (ja) * 2017-03-14 2021-11-05 アズールエンジン テクノロジーズ ヂュハイ インク.Azurengine Technologies Zhuhai Inc. 再構成可能並列処理

Also Published As

Publication number Publication date
US20180267809A1 (en) 2018-09-20
CN114003547A (zh) 2022-02-01
CN114238204B (zh) 2023-01-06
CN114168525B (zh) 2023-12-19
CN114168526A (zh) 2022-03-11
US20200379944A1 (en) 2020-12-03
EP3596609A4 (en) 2020-01-22
US20220100701A1 (en) 2022-03-31
US10956360B2 (en) 2021-03-23
US20200004553A1 (en) 2020-01-02
US11226927B2 (en) 2022-01-18
US11182334B2 (en) 2021-11-23
CN110494851A (zh) 2019-11-22
US10776310B2 (en) 2020-09-15
US20200379945A1 (en) 2020-12-03
US20180267930A1 (en) 2018-09-20
US10776312B2 (en) 2020-09-15
CN110494851B (zh) 2022-07-15
US20180267932A1 (en) 2018-09-20
CN114168525A (zh) 2022-03-11
US11182336B2 (en) 2021-11-23
EP3596609A1 (en) 2020-01-22
US20180267931A1 (en) 2018-09-20
US20200356524A1 (en) 2020-11-12
US10733139B2 (en) 2020-08-04
US11182335B2 (en) 2021-11-23
CN114238204A (zh) 2022-03-25
US20210049126A1 (en) 2021-02-18
CN114168526B (zh) 2024-01-12
US11971847B2 (en) 2024-04-30
US10776311B2 (en) 2020-09-15
US20210382722A9 (en) 2021-12-09
JP2020522825A (ja) 2020-07-30
US11176085B2 (en) 2021-11-16
WO2018169911A1 (en) 2018-09-20
US20180267929A1 (en) 2018-09-20
CN114003547B (zh) 2023-12-19
US11182333B2 (en) 2021-11-23
US20210019281A1 (en) 2021-01-21

Similar Documents

Publication Publication Date Title
JP6960479B2 (ja) 再構成可能並列処理
Chang et al. A scalable, numerically stable, high-performance tridiagonal solver using GPUs
Ries et al. Triangular matrix inversion on graphics processing unit
EP3108358B1 (en) Execution engine for executing single assignment programs with affine dependencies
Brown Exploring the acceleration of the Met Office NERC cloud model using FPGAs
Xu et al. Generalized GPU acceleration for applications employing finite-volume methods
US20240160448A1 (en) Mixed scalar and vector operations in multi-threaded computing
US20240160602A1 (en) Reconfigurable parallel processor with stacked columns forming a circular data path
Yoo et al. Multiprocessor system-on-chip designs with active memory processors for higher memory efficiency
Garg Near-memory Primitive Support and Infrastructure for Sparse Algorithms
Wessels Benchmarking Dataflow for FPGA

Legal Events

Date Code Title Description
A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20190917

A621 Written request for application examination

Free format text: JAPANESE INTERMEDIATE CODE: A621

Effective date: 20190917

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20200416

A977 Report on retrieval

Free format text: JAPANESE INTERMEDIATE CODE: A971007

Effective date: 20201019

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20201110

A601 Written request for extension of time

Free format text: JAPANESE INTERMEDIATE CODE: A601

Effective date: 20210208

RD02 Notification of acceptance of power of attorney

Free format text: JAPANESE INTERMEDIATE CODE: A7422

Effective date: 20210208

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20210401

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

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20211011

R150 Certificate of patent or registration of utility model

Ref document number: 6960479

Country of ref document: JP

Free format text: JAPANESE INTERMEDIATE CODE: R150