JP2021192257A - プログラム可能な最適化を有するメモリネットワークプロセッサ - Google Patents

プログラム可能な最適化を有するメモリネットワークプロセッサ Download PDF

Info

Publication number
JP2021192257A
JP2021192257A JP2021139076A JP2021139076A JP2021192257A JP 2021192257 A JP2021192257 A JP 2021192257A JP 2021139076 A JP2021139076 A JP 2021139076A JP 2021139076 A JP2021139076 A JP 2021139076A JP 2021192257 A JP2021192257 A JP 2021192257A
Authority
JP
Japan
Prior art keywords
instruction
data
units
pipeline
unit
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Granted
Application number
JP2021139076A
Other languages
English (en)
Other versions
JP7264955B2 (ja
Inventor
ドーア,マイケル・ビー
B Doerr Michael
ドブス,カール・エス
S Dobbs Carl
ソルカ,マイケル・ビー
B Solka Michael
トロシーノ,マイケル・アール
R Trocino Michael
フォークナー,ケネス・アール
R Faulkner Kenneth
バインドロス,キース・エム
M Bindloss Keith
アーヤ,サミール
Arya Sumeer
ベアーズリー,ジョン・マーク
Mark Beardslee John
ギブソン,デビッド・エー
A Gibson David
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.)
Coherent Logix Inc
Original Assignee
Coherent Logix 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 Coherent Logix Inc filed Critical Coherent Logix Inc
Publication of JP2021192257A publication Critical patent/JP2021192257A/ja
Application granted granted Critical
Publication of JP7264955B2 publication Critical patent/JP7264955B2/ja
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Classifications

    • 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/0215Addressing or allocation; Relocation with look ahead addressing means
    • 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/3005Arrangements for executing specific machine instructions to perform operations for flow control
    • 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/30083Power or thermal 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/30145Instruction analysis, e.g. decoding, instruction word fields
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30181Instruction operation extension or modification
    • 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
    • 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/3824Operand accessing
    • G06F9/3826Bypassing or forwarding of data results, e.g. locally between pipeline stages or within a pipeline stage
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/38Concurrent instruction execution, e.g. pipeline or look ahead
    • G06F9/3836Instruction issuing, e.g. dynamic instruction scheduling or out of order instruction execution
    • G06F9/3853Instruction issuing, e.g. dynamic instruction scheduling or out of order instruction execution of compound instructions
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/38Concurrent instruction execution, e.g. pipeline or look ahead
    • G06F9/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/3893Concurrent instruction execution, e.g. pipeline or look ahead using a plurality of independent parallel functional units controlled in tandem, e.g. multiplier-accumulator
    • G06F9/3895Concurrent instruction execution, e.g. pipeline or look ahead using a plurality of independent parallel functional units controlled in tandem, e.g. multiplier-accumulator for complex operations, e.g. multidimensional or interleaved address generators, macros
    • 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
    • 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)
  • Software Systems (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Advance Control (AREA)
  • Devices For Executing Special Programs (AREA)
  • Executing Machine-Instructions (AREA)
  • Multi Processors (AREA)
  • Microcomputers (AREA)
  • Power Sources (AREA)

Abstract

【課題】高パフォーマンス及び低電力散逸のために最適化された処理要素を有するマルチプロセッサシステム及びそのような処理要素をプログラミングする方法を提供する。【解決手段】各処理要素は、フェッチユニットと、複数のアドレス生成器ユニットAGUと、複数のパイプライン化されたデータ経路DP0、DP1と、を備える。フェッチユニットは、マルチパート命令を受信する。マルチパート命令は、複数のフィールドを含む。第1のアドレス生成器ユニットは、複数のフィールドのうちの第1のフィールドに応じた算術演算を実施する。第2のアドレス生成器ユニットは、複数のアドレスのうちの少なくとも1つのアドレスを生成する。各アドレスは、複数のフィールドそれぞれに依存する。並列アセンブリ言語を用いて、複数のアドレス生成器ユニット及び複数のパイプライン化されたデータ経路を制御する。【選択図】図20

Description

本発明はマルチプロセッサシステムに関し、より詳細には、プロセッサ動作及び実行の
改善、並びにこのようなシステムを標的にしたソフトウェアの開発に関する。
一般的なハードウェアシステムの主たる目的は、完全なプログラム可能性を保持したま
ま、特定用途向け(非プログラマブル)ハードウェアパフォーマンスを達成することであ
る。従来、これら2つの概念は対極にある。特定用途向けハードウェアは、可能な限り最
も効率のよい方法で特定の機能を実施する、固定型ハードウェアソリューションである。
これは通常、機能あたりのエネルギ又は1つ若しくは複数の演算あたりのエネルギに関し
て、及び製品の部分コストに関連し得る(回路)面積あたりの機能に関して、測定される
。コスト及び市場ダイナミクスにより、この目的を満たそうという試みのための革新が推
進されてきた。チップ製品のコストは、ダイ面積及び最終パッケージを含む多くの因子で
構成される。コストはまた、製品を開発するための全体的なエコシステムも考慮しなけれ
ばならない。このエコシステムのコストは、特定の用途を特定のハードウェアソリューシ
ョンに還元するための時間、システム全体を構成するために必要な特定のハードウェアソ
リューションの個数、並びにカスタマイズされた通信及びメモリ構造によって全ての特定
のハードウェアソリューションを集積するためにかかる時間で構成される。従って、多数
の特定ハードウェアソリューションの全てをそのカスタム相互接続によってサポートする
ために、完全に集積されたソリューションが必要となり、これにより単一チップダイに関
して極めて大きな面積が必要となる。従来このプロセスは、面積、エネルギ及び市場に出
るまでの時間に関して効率的でないソリューションの原因となっていた。
プログラム可能性の世界及び標的のハードウェアの概念を考慮すると、ハードウェアア
ーキテクチャ及びソフトウェア開発スタイルの視点からの市場又は展望は:Intel、
AMD(Intel又はArm命令セットベース)、ARM等の企業が提供する汎用プロ
セッサ(GPP);nVidia及びAMD(以前はATIであり、2006年にAMD
により買収)等からのグラフィカルプロセッシングユニット(GPU);TI及びAna
logDevicesからのデジタル信号プロセッサ(DSP);Xilinx、Alt
era等からのフィールドプログラマブルゲートアレイ(FPGA);Cavium及び
Tileraからのマルチコア/メニーコアプロセッサ;特定用途向け集積回路(ASI
CS)又はシステムオンチップ(SoC)によって提示される。
汎用プロセッサ(GPP)
GPPは、40年以上に亘って考えられてきた、極めて古いものの検証はされているハ
ードウェアアーキテクチャに基づく、汎用処理のためのものであり、即ち「何でも屋(a
jack of all trades)」になろうとしている。GPPの主要な目的
は、ユーザインタフェース(UI)と、MSWord、Excel、eメール等の、高度
にインタラクティブなUI集約型アプリケーションとを、これらをサポートするオペレー
ティングシステム(例えばWindows(登録商標)、Linux(登録商標))によ
って駆動することである。電力散逸に大きな影響を及ぼすハードウェア特性は、マルチレ
ベルキャッシュ、複雑なハードウェアメモリ管理ユニット、大型のバス、大型のクロック
生成構造である。要するにこれらは、そのタスクを実施するために多くの電力を散逸する
。ソフトウェア開発の視点から、これは、標的とするのが最も簡単なソフトウェアプログ
ラミングモデルであると考えられる。これは、ユーザが、連続して又は順次実行される単
一のスレッドを開発しているという視点からのものである。並列処理又は複数ハードウェ
アスレッド(約4スレッド超)を導入する場合、これらを効率的にプログラムする能力は
大幅に困難となる。これは、このアーキテクチャが根本的に並列スレッド演算をサポート
するように開発されておらず、従ってハードウェアアーキテクチャは途方も無い量のオー
バヘッド及び複雑さを管理する必要があるという事実による。ソフトウェアプログラミン
グモデルは、複数ソフトウェアスレッドの定義をサポートするためにAPI又は言語拡張
の導入を必要とする。これは必ずしも複雑でないものの、残念ながら現行のGPPハード
ウェアアーキテクチャはこのような複雑さを必要とする。
高次において、世界中の全てのスーパコンピュータでC、C++、Fortran等を
用いて長年に亘って広く使用されてきたAPIは、MPI(メッセージ受け渡しインタフ
ェース)APIであり、これは1990年代初頭から業界標準である。これは極めて単純
な、よく理解されている、ハードウェア実装経路を制限しないAPIである。MPI A
PIは、ハードウェア非依存性様式での、ソフトウェアスレッド及び通信の定義を可能と
する。これはOpenMP、CoarrayFortran、OpenCL等、及び仮定
された下層のハードウェアモデルを本来的に記述する他の言語/APIとは異なっており
、従って解釈の柔軟性を制限し、前方互換性の問題を引き起こす。換言すると、これらの
言語/APIを用いる場合、プログラマは、標的とする全ての新規のハードウェアプラッ
トフォームのためにプログラムを書き直す必要がある。
グラフィカルプロセッシングユニット(GPU)
GPUは従来、データを処理して表示することを標的として開発されてきた。これらは
、そのコア外(外部)メモリモデル要件及び内部コアメモリモデル要件により、ハードウ
ェアアーキテクチャ的に制約されている。コア外メモリは、GPPに、データをGPUメ
モリ空間に配置するよう要求する。続いてGPUはそのデータを引き込み、そのデータに
対してパイプライン様式で動作して、上記データを外部メモリ空間に戻す。ここからデー
タをディスプレイに送信でき、又はGPPは、汎用処理下での動作において更に使用/記
憶するために、データをGPUメモリ空間外に移動させる必要がある。ハードウェアの非
効率性は、(1)コア外ハードウェア制約をサポートするためにデータを移動させるため
に必要なサポート、及び(2)深いパイプライン構造のSIMD機械と同様の、能率化さ
れたパイプラインにおいて処理されるよう、データが制約を受ける、内部コアメモリ構造
によるものである。その結果、データを処理するためのハードウェアの非効率性により、
電力が高くなる。使用されるソフトウェアプログラミングモデルは、極めてハードウェア
中心的なものであり、OpenCL、CUDA等であり、従って、効率性を達成するには
複雑であり、移植可能性があまり高くなく、新規のハードウェア標的プラットフォームに
移動させようとする際には、コードを書き直して再構成しなければならない。
デジタル信号プロセッサ(DSP)
DSPは、一般的な信号処理のために削減及び標的化された命令セットを有するGPP
として考えることができる。これらは、その兄弟/姉妹GPPと同一のキャッシュ、MM
U及びバスからの悪影響を受ける。Viterbi/Turbo復号化又は動作推定等の
、いずれの実際に高スループットの処理機能は、通常は市場における特定の規格の限定的
なセットをサポートするだけの、限定された能力を有するASIC加速器へと削減されて
いる。プログラミングモデルは、単一のハードウェアスレッドを標的とする場合のGPP
と同様であるが、実行ユニットハードウェアにおける信号処理命令アプローチにより、い
ずれの高効率を達成するには、複数の機能のハンドアセンブリ、又はDSP製造企業のラ
イブラリの使用を必要とする。上述の並列GPPと同様に、多数の並列DSPアーキテク
チャを生成する際、問題は更に悪化する。
フィールドプログラマブルゲートアレイ(FPGA)
FPGAは完全に異なるハードウェアアプローチであり、この場合機能性の定義はビッ
トレベルで実施でき、論理機能間の通信はプログラム可能な配線構造を通して実施される
。このハードウェアアプローチは、途方も無い量のオーバヘッド及び複雑さを導入する。
これにより、効率的なプログラミングが、Verilog又はVHDL等のハードウェア
プログラミング言語で実施される。コンパイルプロセスは、ASIC/SOCにおいて必
要とされるものと同様であるものの、構造化された配線ファブリックを有する、プログラ
ム可能な配線及びプログラム可能な論理導入タイミング収束障害により、遥かに複雑とな
る。FPGAはそのFPGAがプログラムされた目的の機能そのもののみを実施し、それ
以外を一切実施しないため、1度に1つの機能のみを比較する場合、特定の機能に関する
電力散逸及びパフォーマンススループットは、GPP又はGPUより明らかに遥かに良好
である。しかしながら、GPPの能力の全てをFPGAに実装しようとした場合、GPP
よりも明らかに悪くなる。ハードウェアレベルにおけるプログラミングの困難さは明らか
である(例えばタイミング収束)。FPGAのプログラミングは実際には「プログラミン
グ」ではなく、論理/ハードウェア設計であり、またVHDL/Verilogはプログ
ラミング言語ではなく、論理/ハードウェア設計言語である。
マルチコア/メニーコア
殆ど全てのマルチコア/メニーコアアーキテクチャは、ハードウェアの視点から、コア
プロセッサ、キャッシュ、MMU、バス、全ての関連する論理を採用し、これらを、その
周囲の通信バス/ファブリックによってダイ上で複製している。マルチコアアーキテクチ
ャの例はIBMのCell、Intel及びAMDのクアッドコア及びNマルチコア、C
avium及びTileraの製品、多数のカスタムSoC等である。更に、マルチコア
アーキテクチャにおいて達成される電力の低減は主に取るに足らないものである。この明
らかな結果は、マルチコアアプローチがGPUアプローチを単に複製するという事実に由
来する。マルチコアアーキテクチャにおける唯一の実際の電力節約は、以前は別個のダイ
上にあったコアが追加の通信バスに接続されることにより、もはや不要となったIOドラ
イバの削減である。従って、マルチコアアプローチは電力のいずれの低下につながらない
。第2に、ソフトウェアプログラミングモデルは上述のGPPから改善されない。
特定用途向け集積回路(ASIC)又はシステムオンチップ(SoC)
他のアプローチに関して識別される事項のリストは、特定の市場に関して、パフォーマ
ンス効率及びコスト目標を達成するための唯一の方法が、特定のGPP、DSP及びAS
IC加速器を有するカスタムチップを開発してSoCを形成することであると考えられる
ことが多い理由である。SoCは、必要な場合はプログラム可能性と、電力散逸とコスト
との間のバランスを取るための特定の機能に関するASIC性能とを提供する。しかしな
がら現在、ソフトウェアプログラミングモデルは、上述のプログラム可能なハードウェア
ソリューションのもとで議論されたものよりも更に複雑である。更にSoCは、完全にプ
ログラム可能なソリューションと関連する柔軟性の損失につながり得る。
これらのプログラム可能なハードウェアソリューション全てに共通なのは、現在市場に
おいて提示されているソフトウェアプログラミングモデルが、その標的化をより効率的に
サポートするために、実行モデル及び下層のハードウェアアーキテクチャを外挿すること
に焦点を合わせている点である。実行モデルの特徴をソフトウェアプログラミングモデル
に外挿することは、より一般的な並列プログラミング言語のうちのいくつかの重要な特徴
を見ると観察できる。現在使用されているアプローチを示すいくつかの例は、OpenM
P、OpenCL、MPIである。
OpenMP
OpenMP(オープンマルチプロセッシング)は、共有メモリマルチプロセッシング
プログラミングをサポートする業界標準のAPIである。OpenMPは、コンパイラ指
示文、ライブラリルーチン、及びランタイム挙動に影響を与える環境変数のセットを含む
。これは、並列化方法によるマルチスレッディングをサポートし、これによって親スレッ
ド(連続して実行される一連の命令)は特定の数のスレーブスレッドに分岐し、タスクが
これらの間で分割される。そしてこれらのスレッドは同時に実行され、ランタイム環境は
スレッドを、利用法、機械負荷及び他の因子に応じて異なるリソース又はプロセッサに割
り当てる。スレッドの数は、ランタイム環境によって、環境変数に基づいて、又は関数を
使用するコード内に割り当てることができる。従って、並列に実行されることが意図され
たコードのセクションは、このセクションの実行前にスレッドを形成させるプリプロセッ
サ指示文によってマークされる。C/C++では、これは#programsの使用によ
る。デフォルトでは、各スレッドはコードの並列化されたセクションを独立して実行する
。タスクの並列処理及びデータの並列処理の両方を達成できる。並列化されたコードの実
行後、複数のスレッドは親スレッドへ連結され、これはプログラムの最後まで進み続ける
。図1は、OpenMPを利用したマルチスレッディングを示しており、ここで親スレッ
ドは、コードの複数のブロックを並列に実行する多数のスレッドに分岐する。スレッド間
通信をサポートするために、OpenMPの拡張、又は別の異なる業界標準API(例え
ばMPI(メッセージ受け渡しインタフェース))を使用してよい。
OpenCL
オープン計算言語(OpenCL)は、中央演算処理装置(CPU)グラフィカルプロ
セッシングユニット(GPU)、デジタル信号プロセッサ(DSP)、フィールドプログ
ラマブルゲートアレイ(FPGA)及び他のプロセッサを備える異質な複数のプラットフ
ォームに亘る実行を可能とすることを目的として、プログラムを記述するためのフレーム
ワークである。これは抽象化が限定されたクロース・トゥ・ハードウェアインタフェース
をサポートするよう設計されている。このため、OpenCLベースのプログラムは一般
に、満足できるパフォーマンスを達成するために、下層のハードウェアに関する高度な知
識を必要とする。OpenCLプログラムはまた、異なるハードウェアアーキテクチャを
再標的化する際にリファクタリングを必要とする。図2に示すように、OpenCLは、
厳密な処理モデル、制御モデル、メモリモデル、通信モデル階層をサポートする。
OpenCLは、何らかの制限及び追加を伴って、ANSI Cプログラミング言語を
用いてカーネルを記述することをサポートする。これは、関数へのポインタ、再帰、ビッ
トフィールド、可変長配列、標準ヘッダファイルの使用を可能としない。複数のベクタタ
イプ及び演算を伴う並列処理、同期化、並びに複数のワークアイテム/グループを伴う作
業を行うための関数をサポートするよう、上記言語を拡張する。アプリケーションプログ
ラミングインタフェース(API)を用いて、プラットフォームを定義して制御する。O
penCLは、コースレベルにおいて、タスクベース及びデータベースの並列処理を用い
た並列計算をサポートする。
MPI
メッセージ受け渡しインタフェース(MPI)は、標準化された、言語非依存の、スケ
ーラブルな、移植可能な、メッセージ受け渡し通信プロトコルAPIである。MPI A
PIは、言語特異性構文を用いて、言語非依存性の方法で、(ノード/サーバ/コンピュ
ータインスタンスに対してマッピングされた)プロセスのセット間の、必須の仮想トポロ
ジ、同期化、及び通信機能を提供する(バインディング)。MPI API規格は、様々
な挙動を定義できるポイントツーポイント及び集合/同報通信送受信動作並びにプロセス
の同期のためのサポートを含む、ライブラリルーチンのコアの構文及び意味規則を定義す
る。MPIは今日のハイパフォーマンス計算において使用される主要なモデルであり続け
ている。
MPI APIは、最もハードウェア非依存性のアプローチであり、従って提示された
例の基礎として使用される。
マルチプロセッサシステム上での並列実行のためのソフトウェアアプリケーションの開
発の、従来技術によるアプローチは、一般に、開発の容易さと並列実行の効率性との間の
トレードオフを必要とする。換言すると、一般に、プログラマにとって開発プロセスが容
易であればあるほど、結果として得られる実行可能なプログラムをハードウェア上で同時
に実行する効率が低くなり、また反対に、より効率的な並列実行は一般に、プログラマに
よる相当に多大な努力を必要とし、即ち非効率的な処理を回避するために、及び標的ハー
ドウェアの、効率増進性特徴を使用するために、プログラムを更に詳細に設計する必要が
ある。
従って、ソフトウェアプログラミングモデルを駆動するためのアプリケーションのソフ
トウェア記述又はシステムレベルビューと、実行モデル及び下層ハードウェアアーキテク
チャを標的化するためのこれらの後の使用とを促進するための、改善されたシステム及び
方法が望まれている。また、このプロセスを通してアプリケーションの効率的かつプログ
ラム可能な実装を可能とする機構を提供する改善も望まれている。
高パフォーマンス及び低電力散逸のために最適化された処理要素を有するマルチプロセ
ッサシステムと、関連する上記処理要素をプログラミングする方法との、様々な実施形態
が開示される。
第1の実施形態は、フェッチユニット及び複数のアドレス生成器ユニットを備えるプロ
セッサ装置に関する。フェッチユニットはマルチパート命令を受信するよう構成され、マ
ルチパート命令は複数のフィールドを含む。第1のアドレス生成器ユニットは、複数のフ
ィールドのうちの第1のフィールドに応じた算術演算を実施するよう構成される。第2の
アドレス生成器ユニットは、複数のアドレスのうち少なくとも1つのアドレスを生成する
よう構成され、各アドレスは、複数のフィールドそれぞれに依存する。
多数のデータ経路を制御することに関する第2の実施形態は、フェッチユニット及び実
行ユニットを備えるプロセッサ装置を伴う。フェッチユニットはマルチパート命令を受信
するよう構成され、マルチパート命令は複数のフィールドを含む。実行ユニットは複数の
パイプラインユニットを含み、実行ユニットは:1)複数のフィールドのうちの第1のフ
ィールドに応じて、複数のパイプラインユニットのうちの所定のパイプラインユニットを
用いて第1の演算を実施するよう;及び2)複数のフィールドのうちの第2のフィールド
に応じて、複数のパイプラインユニットのうちの少なくとも2つのパイプラインユニット
を並列に用いて第2の演算を実施するよう、構成される。
累算の転送に関する第3の実施形態は、フェッチユニット及び実行ユニットを備えるプ
ロセッサ装置を伴う。フェッチユニットは命令を受信するよう構成される。実行ユニット
は複数のパイプラインユニットを含み、上記複数のパイプラインユニットの各パイプライ
ンユニットはアキュムレータユニットを含み、実行ユニットは:1)受信した命令に応じ
て、複数のパイプラインユニットのうちの第1のパイプラインユニットを用いて第1の演
算を実施して、ある結果を生成するよう;2)複数のパイプラインユニットのうちの第1
のパイプラインユニットのアキュムレータユニットに上記結果を保存するよう;及び3)
複数のパイプラインユニットのうちの第1のパイプラインユニットのアキュムレータユニ
ットに保存された結果を、プロセッサのアキュムレータユニットに転送するよう、構成さ
れる。
アドレス生成器ユニットの連結に関する第4の実施形態は、フェッチユニット及び複数
のアドレス生成器ユニットを備えるプロセッサ装置を伴う。フェッチユニットはマルチパ
ート命令を受信するよう構成され、マルチパート命令は複数のフィールドを含む。第1の
アドレス生成器ユニットは、複数のフィールドのうちの第1のフィールドに応じて第1の
演算を実施して、第1の結果を生成するよう構成される。第2のアドレス生成器ユニット
は、複数のフィールドのうちの第2のフィールド及び上記第1の結果に応じて第2の演算
を実施するよう構成される。
第5の実施形態は、単一パート/マルチパート決定を伴う命令を受信できるプロセッサ
装置に関する。プロセッサ装置は、命令を受信するよう構成されたフェッチユニットと、
実行ユニットとを備えてよい。実行ユニットは、複数のパイプラインユニットを備えてよ
い。実行ユニットは:1)命令がマルチパート命令であることの決定に応答して、複数の
パイプラインユニットのうちの第1のパイプラインユニットを用いて第1の演算を実施す
るよう(ここでマルチパート命令は複数のフィールドを含み、第1の演算は複数のフィー
ルドのうちの第1のフィールドに依存する);及び2)複数のフィールドのうちの第2の
フィールドに応じて、複数のパイプラインユニットのうちの少なくとも2つのパイプライ
ンユニットを並列に用いて第2の演算を実施するよう、構成してよい。
第6の実施形態は、反復ループ中にプロセッサの未使用部分をパワーダウンさせること
ができる、プロセッサ装置に関する。このプロセッサ装置は、フェッチユニット及び実行
ユニットを備えてよい。フェッチユニットは、複数の命令を受信して、受信した複数の命
令に基づいて少なくとも1つの反復命令シーケンスを識別するよう構成される。上記少な
くとも1つの反復命令シーケンスは、複数の命令のうちの少なくとも1つを含む。実行ユ
ニットは複数のパイプラインユニットを含み、実行ユニットは:1)識別された反復命令
シーケンスに基づく少なくとも第1のサイクルに関する、複数のパイプラインユニットの
第1のサブセットを選択的に無効化するよう;及び2)識別された反復命令シーケンスに
応じた第2のサイクルに関する、複数のパイプラインユニットの第2のサブセットを選択
的に無効化するよう、構成される。
マルチプロセッサシステム上での並列実行のために標的化されたソフトウェアを開発す
るための方法の実施形態を提示する。
例えばマルチプロセッサシステム上での展開及び実行のために標的化されたアプリケー
ションの、所望のシステムの複数のビューを指定する入力を受信してよい。各ビューは、
システムの各態様を提示又は指定してよく、またこれらビューは総体として、効率的な並
列実行のためにマルチプロセッサシステムが展開できる実行可能なプログラムを生成する
ためにコンパイラ(又は他のソフトウェアツール)が使用できる情報を提供してよい。
この入力は、様々な形態のいずれで、また様々なツールのいずれを介して受信されてよ
い。例えばいくつかの実施形態では、入力はユーザによって提供されてよく、即ちユーザ
入力であってよい。他の実施形態では、入力は所望に応じて別のシステム又はプロセス、
ストレージ媒体等から受信されてよい。更に入力はローカルに提供されてよく、又はロー
カルエリアネットワーク(LAN)若しくはインターネット等の広域ネットワーク(WA
N)を介して受信されてよい。例示的な一実施形態では、ユーザはスプレッドシート中で
ビューを指定してよい。別の例示的実施形態では、ユーザはウィザード、即ちグラフィカ
ルユーザインタフェース(GUI)への入力を行ってよく、これは指定プロセスを通して
、例えばプロンプト、有用な提案等によってユーザをリードする。更なる実施形態では、
ユーザは入力/指定プロセスを管理するためにチェックリストを使用してよく、指定され
る各アイテム、例えばビュー、サブビュー等がチェックリストに挙げられており、チェッ
クリストは各チェックリストアイテムが指定されているか(されていないか)を示す。別
の例示的実施形態では、1つ又は複数のテンプレート又はフォームを提供してよく、ユー
ザはビューを指定する情報で上記テンプレート又はフォームを埋めてよい。
各ビューは、アプリケーションの動作又は実行の各態様を含むか又はその表現となって
よい。多数のビューはメモリビュー、通信ビュー、制御ビュー、処理ビューを含んでよい
。他のビューも所望に応じて定義又は指定してよい。一実施形態では、各ビューは、ビュ
ーの更に詳細な属性を指定する複数のサブビュー(又は「ファセット(facet)」)
を含むか又は指定してよい。例えば各ビューは、サイズ、挙動及びアクセシビリティサブ
ビュー(又はファセット)を含んでよく、各サブビューは、各サブビューがその一部とな
っているビューに関連する特定の意味を有してよい。
従って例えば、メモリビューは:アプリケーションによる使用に必要な又は利用可能な
メモリのサイズ(又は量)、即ちデータを処理するためにアプリケーションが使用するメ
モリ構造サイズ;メモリの挙動、即ちメモリ構造が所定のタイミングで挙動する様式;並
びにメモリのアクセシビリティ、即ち例えばアプリケーション及び/又はシステムによる
メモリ構造のアクセシビリティを指定してよい。
同様に、入力は:通信ビュー(通信ビューの各サブビュー、例えば通信サイズ、挙動、
アクセシビリティを定義することを含む);制御ビュー(制御サイズ、挙動、アクセシビ
リティを含む);並びに処理ビュー(処理サイズ、挙動、アクセシビリティを含む)を定
義又は指定してよい。
いくつかの実施形態では、ビュー又はサブビューのうちのいくつかは、他のサブビュー
又はビューの指定によって、例えば同一の又は異なるビューのサブビューによって、自動
的に定義又は指定され得ることに留意されたい。従って例えば、メモリサイズ、挙動及び
アクセシビリティが指定されると、通信挙動が自動的に指定され得る。別の様式で考える
と、いくつかの実施形態では、ビューは、方程式の数が変数の数を超える線形方程式の優
決定系と同様に、「過剰に指定される」か又は「過剰に決定される」場合がある。
本出願で使用される特定の用語又は標識は単なる例示であること、並びに所望に応じて
本出願で開示される新規の構成要素、情報及びプロセスに対していずれの名称を使用して
よいことに留意されたい。例えば所望に応じて、ビュー又は態様はモデル等と呼ばれる場
合もあり、本出願で開示されるサブビューはサブモデル、ファセット、プロパティ等と呼
ばれる場合もある。
システムのビューが指定又は定義されると、これらのビューを表す情報は、アプリケー
ションのソースコード内に含まれ得る。この包含は、広範な方法のうちのいずれにおいて
実施され得る。例えばいくつかの実施形態では、情報はアプリケーションの1つ又は複数
のヘッダファイルに含まれ得る。他の実施形態では、情報は、アプリケーションプログラ
ム要素又は構成要素の中でとりわけ、1つ又は複数の動的リンクライブラリ(DLL)又
はマクロ定義に含まれ得る。より一般には、ビューを表す情報は、所望に応じていずれの
様式及びいずれの形態でアプリケーションソースコードに組み込まれてよい。
ソースコードは例えば、コンパイラ又は他のツールによって処理でき、これはシステム
に関して指定又は定義された複数のビューを表す情報を分析することを含む。例えば一実
施形態では、コンパイラは、アプリケーションソースコード内の複数のビューを表す情報
を認識するよう構成してよく、またこの情報を抽出及び分析してよい。他の実施形態では
、コンパイラは情報を原位置で分析してよい。
実行可能なプログラムは上記処理に基づいて生成してよく、ここで上記実行可能なプロ
グラムは、効率的な並列実行のためにマルチプロセッサシステムに展開可能である。換言
すると、コンパイラは、指定されたビューの分析を含む上記処理に基づいて、実行可能な
プログラムを生成してよい。
従って、本技術の実施形態は、上述のようなソフトウェア開発への従来技術のアプロー
チの様々な欠点に対処でき、これによってユーザは、システムの動作、例えばマルチプロ
セッサシステム上でのアプリケーションの動作に関する様々な要件又は制約を指定でき、
これら指定された要件又は制約をコンパイラ(又は他のツール)が使用して、システム上
で効率的に実行できる実行可能なコードを生成してよい。
図1は、OpenMPを利用したマルチスレッディングを示し、親スレッドはコードのブロックを並列に実行する多数のスレッドに分岐する。 図2は、OpenCLの厳密処理モデル、制御モデル、メモリモデル、通信モデル階層を示す。 図3は、マルチプロセッサシステム(MPS)の一実施形態を示すブロック図である。 図4は、MPS接続スキームの一実施形態を示すブロック図である。 図5は、MPSファブリックの一実施形態を示す更に詳細な図である。 図6は、図5のアーキテクチャ例に従ってDMR(円)と共に均一に分散させたPE(正方形)からなる、例示的なMPSを示す。 図7は、動的に構成可能なプロセッサ(PE)の一実施形態を示すブロック図である。 図8は、一実施形態による、マルチプロセッサシステム上での並列実行のために標的化されたアプリケーションソフトウェアを開発するための方法のフローチャートである。 図9Aは、一般的な2Dフィルタリング組織スキームを示す。 図9Bは、別の一般的な2Dフィルタリング組織スキームを示す。 図10は、単一のプロセッサによる画像フィルタリングのブロック図を示す。 図11は、多数のプロセッサによる画像フィルタリングのブロック図を示す。 図12は、例示的なビデオ2Dフィルタシステムのための、MPS上での2つの異なるリソースレイアウトを示す。 図13は、単一のプロセッサを用いたFIRフィルタを示すブロック図である。 図14は、多数のプロセッサを用いたFIRフィルタを示すブロック図である。 図15は、サンプルバッファに関するメモリ構造を示す。 図16は、メモリ通信挙動に関する経時的構造を示す。 図17は、FIRフィルタの一部に関する、メモリ通信挙動に関する経時的構造を示す。 図18は、9ステージPEパイプラインの一実施形態のパイプラインステージを示す。 図19は、単一PEデータ経路アーキテクチャ及び改善されたPEデータ経路アーキテクチャの実施形態のブロック図を示す。 図20は、データ経路の一実施形態を示すブロック図である。 図21は、アキュムレータ転送を実施する2つのPEの一実施形態を示すブロック図である。 図22は、PEのアドレス生成論理の一実施形態を示すブロック図である。 図23は、アドレス生成ユニット(AGU)の一実施形態を示すブロック図である。 図24は、循環バッファの一実施形態の概念図である。 図25は、図24の循環バッファの制御の一実施形態を示すブロック図である。 図26は、従来のプログラミングモデル及びHyperOpプログラミングモデルを示す2つのブロック図を示す。 図27は、HyperOp命令の一実施形態を示す。 図28は、命令フェッチ及び復号化ユニットの一実施形態を示すブロック図である。 図29は、マルチパート命令を受信及び実行する第1の実施形態を示すフローチャートである。 図30は、マルチパート命令を受信及び実行する第1の実施形態を示すフローチャートである。 図31は、プロセッサによる演算の実施の一実施形態を示すフローチャートである。 図32は、プロセッサによる演算の実施の一実施形態を示すフローチャートである。 図33は、プロセッサを動作させる一実施形態を示すフローチャートである。 図34は、複数のパイプラインユニットを有するプロセッサを動作させる第1の実施形態を示すフローチャートである。
本開示は様々な修正及び代替形態を許容するものであるが、その具体的な実施形態を例
として図面に示し、また本明細書で詳細に説明する。しかしながら、上記具体的実施形態
の図及び詳細な説明は、図示されている特定の形態に開示を限定することを意図したもの
ではなく、反対に、添付の請求項によって定義されるような本開示の精神及び範囲内にあ
る全ての修正例、均等物及び代替例を包含することを意図したものであることを理解され
たい。本明細書において使用されている見出しは、単に組織化を目的としたものであり、
これらの使用は本説明の範囲の限定を意味しない。本出願全体を通して使用される単語「
してよい/し得る/できる(may)」は、許容の意味で(即ち「可能性がある」ことを
意味して)使用されており、強制の意味で(即ち「しなければならない」ことを意味して
)使用されるものではない。同様に、単語「含む(include/including
/includes)」は、ある対象を含むもののそれに限定されないことを意味する。
様々なユニット、回路又はその他の構成部品は、1つ又は複数のタスクを実施する「よ
う構成される(configured to)」として記載され得る。このような文脈に
おいて「よう構成される」は、動作中に上記1つ又は複数のタスクを実施する「回路構成
を有する」ことを一般に意味する、構造の広範な説明である。従ってユニット/回路/構
成部品は、ユニット/回路/構成部品が現在オンでなくても上記タスクを実施するよう構
成できる。一般に「よう構成される」に対応する構造を形成する回路構成は、ハードウェ
ア回路を含んでよい。同様に、記載を簡略化するために、様々なユニット/回路/構成部
品は、1つ又は複数のタスクを実施するとして記載され得る。このような記載は「よう構
成される」という語句を含むものとして解釈されるものとする。1つ又は複数のタスクを
実施するよう構成されるユニット/回路/構成部品の列挙は、これらユニット/回路/構
成部品に関して米国特許法第112条第6段落の解釈を援用しないことを明示的に意図し
たものである。より一般には、いずれの要素の列挙は、「…のための手段(means
for)」又は「…のためのステップ(step for)」という語句が具体的に使用
されていない限り、上記要素に関して米国特許法第112条第6段落の解釈を援用しない
ことを明示的に意図したものである。
参照による援用
Michael B.Doerr、William H.Hallidy、David
A.Gibson、Craig M.Chaseを発明者とする、発明の名称「Pro
cessing System With Interspersed Stall P
ropagating Processors And Communication
Elements」の米国特許第7415594号は、その全体を参照することにより、
本明細書においてその全体が完全に論述されているかのように、本明細書に援用されるも
のとする。
用語
コンピュータシステム‐用語「コンピュータシステム」は、パーソナルコンピュータシ
ステム(PC)、メインフレームコンピュータシステム、ワークステーション、ネットワ
ーク家電、インターネット家電、パーソナルデジタルアシスタント(PDA)、テレビジ
ョンシステム、グリッドコンピューティングシステム若しくはその他のデバイス又はデバ
イスの組み合わせを含む、様々なタイプの計算又は処理システムのいずれかを指す。一般
に、用語「コンピュータシステム」は、メモリ媒体からの命令を実行する少なくとも1つ
のプロセッサを有するいずれのデバイス(又は複数のデバイスの組み合わせ)を包含する
ものとして広く定義できる。
ソフトウェアアプリケーション‐用語「ソフトウェアアプリケーション」(本出願では
単に「アプリケーション」とも呼ぶ)は、その一般的な意味の全範囲を有することを意図
したものであり、1つ又は複数のメモリに記憶でき、かつ1つ又は複数のプロセッサが実
行できる、あらゆるタイプのプログラム命令、コード、スクリプト及び/又はデータ又は
これらの組み合わせを含む。例示的なソフトウェアアプリケーションは、C、C++、F
ORTRAN、Java(登録商標)、アセンブリ言語等のテキストベースプログラム言
語で書かれたプログラム;グラフィックプログラム(グラフィックプログラム言語で書か
れたプログラム);アセンブリ言語プログラム;機械言語にコンパイルされたプログラム
;スクリプト;並びに他のタイプの実行可能なソフトウェアを含む。一般にプログラムは
、1つ又は複数のデータ構造を指定し、またこれらの構造内のデータに対して取るべき手
順のステップを指定して1つ又は複数の機能を実施する、命令のセットである。プログラ
ムは、特定の機械アーキテクチャに関して標的化される場合が多い。更に抽象的には、プ
ログラムの手順のステップは、上記プログラムのアルゴリズムと呼ばれる場合がある。
アプリケーションは、マルチプロセッサシステム(MPS)の1つ又は複数のプロセッ
サ上で実行でき、MPSのローカルメモリのうちの1つ若しくは複数からデータを読み出
すことができ、及び/又はMPSのローカルメモリのうちの1つ若しくは複数にデータを
書き込むことができる。アプリケーションは、1つ又は複数の計算タスクを含んでよく、
ここで各タスクは典型的にはMPSの単一のプロセッサ上で実行され、1つ又は複数のア
プリケーションからの1つ又は複数のタスクと上記プロセッサを共有してよい。アプリケ
ーションは、特定の機能又は演算を実施してよい。アプリケーションが2つ以上のタスク
を含む場合、これらタスクは互いに通信して上記機能又は演算を実施してよい。
MPSは複数のアプリケーションを同時に実行してよく、例えばこれらアプリケーショ
ンは互いに並列に実行される。アプリケーションは互いに通信してよく、これらアプリケ
ーションが実施する各機能又は演算は、より大きい又はより高いレベルの機能又は演算を
実施するために互いを利用してよい。
ソフトウェアプログラミングモデル‐ソフトウェアプログラミングモデルは、簡単に言
うと、ユーザの、機械及びその動作環境のビューである。ソフトウェアプログラミングモ
デルは、アプリケーションを記述できる1つ又は複数の言語、並びに上記1つ又は複数の
言語で直接表現できるものを超えた抽象化及びプセル化された機能性を提供するライブラ
リを含む。ソフトウェアプログラミングはまた、それを通してアプリケーションがその外
部のエンティティ(I/O、拡張メモリ等)と相互作用する、及びそれを通して上記アプ
リケーションに関するメタ情報(例えばパフォーマンス制約又は要件)が表現される、機
構も含む。プログラミングモデルの2つの主要な部分は、並列処理がアプリケーション内
でどのように表現されるか又はアプリケーションからどのように引き出されるかを示す制
御モデル、及びアプリケーションの並列のエンティティがどのように情報を共有するかを
示す通信モデルである。
ソフトウェアプログラミングモデルは、実際の制御及びデータフロー及びアプリケーシ
ョンが最終的に実行された場合に発生することになる通信の、「理想化された」ビューを
提示する。演算の意味規則は、下層の実装がソフトウェアプログラミングモデルにおいて
記述された通りに正確に実施されているかのようになるものであり、同一の効果(答え)
が得られる限り、実際に行われるステップは重要ではない。実際の実装ステップは、コー
ドの効率及び/又はデータサイズ、速度、電力消費等の理由により異なり得る。
ソフトウェアプログラミングモデルの考慮すべき重要な事柄は、ツールセット(コンパ
イラ等)による、及びそれに続く実行モデル下でのアプリケーションの正確かつ効率的な
処理をサポートするために十分な情報もキャプチャしながら、便利かつ自然でユーザにと
って直感的な用語でのアプリケーションの表現をサポートする機構を、ソフトウェアプロ
グラミングモデルがユーザに同時に提供することである。
ハードウェアプログラミング/実行モデル‐ハードウェアプログラミングモデル又は実
行モデルは、アプリケーションがどのように実行されるかを表す。これは、アプリケーシ
ョンの論理及びデータオブジェクトに対応する情報のセットがどのように表現されるか、
並びにその情報が経時的にどのように処理されて、アプリケーションによって指定された
機能が達成されるかを定義する。システムツール(コンパイラ、並列処理抽出器、配置配
線(place‐and‐route)等)の目的は、アプリケーションをそのソフトウ
ェアプログラミングモデル表現から対応する実行モデル表現に変換することである。実行
モデルは、(例えばライブラリを通して)ソフトウェアプログラミングモデルによって記
述された機能性をサポートし、(例えばO/Sを通して)ハードウェアの使用を監視、調
停、管理するために必要な機構を含む。
実行モデルは、ソフトウェアプログラミングモデルと極めて密接に対応してよく、又は
完全に異なっていてよい。ソフトウェアプログラミングモデルの異なる複数の態様は、実
行モデルへの異なる直接的対応度を有してよい。対応のレベルは、下層のハードウェアア
ーキテクチャが、元々の(ソフトウェア)プログラミングモデルとどの程度類似している
かに関連する。類似性が高いほど対応性が高い。
下層のハードウェアアーキテクチャ‐下層のハードウェアアーキテクチャは、計算が実
行される物理デバイスのアーキテクチャである。このレベルでは、全ての動作はデバイス
が実行する物理的動作に直接対応する。下層のハードウェアアーキテクチャを記述できる
抽象のレベルは、(設計空間開発中の評価、シミュレーション、特性決定、トレードオフ
分析に有用な)高次概念アーキテクチャから、(製作されるデバイスの物理的設計の実施
に有用な)低次実装アーキテクチャに変化し得る。実装レベルにおいてさえ、下層のハー
ドウェアアーキテクチャの異なる複数の例は、能力又は性能において異なり得る。例えば
ある例は10×10グリッドの処理ユニットを実装してよく、その一方で別の例はたった
6×6グリッドしか実装しなくてよい。これらはそれぞれ能力が異なるものの、下層のハ
ードウェアアーキテクチャとの整合性を保持している。
自動的に(automatically):その作用又は動作を直接指定又は実施する
ユーザ入力を必要とせずに、コンピュータシステム(例えばコンピュータシステムが実行
するソフトウェア)又はデバイス(例えば回路構成、プログラム可能なハードウェア要素
、ASIC等)が実施する動作又は操作について用いる。従って用語「自動的に」は、ユ
ーザが手動で実施又は指定する操作(ここでユーザが操作を直接実施するために入力を提
供する)と対照的なものである。自動処理は、ユーザが提供する入力によって開始される
場合があるが、これに続く「自動的に」実施される動作は、ユーザが指定するものではな
く、即ち「手動で」実施される(ユーザが各動作の実施を指定する)ものではない。例え
ばユーザが、各フィールドを選択し、(例えば情報をタイピングすることによって、チェ
ックボックスを選択することによって、無線選択によって等で)情報を指定する入力を提
供することによって、電子フォームを埋める場合、仮にコンピュータシステムがユーザの
動作に応答して上記フォームを更新しなければならないとしても、これは上記フォームを
手動で埋めたことになる。このようなフォームはコンピュータシステムによって自動で埋
めることができ、この場合コンピュータシステム(例えばコンピュータシステム上で実行
されるソフトウェア)は、フォームのフィールドを分析して、フィールドへの回答を指定
するいずれのユーザ入力を必要とせずにフォームを埋める。上述のように、ユーザはフォ
ームを自動で埋める動作を発動する場合はあるが、実際にフォームを埋める動作には関わ
らない(例えばユーザはフィールドへの回答を手動で指定せず、回答は自動的に完了する
)。本明細書は、ユーザが行う動作に応答して自動的に実施される操作の様々な例を提供
する。
MPSシステムの概要
マルチプロセッサシステム(MPS)及び関連する方法の様々な実施形態を説明する。
マルチプロセッサシステム(MPS)は、複数の処理要素(PE)を含むシステムとして
定義できる。MPSは、これらPE間に散在する複数のメモリを有してよく、あるいは単
一の共有メモリを有してよい。本明細書で使用される場合、用語「処理要素(proce
ssing element)」は、プロセッサ若しくはCPU(中央演算処理装置)、
マイクロプロセッサ又はプロセッサコアを指す。MPSは2つ以上のいずれの個数のPE
を含んでよいが、いくつかのMPSは、典型的には汎用プロセッサ(GPP)を1つのみ
、又は数個のGPPのみを含む従来のコンピュータシステムよりも有意に多い個数のPE
を含んでよいことに留意されたい。例えばいくつかのMPSは、4、8、16、32又は
64個のPEを含んでよい(他の例は例えば数ダース、数百個又は数千個ものPEを含む
)。いくつかの実施形態では、大型MPSに好適なPEは、低電力消費を目的とした特別
な構成により、従来のコンピュータシステムによって使用される汎用プロセッサよりもエ
ネルギ効率が高いものであってよい。
MPSはまた、PE及び/又はメモリを相互接続する相互接続ネットワーク(IN)も
含んでよい。PE及びメモリは、円形次元(例えばループ又はリング)を含む1、2、3
又は4以上の次元で相互接続してよい。より高い次元のMPSは、より低い次元のファブ
リケーション媒体上にマッピングできる。例えば4次元(4D)超立方体の形状を有する
MPSは、シリコン集積回路(IC)チップの3Dスタック上に、又は単一の2Dチップ
上に、又は計算ユニットの1Dの線上にさえ、マッピングできる。低次元のMPSをより
高次元の媒体にマッピングすることもできる。例えば計算ユニットの1Dの線を、ICチ
ップの2D平面上に曲がりくねった形状で展開でき、又はチップの3D積層体へと巻くこ
とができる。MPSは複数のタイプの計算ユニットと、プロセッサ及びメモリが散在する
構成とを含んでよい。広い意味でのMPSには、MPSの階層又は入れ子構成、特に相互
接続されたICチップからなるMPSも含まれ、この場合ICチップは1つ又は複数のM
PSを含み、これらMPSもまた更に深い階層構造を有してよい。
本出願において使用される用語MPSは、複数のプロセッサの比較的均一なセットと、
いわゆる「プラットフォームIC」チップ上に集積された汎用プロセッサ及び特殊化され
たプロセッサの異種集団との両方を包含する。プラットフォームICチップは数個〜多数
のプロセッサを含んでよく、これらは典型的には共有メモリによって相互接続され、場合
によってはオンチップネットワークによって相互接続される。MPSと「プラットフォー
ムIC」チップとの間には違いがあってもなくてもよい。しかしながら「プラットフォー
ムIC」チップは、特定の垂直的市場における特定の技術要件に対処するために市販され
ているものであってよい。
一般に、MPSのためのメモリは階層として組織してよく、この階層は頂部に高速なメ
モリを有し、階層を1段ずつ下がるにつれてより低速であるがより大容量のメモリを有す
る。MPS中において、階層の頂部の補助メモリは、各PEの近傍に位置してよい。各補
助メモリは、最適な命令又は最適なデータを保持するよう特殊化できる。特定のPEのた
めの補助メモリは、そのPE専用のものであっても、又は他のPEと共用であってもよい
メモリ階層を更に下がると、各PEに隣接する補助メモリの何倍も大きいビット容量を
有する半導体同期ダイナミックランダムアクセスメモリ(SDRAM)等の、比較的大型
の共有メモリが存在してよい。SDRAMは、その製作を特定化するために、PE及び補
助メモリとは分離された1つ又は複数のICチップ上に位置してよい。メモリ階層を更に
下がると、フラッシュメモリ、磁気ディスク及び光学ディスク等の他のタイプのメモリが
存在してよい。
MPSは、特定の機能を達成できるよう、ソフトウェアプログラムを用いてプログラム
されてよい。各機能は、MPS中のPEのうちの1つ又は複数によって実行されてよい。
しばしば、MPS上で複数のプログラムを同時に実行してよい。プログラムは、より複雑
な機能を実施するために、及び並列処理技術を採用することによってより単純な機能をよ
り迅速に実施するために、共に実行され、互いに通信してよい。PE間のこのような協調
を、本出願では連携処理と呼ぶ。
MPSは、関連するデータ及びコマンドのソースが入力データ及びコマンドを提供する
よりも早くこれらを受信でき、無視できる程度に十分に低いレイテンシで結果を提供でき
るよう、十分な速さでアプリケーション又はプログラムを実行できる。このようなアプリ
ケーションは、遅延なくリアルタイムで動作する、即ち「リアルタイムアプリケーション
」と呼ばれる。関連する入力データ(又はコマンド)は「リアルタイムデータ」(又は「
リアルタイムコマンド」)と呼ばれる。例えばMPSは入力信号を介してリアルタイムデ
ータを受信してよい。アプリケーション、プログラム又は機能のうちの1つ又は複数は入
力信号を処理してよく、場合によっては、1つ又は複数のプログラムに基づいて修正され
た又は追加のリアルタイムデータを伴う出力信号を生成してよい。
図3‐MPSブロック図及び概要
図3は、マルチプロセッサシステム(MPS)の一実施形態を示すブロック図である。
図示されている実施形態では、MPS10は複数の処理要素(PE)及び複数のデータメ
モリルータ(DMR)を含み、DMRは、データ及び命令を互いに通信するよう連結され
た、動的に構成可能な通信器、又は動的に構成可能な通信要素と呼ぶこともできる。本出
願で使用される場合、PEはPEノードとも呼ばれる場合があり、またDMRはDMRノ
ードとも呼ばれる場合がある。
処理システム(MPS)10は、GPMC、DSP、FPGA又はASICが現在使用
されている様々なシステム及びアプリケーションのいずれにおいて使用してよい。従って
例えば、処理システム10は、様々なタイプのコンピュータシステム又は計算を必要とす
る他のデバイスのいずれにおいて使用してよい。1つの考えられる実施形態では、処理シ
ステム10を、デジタルビデオディスプレイシステムの信号処理デバイスとして使用する
一実施形態では、PEは、データを操作するために構成された1つ又は複数の算術論理
ユニット(ALU)、ALUを制御するために構成された1つ又は複数の命令処理ユニッ
ト(IPU)、命令又はデータを保持するよう構成された1つ又は複数のメモリ、並びに
様々な種類の多重化装置及び復号器を含んでよい。このような実施形態は多数のポート(
「プロセッサポート」)を含んでよく、これらのうちのいくつかはDMRに接続されるよ
う構成されてよく、残りは他のPEに接続されるよう構成されてよい。図7はPEの一実
施形態のブロック図であり、これについて以下に更に説明する。
一実施形態では、DMRは、データ及び命令を保持するよう構成された1つ又は複数の
ランダムアクセスメモリ(RAM)、構成可能なコントローラ、クロスバースイッチ等の
ネットワークスイッチ、レジスタ並びに多重化装置を含んでよい。このような実施形態は
多数のポートを含んでよく、これらのうちのいくつかはPEに接続されるよう構成されて
よく(本出願ではPEタイプポートと呼ばれる)、残りはDMRに接続されるよう構成さ
れてよい(本出願ではDMRタイプポートと呼ばれる)。DMR又はPEのいずれに又は
いずれから接続されるように構成されているかにかかわらず、いずれの所定のポートに関
して、このような所定のポートを通して特定のクロックサイクル内に伝送可能なデータの
量は、様々な実施形態において変化し得ることに留意されたい。例えば一実施形態では、
所定のポートは、1クロックサイクルにつき1データ語を伝送するよう構成されてよく、
その一方で別の実施形態では、所定のポートは1クロックサイクルにつき複数のデータ語
を伝送するよう構成されてよい。更に別の実施形態では、所定のポートは、時分割多重化
等の技術を採用して、複数のクロックサイクルに亘って1つのデータ語を伝送してよく、
これによってポートを含む物理的接続の個数を削減できる。
MPS10の一実施形態では、各PEは、命令のために予約された小型ローカルメモリ
を含んでよく、ローカルデータストレージを極めて僅かしか有しなくてよい。このような
実施形態では、各PEに近接するDMRは、所定のPEにオペランドを提供するよう構成
されてよい。特定の実施形態では、多数のPE命令に関して、1クロックサイクル中に、
所定のPEが近隣のDMRからオペランドを読み出し、ALU演算を実行し、ALU結果
を所定の近隣のDMRに保存してよい。これにより、1つのPEからのALU結果を、そ
のクロックサイクル中に、実行の直後に複数の他のPEにとって利用可能とすることがで
きる。このようにして結果を生成することにより、近隣のPEの実行を密接に連携したも
の、即ち「緊密に連結されたもの」とすることができる。
本出願で使用される場合、所定のDMR又はPEの視点から、近隣のDMR又はPEは
、特定のレイテンシ範囲内で上記所定のDMR又はPEからアクセスできるDMR又はP
Eを指す。いくつかの実施形態では、近接関係の程度を定義するレイテンシは、例えばク
ロック速度等の因子に応じて変化し得る。更にいくつかの実施形態では、近接の複数の度
合いを定義してよく、これらの度合いは、異なる複数のアクセスレイテンシに対応してよ
い。例えば一実施形態では、「最も近い近接」は、データが要求されたクロックサイクル
と同一のクロックサイクル中にこのデータを供給できるデバイスとして定義してよく、「
次に近い近接」は、データが要求された後、1クロックサイクル以内にこのデータを供給
できるデバイスとして定義してよく、これ以降も同様である。他の実施形態では、近接関
係を定量化するために他のメトリクスを使用してよいことも考えられる。
所定のMPS実施形態では、いくつかのDMR及びPEは、他のDMR及びPEと論理
的に隣接してよい。本出願で使用される場合、「論理的に隣接する」は、あるデバイスの
1つ又は複数のポートが、他のデバイスの各ポートに、介在するDMR又はPEを通過せ
ずに直接接続されるような、あるDMR及び別のDMR又はあるDMR及びあるPEとい
った2つのデバイス間の関係を指す。更に所定のMPSの実施形態では、いくつかのDM
R及びPEは、他のDMR及びPEと物理的に隣接してよい。本出願で使用される場合、
「物理的に隣接する」は、あるDMR及び別のDMR又はあるDMR及びあるPEといっ
た2つのデバイス間に他のいずれのDMR又はPEも物理的に位置していないような、こ
れら2つのデバイス間の関係を指す。
いくつかのMPSの実施形態では、論理的及び/又は物理的に隣接するDMR及びPE
等のデバイスは、近接している又は近隣のデバイスでもある。しかしながらいくつかの実
施形態では、所定のデバイス間の論理的及び/又は物理的な隣接は、これら所定のデバイ
ス間に、近接関係又は特定の度合いの近接関係を伴わないことに留意されたい。例えば一
実施形態では、あるDMRは、相当な距離だけ離れて位置する別のDMRに直接接続され
てよい。このようなペアは論理的には隣接しているものの物理的には隣接していない場合
があり、一方のDMRから他方のDMRへの信号伝播時間は、近接のレイテンシ要件を満
たすには長過ぎるものとなり得る。同様に一実施形態では、あるDMRは別のDMRと物
理的には隣接しているものの直接接続されておらず、従って論理的には隣接していない場
合がある。一方のDMRから他方のDMRへのアクセスは、1つ又は複数の中間ノードを
横断し得、結果として発生する通過遅延は、近接のレイテンシ要件を満たすには大き過ぎ
るものとなり得る。
MPS10の所定の実施形態の技術及び実装形態に応じて、DMRの複数のポートの具
体的な数及びDMRのメモリのサイズは、全体としてのDMRの所望の実行速度及びサイ
ズとバランスを取ってよい。例えばあるDMRの実施形態は、4つのPEタイプポート、
4つのDMRタイプポート、4K語のメモリを含んでよい。このようなDMRの実施形態
は、ダイレクトメモリアクセス(DMA)機構を提供するよう構成されてよい。DMA機
構により、PEが結果を計算している間に、所定のDMRが、他のDMRへ若しくは他の
DMRから、又はMPS10の外部の位置へ若しくはMPS10の外部の位置から、効率
的にデータをコピーできるようになる。
MPS10の一実施形態では、データ及び命令は、複数の異なる方法のうちの1つによ
ってDMR間で伝送されてよい。シリアルバスはMPS10内の全てのメモリに供給され
てよく、このようなバスは、外部メモリからMPS10を初期化するために、又はMPS
データ構造の試験をサポートするために使用できる。短距離伝送に関して、所定のPEは
、その近隣のDMRへ又は近隣のDMRからデータを直接移動させるようプログラムされ
てよい。データ又は命令を更に長距離に亘って伝送するために、DMRのネットワーク内
において通信経路を動的に生成及び破壊してよい。
このような比較的長距離のデータ伝送のために、MPS10内の相互接続されたDMR
のネットワークは、通信経路用のスイッチドルーティングファブリック(SRF)を構成
してよい。このような実施形態では、SRF内の通信経路を管理するために少なくとも2
つの方法が存在し得る。第1の方法はグローバルプログラミングによるものであり、経路
はソフトウェア制御によって(例えば人であるプログラマによって又はルーティング能力
を有するコンパイラによって)選択でき、命令をDMR構成コントローラにコードしてク
ロスバーを適切にプログラムできる。経路を生成するために、その経路に沿った全てのD
MRを、特定のルーティング機能によって明白にプログラムしてよい。経路が頻繁に生成
及び破壊される動的な環境において、多数のクロスバー構成コードが必要となり得、これ
らのストレージは潜在的に限定されたDMR RAMリソースを消費し得る。
通信経路を管理するための第2の方法は、「ワームホールルーティング」と呼ばれる。
ワームホールルーティングを実装するために、各DMRは、ステアリング機能のセットと
、メッセージと呼ばれる語のシーケンスの、SRFを通る進行を停止及び再開させる機構
とを含んでよい。全ての通信経路がステアリング機能を共通して使用及び再使用してよい
ため、DMR RAMを占有し得る構成コードの量は、上述のグローバルプログラミング
法よりも大幅に小さくなり得る。ワームホールルーティング法に関して、ここでもまたソ
フトウェア制御を使用して、経路が使用する特定のリンクを選択してよいが、経路生成(
本出願ではセットアップとも呼ぶ)及び破壊/リンク解放(本出願ではティアダウンとも
呼ぶ)のプロセスは、最小のソフトウェア介入を伴ってハードウェア内に実装できる。
経路上でのデータ語の潜在的な損失を防止するために、MPS10の実施形態は、経路
に沿った受信器と伝送器との間のフロー制御を実装してよい。フロー制御は、対応する受
信器がそれ以上データを受信できない場合に伝送器を停止させることができ、また対応す
る受信器がデータを受信する準備ができた状態となった場合に伝送器を再開させることが
できる機構を指す。経路上でのデータのフローの停止及び再開は、ワームホールルーティ
ングにおけるメッセージの進行の停止及び再開と多くの類似点を有し、これら2つは統合
されたスキーム内で組み合わせることができる。
一実施形態では、MPS10は複数のPE及びDMRを含んでよく、これらPEは同一
であってよく、これらDMRは同一であってよく、均一なアレイ内で接続されてよい。均
一なアレイにおいて、PEの大半は同一であってよく、PEの大半はそれぞれ、DMRへ
の同一数の接続を有してよい。また均一なアレイにおいて、DMRの大半は同一であって
よく、DMRの大半はそれぞれ、他のDMR及びPEへの同数の接続を有してよい。MP
Sの一実施形態のPE及びDMRは、実質的に均一な様式で散在していてよい。本出願で
使用される場合、「実質的に均一な散在」は、DMRに対するPEの比が、アレイの複数
の部分領域の大半に亘って一貫している構成を指す。
実質的に均一な様式で配設された均一なアレイは、予測可能な相互接続パターンを提供
する、アレイ全体に亘ってソフトウェアモジュールを再使用できるようにする等、特定の
有利な特徴を有し得る。一実施形態では、均一なアレイにより、少数のPE及びDMRの
例を設計及び試験できる。システムは、1つのDMR及び1つのPEを備えるユニットを
製作し、このユニットを複数回反復する、即ち「タイルリングする(tiling)」こ
とによって、組み立てることができる。このようなアプローチは、共通のシステム要素の
再使用により、設計及び試験コストを低下させることができる。
また、PE及びDMRの構成可能な性質により、物理的に均一なアレイ上で極めて広範
な不均一挙動が発生するようにプログラムできるようにすることができることに留意され
たい。しかしながら代替実施形態では、MPS10は不均一なDMR及びPEユニットで
形成してもよく、これらユニットは、規則的な若しくは不規則なアレイに、又はランダム
にさえ接続してよい。一実施形態では、PE及びDMRの相互接続は、例えば集積回路(
IC)、セラミック基材又はプリント回路基板(PCB)上の回路トレースとして実装し
てよい。しかしながら代替実施形態では、このような相互接続は、例えば電磁エネルギ(
即ち電波若しくは光学エネルギ)、無線(即ち無誘導)エネルギ、粒子(電子ビーム等)
、又は分子上の電位のための導波路といった様々な細密通信リンクのいずれであってよい
MPS10は単一の集積回路上に実装してよい。一実施形態では、複数のMPS集積回
路を組み合わせて、より大型のシステムを生成してよい。MPS10の所定の実施形態は
、シリコン集積回路(Si‐IC)技術を用いて実装してよく、またこのような技術の固
有の特徴の原因となる様々な特徴部分を採用してよい。例えばSi‐ICチップ上の回路
は薄い平面内に制限され得る。これに対応して、MPS10の所定の実施形態は、図3に
示すようなPE及びDMRの2次元アレイを採用してよい。しかしながら、PE及びDM
Rの異なる構成を含む、MPSの代替実施形態が考えられる。
更に、Si‐ICチップ上で使用可能な配線密度は、このようなチップ間でのものより
遥かに高くてよく、各チップは、オンチップ信号とオフチップ信号とをインタフェース接
続するために特別な入力/出力(I/O)回路の周縁部を有してよい。これに対応して、
MPS10の所定の実施形態は、チップのコアにあるPE及びDMRの均一なアレイと、
チップの周縁部に沿った修正されたPE/DMRユニットとで構成された、若干不均一な
アレイを採用してよい。しかしながら、均一なPE/DMRユニットと修正されたPE/
DMRユニットとの異なる構成及び組み合わせを含む、MPSの代替実施形態が考えられ
る。
また、Si‐IC回路によって実施される計算動作により熱が生成される場合があり、
これはICパッケージングによって除去できる。ICパッケージングの増大には追加の空
間が必要となり得、ICパッケージングを通る、及びICパッケージングの周囲の相互接
続は、経路の長さに比例する遅延を招き得る。従って上述のように、極めて大型のMPS
は、多数のチップを相互接続することによって構成してよい。このような多チップMPS
実施形態のプログラミングは、チップ間信号遅延がチップ内遅延より遥かに長いことを考
慮したものであってよい。
所定のSi‐IC MPS10の実施形態では、単一のチップ上に実装できるPE及び
DMRの最大数は、所定のSi‐IC技術によって可能な小型化、並びに各PE及びDM
Rの複雑さによって決定できる。このようなMPSの実施形態では、PE及びDMRの回
路複雑性は、標的レベルの計算スループットを達成することを条件として最小化できる。
このように最小化されたPE及びDMRを、本出願では「合理化された(being s
treamlined)」と呼ぶ場合がある。MPS10の一実施形態では、PEに関す
るスループットの標的レベルは、同一のSi‐IC技術において作製される最良のデジタ
ル信号プロセッサ(DSP)の算術実行ユニットのスループットの標的レベルに匹敵する
ものであってよい。しかしながら、標的PEスループットに関する代替的な基準を使用し
てよい他のMPSの実施形態が考えられる。
いくつかの実施形態では、MPS10は、DSP及びFPGAアーキテクチャの最良の
特徴を採用してよい。DSPと同様、MPS10は、多数の処理ユニット及びオンチップ
メモリを有するプログラム可能なチップであってよい。しかしながらDSPに対して、M
PS処理ユニットは合理化されてよく、個数が多くてよく、またMPS処理ユニット間の
データ移動並びにオンチップ及びオフチップのデータ移動の帯域幅を最大化するために、
新規の方法で相互接続されてよい。DSPより多くの処理ユニットを有することにより、
MPS10は、単位時間あたりに更に多くの多重化を実施でき、合理化された処理ユニッ
トはエネルギ使用を最小化できる。内部並列処理を行う多くのDSPは、バス指向性アー
キテクチャであってよい。いくつかの実施形態では、MPS10はバスを含まなくてよく
、SRF内に埋め込まれた、例えばDMR内で近接した共有ローカルメモリを含んでよく
、これにより、バス指向性アーキテクチャより有意に高い総帯域幅を提供できる。
FPGAアプローチと比べて、いくつかのMPSの実施形態はより粗粒化されていてよ
い。例えばMPSの一実施形態では、演算は自然語長(例えば16ビット)を有してよく
、自然語長の倍数のデータを用いて実施した場合、計算はより効率的となり得る。いくつ
かのMPSの実施形態では、PE及びDMRは、FPGAにおいて実現される同等の構造
よりも密であってよく、これにより、比較的短い平均配線長、低い配線抵抗、少ないエネ
ルギ使用を得ることができる。FPGA実装形態とは対照的に、いくつかのMPSの実施
形態では、MPS内の全てのALUはプロセッサの一部(即ちPE)であってよく、これ
は、オペランドのフェッチ、及びDMR内にある周囲の迅速なメモリへの結果のライトバ
ック(write back)を促進できる。ALU、フェッチ及びライトバック動作に
関するタイミング及びクロックスキューの問題は、ICチップの設計中に一度に解決でき
、またFPGA実装形態において典型的であるように、新規のアプリケーションそれぞれ
において再度解決する必要はない。
MPSトポロジ及び通信
図3に示すMPS10は、図示したようにPE間にDMRを散在させることによって、
迅速なメモリへの十分な接続をPEに提供できる。このような構成は、分離型(即ち非散
在型)構成に対して、所定のPEがDMR内のメモリにアクセスするために必要な時間を
削減でき、本出願ではこれを散在型グリッド構成と呼ぶ場合がある。図3の実施形態では
、PEとDMRとの比はおおよそ1:1である。しかしながら、異なるPEとDMRとの
比を含んでよい他のMPSの実施形態が考えられる。
DMRとPEとの間の接続は、図3には明示されていない。というのは、異なるタイプ
及び数の接続を用いる、多数の可能な接続スキームが存在し得るためである。
図4‐MPS接続スキーム
図4は、MPS接続スキームの一実施形態を示すブロック図である。MPS接続スキー
ム20は、複数のDMR及びPEを含み、図3のMPSの一部分を説明するものであり得
る。MPS接続スキーム20では、各PEは4つの近隣のDMRに接続され、各DMRは
4つの近隣のPE及び4つの近隣のDMRに接続される。従ってMPS接続スキーム20
は、上述のPlanarA接続スキームを説明するものであり得る。
MPS接続スキーム20において高帯域幅ポートをサポートするために、ポート間(P
E‐DMR間又はDMR‐DMR間)の接続は短くてよく(即ち近隣に限定されてよく)
、また語の幅であってよい(これは、接続のデータ部分の導電体(ライン)の数が、AL
Uオペランド中で使用されるビット数と同一であり得ることを意味する)。PE‐DMR
間接続はアドレスラインを含んでよい。DMR‐DMR間接続は必ずしもアドレスライン
を有しなくてよいが、フロー制御用ラインを有してよい。
PEノードを簡素なまま維持することによって、大型アレイ(例えばMPSの一実施形
態では、16行×16列=256個のPE)を、単一のVLSI IC上に、それほど高
くないコストで配置できる。好適なVLSI技術は、シリコン又は他の半導体内に双極ト
ランジスタを有する又は有しない、相補型金属酸化膜半導体(CMOS)電界効果トラン
ジスタを含んでよいが、これに限定されない。
いくつかのMPSの実施形態では、ノード間の通信はプログラマの制御下であってよい
。MPSにおいて、各PEは近隣のDMRとデータ/命令を通信してよく、また任意にこ
れらのDMRを通して他のDMR及びPEへと通信してよい。これは、短距離に亘る少量
のデータの伝送に関して非常に効率的である。しかしながら、より大きなデータのブロッ
ク又はより長い距離に関しては、DMAエンジンを用いてデータを移動させることにより
、PEを、ALU演算を実施できるよう自由にすると、より効率的である。
比較的長距離のブロックの移動に関して、いくつかのMPSの実施形態は、PEを関与
させずにDMR間でメモリ‐メモリ間伝送を行うための手段を提供できる。PEは、近隣
のDMRのDMRタイプポートに、このようなポートと関連する特別なSMアドレスによ
って、間接的にアクセスできる。これにより、PEは、メッセージを送信するための新規
の経路を生成して、後にこの経路をティアダウンし、あるいはメッセージを受信してよい
。PEはまた、伝送されるデータのブロックを近隣のDMRのSMバッファ内に保存して
よく、続いてこの近隣のDMRに、DMAの動作を、上記動作と関連する特別なSMアド
レスによって開始させるよう指示してよい。これによりPEは、近隣のDMRがデータの
DMA伝送を調整している間に他のタスクを進めることができるようになる。
MPSの様々な実施形態は、有用なアルゴリズムを実行するための有利な環境を提供で
きる。(例えば画像データを分析するための)関心対象となるアルゴリズムは、ALUの
フロー図へと分解できる。各フロー図はMPSアレイ上にツリー、格子又は多数のフィー
ドバック/フィードフォワード経路を含むいずれの任意のネットワークとしてマッピング
できる。1つのALUの有限精度は、複数のPE及びDMRを組み合わせることによって
多数の語の正確な結果を得られるように拡張されてよい。フロー図をMPSにマッピング
する際、ノード間の距離に比例するPE/DMRノード間の通信遅延は上昇し得る。また
、通信キューが大きい場合又は再構成が頻繁に行われる場合、マッピングは各ノードにお
いてより多くのメモリを必要とし得る。これらの因子は、通信遅延、キュー及び再構成を
考慮に入れることができる綿密なプログラミングによって補償できる。
シストリックアルゴリズムは、MPSの様々な実施形態に対して特に効率的にマッピン
グを行うことができるアルゴリズムのクラスを表す。シストリックアルゴリズムは、行列
演算、画像処理、信号処理における幅広い応用のために開発された。シストリックアルゴ
リズムでは、多数のプロセッサが同期して協働し、困難な計算を実施できる。理想的なア
ルゴリズム実装形態では、各プロセッサは、アルゴリズムが必要とされる限り、同一の演
算(又は複数の演算の短いループ)を何度も何度も実施でき、データは、データ語のバラ
ンスの取れた生成及び消費を伴って、近隣の接続によって、プロセッサのネットワークを
通って流れることができる。生成される各中間結果データ語が後続の計算によって即座に
消費される場合、必要なメモリの量を最小化できる。シストリックアルゴリズムの利点は
、合理化されたプロセッサを使用でき、メモリ要件を最小化でき、標準的な低コストのV
LSI技術を使用して高い算術演算速度を達成できる能力を含んでよい。
MPSのある実施形態は、1つのチップ及びMIMDアーキテクチャ全体につき多数の
プロセッサを有してよく、上記MIMDアーキテクチャは、SIMDシステム及び分散型
MIMDシステムといった他のクラスのシステムの演算をエミュレートするよう構成され
てよい。いくつかの実施形態では、MPSはチップの異なる領域で異なるアルゴリズムを
同時に実行できる。またいくつかの実施形態では、電力を節約するために、プログラマは
、少なくともいくつかのPE及びDMRへのクロックを選択的に有効化及び無効化できる
。従って、使用されていないPE及びDMRを無効化できる。
PE/DMRファブリック
図5は、MPSファブリックの一実施形態を示す更に詳細な図である。図5では、各P
Eは4つのDMRに取り囲まれ、これを用いて各PEはメモリ要求及びメッセージを通信
できる。各DMRは、ファブリックの縁部に近い場所を除いて、4つの他のDMRに取り
囲まれ、上記縁部では各DMRはチップI/Oポートに隣接してよい。各DMRは近隣の
DMR又はチップI/Oポートと通信して、通信経路をセットアップし、上記通信経路上
でメッセージを送受信できる。
MPSの演算
図6は、図5に示すアーキテクチャ例に従って、9×9のDMR(円)のアレイと共に
均一に散在する8×8のPE(正方形)のアレイからなる、例示的なMPSを示す。プロ
グラムは、PEに割り当てられるタスクへとコンパイルできる。第1の例示的なプログラ
ムは、タスクIDの=62でコンパイルされており、アレイの左上隅の特定のPEに割り
当てられている。変数u、v、wは、プログラムソースコード中の宣言された通信変数で
あり、隣接するDMRの特定のメモリアドレスに割り当てられる。u、vはI/Oポート
のためのバッファであり、wは、関連するDMRとのオンチップネットワーク通信のため
のバッファである。第2の例示的なプログラムは、タスクID=71でコンパイルされて
おり、アレイの内部の特定のPEに割り当てられている。変数xは宣言された通信変数で
あり、図示されているDMRに割り当てられている。変数xに関連する通信経路は、xが
割り当てられたDMRから、他のDMRを通って、最上行のI/Oポートへと続く。図示
したように、これら2つの例示的なプログラムは互いに通信しないが、これらは、タスク
71に別の通信変数を追加し、タスク71のDMRと、タスク62に隣接するDMRの変
数wとの間に経路を追加することによって、容易に通信させることができる。
動的に構成可能なプロセッサ
図7は、動的に構成できる処理要素(PE)の例を示すブロック図である。PE300
は、図3〜6に示す動的に構成可能なプロセッサ(DCP)を説明するものであってよい
。PE300は、その命令メモリを再プログラムする方法を有しているため、動的に構成
可能である。図7ではこれは、シリアルバスインタフェースからのロード経路を通して行
われる。シリアルバスは、全てのDMR及びPEメモリをバスコントローラと接続する、
2次相互接続ネットワークであってよく、バスコントローラは1つ又は複数のPEによっ
て及びチップI/Oポートによってアクセスできる。PEを再プログラムするためには、
PEを待機状態にしてよく、続いて命令メモリを新規のプログラムで上書きし、プログラ
ムカウンタを設定し、その後PEを待機状態から解放して上記新規のプログラムの実行を
開始させてよい。PE300は、少なくとも1つの算術論理ユニット(ALU)320を
制御するために連結された命令処理ユニット(IPU)310を含む。PE300はまた
、複数の多重化装置(本出願ではmuxとも呼ばれる)に連結された複数のデータ入力ポ
ート301も含み、上記多重化装置は、ALU320のための少なくとも第1及び第2の
オペランド入力を選択するために連結される。PE300は更に、ALU320から結果
データを受信するためにmuxを介して連結された複数のデータ出力ポート302と、命
令処理ユニット310からアドレスデータを受信するために連結された複数のアドレスポ
ート303とを含む。
アドレスポート303は、近隣のDMRのメモリに対する読み書きを行うためにアドレ
スを搬送するよう構成されてよい。データ入力ポート301及びデータ出力ポート302
は、近隣のDMRから及び近隣のDMRへデータを搬送するよう構成されてよい。図示さ
れているPE300の実施形態では、データ入力ポート301、データ出力ポート302
、アドレスポート303はそれぞれ4つのポートを含み、これは図5の例示的なアーキテ
クチャと一致する。
図7の例では、米国特許第7415594号に記載されているような従来技術において
典型的である、単一のALU320が示されている。しかしながら、1つのPEにつき更
に多くのALUが存在し、これによってPEが遥かに高い処理スループットのための潜在
能力を有する、代替実施形態が考えられる。その例を本明細書中のこれ以降において示し
、議論する。
PE300は、データ語に対する算術/論理ユニット演算を実施するよう構成され、選
択される演算は、IPU310が処理している現在の命令に依存する。柔軟なプログラミ
ングをサポートするために、IPU310は、複数のアドレス指定可能な位置を含む少な
くとも1つの命令メモリ312、命令復号器314、アドレス生成器316を含んでよく
、これらはそれぞれ様々な相互接続機構を介して相互接続される。他の実施形態では、I
PU310は2つ以上の命令メモリを含んでよいこと、又は追加の機能性を含んでよいこ
とが考えられる。他の実施形態では更に、IPU310に示した機能性を異なるタイプの
複数のユニットに分割してよいこと、又は単一の機能ユニットで実装してよいことも考え
られる。
IPU310は、データ入力ポート301に連結されたプログラムロード経路を介して
、命令メモリ312内での保存のためにプログラムデータを受信するよう構成されてよい
。命令メモリ312はまた、グローバルシリアルバス(図示せず)を介して読み書きして
よい。命令復号器314による特定の命令の復号化に応じて、IPU310は、データ入
力ポート301及びデータ出力ポート302に連結された様々なmuxを制御して、近隣
のDMRへ及び近隣のDMRからデータを案内するよう構成されてよい。IPU310は
更に、アドレス生成器316が生成したアドレスを、アドレスポート303を介して近隣
のDMRへと搬送することによって、例えばそこに位置するRAMに対して読み出し又は
書き込みを行うよう構成されてよい。アドレス生成器316はまた、命令メモリ312か
らフェッチされ、命令復号器314によって復号化される、次の命令アドレスを生成する
よう構成された、プログラムカウンタレジスタ(図示せず)も含んでよい。
一実施形態では、PE300はデータレジスタファイル、データキャッシュ、又はデー
タオペランド若しくは結果データ用のいずれのローカルストレージを含まなくてよい。こ
のような実施形態では、PE300は、データオペランドの読み出し及び結果データの書
き込みを行うことができる迅速なストレージ媒体としてPE300が直接接続されている
DMRに含まれるメモリを利用するよう構成されてよい。いくつかの実施形態では、所定
のPEは異なる近隣のDMRから同時に又は異なる時点に異なるデータを得ることができ
る。以下に更に詳細に説明するように、いくつかの実施形態では、所定のPEは、上記所
定のPEが直接接続されていないDMR内のデータの読み出し及び書き込みを、このよう
な遠隔DMRから上記所定のPEの近隣のDMRへの経路を確立することによって行うよ
う構成されてもよい。
PE300が実装する命令は、算術演算及び論理演算並びにメタ命令をサポートしてよ
い。PE命令は、2つのオペランド及び1つの結果に関するメモリをアドレス指定するた
めに十分なビット長を有してよく、これにより1クロックサイクルでこれらの値の読み出
し及び書き込みを行うことができる。
他の実施形態は、追加の命令又は異なる命令のセットを実装してよいことに留意された
い。いくつかの実施形態では、1つ又は複数のデータオペランドを必要とする所定の命令
の実行中、所定のPEは、近隣のDMRメモリに直接アクセスして上記必要なオペランド
にアクセスするよう構成されてよい。
PE300はメタ命令を実行するよう構成されてよい。本出願で使用される場合、メタ
命令は、命令メモリ312等のPE命令メモリに保存された命令に対する演算を実施でき
る命令を指す。基本的なメタ命令は、近隣のDMRのRAMから命令メモリ312をロー
ドすること(即ちオーバレイをロードすること)であってよい。DMRメモリから命令メ
モリをロードすることにより、データと命令との間のメモリの分割をソフトウェアプログ
ラミングによって決定できる。従ってアプリケーションのプログラマは、自身のソフトウ
ェアを、利用可能なメモリの最良の利用に関して最適化できる。いくつかの実施形態では
、PE300は、IPU命令メモリを修正できる他のメタ命令を含んでよく、又は例えば
試験、エラー分析及び/若しくはエラー修復のためにDMRメモリに命令メモリをセーブ
してよい。
ALU320は、特定のPE300の実施形態でサポートされる命令によって定義され
る演算を含む、少なくとも固定小数点数系に関する演算を実施するよう構成されてよい。
例えば一実施形態では、ALU320は固定小数点型加算、減算、乗算、積和、論理及び
シフト演算を実施するよう構成されてよい。いくつかの実施形態では、ALU320は、
拡張精度演算をサポートするために、過去の計算から得られたキャリービットを保持する
よう構成されてよい。他の実施形態では、ALU320は、浮動小数点型演算、又は特定
のアルゴリズムを実装するために選択された特定目的のための演算を実施するよう構成さ
れてよい。
図8‐並列実行のためのソフトウェアを開発するための方法のフローチャート
図8は、一実施形態による、マルチプロセッサシステム上での並列実行を標的としたソ
フトウェアを開発するための方法を示す。図5に示す方法は、とりわけここで説明するコ
ンピュータシステム又はデバイスのいずれと併用してよい。様々な実施形態では、図示さ
れている方法の要素のうちのいくつかは同時に、若しくは図示されているものとは異なる
順序で実施されてよく、又は省略されてよい。所望に応じて追加の方法の要素を実施して
もよい。図示したように、この方法は以下のように動作し得る。
x802に示すように、例示的な一実施形態では、例えばマルチプロセッサシステム上
での展開及び実行のために標的化されたアプリケーションの、所望のシステムの複数のビ
ューを指定する入力を受信してよい。各ビューは、システムの各態様を提示又は指定して
よく、またこれらビューは総体として、効率的な並列実行のためにマルチプロセッサシス
テムが展開できる実行可能なプログラムを生成するためにコンパイラ(又は他のソフトウ
ェアツール)が使用できる情報を提供してよい。
この入力は、様々な形態のいずれで、また様々なツールのいずれを介して受信されてよ
い。例えばいくつかの実施形態では、入力はユーザによって提供されてよく、即ちユーザ
入力であってよい。他の実施形態では、入力は所望に応じて別のシステム又はプロセス、
ストレージ媒体等から受信されてよい。更に入力はローカルに提供されてよく、又はロー
カルエリアネットワーク(LAN)若しくはインターネット等の広域ネットワーク(WA
N)を介して受信されてよい。例示的な一実施形態では、ユーザはスプレッドシート中で
ビューを指定してよい。別の例示的実施形態では、ユーザはウィザード、即ちグラフィカ
ルユーザインタフェース(GUI)への入力を行ってよく、これは指定プロセスを通して
、例えばプロンプト、有用な提案等によってユーザをリードする。更なる実施形態では、
ユーザは入力/指定プロセスを管理するためにチェックリストを使用してよく、指定され
る各アイテム、例えばビュー、サブビュー等がチェックリストに挙げられており、チェッ
クリストは各チェックリストアイテムが指定されているか(されていないか)を示す。別
の例示的実施形態では、1つ又は複数のテンプレート又はフォームを提供してよく、ユー
ザはビューを指定する情報で上記テンプレート又はフォームを埋めてよい。
各ビューは、アプリケーションの動作又は実行の各態様を含むか又はその表現となって
よい。多数のビューはメモリビュー、通信ビュー、制御ビュー、処理ビューを含んでよい
。他のビューも所望に応じて定義又は指定してよい。一実施形態では、各ビューは、ビュ
ーの更に詳細な属性を指定する複数のサブビュー(又は「ファセット」)を含むか又は指
定してよい。例えば各ビューは、サイズ、挙動及びアクセシビリティサブビュー(又はフ
ァセット)を含んでよく、各サブビューは、各サブビューがその一部となっているビュー
に関連する特定の意味を有してよい。
従って例えば、メモリビューは:アプリケーションによる使用に必要な又は利用可能な
メモリのサイズ(又は量)、即ちデータを処理するためにアプリケーションが使用するメ
モリ構造サイズ;メモリの挙動、即ちメモリ構造が所定のタイミングで挙動する様式;並
びにメモリのアクセシビリティ、即ち例えばアプリケーション及び/又はシステムによる
メモリ構造のアクセシビリティを指定してよい。
同様に、入力は:通信ビュー(通信ビューの各サブビュー、例えば通信サイズ、挙動、
アクセシビリティを定義することを含む);制御ビュー(制御サイズ、挙動、アクセシビ
リティを含む);並びに処理ビュー(処理サイズ、挙動、アクセシビリティを含む)を定
義又は指定してよい。
いくつかの実施形態では、ビュー又はサブビューのうちのいくつかは、他のサブビュー
又はビューの指定によって、例えば同一の又は異なるビューのサブビューによって、自動
的に定義又は指定され得ることに留意されたい。従って例えば、メモリサイズ、挙動及び
アクセシビリティが指定されると、通信挙動が自動的に指定され得る。別の様式で考える
と、いくつかの実施形態では、ビューは、方程式の数が変数の数を超える線形方程式の優
決定系と同様に、「過剰に指定される」か又は「過剰に決定される」場合がある。
本出願で使用される特定の用語又は標識は単なる例示であること、並びに所望に応じて
本出願で開示される新規の構成要素、情報及びプロセスに対していずれの名称を使用して
よいことに留意されたい。例えば所望に応じて、ビュー又は態様はモデル等と呼ばれる場
合もあり、本出願で開示されるサブビューはサブモデル、ファセット、プロパティ等と呼
ばれる場合もある。
システムのビューが指定又は定義されると、これらのビューを表す情報は、x804に
示すように、アプリケーションのソースコード内に含まれ得る。この包含は、広範な方法
のうちのいずれにおいて実施され得る。例えばいくつかの実施形態では、情報はアプリケ
ーションの1つ又は複数のヘッダファイルに含まれ得る。他の実施形態では、情報は、ア
プリケーションプログラム要素又は構成要素の中でとりわけ、1つ又は複数の動的リンク
ライブラリ(DLL)又はマクロ定義に含まれ得る。より一般には、ビューを表す情報は
、所望に応じていずれの様式及びいずれの形態でアプリケーションソースコードに組み込
まれてよい。
x806では、ソースコードは例えば、コンパイラ又は他のツールによって処理でき、
これはシステムに関して指定又は定義された複数のビューを表す情報を分析することを含
む。例えば一実施形態では、コンパイラは、アプリケーションソースコード内の複数のビ
ューを表す情報を認識するよう構成してよく、またこの情報を抽出及び分析してよい。他
の実施形態では、コンパイラは情報を原位置で分析してよい。
x808に示すように、実行可能なプログラムは上記処理に基づいて生成してよく、こ
こで上記実行可能なプログラムは、効率的な並列実行のためにマルチプロセッサシステム
に展開可能である。換言すると、コンパイラは、指定されたビューの分析を含むx806
の処理に基づいて、実行可能なプログラムを生成してよい。
従って、本技術の実施形態は、上述のようなソフトウェア開発への従来技術のアプロー
チの様々な欠点に対処でき、これによってユーザは、システムの動作、例えばマルチプロ
セッサシステム上でのアプリケーションの動作に関する様々な要件又は制約を指定でき、
これら指定された要件又は制約をコンパイラ(又は他のツール)が使用して、システム上
で効率的に実行できる実行可能なコードを生成してよい。
以下に、上述の技術の様々な例示的実施形態を提示する。
1.マルチプロセッサシステム内での並列実行のためのアプリケーションソフトウェア
を開発するための方法であって、上記方法は、コンピュータが:第1の入力に応答して所
望のシステムの複数のビューを指定するステップ(ここで上記複数のビューは:メモリビ
ュー;通信ビュー;制御ビュー;及び処理ビューを含む);アプリケーションプログラム
のソースコードに上記複数のビューを表す情報を含めるステップ;アプリケーションプロ
グラムのソースコードを処理するステップ(上記複数のビューを表す情報を分析するステ
ップを含む);並びに上記処理ステップに基づいて、実行可能なプログラムを生成するス
テップ(上記実行可能なプログラムは並列実行のためにマルチプロセッサシステムに展開
可能である)を実施することを含む、方法。
2.複数のビューを指定する上記ステップは、各ビューに関して:サイズ;挙動;及び
アクセシビリティを指定するステップを含む、実施形態1の方法。
3.上記入力は:ウィザード;グラフィカルユーザインタフェース;スプレッドシート
;又はデータファイルのうちの少なくとも1つが受信するユーザ入力を含む、実施形態1
の方法。
4.ソースコードに上記複数のビューを表す情報を含める上記ステップは:アプリケー
ションプログラムの1つ若しくは複数のヘッダファイル;アプリケーションプログラムに
関するマクロ定義;又は1つ若しくは複数の動的リンクライブラリ(DLL)のうちの1
つ又は複数に上記情報を含めるステップを含む、実施形態1の方法。
5.上記処理ステップ及び上記生成ステップはコンパイラによって実施される、実施形
態1の方法。
6.上記マルチプロセッサシステムはHyperXアーキテクチャを備える、実施形態
1の方法。
更なる実施形態
以下に、上述の技術の更なる例示的実施形態の説明を提示するが、開示される実施形態
は単なる例示であり、本技術の実装をいずれの特定の形態、機能又は外観に限定すること
を意図したものではないことに留意されたい。特定の(非限定的な)使用のケースとして
2つの例示的実施形態:撮像フィルタ及び有限インパルス応答(FIR)フィルタを提示
する。
定義されたシステムのビュー及びプロセス
あるシステムにおいてデータは、上記システムがリアルタイム型であるかそうでないか
に関わらず、無線受信機、画像センサ又は他の入力収集デバイスのいずれかからの(実際
の又は概念上の)ストリームとして受信されることが多い。受信されるデータは、アルゴ
リズム及びその代表データ構造に対して自然である方法で処理されることが望ましい。こ
れは、処理のために、サンプル形態、ブロック形態又はハイブリッド形態のデータ構造を
取り扱う能力を必要とし得る。これはまた、処理システムの通信及びメモリアーキテクチ
ャが、様々なアルゴリズム及びデータ構造システムをサポートできるよう、リアルタイム
に動的であり、かつ適合可能であることを必要とし得る。
例示的な使用のケース:撮像フィルタ
一例として、等式1によって特徴付けられる例示的な撮像フィルタを考える。
Figure 2021192257
ここでtは時間であり、rは行インデックスであり、cは列インデックスであり、x[
r,c,t]は入力ピクセルであり、h[r,c,t]はフィルタ係数であり、y[r,
c,t]は出力ピクセルである。
合計は2M+1行及び2N+1列に亘っており、従ってフィルタの寸法的なメモリサイ
ズは(2M+1)×(2N+1)であり、最小のレイテンシが望ましい。
撮像フィルタシステムを用いた、図8の方法の記述
例示的な撮像フィルタリングプロセスを、図9Aに図式的に示す。このアプローチでは
、ピクセル(ピクセルデータ)のデータストリームは通常、行毎に受信される。フィルタ
及び/又は境界条件のデータ要件を満たすために十分な行数のデータが受信されると、図
示されているように、データを水平に横断するように2次元フィルタを走らせて、フィル
タリングされた画像を生成してよい。図9Aのアプローチは図10においてブロック図の
形態で表されており、この図10は、単一のプロセスを有する画像フィルタリングのブロ
ック図を示す。
画像データをより迅速に処理するために、一般的なスキームは、画像を垂直方向に分割
するものであり、各垂直セグメントのデータは、ピクセル毎、行毎に(処理リソースに)
受信されて、図9Bに示すように並列にフィルタリングが実施される。図9Bの並列アプ
ローチは図11においてブロック図の形態で表されており、この図11は、複数のプロセ
スを有する画像フィルタリングのブロック図を示す。
MPIをサポートするANSI C言語ベースのソフトウェアプログラミングモデルに
おいてスレッドを処理するための本技術の実施形態を実装する例示的なプログラム(フィ
ルタカーネルのコード例)は、以下のように書くことができる:

//* filter_kernel.c
//* example hx3xxx pseudo code for 2D filter

#include <mpx.h>
#include <math.h>
#include "filter_system.h"

// initialize variables
int 2d_lin_buffer [(ROW+3)*COL];

// initialize 2D circular line buffer on 2d_buffer
void init_2D_circ_lin_buf ( .... )
{ .... }

// update 2D circular line address on 2d_buffer
void update_2D_circ_lin_address ( .... )
{ .... }

// 2D filter function with calculations written through
// line based pointers for efficiency. This is unnatural.
// Performs function while receiving next line of data and
// sending out previously calculated results.
void 2d_filter ( .... )
{ .... }

mpx_cell filter_kernel ( .... )
{ // begin mpi_cell..

// initialize
init 2D circ lin buf ( .... );

while (1)
{ // begin while
MPX_Recv( .... ); // non-blocking line receive
2d filter( ....); // perform filter across line of data

MPX_Send( .... ); // non-blocking line send of results

update_2D_circ_lin_address ( .... );

} // end while

} // end mpx_cell

コード部分A:filter_kernel.c‐フィルタカーネルのコード例
スレッドを処理する「filter_kernel.c」を構成するシステムは、以下
のように書くことができる(フィルタシステムのコード例):

//* filter_system.c
//* example hx3xxx pseudo code for 2D filter system

#include <mpx.h>
#include <math.h>
#include "filter_system.h"

mpx_cell filter_system ( .... )
{ // begin mpx_cell..
// system defined through MPX_PARALLEL
if (MPX_RANK == MPX_PARALLEL)
{ // begin MPX_PARALLEL
distribution_and_collection: di_co_sys( .... );
filter_thread_00: filter_kernel ( .... );
filter_thread_01: filter_kernel ( .... );
filter_thread_02: filter_kernel ( .... );
....

} // end MPX_PARALLEL

} // end mpx_cell

コード部分B:filter_system.c‐フィルタシステムのコード例
「void 2d_filter( .... )」関数は以下の例のように書くこと
ができる:

// apply filter across line of data

for( col = begin; ... )
{ // begin col = begin..
result [ col ] = 0;
for ( i = 0; ... )
{ // begin i = 0..
for ( j = 0; ... )
{ // begin j = 0..
// operations
result[ col ] += (long)( filter[ i ] [ j ] ...
* data[ i ] [ address_line[ i ] - offset + j ] );
} // end for j = 0..
} // end for i = 0..
} // end for col = begin..

コード部分C:M×Nフィルタとして実装される2d_filter関数

// apply Laplacian filter across line of data

for ( col = begin; ... )
{ // begin for begin = 0..

// operations..
temp = in_data[ address_line[ center ] + col - Lap ] ...
+ in_data[ address_line[ center ] + col + Lap ];
temp += (long)( in_data[ address_line[ center - Lap ] + col ] ...
+ in_data[ address_line[ center + Lap ] + col ] );
temp -= (long)( 4 * in_data[ address_line[ center ] + col ] );
result_data[ col ] = abs(temp);
} // end for col = begin..

コード部分D:ラプラシアンフィルタとして実装される2d_filter関数

// apply Laplacian filter across line of data

address_center = address_line[ center ];
address_n_Lap = address_line[ center - Lap ];
address_p_Lap = address_line[ center + Lap ];

for ( col = begin; ... )
{ // begin for begin = 0..
// operations ..
temp = in_data[ address_center + col - Lap ] ...
+ in_data[ address_center + col + Lap ];
temp += (long)( in_data[ address_n_Lap + col ] ...
+ in_data[ address_p_Lap + col ] );
temp -= (long)( 4 * in_data[ address_center + col ] );
result_data[ col ] = abs(temp);
} // end for col = begin..

コード部分E:ラプラシアンフィルタとして実装される、簡略化されたvoid 2d_
filter関数
ここで提示したコード部分/プログラムは単なる例示であり、いずれの特定のプログラ
ム言語に実施形態を限定することを意図したものではないことに留意されたい。
論理的には、ANSI Cソフトウェアプログラミングモデルを有するMPIは、雑多
なメモリ及び適合可能な通信スキームの全要件をサポートできる。実行モデルは、ソフト
ウェアプログラミングモデルの要件を満たす能力を提供できる。更にソフトウェアプログ
ラミングモデルは、可変リアルタイムパフォーマンスを標的とすることができるスケーラ
ブルなコードをサポートできる。
結果の例は、図12に示すような、例えば(CoherentLogix,Incor
poratedから提供される)例示的なhx3XXXプロセッサ等のメモリ‐ネットワ
ークプロセッサ上で実現される。より具体的には、図12は、hx3100プロセッサ上
で、Cコードの行を変更せず、30fps(左の画像)、続いて60fps(右の画像)
で示されている、例示的な4Kビデオ2Dフィルタシステムのリソースのレイアウトを示
す。ここでソフトウェアスレッドの数は増大しており、追加のハードウェアスレッドを使
用してフレームレートスループットを上昇させることができる。
上述のように、現行のアプローチの1つの問題は、ソフトウェアプログラミングモデル
が標的ハードウェアの特徴の外挿をサポートする場合、システムの効率的な記述ができな
いという点である。システムを適切に記述するためには、システムの挙動及びインタラク
ティブ性の全ての重要な態様を、プログラミングモデルの制御、通信、メモリ及び処理モ
デルそれぞれの中で何らかの方法でキャプチャしなければならない。最後の2つ、即ちメ
モリ及び処理モデルは、通常はアドレス指定されず、実行モデルから暗黙的に割り当てら
れると想定される。
従って、いずれのシステムを効率的に定義することは、システム全体を効率的に定義す
ることを必要とし得る。この例では、議論の焦点は、通信構造のプロパティ及びメモリプ
ロパティとのインタラクティブ性からシステムを記述し、またシステム要件から処理を記
述することに当てられている。図8の方法を参照して上述したように、これは、メモリ構
造のプロパティ、即ち:通信をサポートするために使用される構造のサイズ;処理をサポ
ートするために使用される構造のサイズ;処理をサポートするための構造の挙動;通信を
サポートするための構造の挙動;処理をサポートするための構造のアクセシビリティ;及
び通信をサポートするための構造のアクセシビリティを定義することを伴い得る。これに
続いて、通信、制御及び処理プロパティを引き出すか又は明確に定義できる。
上述の撮像フィルタの例に関して、これは以下の様式で実施できる。
メモリ構造のサイズの定義:
図11に示すように、この撮像フィルタの例では、システムに関して最も自然なメモリ
構造をサポートするために、循環ラインバッファアドレス指定スキームを生成する必要が
あり得る。メモリ構造は、フィルタのサイズ、即ち現在のデータのフィルタ処理に必要な
行数(このケースでは2M+1)と、処理の現在の結果をキャプチャするための更なる行
と、次のデータのラインを同時に受信するための更なる行と、フィルタ処理の過去に計算
された結果を送信するための更なる行とを加算した数によって定義できる。従ってこの例
示的なアプリケーションに関して、メモリ構造のサイズは、積(2M+4)*(2N;H
/Nv)個のピクセルとして定義又は指定できる。
メモリ構造の挙動の定義:
構造のサイズに加えて、所定の時点における構造の挙動を明確に定義する必要がある。
この特定のケースでは、メモリの挙動は、過去に受信された処理済みのデータと、利用可
能な、即ち到着済みの新規のデータとに対して定義される。具体的には、この例示的実施
形態では、現在の処理のために使用されることになる、「現在のデータ」として表示でき
るメモリのセクションが存在し、そのサイズは「2M+1」行×「2N+1」超の列であ
り、また、次のデータのラインを受信するメモリのセクションが存在し、過去に計算され
た結果を保持するメモリのセクションが存在し、最後に、処理から現在の結果を収集する
メモリのセクションが存在する。現在の処理が完了し、過去に計算された結果が送信され
た後、受信されたばかりの次のデータのラインが、今度は現在のデータの第1のラインと
なるように、メモリの挙動を更新できる。そして現在の結果は、送信されるべき過去に計
算された結果となり、現在の結果はその位置を再割り当てされる。従って、これらメモリ
セクションをこのように回転式で使用することにより、メモリ構造の挙動を定義でき、又
は特徴付けることができる。
メモリ構造のアクセシビリティの定義
各メモリセクションは、定義されたアクセシビリティを有する必要がある。この特定の
例示的なケースでは、現在のデータに関しては、このデータは標準的な2次元アレイの形
態でアクセス可能である必要がある。上述のメモリ構造の挙動に従って、新規のデータの
ラインが到着して新規のデータの第1の行となり、データの最も古い又は最後の行が脱落
する度に、ユーザ/プログラマの視点からのデータの自然な書き込み及びアクセスをサポ
ートするために、物理アドレスへの2次元アクセスを更新してよい。他の3つのメモリの
セクション(上述)は、データ及びフィルタリングの結果の受信並びに結果の送信をサポ
ートする、データの1次元アレイを効果的に実装できる。
通信プロパティ(サイズ、挙動、アクセシビリティ)の定義
メモリ構造のサイズ、挙動、アクセシビリティが定義されると、通信間又は通信内、制
御、及び処理プロパティを、そのシステム又は別のシステム内のインタラクティブ性に基
づいて引き出すことができ、又は明確に定義できる。この特定のケースでは、システムの
入力プロパティを、メモリ構造のサイズ、挙動、アクセシビリティの定義から引き出すこ
とができる。例えば通信無線機内のインターリーバ及び/又はデインターリーバの場合に
関してといった他のシステムは、より明確な定義が必要となり得る。
一実施形態では、次のステップは、ソフトウェアプログラミングモデル内でシステムの
プロパティを効果的に表現することであってよい。これを行うには、MPI等のAPIを
生成又は拡張してANSI Cをサポートすること、C++で特定のクラス構造を生成す
ること等を含むがこれらに限定されない、多数の方法が存在する。しかしながら、具体的
な語彙的表現は重要ではない。重要なのは、プログラミングモデルがこれらの(動的な)
システムの定義を認識すること、即ちツールフローがシステムの定義を解釈でき、続いて
システムを標的の実行モデル及び下層のハードウェアアーキテクチャに効果的にマッピン
グできることである。
例示的なコードであるコード部分A、filter_kernel.cは、制御モデル
、通信モデル並びに補助メモリ構造及び処理に明らかにアプローチし、またそのように解
釈される必要があり得る。これは、システムを直感的に表現でき、システムを定義でき、
又は効率的にシステムを解釈できるような方法で、制御、通信及びメモリ構造の間で動的
インタラクティブ性を定義できない。
撮像フィルタの例を用いて続けると、filter_kernel.cは以下のように
書き換えできる:

//* filter_kernel.c
//* example pseudo code for 2D filter incorporating system
// property defintion
#include <mpx.h>
#include <math.h>
#include "filter_system.h"

// initialize variables
mpx_2d_lin int buffer[(ROW+3)*COL];

// 2D filter function with calculations written naturally as for (i, j)
// and performs function while receiving next line of data and
// sending previously calculated results.
void 2d_filter( .... )
{.... }

mpx_cell filter_kernel ( .... )
{ // begin mpi_cell..
while(1)
{ // begin while
MPX_Recv( .... ); // non-blocking line receive
2d_filter( .... ); //perform filter across line of data
MPX_Send( .... ); // non-blocking line send of results
} // end while
} // end mpx_cell

コード部分F:filter_kernel.c‐一実施形態によるシステムのプロパテ
ィの定義を組み込んだ、フィルタカーネルの更新されたコード例
理解できるように、上記更新されたコード例であるコード部分Fにおいて、プログラム
文「mpx_2d_lin int buffer[(ROW+3)*COL];」は変
数を宣言しており、具体的には、この時点ではプログラミングモデルによってサポートさ
れている、上述のサイズ、挙動、アクセシビリティプロパティを備えるメモリ構造を宣言
している。
従ってここで、コード部分Aの「void 2d_filter( .... )」関
数を自然な形態で書くことができ、以下の2つの例において提示されるように、その処理
において高い演算効率を達成できる:

// perform filter across line of data

for( col = begin; ... )
{ // begin col = begin..
result data [ col ] = 0;
for ( i = 0 ; ... )
{ // begin i = 0..
for ( j = 0 ; ... )
{ // begin j = 0..
// operations
result_data[ col ] += (long)( filter [ i ] [ j ]...
* in_data[ i ][ col - offset + j ] );
} // end for j = 0..
} // end for i = 0..
} // end for col = begin..

コード部分G:M×Nフィルタとして実装される2d_filter関数の、更新された
コード例

// apply Laplacian filter across line of data

for ( col = begin; ... )
{ // begin for begin = 0..
// operations ..
result_data[ col ] = abs ( (4 * in_data [ center ] [ col ] )...
- in_data[ center ] [ col - Lap ]...
- in_data[ center ] [ col + Lap ]...
- in_data[ center - Lap ] [ col ] ...
- in_data[ center + Lap ] [ col ] );
} // end for col = begin..

コード部分H:ラプラシアンフィルタとして実装されるvoid 2d_filter関
数の、更新されたコード例
続いて、プログラム文「MPX_Recv( .... ); // non-blo
cking line receive」は、挙動及びアクセシビリティのプロパティを
自動的に更新する単回更新を提供できる。これは、受信されるべき次のデータのライン、
処理するための現在のデータ、収集されるべき現在の結果をセットアップする。
ツールフロー内において、コンパイラは、システムの挙動を解釈するよう、及び定義さ
れたシステムの機能性をサポートするために、ハードウェアリソースをより効果的にマッ
ピングするよう、設計されてよい。
上述の撮像フィルタの例は、主としてメモリ定義(メモリビュー)の視点から記述され
ている。これを限定として解釈するべきではない。サイズ、挙動、アクセシビリティの観
点から記述したシステムのメモリモデルに加えて、又はこれの代わりに、制御、通信、処
理ビュー(及びサブビュー)を同様に使用して、システムを記述又は定義してよい。
従って、ソフトウェアプログラミングモデル内において、効果的なシステムの記述をサ
ポートするために、全てのモデルは、処理、メモリ、通信及び制御並びにこれらの間の及
び/又はこれらの内部でのアクティビティのサイズ、挙動、アクセシビリティを記述する
か又は暗黙的に解釈するプロセスをサポートする必要があり得る。
例示的な使用のケース:有限インパルス応答フィルタ
別の例として、等式2によって特徴付けられる例示的な有限インパルス応答(FIR)
フィルタを考える。
Figure 2021192257
ここでtは時間であり、ciは係数であり、x[t]は入力サンプルであり、Nはフィ
ルタ長であり、y[t]は出力サンプルである。
FIRフィルタを使用した、図8の方法の記述
このタイプのシステム(FIRフィルタ)では、データストリーム入力は典型的にはサ
ンプル毎に、即ち1度に1サンプルずつ受信される。FIRフィルタはその長さよって特
徴付けられ、これは、FIRフィルタが出力サンプルを生成するために使用する入力サン
プルの数に等しい。FIRフィルタのデータ要件(例えば長さ)を満たすためにデータの
十分なサンプルを受信すると、上記データに対してFIRフィルタの計算が実施され、フ
ィルタリングされたデータサンプル出力が生成される。データをより迅速に処理するため
に、一般的なスキームは、フィルタ処理を複数の段階及び/又はパイプライン化されたセ
グメントに分割することである。ブロック図形態の単一のFIRフィルタプロセスを図1
3に示す。ブロック図形態の、段階及びパイプライン並列処理を示す多数のプロセスを用
いたFIRフィルタを、図14に示す。
MPIをサポートするANSI C言語ベースのソフトウェアプログラミングモデルを
用いて、図12、13に示すスレッドプロセスを記述するためのプログラムは、以下のよ
うに記述できる:

//* fir_filter_kernel.c
//* example hx3xxx pseudo code for FIR filter
#include <mpx.h>
#include <math.h>
#include "fir_filter_system.h"

// initialize variables
int ld_sample_buffer[ length_fir_filter + 3 ];

// initialize 1D circular sample buffer on 1d_sample_buffer void init_1D_circ_sa
m_buf( .... )
{ .... }

// update 1D circular sample address on 1d_sample_buffer void update_1D_circ_sam
_address( .... )
{ .... }

// FIR filter function with calculations written with sample based pointers
// for efficiency. This is unnatural. Performs function while receiving
// next sample of data and sending out previously calculated sample result.
void fir filter( .... )
{.... }

mpx_cell fir_filter_kernel ( .... )
{ // begin mpi_cell..
// initialize
init_1D_circ_sam_buf( .... );
while (1)
{ // begin while
MPX_Recv( .... ); // non-blocking sample receive
fir_filter( .... ); //perform filter on current data
MPX_Send ( .... ); // non-blocking sample send of results
update_1D_circ_sam_address( .... );
} // end while
} // end mpx_cell

コード部分I:fir_filter_kernel.c‐firフィルタカーネルのコ
ード例
従って、コード部分Jのシステムは、「fir_filter_kernel.c」処
理スレッドで構成されるFIRフィルタのパイプライン相及びアルゴリズム相両方の並列
処理を示す図14の構文的表現を表し、以下のように書くことができる:

//* fir_filter_system.c
//* example hx3xxx pseudo code for FIR filter system

#include <mpx.h>
#include <math.h>
#include "fir_filter_system. h"

mpx_cell fir_filter_system ( .... )
{ // begin mpx_cell..
// system defined through MPX_PARALLEL
If (MPX_RANK == MPX_PARALLEL)
{ // begin MPX_PARALLEL
distribution_and_collection: di_co_sys( .... );
fir_filter_phasesegment_00: fir_filter_kernel( .... );
fir_filter_phasesegment_01: fir_filter_kernel( .... );
fir_filter_phasesegment_10: fir_filter_kernel( ....);
....
} // end MPX_PARALLEL
} // end mpx_cell

コード部分J:fir_filter_system.c‐firフィルタシステムのコ
ード例
以下のコード部分Kは、図15と一致した方法で循環バッファを用いてFIR計算を実
装する。
「void fir_filter( .... )」関数は、以下のように書くこと
ができる:

// apply FIR filter to current sample data
// calculate filter using circular data buffer
// "1d_sample_buffer"
// assumptions:
// a. "begin" and "result" are indices into 1d_sample
// buffer [N+2] and are known to be in the range 0
// to N+2. "begin" is the index of the newest
// sample and (result-1) is the index of the oldest
// sample.
// b. "filter [N] " array variable contains filter
// coefficients//

// intialize variables
int i;
int end;
int ind;
long temp_result;

// process part 1
// calculates the filter from newest sample to oldest
// sample or the end of the data buffer
// "1d_sample_buffer"

// determine the "end" condition for the
// processing of part 1
if (begin > 3) {
end = N+3;
}
else {
end = (N + begin);
}

// processing of filter for "process part 1"
ind = 0;
for( i = begin; i < end; i=i+l )
{ // begin for i = 0..
temp_result += ( long) 1d_sample_buffer [ i ] * filter [ ind ];
ind += 1;
} // end for i = 0..

// process part 2, if necessary
// calculates the remaining data for the filter
//continuing from newest to oldest if process 1 did
//not perform all the processing
if (begin > 3)
{ // begin if begin..
for ( i = 0; i < (result) ; i=i+l )
{ // begin for i = 0..
temp_result += ( long) 1d_sample_buffer [ i ] * filter [ ind ];
ind += 1;
} // end for i = 0..
} // end i f begin..

1d_sample_buffer[result] = temp_result;

コード部分K:fir_filter関数
この実装形態では、「1d_sample_buffer」は、図15に示した経時的
メモリにおける構造と同様に演算できる。
撮像フィルタの例に関して上述したように、論理的には、ANSI Cソフトウェアプ
ログラミングモデルを有するMPIは、雑多なメモリ及び適合可能な通信スキームの全要
件をサポートできる。実行モデルは、ソフトウェアプログラミングモデルの要件を満たす
能力を提供でき、またソフトウェアプログラミングモデルは、可変リアルタイムパフォー
マンスを標的とすることができるスケーラブルなコードをサポートできる。
これもまた上述のように、現行のアプローチでは、標的ハードウェアの特徴の外挿をサ
ポートするソフトウェアプログラミングモデルは、システムの効率的な記述を可能とする
ことができないか、又は促進しない。
この例示的なFIRフィルタの例では、議論の焦点は、通信構造のプロパティ及びメモ
リプロパティとのインタラクティブ性からシステムを記述し、またシステム要件から処理
を記述することに当てられている。これは、通信構造のプロパティ、即ち:通信をサポー
トするために使用される構造のサイズ;処理をサポートするために使用される構造のサイ
ズ;処理をサポートするための構造の挙動;メモリをサポートするための構造の挙動;処
理をサポートするための構造のアクセシビリティ;及びメモリをサポートするための構造
のアクセシビリティを定義することを伴い得る。この通信ビューが定義されると、メモリ
、制御及び処理プロパティを引き出すか又は明確に定義できる。例示的な一実施形態では
、これは以下の方法で実施できる。
通信構造のサイズの定義
図14のFIRフィルタ例において示すように、システムに関して最も自然なメモリ構
造をサポートするために、循環サンプルバッファアドレス指定スキームが生成され得る。
通信構造のサイズは、フィルタのサイズ、即ち現在のデータのフィルタ処理に必要な行数
(このケースでは1N)と、処理の現在の結果をキャプチャするための更なるサンプルと
、次のデータのサンプルを同時に受信するための更なるサンプルと、FIRフィルタ処理
の過去に計算された結果を送信するための更なるサンプルとを加算した数によって定義で
きる。従ってこの例示的なアプリケーションに関して、通信構造のサイズは、「N+3」
として定義又は指定できる。
通信構造の挙動の定義:
通信構造のサイズに加えて、所定の時点における構造の挙動を明確に定義する必要があ
る。この特定のケースでは、通信の挙動は、過去に受信された処理済みのデータと、利用
可能な、即ち到着済みの新規のデータとに対して定義される。具体的には、この例示的実
施形態では、現在の処理のために使用されることになる、「現在のデータ」として表示さ
れる(通信メモリの)セクションが存在し、そのサイズは「N」サンプル超であり、また
、次のデータのサンプルを受信するセクション(又はサンプル空間)が存在し、過去に計
算された結果を保持するセクション(又はサンプル空間)が存在し、最後に、処理から現
在の結果を収集するセクションが存在する。現在の処理が完了し、過去に計算された結果
が送信された後、受信されたばかりの次のデータのサンプルが、今度は現在のデータの第
1のサンプルとなるように、通信の挙動を更新できる。そして現在の結果は、送信される
べき過去に計算された結果となり、現在の結果はその位置を再割り当てされる。従って、
これら通信(メモリ)セクションをこのように回転式で使用することにより、通信構造の
挙動を定義でき、又は特徴付けることができる。
通信構造のアクセシビリティの定義
各通信セクションは、定義されたアクセシビリティを有する必要がある。この特定の例
示的なケースでは、現在のデータに関しては、このデータは標準的な1次元アレイの形態
でアクセス可能である必要がある。上述の通信構造の挙動に従って、新規のデータのサン
プルが到着して又は受信されて新規のデータの第1のサンプルとなり、データの最も古い
又は最後のサンプルが脱落する度に、ユーザ/プログラマの視点からのデータの自然な書
き込み及びアクセスをサポートするために、物理アドレスへの1次元アクセスを更新して
よい。他の3つの通信のセクション(上述)は、データ及びフィルタリングの結果の受信
並びに結果の送信をサポートする、データのサンプル空間を効果的に実装できる。
メモリプロパティ(サイズ、挙動、アクセシビリティ)の定義
通信構造のサイズ、挙動、アクセシビリティが定義されると、メモリ間又はメモリ内、
制御、及び処理プロパティを、そのシステム又は別のシステム内のインタラクティブ性に
基づいて引き出すことができ、又は明確に定義できる。この特定のケースでは、システム
の入力プロパティを、通信構造のサイズ、挙動、アクセシビリティの定義から引き出すこ
とができる。
ここでもまた、次のステップは、ソフトウェアプログラミングモデル内でシステムのプ
ロパティを効果的に表現することであってよく、これを行うには、MPI等のAPIを生
成又は拡張してANSI Cをサポートすること、C++で特定のクラス構造を生成する
こと等を含むがこれらに限定されない、多数の方法が存在する。しかしながら上述のよう
に、具体的な語彙的表現は重要ではない。寧ろ重要なのは、プログラミングモデルがこれ
らの(動的な)システムの定義を認識すること、即ちツールフローがシステムの定義を解
釈でき、続いてシステムを標的の実行モデル及び下層のハードウェアアーキテクチャに効
果的にマッピングできることである。
例示的なコードであるコード部分I、fir_filter_kernel.cは、制
御モデル、メモリモデル、補助通信構造及び処理に明らかにアプローチし、またそのよう
に解釈される必要があり得、これは上述のように、システムを直感的に表現でき、システ
ムを定義でき、又は効率的にシステムを解釈できるような方法で、制御、通信、処理及び
メモリ構造の間で動的インタラクティブ性を定義できない。
FIRフィルタの例を用いて続けると、fir_filter_kernel.cは以
下のように上書きできる:

//* fir_filter_kernel.c
//* example pseudo code for FIR filter incorporating system
// property defintion
#include <mpx.h>
#include <math.h>
#include "filter_system.h"

// initialize communication memory
struct com_fir {
int com [N];
int receive;
int send;
int result;
}
com_fir com;

// FIR filter function with calculations written naturally as for(i)
// and performs function while receiving next sample of data and
// sending previously calculated result.
void fir_filter( .... )
{.... }

mpx_cell fir_filter_kernel( .... )
{ // begin mpi_cell..
// receive initilization of FIR filter properties of generic FIR filter
// kernel including type (size and amount) of input and output for
// MPX_FIFO_IN and MPX_FIF0_0UT
MPX_Recv( .... ) ;

while(1)
{ // begin while
// non-blocking sample receive or data sample receive and partial
// accumulation
MPX_Recv( com.recieve,....,MPX_FIFO_FIR |
MPX_NONBLOCKING |
MPX_FIFO_IN );
fir filter( .... ); //perform FIR filter across current data in
// "com"
// non-blocking send of resulting sample or sample data
// and partial accumulation
MPX_Send( com.send,....,MPX_FIFO_FIR |
MPX_NONBLOCKING ... |
MPX_FIFO_OUT );
} // end while
} // end mpx_cell

コード部分L: fir filter kernel.c‐一実施形態によるシステム
のプロパティの定義を組み込んだ、firフィルタカーネルの更新されたコード例
コード部分Lの更新されたコード例に示すように、プログラム文「int com[N
];」は変数を宣言しており、これは、この時点ではプログラミングモデルによってサポ
ートされている、上述のサイズ、挙動、アクセシビリティプロパティを備える通信構造と
して使用される。これはコード部分L中の、「MPX_Recv(com,....,M
PX_FIFO_FIR | MPX_NONBLOCKING | MPX_FIFO
_IN);」及び「MPX_Send(com,....,MPX_FIFO_FIR
| MPX_NONBLOCKING | MPX_FIFO_OUT);」という例示
的なMPI構造体によって示される。
ここで、コード部分Kの「void fir_filter( .... )」関数を
自然な形態で書くことができ、以下のように、その処理において高い演算効率を達成でき
る:

// apply FIR filter to current sample data
int40 temp = 0;

for( i = 0; i < FILTER_LENGTH; i++ )
{ // begin i = begin..
temp += (long) com.com[ i ] * filter[ i ];
} // end for i = 0..

com.result = temp >> SCALE;

コード部分M:更新されたfir_filter関数
ここで「com」通信メモリは、図16に示した経時的メモリにおける構造と同様に演
算できる。
最後に、プログラム文「MPX_Recv( com.recieve,....,M
PX_FIFO_FIR | MPX_NONBLOCKI G | MPX_FIFO
_I ); // non-blocking sample receive or
data sample receive and partial accumula
te」は、挙動及びアクセシビリティのプロパティを自動的に更新する単回更新を提供で
きる。これは、受信されるべき次のデータのサンプル、処理するための現在のデータ、収
集されるべき現在の結果をセットアップする。
上述のFIRフィルタの例の例示的な1つの変形例では、FIRフィルタの一部はスレ
ッドで実施され、計算のためにFIRの部分累算を受信する必要があり、計算が完了する
と、適切なデータサンプルを有する別のスレッドへ転送する。例示的なコード部分Nは、
サンプルデータ及び部分累算を受信するスレッドを示し、これにコード部分Oが続き、こ
れは部分FIRフィルタカーネル、及び図17に示すような代表的な通信メモリ構造の使
用を示し、図14のFIR相/セグメントの中段のブロックに対応する。

//* fir_filter_kernel.c
//* example pseudo code for FIR filter incorporating system
// property definition
// it receives partial_result, sampled data, and sends sampled data

#include <mpx.h>
#include <math.h>
#include "filter_system.h"

// initialize communication memory
struct com_fir {
int com[FILTER_LENGTH];
int receive;
int40 result_partial;
}
com_fir com;

// FIR filter function with calculations written naturally as
//for (i)
// and performs function while receiving next sample of data and
// sending previously calculated result.
void fir_filter( .... )
{.... }

mpx_cell fir_filter_kernel ( .... )
{ // begin mpi_cell..
// receive initilization of FIR filter properties of generic FIR filter
// kernel including type (size and amount) of input and
// output for MPX_FIFO_IN and MPX_FIF0_0UT
MPX_Recv( .... );

while (1)
{ // begin while
// non-blocking sample receive or data sample receive and
// partial accumulation
MPX_Recv( com. receive |
com. result_partial,....,MPX_FIFO_FIR | ...
MPX_NONBLOCKING ... |
MPX_FIFO_IN );

fir_filter( .... ); //apply FIR filter across
//current data in "com.com"
// non-blocking send of resulting sample or sample data
// and partial accumulation
MPX_Send ( com.com [N-1] | com.result_partial , ...., ...
MPX_FIFO_FIR | ... MPX_NONBLOCKING |
MPX_FIF0_0UT );

} // end while
} // end mpx_cell

コード部分N:サンプリングされたデータ及び部分累算転送をサポートする通信モデル構
造のコンテキスト内の、部分フィルタカーネル組み込みシステムのプロパティの定義の例

// perform part of a FIR filter on current sample data
// supporting receiving partial accumulation and
// forwarding partial accumulation

for( i = 0; i < FILTER_LENGTH; i++ )
{ // begin i = begin..
com.result_partial += (long)com.com[ i ] * filter[ i ];
} // end for i = 0..
//not needed: com. result = temp >> SCALE;

コード部分O:部分累算をサポートする、自然な形態で書かれたFIRフィルタカーネル
の一部
サンプルのみを受信し、部分累算結果と共にサンプルを送信するためのコード、並びに
サンプル及び部分累算を受信して最終的なFIRフィルタ結果を生成するためのコードは
、提供された2つのFIRコードの例の変形例として書くことができ、ここでは簡潔にす
るためにこれを提示しない。本出願に開示される技術のこのような具体的実装形態は、プ
ログラミング技術を有する者の能力の範囲内である。多数の他のフィルタタイプも同様の
様式で再構成でき、他のアルゴリズム及びプロセスについても同様である。換言すると、
上述の例は単なる例示及び例証であり、本発明の範囲を制限することを意図したものでは
ない。
従って、上で開示されている技術の実施形態は、マルチプロセッサシステム上でのソフ
トウェアの並列実行に関する従来技術のアプローチを上回る有意な効率を提供できる。
コード部分Mに比べて、コード部分Oは、整数に適合するためのアキュムレータのリス
ケールを必要としない。
撮像フィルタの例に関して上述したように、ツールフロー内において、コンパイラは、
システムの挙動を解釈するよう、及び定義されたシステムの機能性をサポートするために
、ハードウェアリソースをより効果的にマッピングするよう、設計されてよい。
上述のFIRフィルタの例は、主として通信定義(通信ビュー)の視点から記述されて
いる。ここでもまた、これを限定として解釈するべきではない。サイズ、挙動、アクセシ
ビリティの観点から記述したシステムの通信モデルに加えて、又はこれの代わりに、制御
、メモリ、処理ビュー(及びサブビュー)を同様に使用して、システムを記述又は定義し
てよい。
システム設計の効率的な捕捉に続いて、ハードウェアからのより効率的な操作を達成す
るために、定義されたシステムプロパティをサポートするための新規のプログラム可能な
ハードウェア特徴部分が生成されている。これらの特徴部分は、処理要素、データ経路、
アドレス生成、制御フロー等を含んでよいがこれらに限定されない。これらの特徴部分は
、所定の演算サイクルにおいて(実質的に)最大の演算及びエネルギ効率を達成すること
、並びに多くの計算負荷が高いアプリケーションにおいてオーバヘッド(セットアップ、
インデックスレジスタ更新等)をゼロ近くまで低減することを目的としている。
ハードウェア要素
以下は、改善されたシステムを提供する、様々な新規のハードウェア要素を説明する。
ハードウェアの設計は、標的とされたシステムアプリケーションに関して、エネルギ効
率の良い様式で実施できるよう、密接に連結され得る。循環データバッファリングを、モ
ジュロアドレッシング及び(以下に説明する)DMR FIFO技術をハードウェア反復
ループと共に用いて行ってよく、これによりループにおけるアドレス指定が自動化される
。(以下に説明する)HyperOpは、従来の技術が必要とする高い最適化コストを要
することなく、高度な並列処理を制御する方法を提供する。(以下に説明する)マルチデ
ータ経路ハードウェアは、実際のアルゴリズム数学セクションのより良好な並列処理を、
純粋なASIC、非プログラマブルソリューションと略同じ程度に効率的な様式で可能と
する。自動反復バッファリングは、フェッチ(及び復号化)電力を削減する。限定された
アドレス空間は、データ及び命令の両方に関して、効率的なアドレス指定及び読み出し/
書き込み動作を提供する。データの再整列及びアキュムレータ転送は、データ移動オーバ
ヘッドを低減するため、及びアルゴリズムをより迅速に実行できるよう、多数のPEを1
つに結合して、追加のリソースを動作させるための機構を提供する。
目標
ハードウェアシステムのいずれの工学的実装の目標は、システムに必要な機能性を最小
のコスト関数で提供することである。このコスト関数は多数の態様を含み、ここで最も重
要なもののうちのいくつかは、実際のハードウェアコスト、システム全体を実装するため
の時間/コスト、使用コスト(電力及び面積)等である。これは様々な方法でトレードオ
フを克服する多数のオプションを何度も利用できる。前の節において、提示された様々な
ソリューションは、GPP、GPU、DSP、FPGA、メニーコア/マルチコア、AS
ICを含んでいた。これらのタイプのハードウェアを用いて利用可能な既存のシステムの
実装は、複雑性、使いやすさ、プログラム可能性、柔軟性、コスト、電力の点で大きく異
なる。与えられた例のうち、所定のシステムに関して最も電力効率が良いのはASICで
ある。しかしながら、ASICは最も柔軟性のないものでもあり、また開発の時間及びコ
ストに関して最も犠牲の大きいものである。その他のものはより柔軟性を提供するが、大
抵比較的低いコスト/時間及び増大された電力においてトレードオフを有している。本出
願において記載するハードウェアの目標は、純粋なASICハードウェアソリューション
の電力効率に依然としてアプローチしながら、特定のタイプの計算負荷のための従来の手
段によって高度にプログラム可能なハードウェアプラットフォームを提供することである
概念
この目標に挑戦し、到達するために、提示されている他のソリューションの実質的に全
てから概念を借用する。これらの概念の革新的な修正及び組織化は、より迅速な実装(市
場に出るまでの時間)を可能とするために望まれる高度なプログラム可能性を依然として
提供しながら、電力効率に関して純粋なハードウェアソリューションにアプローチする電
力効率の良い実装を可能とする。使用されるソフトウェア技術は、ハードウェアを補助す
るパフォーマンス及び電力最適化を提供するアーキテクチャに密接に連結される。
ここでの主要な焦点は、低電力で高スループットを提供するために実行ユニット又は処
理要素(PE)をどのように設計するかを説明することである。これは、処理のためにデ
ータがPEへと及びPEから流れるファブリックを提供するデータメモリルータ(DMR
)における、メモリ及び通信システムに連結される。
処理要素
従来技術(GPP、GPU、マルチコア、DSP等)における処理要素(PE)は複数
の命令アーキテクチャを有し、これら命令アーキテクチャは、従来の完全に符号化された
命令、又は多数の演算ユニットの制御のための多数のスロットを有する超長命令語(VL
IW)であった。これらのアーキテクチャにおけるデータ経路に関して、従来技術のうち
のいくつかは、様々な程度の独立性によって並列に演算を行うことができる多数の演算ユ
ニットを含む。スーパースケーラ型の実装において混合される多数の命令ストリームをサ
ポートできるものもあれば、シングルスレッド化されるものもある。
ここで提示する革新的なPEのアーキテクチャは、従来の完全に符号化された命令及び
サブ命令のためのVLIW型スロットのハイブリッドである。これは極めて柔軟かつ効率
的な命令アーキテクチャであり、乗算器、ALUユニット、アドレス生成器等といった多
数の演算ユニット及びこれらを相互接続するための機構を有する多種多様なデータ経路を
サポートできる。命令ストリームの実行をスケジューリングするために多くのハードウェ
アを必要とするスーパースケーラアーキテクチャの動的スケジューリングとは異なり、こ
のアーキテクチャは、命令ストリームを生成するソフトウェアツール(コンパイラ、アセ
ンブラ等)によって提供される静的スケジューリングを提供する。この静的スケジューリ
ングは、静的スケジューリングを例えばGPPのランダムな命令ストリームに関してあま
り最適でないものとするいくつかの制限を有しているものの、適切な最適化コンパイラ及
びソフトウェア開発ツールと連結される場合、DSP及び画像処理のための高度に構造化
されたリアルタイム型アルゴリズムにとって完全に十分であり、大いに改善された実行時
の電力効率を提供する。
PEは、演算ユニットが実行される多数のパイプラインステージで構成される。主要な
演算ユニットは、命令フェッチ、復号化/発行、オペランドフェッチ、実行ユニット及び
ライトバック(フェッチに連結される)である。使用される公称9ステージパイプライン
を図18に示し、演算ユニットがパイプラインのどこで動作するかが示されている。
このパイプライン構造は寧ろ、今日の基準に照らしても浅く、これは目的を有している
。個々のユニット及び特徴の設計を、低電力設計を可能とする固有の設計点に重点を置い
て、以下の節で議論する。読者は情報が多数のセクションに亘って情報が広がる傾向にあ
ることに気付くだろう。というのは、特徴及びアーキテクチャが共に動作する多数の機能
性ユニットを横断して、固有の全体的なハードウェア設計を生成するからである。大半の
ものよりも少ないステージを有するパイプラインは、パフォーマンスを向上させ電力を削
減するために行われるハードウェア最適化の一部である。より小さく、より単純なハード
ウェアを用いて、パイプラインを、浅いパイプラインによってでさえ高いパフォーマンレ
ベルで実行されるよう構築できる。
実行パイプライン
基本的なパイプライン
図19は、単一データ経路アーキテクチャに対して改善されたPEデータ経路の図であ
る。より詳細には、図19は、(前世代と同様の)幾分標準的な単一データ経路、及び改
善されたPEデータ経路アーキテクチャ(命令フェッチ、復号化、及び制御論理は図示せ
ず)の概念ブロック図である。この改善されたデータ経路は、単一データ経路よりも約6
0%多いロジックで実現できる。換言すると、改善されたデータ経路におけるパイプ0又
はパイプ1は、本質的に1サイクル毎に同等又はそれ以上の演算が可能である単一データ
経路よりも、20%論理的でない。単一のデータ経路は、論理演算及び算術演算のための
別個の経路を有する。乗算器は、浮動小数点仮数乗算をサポートするために24b×24
nであってよい。これには40bアキュムレータ及び加算−比較−選択(ACS)ユニッ
トが続いてよい。続いて全ての結果を再びシフト及び累算してよい。限定された量のパイ
プライン並列処理は、アキュムレータを半分に分割すること及び単一命令マルチデータ処
理(SIMD)モードで動作させることにより、8ビットデータ上で可能である。
改善されたデータ経路アーキテクチャは、図においてパイプ0、パイプ1として示した
二重の独立したパイプラインを含む。これらのパイプはそれぞれ、デュアル16b×16
b乗算器を有する。パイプは、乗算の結果の範囲:クアッド16b、デュアル16b+1
つの32b、デュアル32b、又は1つの64b(これは浮動小数点演算のための単一の
24b乗算もサポートする)を達成するために圧縮器回路によって結合される。各パイプ
に関して、圧縮器の後には、シフト、論理、加算、ACS、続いて最終的なアキュムレー
タのステージが続いてよい。単純な単一データ経路パイプラインでは、16b演算、リア
ルタイムDSPエンジンのための一次データサイズのために、単一の演算操作(乗算、又
は加算/減算)のみを1クロック毎に実施してよい。新規のアーキテクチャにより、ハー
ドウェアは、特定の演算に関して1クロック毎に最高4つの同一のタイプの演算を提供す
るために、より多くの最適な構造に分割される。このアーキテクチャは、1つのパイプラ
イン毎に削減された量のハードウェアと共に、DSP及び画像演算を行うために十分な遥
かにエネルギ効率の高い方法を提供する。達成可能なエネルギ効率は純粋なハードウェア
ソリューションに匹敵するが、達成可能なエネルギ効率はここでは完全にソフトウェアプ
ログラム可能なPEにおいて達成され、これは開発努力を低減する。デュアル/クアッド
パイプラインアーキテクチャは1PEサイクル毎に多数の異なる組み合わせの演算を可能
とするが、従来のアセンブリ言語命令セットは固有の柔軟性の全てをサポートできない。
この増大した柔軟性を十分に利用するためのモデルを符号化及びプログラミングする命令
全体における変化についても議論する。
図19、20において、データ経路が乗算器の後で2つの圧縮器を(パイプ1とパイプ
0との間で)連結していることに留意されたい。FIRフィルタ等に必要とされるような
多数のオペランドの積和演算のような、演算の加速のための単一の乗算の累算を提供する
。これは、これらの演算及び差分絶対値の和(SAD)タイプの演算を行う、極めて効率
的な方法である。この最適化は、その他のものよりも、このアーキテクチャの電力効率を
大幅に増大させる。これは、MACのための乗算器アレイ又はSADタイプの演算のため
の加算器アレイからの部分積に対する別のビットの圧縮演算を単に行う一方で、別の全加
算器の有効性を提供する、少数の単純ゲートである。再び、これらの追加のゲートを効率
的に使用する能力は、後に議論の対象となる改善された命令符号化及び制御技術を必要と
し得る。
改善されたPEデータ経路の特徴を要約する:
それぞれ(1サイクル毎に)以下が可能である2つのデータ経路:
・1つ/2つの16×16乗算又は1つの32×32乗算
・1つ/2つの16b加算/減算又は1つの32b加算/減算
・40bバレルシフト
・32b論理演算
・2つの40bアキュムレータを用いた40b累算
データ経路は共に(1サイクル毎に)以下を実施できる:
・1つの32×32乗算又は積和演算
・1つの32b浮動小数点加算/減算/乗算
・二重又は単一の累算を伴う4つの16x16乗算
・累算による4つの差分絶対値の和
2つのデータ経路における乗算器及び加算器の4つの演算に基づいて、DSPアルゴリ
ズムに必要である、効率的に実施できる更に多くの機能が存在する。純粋に命令符号化レ
ベル(後のHyperOpを参照)においてではなく、プログラミングレベルにおいて実
装されることになるこれらの演算を可能とするために、改善された命令セットを、かなり
低いレベルのプログラミングモデルにおいてハードウェアを露出させるよう設計してよい
。これは、このアーキテクチャによる別の革新をもたらす。
オペランド整列
メモリからのオペランド及びメモリに対する結果の書き込みのフェッチは、全てのアー
キテクチャのより大きな電力を消費するタスクである。大きなローカルキャッシュ及び複
雑なキャッシングシステムにより、多くの電力がこれらの演算に消費されるため、全体的
な効率を損なう。従来技術のシステムの大半において、メモリサブシステムは、多数の異
なるオペランドサイズ、及びマルチレベルキャッシュシステムを通してアクセスされる大
きなアドレス空間を可能とする。メニープロセッサICチップの各PEのためのオンチッ
プサポーティングメモリは、サイズが更に制限され、同数のオペランドサイズ及び整列演
算をサポートする必要はない。
HyperOpをサポートするためのデータ整列多重化装置及びPEアーキテクチャに
おけるデータ整列多重化装置の使用を説明するために、オペランドサイズ及び整列につい
てここで簡潔に説明する。データオペランド及び結果については後の節でより詳細に議論
するが、本議論では、アーキテクチャが様々な条件において、かつ必ずしも同時にではな
く、以下のオプションを提供すればよい:
・2つの16ビットオペランドのフェッチ
・2つの32ビットオペランドのフェッチ
・16ビット及び32ビットオペランドの組み合わせのフェッチ
・追加の64ビットの整列オペランドのフェッチ
・単一の16ビットの結果の書き込み
・単一の32ビットの結果又は2つの16ビットの結果の書き込み
・2つの32ビットの結果又は64ビットの結果の書き込み
メモリインタフェースを単純なままとするために、全ての上述の演算を物理メモリに関
するデータサイズ境界上に整列させるべきである。これは。特定のアルゴリズムにおける
それらの使用の実現可能性を制限するように思われる。この制限に対処するために、オペ
ランド(及び結果)整列多重化装置を上述のデュアル/クアッドパイプラインアーキテク
チャに追加する。整列多重化装置は、アセンブリ言語プログラミングモデルを有する単一
パイプラインにおいて使用が非常に制限される場合があるものの、整列多重化装置は、H
yperOpプログラミングモデルを有するデュアル/クアッドパイプラインアーキテク
チャの柔軟性と良好に一致する。
図20は、本議論のためにいくつかの追加のフローレジスタの拡張を有する、デュアル
高スループット演算ユニットの指定データパイプライン0(DP0)及びデータパイプラ
イン1(DP1)を用いたデータ経路の例を示す。これらは追加のパイプラインレジスタ
X、Y(入力用)、Z(出力用)である。また、オペランドステージA、B、C及び宛先
ステージDも示す。
A、B、Cレジスタを、以前に議論したのと同程度に利用可能である最大64ビット幅
のオペランドを保存するために使用される。HyperOpは、2つのデータ経路のA、
B、CレジスタとX、Yレジスタとの間のシステム多重化を用いて、データ経路が実施す
る各演算に必要なオペランド及び単語整列を制御する。HyperOp処理中にA、B、
Cレジスタへのオペランドフェッチは、メモリへの整列アクセスを可能とするプログラム
制御下にあり、これにより、データ経路算術演算ユニットに再整列様式で(及び従って必
要に応じて整列されていないように見えるもの)にオペランドを提供する。この革新によ
り、より単純な低電力メモリ構造及びアドレス指定モードが可能となり、これにより、ど
のようにしてオペランドがメモリに保存されるかにかかわらずピークスループットを提供
するために、複雑なデータ経路/HyperOpの組み合わせに十分なオペランドを供給
する方法を提供する。
結果は、オペランドの議論におけるものと同様である。データ経路結果は、Hyper
Op実行中にアキュムレータ又はZレジスタのいずれかに入れられる。続いてこれらを、
他の場所にライトバックするためにDに移動させるか、又は後続の命令において追加のオ
ペランドとして使用されることになる例示した経路上にフィードバックされる。オペラン
ドと同様に、ここで結果の再整列ができ、これにより、非整列データのためにメモリ/レ
ジスタに整列されたライトバック提供する。この場合も、これらの演算はHyperOp
によって独立して制御される。
1つのパイプラインにつき二重のアキュムレータ
同様の算術演算の長い文字列を加算して単一の合計とするためのアキュムレータをサポ
ートする多くのアーキテクチャでは、単一のアキュムレータが存在する。更に、場合によ
っては全ての演算がこのアキュムレータを結果で修飾する(この場合でも我々の前世代)
。この構造は、追加のデータ経路の追加及びHyperOpによって1サイクル毎に多数
のオペランドに対して演算する能力の追加により、1サイクル毎の主に単一のスカラー演
算であるアーキテクチャのために良好に作用するのと同時に、これはこの概念を拡張する
ために必須のものとなる。現行の設計点は、データ経路毎に2つの独立したアキュムレー
タを含む。各演算は、必要であれば、どのアキュムレータを更新するかを選択できる。従
ってこれらを用いて、前で議論したシステム多重化構造によって後に処理するための中間
値を保存できるか、又は多数のデータストリームを追加のサイクル若しくはアキュムレー
タ値をセーブ及び復元する電力オーバヘッドを要することなく、インタリーブ形式で処理
できる。二重のデータ経路及びオペランド/結果アライメントといった他の特徴と連結さ
れる場合、二重のアキュムレータ構造のこれらの特徴は、パイプラインがより十分に利用
される状態を保つための機構を提供し、これは同様に設計のための演算毎の全体的な電力
を削減する。
アキュムレータ転送
アキュムレータに関連する別の特徴は、いくつかのアルゴリズムの内側ループを高速化
するための、及びチップ内の多数のPEに亘る並列実行を増大させるための別の方法を提
供する。例えばこれは、多数のPEに亘って広がる必要がある計算ループに対するオーバ
ヘッドを最小化して、マルチタップ高帯域幅FIRフィルタ等の場合に帯域幅を処理する
十分なデータを提供するために必要である。これは、図21に示したPE間の「アキュム
レータ転送(accumulator forwarding)」によって達成できる。
この図は2つのPEを示すが、これは所望の帯域幅に到達するために必要とされるのと
同じ数まで、容易に拡張可能である。経路は、1つのアキュムレータが更新されると更新
された値が別のPEに対するDMRのファブリック拡張部分に転送されるように、設けら
れる。ここで、到達したこのアキュムレータ値はローカル計算に加算して新たなローカル
アキュムレータに入れるために使用される。この新たなアキュムレータ値は、更なる計算
のために別のPEに再び転送される。
また、ローカルMAC(又はその他の)計算のための4つの係数値を保持するためのC
レジスタの使用が図示されている。これは、例えばFIRフィルタの4つのタップを提供
できる。鎖線の中の各PEは更なる4つのタップを提供できる。よって例えば、しかしそ
れによって限定されないが、8個のPEは、1クロックあたり1つのサンプルのフルクロ
ックレートで、32タップのFIRフィルタを実装してよい。単一のPEにこの同一のフ
ィルタを実装することは、フィルタの帯域幅を8クロック毎に1つのサンプルまで制限す
ることになる。
データは、フィルタを通してデータストリームを前進させるためのFIFO構造を有す
るDMR間を通過する。前の節で言及したリアライメントバッファを用いて、各ローカル
PEを処理する現在のデータセットのための適切な係数を選択する。データ移動は実行に
よるロックステップにおけるものであり、これにより、アルゴリズムと一致した方法で次
の計算を行うためのデータの到着時にトリガが起こる。このようにして、フィルタを、同
一のデータ移動、及び同様のフィルタを実装する純粋なハードウェア構造が必要とする同
一の計算のみを用いて実装してよい。これにより、このプログラマブルソリューションの
電力散逸が、同一の機能を実施するASICに匹敵するものとなる。
このケースに基づいて、単一のクアッド乗算−累算命令をフェッチして、このアルゴリ
ズムの内側ループを実行してよい。後の節では更なる詳細が提供されるが、この命令を(
必要な場合他のものと共に)命令フェッチ及び分配ユニットによってローカル命令バッフ
ァに保存してよい。ループでは更なる命令フェッチは不要であり、単一の命令に関しては
更なる復号化は不要であり、潜在的に多くの電力散逸をセーブする。
例えばデュアル/クアッドアーキテクチャを有する多数のPEを用いたFIRフィル
タの場合、各PEは各サイクルにおいて、単一命令を有する最大4つの入力サンプルまで
処理できる。この命令は、制御ラインのトグリングなしに、何度も実行できる。システム
がこの1つ又は複数の反復命令を検出すると、メモリからのフェッチは起こらないため、
命令メモリは節電モードに入る。FIRフィルタのようなタイトループDSPアルゴリズ
ムのうちのいくつかに関して、このプログラマブルシステムにおけるデータ移動及び計算
及びマイナー制御トグリングは、ASICハードウェア実装と同様であり、従って略同一
の動的電力散逸を達成する。
命令フェッチ/復号化におけるアドレス生成
図20では、アドレス生成器ユニット(AGU)を含むアドレス生成器セクションを示
したが、これについて詳述していなかった。PEアーキテクチャのアドレス生成器セクシ
ョンは、ハードウェアによってサポートされる様々なアドレス指定モードのためのアドレ
スを生成する。その固有の特徴をこの節で詳述する。
アドレス生成器セクションは、アドレス生成に使用するための多数のプログラマブル算
術演算ユニットを有してよい。更に、パイプラインのアドレス計算部分において更なる計
算を行うために使用できる1つ又は複数の拡張された算術演算及び論理ユニット(GAL
U)が存在してよい。これらの計算は、パイプの機能性及びパフォーマンスを拡張するの
に、並びにテーブルルックアップ型演算及びその他のものにおけるパイプライン遅延を排
除するのに有用である。図20において、例示的なアドレス生成器セクションは、3つの
AGU及び1つのGALU及び一連のサポートレジスタを含む。
標準的な符号化方法における典型的な演算のために、AGUを用いて2つのソースオペ
ランド及びデスティネーションのための、又はこれらのサブセット及びいくつかのアドレ
ス若しくは拡張数学演算のためのアドレスを生成する。ユニットは符号化を用いて密接に
連結される。HyperOp符号化を介した拡張演算のために、これらのユニットは更に
連結解除され、命令ストリームによって個別に制御できる。これは、演算の更なる柔軟性
及び更なる並列化を可能とする。最適化はコンパイル時に実施してよく、これにより、リ
アルタイムの順序変更が不要となり、従って上記最適化の動作パワーペナルティがなくな
る。
このハードウェアのより詳細なブロック図を図22に示す。この図により、多数のAG
Uの連結が、このセクションにおける使用のために利用可能なレジスタと共にはっきりと
分かる。例示的なハードウェアを以下のように詳述できる:
・アドレス型計算のための3つの標準的なAGU
・追加の算術/論理サポート(GALU)のための1つの拡張AGU
・8つのベースレジスタB0..B7
○アドレス指定モードにあるB0は値ゼロを得る
○B0はスタックポインタとして使用される(SP相対アドレス指定モード)
・8つのインデックスレジスタ10..17
○アドレス指定モードにある10は値ゼロを得る
○10を他のAGU算術のための一時レジスタとして使用できる
・8つのストライドレジスタS0..S7
○SnはIn又はBnと共に使用される
・2次インデックス又はベースレジスタ用の4つの追加のインクリメンタ
○インデックスレジスタ14..17
○ベースレジスタB4..B7
○ストライドレジスタS4..によるインクリメント
最後の3つの項目はパイプの早期の命令フェッチ部分におけるアドレス計算及び単純計
算において使用され得ないだけでなく、後に説明するハードウェア反復動作に連結されて
クリティカルループ計算のためにゼロオーバヘッドルーピングを提供する。
図23は、単一のAGUのより詳細な図を示すブロック図である。各AGUの特徴部分
は以下を含んでよい:
1)更なるアドレス計算がより多くのレジスタ上で利用可能である;
2)拡張された迅速なAGUの動作のための新たなブロック。(これらのうちの1つの
みが存在し得る。入力は既存の多重化装置及びA、Bソースアドレス復号化からのフォー
ル度を使用する);
3)加算器の条件コード出力は迅速な分岐性能を可能とする。(これは、追加のパイプ
ライン遅延を挿入するメインデータ経路の代わりにAGUが決定算術演算を実施した場合
に、ゼロオーバヘッド条件の分岐を提供する);
4)(循環バッファリングのための)剰余インデックス算術演算;
5)(平坦なメモリへの多次元アレイのマッピングのための)マルチストライドインデ
ックス算術演算;
6)加速されたテーブルルックアップのための複雑な算術演算。
アドレス計算に単一のAGUを使用するのに加えて、特定の命令によって複数のAGU
を組み合わせて、より複雑なアドレス計算を実施できる。このようにして、HyperO
pは、アドレスに対する複雑な算術演算を実施するためにAGUを配分でき、これによっ
てメモリアドレスの使用方法に更なる柔軟性を提供できる。これらのより複雑なアドレス
指定モデルは、循環アドレス指定(後のセクションで更に詳細に取り扱う)、剰余アドレ
ス指定、2D及び3Dアドレス指定と共に使用するためのマルチストライドインデクシン
グ、複雑なテーブルルックアップアドレス指定、sin/cosによる特別なアドレス指
定等を含むことができる。ハードウェアパイプラインのこのセクションに加算器及び論理
性能を有するという柔軟性により、特定のアルゴリズムに関して複雑なアドレス算術演算
を、このアドレス算術演算を通常の実行パイプラインで実施した場合に可能なものよりも
効率的に、実施できる。AGUはメインデータ経路ALUとは別個のハードウェアである
ため、アドレス計算はデータ計算と同時に実施できる。
AGU分岐
AGUパイプライン領域の別のALU機能性は、ゼロオーバヘッド分岐を可能とする、
早期の分岐計算である。分岐の決定を計算するための算術演算を、パイプラインの通常の
実行セクションで実施すると、これはパイプラインのタイミング構造の範囲内において非
常に後で行われる。これは、分岐を誤って予測した場合、複数の命令をフェッチして、分
岐の決定を終了させている間にこれら命令を推測で実行することになる(命令は、結果を
書き込むことによってその不変状態を変更できない)ことを意味する。決定が誤っている
場合、これらの結果は無効であり、使用されず、これらのための電力及び時間が無駄にな
る。AGU算術演算は、実施される分岐決定よりもパイプ内で極めて早期に行われるため
、誤った命令をフェッチすることはなく、推測による実行も発生しない。従って、分岐に
よって、使用できない命令に対するいずれの実行サイクル又は電力が浪費されることがな
くなる。
循環アドレス指定
DSPアルゴリズムの加速のための複雑なストリーミングデータ構造をサポートするた
めに、拡張されたアドレス指定モードが望まれる。1つのこのようなモードは、循環アド
レス指定である。このタイプのアドレス指定により、算術演算をより簡潔な形態で書くこ
とができ、またかなりの複雑性がデータ経路からAGUセクションへと移され、このAG
Uセクションにおいて、上記算術演算をより効率的に、かつパフォーマンスのためにより
良いパイプラインのタイムスロットにおいて実行できる。これを達成するためにハードウ
ェアをどのように利用するかは、以下の例から理解できる。
2つのAGUからの2つのインデックスインクリメンタのペアを組み合わせて、1つの
インデックスに対する循環アドレス指定、例えば{i6,s6}及び{i7,s7}を生
成すると想定する。
図24に示す循環バッファを想定する、ここで:
・i6は現在のアレイインデックスを保持し、
・s6は通常のストライドを保持し、
・i7は最後の有効な循環アレイインデックスを保持し、
・s7はラップ状況のためのストライドを保持する。
これは、2つのインクリメンタを図25に示すように連結することによって達成できる
。これは、アドレスに対するNを法とする完全な剰余演算を実装し、また算術演算は、1
回のアドレス計算につき最高1回のラップしか行わないようなものである。この制約はソ
フトウェアによって維持できる。4つのインクリメンタが存在するため、このようなアプ
ローチにおいて2つの循環バッファ、{i4,s4,i5,s5}及び{i6,s6,i
7,s7}を実装できる。
典型的なGPPアーキテクチャでは、データフローのアドレス指定及び管理のためのア
ルゴリズム及び算術演算は、総計算負荷の極めて大きな部分を占める。上述のPEアーキ
テクチャの特徴部分は、データフローのコンパイル時間管理と共に、あるアプリケーショ
ンに関する総計算負荷を大幅に低減し、従って電力散逸を大幅に低減する。
命令フォーマット及び符号化
このアーキテクチャの命令セットは、以下の2つの別個のサブセットに分解される:
・64bの従来のアセンブリ命令
・128bのHyperOp命令
これら2つのサブセットは、図26に示す、プログラミングのための関連するモデルを
有する。従来のアセンブリモード(ASM)は、従来技術において典型的な、固定長64
ビット命令に符号化される単一命令ストリームモードであってよい。ASM符号化は、異
なる命令タイプのために複数のフォーマットをサポートしてよく、主要な形態は、単一の
データ経路演算による3オペランド(2ソース、1宛先)フォーマットである。このモデ
ルでは、128ビットHyperOpモードよりも並列処理のサポートが弱い。しかしな
がら、単一のパイプラインの2つの半体、又は2つの(若しくはそれより多い)パイプラ
イン上での演算を制御するSIMD命令のための特定の命令符号化が存在してよい。また
、パフォーマンス及び電力の最適化のためのクアッドデータ経路演算を実行することにな
る、極めて限定的な命令のセットのための符号化も存在し得る。
もう1つの命令サブセットは、HyperOpモードである。これについては以下のセ
クションで議論する。これら2つの符号化モデルからの命令は、所定のアルゴリズムに関
する最良の演算を提供するいずれの形態及びシーケンスの命令のストリームへと混合でき
、上記アルゴリズムは最適化コンパイラによって決定できる。
HyperOp
HyperOpと呼ばれる命令のセットは、高い柔軟性のために、デュアル/クアッド
パイプラインを粒度が高い様式で制御する。命令符号化スタイルは、「従来の」アセンブ
リ(ASM)スタイルと、超長命令語(VLIW)スタイルとの間の何らかのスタイルで
ある。これは以下を提供する:
・実行ユニット内の両方のデータ経路パイプの、分離され、かつ独立した制御
・ソースオペランドの位置の、分離され、かつ独立した制御
・結果ライトバックの位置の、分離され、かつ独立した制御
・1クロックあたり最大3つのAGUの、別個の制御
・ハードウェア反復モデルの制御
・(多くの場合、分岐よりも効率的である)術語型実行のための制御
例示した改善されたデュアル/クアッドデータ経路を用いて、幅広いパイプライン化及
び同時並列処理をプログラムできる。データ経路要素の独立した制御、並びにデータ経路
実行からのデータ(オペランド)フェッチ及び1つ又は複数の結果ライトバックの連結解
除は、従来のSIMD機械の厳格性とは異なり、演算において極めて高い柔軟性を提供す
る。HyperOp命令は、データ経路のパイプライン化及び同時並列処理の、粒度が高
い制御を提供する。各パイプは、使用されるHyperOpに応じて、1クロックあたり
複数の命令を実行できる。
HyperOpに関する基本的な動機は、RF波形処理からMPEG画像圧縮及び暗号
化までの例を用いた、幅広いアプリケーションソフトウェアのためのアセンブリコードの
分析に由来している。アセンブリ(ASM)コードは「C」コードよりも効率的に実行さ
れることが多いが、最適ではなく、実行が非効率的となる場合も多数発生していた。本発
明者らは、アルゴリズムに関わる算術演算を実行するために使用されるPEサイクルの個
数に関して効率を定義している。データストリームを何らかの階層フォーマットに従って
解釈し、(例えば2Dフィルタを用いて)処理し、同一の又は別の階層フォーマットに従
って再度パッケージングしなければならない場合に、非効率が発生していた。他の場合に
は、様々なタイプ{短い、整数、浮動、長い}の間での変換を行うためにかかる時間が過
剰であった。これらの場合において、様々な寸法及び場合によっては可変サイズのアレイ
に保存されたデータを走査するために、ループを使用することが多い。ループアドレス計
算を、データの処理に使用されるものと同一のハードウェア上で実施する場合、アドレス
計算はループ遅延(オーバヘッド)を含む。
更に、新規のデュアル/クアッドアーキテクチャは、より独立性の高い演算ユニットを
提供し、従って、1つ又は複数のパイプラインが含む並列演算又は迅速な順次演算に関し
て、より高い柔軟性及びより多くの機会を提供する。HyperOp命令は、ASMフォ
ーマットに限定することなくこのハードウェアを制御する方法を提供する。独立したスロ
ットという観念は、この業界で使用されている超長命令語(VLIW)符号化スタイルか
ら借用したものである。VLIWスタイルでは、命令内の特定のフィールドを、特定の機
能ユニットを制御するための「スロット」と呼ぶ。スロットのコーディングの独立性は、
機能ユニットの独立性に対応する。VLIWスタイルの命令は、全ての機能ユニットに何
かを実施させない場合があるが、プログラマは一般に殆どのスロットに、プログラム内の
命令の殆どにとって有用な何かを実施させようとする。このようなASM及びVLIW符
号化スタイルのハイブリッドにより:
・プログラム可能なデータ経路の並列処理
・データ経路要素の独立した制御
が可能となる。
HyperOp命令は、標準的な符号化スキームを用いた場合には実行できない方法で
命令を並列処理及び加速できるように、実行パイプ演算、レジスタ、多重化の、より粒度
の高い制御を提供する。これにより、3つのAGU及び2つのデータ経路の独立した制御
が現行の実装形態において提供される。従来の符号化方法を用いて従来のパイプラインを
通過するに従ってオペランドに結び付けられたパイプラインレジスタが、このモードでプ
ログラマに提示される。これにより、メモリに保存する必要がない中間結果を有するタイ
トなループを遥かに効率的に実行でき、オペランドの移動及び整列を実行パイプラインか
ら切り離して、コンパイラによるパイプラインの最適化においてより高い柔軟性を提供で
きる。Error!Reference source not found.これらの
レジスタは、図20のPIPE部分においてX、Y、Zで標識されている。これらは常に
存在し、従来の命令によってハードウェアをパイプライン化するためにさえ使用される。
しかしながらHyperOpモードでは、これらは、図示されている多重化ハードウェア
と共に、符号化される命令によって直接制御され、これにより、パフォーマンス及び電力
の最適化のための、粒度が極めて高いデータフローの制御が提供される。
これは、更なるビットの符号化によって、追加のハードウェアに容易に拡張できる。図
20はPEアーキテクチャの単なる一例である。
5つの実行ユニットを制御するためのHyperOp命令に関するビットフィールドの
フォーマットの例を、図27に示し、これは同様の命令セットの一般的な符号化を例示す
るものである。いくつかの高いビット数は、図27に示すものとは異なる特別な命令フォ
ーマットを信号伝達できる。第1のフィールド(番号127)は、命令がマルチパート命
令に関しては128ビットで符号化され、又は単一パート命令に関しては64ビットで符
号化されることをPEに信号伝達するために使用される。「condExec」フィール
ドは、計算され、PEにおいて状態として保存されている条件に基づく、命令の特定のフ
ィールドの条件付き実行を可能とするために使用される。3つの「typ」フィールドは
、制御情報の一部としてAGUフィールドと組み合わせて使用される。アドレス生成ユニ
ット(G0、G1、G2)に関する2セットのフィールドは、これらのユニットそれぞれ
において実施される演算を制御する。最後の(ビット数が最も小さい)2つのフィールド
はそれぞれ、実行ユニット内の2つのパイプライン化されたデータ経路それぞれにおいて
実施されている演算を制御するための20ビットフィールドである。
最大5つの実行ユニットに関して、独立した制御が可能であることに留意されたい。各
ユニットは、スループットとして、1クロックあたり1つ以上の演算を実施できる。典型
的なHyperOpは、1クロックあたり約8〜12個の基本演算を制御できる。反復ハ
ードウェアの全てが使用中であり、かつロードを計数して、各16ビットデータ語を「o
p」として保存する場合、このHyperOp命令フォーマットを用いて、1クロックあ
たり約36個のopを得ることができる。1.5GHzのクロック及び256個のPE設
計点を用いると、これは略14TOPS(テラ演算/秒)となる。
これは、命令レベル並列処理を制御し、このような並列処理のスケジューリング及び最
適化をコンパイラ及びフォフトウェア開発ツールの領域に残すための、極めて効率的な方
法である。これにより、スーパースケーラタイプのスキームに比べてハードウェアを大幅
に小型化でき、上記スーパースケーラタイプのスキームは、ピークパフォーマンスに到達
するためのコンパイラ最適化が必要である一方で、オペランド、演算及び結果を完全に順
序変更及び最適化するために、実行時に遥かに多量のハードウェア及び電力も必要とする
「FIR」フィルタのための並列アセンブリ言語の例は、このフィルタがどのように作
用するかを理解する助けとなり得る。この並列アセンブリ言語の例は、コード部分Mにお
いて提供されるANSI Cコードの例に対応する。「||」の記号は、HyperOp
符号化命令によって並列に実行される命令を隔てるものである。

// perform FIR filter on current sample data and produce sample out

// %bl points to structure com.com
// %b2 points to the coefficient array filter
// %dl points to structure com. result
// %il is index i

{ repeat1 $0, FILTER_LENGTH - 1, $4, %il, ACCO = 0;
|A| ldi com.com, %bl; |B| ldi filter, %b2; | C | void;
|D| void; |G| void; }

{ | A | ld64 0[%bl + %il], %AB; | B| void; | C | ld64 0[%b2 + %il] , %C;
|DP0| qmadd16 %AB , %C, %ACC0; |D| st32 %ACC0, %dl;
|G| void; }

コード部分P:ANSI Cのコード部分Mに対応する、FIRフィルタ関数に関する並
列アセンブリ言語コード
フェッチ/フロー制御
ハードウェアは、プリフェッチ法によってパイプラインに命令を供給し続ける、非常に
標準的な命令フェッチユニットを備えてよい。このフェッチユニットにはフロー制御が付
随し、これは命令に連結されて、特定の制御条件に対処するための効率的な方法を提供す
る。上記制御条件は以下を含む:
・オーバヘッドが低い様式でのループの加速のためのハードウェアの反復
・バッファリングの反復
・条件付き実行(マルチレベル)
命令フェッチ/バッファリング
命令フェッチ及び復号化ユニットの例を図28に示す。命令はFIFO形式で命令バッ
ファ内に維持でき、出力は、保存された命令のシーケンスをもたらす現在の命令を含む。
命令が発行されると、IFUは新規の命令アドレスを計算して命令メモリ(IM)を読
み出し、命令は命令バッファにロードされる。IFUは、例えば64bと128bといっ
た、複数の長さが混ざった命令を処理してよい。これらはパディングを伴わずに命令メモ
リにパックされる。IMからの第1の命令語(IW)は、命令の長さに関するコードを含
む。スタートアップ時、128ビットの命令が読み出される。そして命令の発行に続いて
適切なビット数が読み出され、これによって発行された命令の語を補充する。
多数の命令を命令バッファに保存でき、典型的な例は8〜16個である。この例では、
命令はシーケンスのまま維持され、順序変更されない。いくつかのマイクロプロセッサア
ーキテクチャでは動的順序変更が行われるが、これは複雑な論理を必要とし、相当な電力
を散逸させ得る。
現在の命令が完了すると、この命令は「リタイア」し、次の命令が現在の命令として指
定され、これ以降も同様である。命令バッファに適合できる程度に十分に小さい命令のグ
ループは、ループ内で効率的に実行でき、またループが完了するまでいずれの追加のフェ
ッチも必要としなくてよい。反復ハードウェアプログラミングを用いてこれらのシーケン
スを検出し、バッファ内に適切な命令を保持する。これは、極めて電力効率の高い内側ル
ープを提供する。バッファ及び反復ハードウェアは、最大3深度(又は3次元ループ実行
)までのネスティングをサポートする。単一の命令の最も効率的な内側ループに関して、
この単一の命令は現在の命令として休止状態であり、ループカウントが満たされるまで、
単に復号化に対する制御を駆動する。これは、プログラム可能なアーキテクチャに関して
極めて電力効率が高い。
反復バッファからの実行中、フェッチが必要ないため、電力を節約するために命令メモ
リを低電力状態とすることができる。関数の最も内側のループの命令の数は、ループの各
繰り返しのための実行時間において大きな因子であり、従って関数の速度、スループット
、帯域幅に反比例する。反復バッファの目的は、最も重要な内側ループがバッファに適合
するように、十分な深度(殆どの場合8又は16個の命令)を提供することである。
このハイブリッドアーキテクチャプロセスは、1つのPEについて一度に1つの命令を
処理し、従ってスケーラと呼ぶことができる(スーパースケーラではない)。しかしなが
らHyperOpのサブ命令は独立して復号化され、従ってサブ命令の2つ以上のスレッ
ドを維持できる。最適化コンパイラツールは、ユーザプログラムを命令ストリームにコン
パイルした後、これをサブ命令の複数のスレッドに分割してより高い並列性を達成するこ
とにより最適化できる。データハザードを回避するためのルールを適用すると、命令スト
リームを最適化するために、個々のサブ命令を命令ストリーム内で前後に移動させること
ができる。サブ命令をロックしてロックステップで発行するこのような制限により、復号
器、制御及びフェッチユニットの複雑性は大幅に低減され、従って電力散逸が節減される
反復
反復ハードウェアは、GPPの典型的な試験及び分岐方法よりも効率的なリアルタイム
DSPアルゴリズムのタイトな内側ループに対する、ハードウェア内でのルーピングを提
供するための機構である。
反復ループハードウェアは:
・ゼロオーバヘッドループ形成のための内側ループのためのハードウェアの事前ロード

・1次インデックスレジスタを用いたネスティングの3つのレベルのサポート;
・4つの2次ベース/インデックスレジスタの自動インクリメント
を提供する。
反復ループの関数は、以下のCのようなコードによって示される:
do {
PC = TOP
while (PC <= BOTTOM_NEW)
execute instructions;
} while (CURRENT != END;
CURRENT += STRIDE)

コード部分Q:反復ループの擬似コード
このような演算を実装するためのハードウェアレジスタを表1に示す。これらのうちの
いくつかについては、アドレス計算の議論において既に議論した。反復ループのために使
用されるインデックス値は、処理されるデータのアレイに対するアドレスの計算に使用さ
れる場合が多いため、これらのレジスタはAGUによってアクセス可能である。
Figure 2021192257
64ビット及び128ビット両方の符号化において、これらの必要なレジスタ全てを単
一のクロックでロードし、任意に反復ハードウェアを始動させるための、特別な命令が存
在してよい。ここで過去の世代を上回る1つの革新は、反復ハードウェアをロードして、
ループのTOPアドレスに到達した時に上記反復ハードウェアが始動するよう準備するた
めの方法が含まれることである。これにより、3深度ループが得られ、内側の2つのルー
プは、外側のループの開始前にロードされる。これにより、内側ループに関する反復命令
のフェッチは行われず、従って内側ループはサイクルカウントに関してゼロオーバヘッド
ループとなる。
このハードウェアを用いると、命令のセットに対して3深度ネスティングを実装でき、
ループは命令のために必要なクロックだけを用いて実行される。ループカウンタ、インク
リメント、比較、分岐、アドレス計算のためのサイクルオーバヘッドは不要である。これ
によりデータ経路ハードウェアを自由にし、アルゴリズムの算術部分のみに集中させるこ
とができる。
図29
図29は、マルチパート命令の受信及び実行の第1の実施形態を示すフローチャートで
ある。
本方法は、フェッチユニット及び複数のアドレス生成ユニットを備えるマルチプロセッ
サ装置において動作し得る。フェッチユニットは、マルチパート命令を受信するよう構成
されてよく、マルチパート命令は複数のフィールドを含む。複数のアドレス生成器ユニッ
トは、複数のフィールドのうちの第1のフィールドに応じた算術演算を実施するよう構成
された第1のアドレス生成器ユニットを備えてよい。複数のアドレス生成器ユニットはま
た、複数のアドレスのうちの少なくとも1つのアドレスを生成するよう構成された第2の
アドレス生成器ユニットを備えてよく、複数のアドレスそれぞれは、複数のフィールドそ
れぞれに依存する。マルチプロセッサ装置は更に、複数のアドレスのうちの第1のアドレ
スに応じた第1のデータを保存するよう構成された保存ユニットを備えてよい。更にフェ
ッチユニットは、複数のアドレスのうちの第2のアドレスに応じた第2のデータをフェッ
チするよう構成されてよい。マルチプロセッサ装置は更に、複数のアドレスのうちの少な
くとも1つの別のアドレスを生成するよう構成された第3のアドレス生成器ユニットを備
えてよい。更に、複数のフィールドのサブセットの各フィールドは、複数のアドレス生成
器ユニットそれぞれが実施する演算を符号化してよい。
マルチパート命令を受信及び実行するための方法は、以下のように動作できる。
まず2902において、プロセッサはマルチパート命令を受信してよく、このマルチパ
ート命令は複数のフィールドを含む。次に2904においてプロセッサは、複数のフィー
ルドのうちの第1のフィールドに応じた算術演算を実施してよい。2906においてプロ
セッサは更に、複数のフィールドそれぞれに応じて、複数のアドレスのうちの所定のアド
レスを生成してよい。
追加の実施形態では、本方法は更に、複数のアドレスのうちの第1のアドレスに応じた
第1のデータを保存するステップを含んでよい。また本発明は更に、複数のアドレスのう
ちの第2のアドレスに応じた第2のデータをフェッチするステップも含んでよい。一実施
形態では、プロセッサは複数のアドレス生成器ユニットを含み、算術演算を実施するステ
ップは、複数のアドレス生成器ユニットのうちの少なくとも1つのアドレス生成器ユニッ
トを用いて上記算術演算を実施するステップを含む。更に一実施形態では、複数のフィー
ルドのサブセットの各フィールドは、複数のアドレス生成器ユニットそれぞれが実施する
演算を符号化してよい。
図29の方法は、複数のプロセッサと、例えばデータメモリルータ(DMR)であって
よい、複数の動的に構成可能な通信要素とを備えるシステムにおいて動作でき、複数のプ
ロセッサ及び複数の動的に構成可能な通信要素は、散在型の配置において連結されてよい
。複数のプロセッサのうちの所定のプロセッサは:1)マルチパート命令を受信し(ここ
でマルチパート命令は複数のフィールドを含み);2)複数のフィールドのうちの所定の
フィールドに応じた算術演算を実施し;3)複数のフィールドのサブセットに応じた複数
のアドレスを生成するよう構成されてよい。複数のプロセッサはそれぞれ、複数のアドレ
スのうちの第1のアドレスに応じた第1のデータを保存するよう、更に構成されてよい。
更に、複数のプロセッサのうちの所定のプロセッサは、複数のアドレスのうちの第2のア
ドレスに応じた第2のデータをフェッチするよう構成されてよい。
更に、複数のプロセッサのうちの所定のプロセッサは、複数のアドレス生成器ユニット
を含んでよく、また複数のフィールドのサブセットの各フィールドは、複数のアドレス生
成器ユニットそれぞれが実施する演算を符号化してよい。
図30
図30は、マルチパート命令の受信及び実行の第1の実施形態を示すフローチャートで
ある。
本方法は、フェッチユニット及び実行ユニットを備えるマルチプロセッサ装置において
動作し得る。フェッチユニットは、マルチパート命令を受信するよう構成されてよく、マ
ルチパート命令は複数のデータフィールドを含む。実行ユニットは複数のパイプラインユ
ニットを含んでよく:1)複数のフィールドのうちの第1のフィールドに応じた、複数の
パイプラインユニットのうちの所定のパイプラインユニットを用いて、第1の演算を実施
し;2)複数のフィールドのうちの第2のフィールドに応じた、複数のパイプラインユニ
ットのうちの少なくとも2つのパイプラインユニットを並列に用いて、第2の演算を実施
するよう、構成されてよい。複数のパイプラインユニットはそれぞれ、複数の乗算器ユニ
ット及び複数の加算器ユニットを含んでよい。複数のパイプラインユニットはそれぞれ、
部分積の第1の数を部分積の第2の数へと圧縮するよう構成された圧縮器ユニットも含ん
でよい。複数のパイプラインユニットのうちの第1のパイプラインユニットの圧縮器ユニ
ットは、複数のパイプラインユニットの第2のパイプラインユニットの圧縮器ユニットか
ら少なくとも1つの部分積を受信するよう構成されてよい。また、複数のフィールドのサ
ブセットの各フィールドは、複数のパイプラインユニットそれぞれが実施する演算を符号
化してよい。
マルチパート命令を受信及び実行するための方法は、以下のように動作できる。まず3
002において、プロセッサはマルチパート命令を受信してよく、このマルチパート命令
は複数のフィールドを含む。次に3004においてプロセッサは、複数のフィールドのう
ちの第1のフィールドに応じた、複数のパイプラインユニットのうちの所定のパイプライ
ンユニットを用いて、第1の演算を実施するステップを実施してよい。3006において
プロセッサは、複数のフィールドのうちの第2のフィールドに応じた、複数のパイプライ
ンユニットのうちの少なくとも2つのパイプラインユニットを並列に用いて、第2の演算
を実施してよい。
一実施形態では、複数のフィールドのサブセットの各フィールドは、複数のパイプライ
ンユニットそれぞれが実施する演算を符号化する。
第2の演算を実施するステップは、複数のパイプラインユニットのうちの少なくとも2
つのパイプラインユニットのうちの第1のパイプラインユニットによって第1の部分積の
セットを生成するステップと、複数のパイプラインユニットのうちの上記少なくとも2つ
のパイプラインユニットのうちの第2のパイプラインユニットによって第2の部分積のセ
ットを生成するステップとを含んでよい。
複数のパイプラインユニットのうちの少なくとも2つのパイプラインユニットのうちの
第1のパイプラインユニットによる、第1の部分積のセットの生成は、部分積の第1の数
を部分積の第2の数へと圧縮するステップを含んでよく、第2の数は第1の数未満である
。複数のパイプラインユニットはそれぞれ、複数の乗算器ユニット及び複数の加算器ユニ
ットを含んでよい。
図30の方法は、複数のプロセッサと、複数の動的に構成可能な通信要素、例えばDM
Rとを備えるシステムにおいて動作できる。複数のプロセッサはそれぞれ複数のパイプラ
インユニットを含んでよい。複数のプロセッサ及び複数の動的に構成可能な通信要素は、
散在型の配置において連結されてよい。複数のプロセッサはそれぞれ:1)マルチパート
命令を受信し(ここでマルチパート命令は複数のフィールドを含み);2)複数のフィー
ルドのうちの第1のフィールドに応じた、複数のパイプラインユニットのうちの所定のパ
イプラインユニットを用いて、第1の演算を実施し;3)複数のフィールドのうちの第2
のフィールドに応じた、複数のパイプラインユニットのうちの少なくとも2つのパイプラ
インユニットを並列に用いて、第2の演算を実施するよう構成されてよい。
各プロセッサの複数のパイプラインユニットはそれぞれ、複数の乗算器ユニット及び複
数の加算器ユニットを含んでよい。複数のプロセッサそれぞれの複数のパイプラインユニ
ットそれぞれは更に、部分積の第1の数を部分積の第2の数へと圧縮するよう構成された
圧縮器ユニットを含んでよい。各プロセッサの第1のパイプラインユニットの圧縮器ユニ
ットのうちの少なくとも1つは更に、各プロセッサの第2のパイプラインの別の圧縮器ユ
ニットから、少なくとも1つの部分積を受信するよう構成されてよい。
一実施形態では、複数のフィールドのサブセットの各フィールドは、複数のパイプライ
ンユニットそれぞれが実施する演算を符号化する。
図31
図31は、プロセッサによる演算の実施の一実施形態を示すフローチャートである。
本方法は、命令を受信するよう構成されたフェッチユニットと、複数のパイプラインユ
ニットを含む実行ユニットとを備えるマルチプロセッサ装置において動作し得る。各パイ
プラインユニットはアキュムレータユニットを含んでよい。実行ユニットは:1)複数の
パイプラインユニットのうちの第1のパイプラインユニットを用いて、受信した命令に応
じた第1の演算を実施して結果を生成し;2)複数のパイプラインユニットのうちの第1
のパイプラインユニットのアキュムレータユニットに上記結果を保存し;3)複数のパイ
プラインユニットのうちの第1のパイプラインユニットのアキュムレータユニットに保存
された結果を、プロセッサのアキュムレータユニットに伝送するよう、構成されてよい。
複数のパイプラインユニットはそれぞれ、複数の乗算器ユニット及び複数の加算器ユニッ
トを含んでよい。
一例として、第1の演算は乗算演算を含んでよく、第1のパイプラインユニットのアキ
ュムレータユニットに結果を保存するために、実行ユニットは更に、第1のパイプライン
ユニットに、乗算演算の少なくとも1つの部分積を保存するよう構成されてよい。
一実施形態では、命令は複数のフィールドを含んでよく、第1のパイプラインユニット
を用いて、受信した命令に応じた第1の演算を実施するために、実行ユニットは更に、第
1のパイプラインユニットを用いて、複数のフィールドのうちの第1のフィールドに応じ
た第1の演算を実施するよう構成されてよい。
実行ユニットは更に、複数のフィールドのうちの第2のフィールドに応じた、複数のパ
イプラインユニットのうちの少なくとも2つのパイプラインユニットを並列に用いて、第
2の演算を実施するよう構成されてよい。
演算を実施するための方法は、以下のように動作できる。
3102において、本方法は、複数のプロセッサのうちの第1のプロセッサを用いて第
1の演算を実施するステップを含んでよい。第1のプロセッサは、第1の複数のアキュム
レータを含んでよく、第1の演算を実施するステップは、第1の複数のアキュムレータの
うちの所定のアキュムレータに値を保存するステップを含んでよい。
3104において、本方法は、第1の複数のアキュムレータのうちの上記所定のアキュ
ムレータに保存された値を、複数のプロセッサのうちの第2のプロセッサが含む第2の複
数のアキュムレータのうちの所定のアキュムレータに伝送するステップを含んでよい。
3106において、本方法は、第2の複数のアキュムレータのうちの上記所定のアキュ
ムレータに保存された値に応じた、複数のプロセッサのうちの第2のプロセッサを用いて
、第2の演算を実施するステップを含んでよい。
一実施形態では、本方法は更に、第1のプロセッサによって第1のマルチパート命令を
受信するステップを含んでよく、第1のマルチパート命令は、第1の複数のフィールドを
含む。第1のプロセッサを用いて第1の演算を実施するステップは、第1の複数のフィー
ルドのうちの第1のフィールドに応じた、複数のプロセッサのうちの第1のプロセッサを
用いて、第1の演算を実施するステップを含んでよい。
本方法は更に、複数のプロセッサのうちの第2のプロセッサによって第2のマルチパー
ト命令を受信するステップを含んでよく、第2のマルチパート命令は、第2の複数のフィ
ールドを含む。
所定のアキュムレータに保存された値に応じた第2のプロセッサを用いて第2の演算を
実施するステップは、第2の複数のフィールドのうちの第1のフィールドに応じた第2の
プロセッサを用いて第2の演算を実施するステップを含んでよい。
図31の方法は、複数のプロセッサと、複数の動的に構成可能な通信要素、例えばDM
Rとを備えるシステムにおいて動作できる。複数のプロセッサはそれぞれ複数のアキュム
レータユニットを備えてよい。複数のプロセッサ及び複数の動的に構成可能な通信要素は
、散在型の配置において連結されてよい。第1のプロセッサは:1)第1の命令を受信し
;2)第1の命令に応じた第1の演算を実施して結果を生成し;3)第1のプロセッサの
複数のアキュムレータユニットのうちの所定のアキュムレータユニットに上記結果を保存
し;4)第1のプロセッサの複数のアキュムレータユニットのうちの上記所定のアキュム
レータユニットに保存された結果を、複数のプロセッサのうちの第2のプロセッサの複数
のアキュムレータユニットのうちの所定のアキュムレータユニットに伝送するよう、構成
されてよい。
複数のプロセッサのうちの第2のプロセッサは:1)第2の命令を受信し;2)第2の
命令と、複数のプロセッサのうちの第2のプロセッサの複数のアキュムレータユニットの
うちの上記所定のアキュムレータユニットに保存された値とに応じた第2の演算を実施す
るよう、構成されてよい。
第1の命令は第1のマルチパート命令を含んでよく、第1のマルチパート命令は第1の
複数のフィールドを含み、第2の命令は第2のマルチパート命令を含み、第2のマルチパ
ート命令は第2の複数のフィールドを含む。第1の命令に応じた第1の演算を実施するた
めに、第1のプロセッサは更に、第1の複数のフィールドのうちの第1のフィールドに応
じた第1の演算を実施するよう構成されてよい。第2の命令及び所定のアキュムレータユ
ニットに保存された値に応じた第2の演算を実施するために、第2のプロセッサは更に、
第2の複数のフィールドのうちの第1のフィールドに応じた第2の演算を実施するよう構
成されてよい。
図32
図32は、プロセッサによる演算の実施の一実施形態を示すフローチャートである。
本方法は、フェッチユニットと、複数のアドレス生成器ユニットと、複数のバッファと
を備えるマルチプロセッサ装置において動作し得る。フェッチユニットはマルチパート命
令を受信するよう構成されてよく、マルチパート命令は複数のフィールドを含む。複数の
アドレス生成器ユニットのうちの第1のアドレス生成器ユニットは、第1のフィールドに
応じた第1の演算を実施して、結果を生成してよい。更に、複数のアドレス生成器ユニッ
トのうちの第2のアドレス生成器ユニットは、複数のフィールドのうちの第2のフィール
ド及び上記第1の結果に応じた第2の演算を実施するよう構成されてよい。
一実施形態では、第1のバッファは、複数のフィールドのうちの少なくとも1つのフィ
ールドに応じた第1のストライド値を保存するよう構成され、第2のバッファは、複数の
フィールドのうちの少なくとも1つの別のフィールドに応じた第2のストライド値を保存
するよう構成される。
複数のフィールドのうちの第1のフィールドに応じた第1の演算を実施するために、第
1のアドレス生成器ユニットは更に、第1のストライド値に応じた第1の演算を実施する
よう構成されてよい。
演算を実施するための方法は、以下のように動作できる。本方法は、複数のアドレス生
成器ユニット及び複数のバッファを備えるプロセッサにおいて動作できる。
3202において、本方法はマルチパート命令を受信してよく、このマルチパート命令
は複数のフィールドを含む。3204において、本方法は、複数のフィールドのうちの第
1のフィールドに応じた第1のアドレス生成器ユニットを用いて、第1の演算を実施して
よい。3206において、本方法は、複数のフィールドのうちの第2のフィールドと、第
1の結果とに応じた第2のアドレス生成器ユニットを用いて、第2の演算を実施してよい
本方法は更に、複数のバッファのうちの第1のバッファに第1のストライド値を保存す
るステップ、及び複数のバッファのうちの第2のバッファに第2のストライド値を保存す
るステップを含んでよい。
第1のフィールドに応じた第1のアドレス生成ユニットを用いて第1の演算を実施する
ステップは、第1のストライド値に応じた第1の演算を実施するステップを含んでよい。
本方法は、複数のプロセッサと、複数の動的に構成可能な通信要素、例えばDMRとを
備えるシステムにおいて動作できる。複数のプロセッサ及び複数の動的に構成可能な通信
要素は、散在型の配置において連結されてよい。複数のプロセッサのうちの所定のプロセ
ッサは:1)マルチパート命令を受信し(ここでマルチパート命令は複数のフィールドを
含み);2)複数のフィールドのうちの第1のフィールドに応じた、複数の生成器のうち
の第1のアドレス生成器を用いて、第1の演算を実施して、第1の結果を生成し;3)複
数のフィールドのうちの第2のフィールドと上記第1の結果とに応じた、複数の生成器の
うちの第2のアドレス生成器を用いて、第2の演算を実施するよう構成されてよい。
一実施形態では、複数のプロセッサはそれぞれ複数のバッファを含む。所定のプロセッ
サは更に、上記所定のプロセッサの複数のバッファのうちの第1のバッファに各第1のス
トライド値を保存するよう構成されてよい。所定のプロセッサは更に、上記所定のプロセ
ッサの複数のバッファのうちの第2のバッファに各第2のストライド値を保存するよう構
成されてよい。
第1のフィールドに応じた第1のアドレス生成器を用いて第1の演算を実施するために
、所定のプロセッサは更に、各第1のストライド値に応じた第1の演算を実施するよう構
成されてよい。
図33
図33は、プロセッサを動作させる一実施形態を示すフローチャートである。
本方法は、フェッチユニットと、実行ユニットと、複数のアドレス生成器ユニットとを
備えるマルチプロセッサ装置において動作し得る。フェッチユニットは命令を受信するよ
う構成されてよい。実行ユニットは複数のパイプラインユニットを備えてよい。実行ユニ
ットは:1)命令がマルチパート命令であることの決定に応答して、複数のパイプライン
ユニットのうちの第1のパイプラインユニットを用いて第1の演算を実施し、マルチパー
ト命令は複数のフィールドを含み、第1の演算は、複数のフィールドのうちの第1のフィ
ールドに応じたものであり;2)複数のフィールドのうちの第2のフィールドに応じた、
複数のパイプラインユニットのうちの少なくとも2つのパイプラインユニットを並列に用
いて、第2の演算を実施するよう、構成されてよい。
実行ユニットは更に、命令が単一パート命令であることの決定に応答して、第1のパイ
プラインユニットを用いて第3の演算を実施するよう構成されてよい。命令が単一パート
命令であることの決定に応答して、複数のパイプラインユニットのうちの第1のパイプラ
インユニットを用いて第3の演算を実施するために、実行ユニットは更に、過去に受信し
たマルチパート命令に応じた、複数のパイプラインユニットのうちの第2のパイプライン
ユニットを用いて、第4の演算を実施するよう構成されてよい。第1のアドレス生成器は
、複数のフィールドのうちの第2のフィールドに応じた算術演算を実施するよう構成され
てよい。
プロセッサを動作させるための方法は、以下のように動作できる。本方法は、複数のパ
イプラインユニットを備えるプロセッサにおいて動作できる。
3302において、本方法は命令を受信してよい。
3304において、本方法は、命令がマルチパート命令であることの決定に応答して、
第1のパイプラインユニットを用いて第1の演算を実施してよい。マルチパート命令は複
数のフィールドを含んでよく、第1の演算は複数のフィールドのうちの第1のフィールド
に応じたものであってよい。
3306において、本方法は、複数のフィールドのうちの第2のフィールドに応じた、
複数のパイプラインユニットのうちの少なくとも2つのパイプラインユニットを並列に用
いて、第2の演算を実施してよい。
本方法は更に、命令が単一パート命令であることの決定に応答して、第1のパイプライ
ンユニットを用いて第3の演算を実施してよい。第1のパイプラインユニットを用いて第
3の演算を実施するステップは、過去に受信したマルチパート命令に応じた、複数のパイ
プラインユニットのうちの第2のパイプラインユニットを用いて、第4の演算を実施する
ステップを含んでよい。
本方法は更に、命令が単一パート命令であることの決定に応答して、第1のアドレスを
フェッチするステップを含んでよい。本方法はまた、複数のフィールドのサブセットに応
じた複数のアドレスを生成するステップも含んでよい。
本方法は、複数のプロセッサと、複数の動的に構成可能な通信要素、例えばDMRとを
備えるシステムにおいて動作できる。複数のプロセッサ及び複数の動的に構成可能な通信
要素は、散在型の配置において連結されてよい。複数のプロセッサはそれぞれ複数のパイ
プラインユニットを備えてよい。各プロセッサは:1)命令を受信し;2)命令がマルチ
パート命令であることの決定に応答して、複数のパイプラインユニットのうちの第1のパ
イプラインユニットを用いて第1の演算を実施し、ここでマルチパート命令は複数のフィ
ールドを含み、第1の演算は、複数のフィールドのうちの第1のフィールドに応じたもの
であり;3)複数のフィールドのうちの第2のフィールドに応じた、複数のパイプライン
ユニットのうちの少なくとも2つのパイプラインユニットを並列に用いて、第2の演算を
実施するよう構成されてよい。
各プロセッサは更に、命令が単一パート命令であることの決定に応答して、第1のパイ
プラインユニットを用いて第3の演算を実施するよう構成されてよい。命令が単一パート
命令であることの決定に応答して、第1のパイプラインユニットを用いて第3の演算を実
施するために、各プロセッサは更に、過去に受信したマルチパート命令に応じた第2のパ
イプラインユニットを用いて、第4の演算を実施するよう構成されてよい。
一実施形態では、各プロセッサは更に、複数のフィールドのサブセットに応じた複数の
アドレスを生成するよう構成される。各プロセッサは更に、複数のアドレスのうちの第1
のアドレスに応じた第1のデータを保存するよう構成されてよい。
図34
図34は、複数のパイプラインユニットを有するプロセッサを動作させる第1の実施形
態を示すフローチャートである。
本方法は、フェッチユニット及び実行ユニットを備える装置において動作し得る。フェ
ッチユニットは複数の命令を受信するよう、及び受信した複数の命令に応じた少なくとも
1つの反復命令シーケンスを識別するよう、構成されてよい。少なくとも1つの反復命令
シーケンスは、複数の命令のうちの少なくとも1つの命令を含んでよい。実行ユニットは
複数のパイプラインユニットを含んでよく、識別された反復命令シーケンスに応じた少な
くとも第1のサイクルに関して、複数のパイプラインユニットの第1のサブセットを選択
的に無効化するよう構成されてよい。実行ユニットは更に、識別された反復命令シーケン
スに応じた第2のサイクルに関して、複数のパイプラインユニットの第2のサブセットを
選択的に無効化するよう構成されてよい。例えば上記無効化は、複数のパイプラインユニ
ットのサブセットを低電力モードとするステップを含んでよい。装置は更に、複数のアド
レス生成器ユニット、フェッチユニット、保存ユニットを備えてよい。保存ユニットは、
上記少なくとも1つの反復命令シーケンスに応じた低電力モードに入るよう構成されてよ
い。フェッチユニットは、上記少なくとも1つの反復命令シーケンスに応じた低電力モー
ドに入るよう構成されてよい。複数のアドレス生成器ユニットのうちの少なくとも1つは
、上記少なくとも1つの反復命令シーケンスに応じた低電力モードに入るよう構成されて
よい。
プロセッサを動作させるための方法は、以下のように動作できる。
まず3402において、プロセッサは複数の命令を受信してよい。次に3404におい
てプロセッサは、受信した複数の命令に応じた少なくとも1つの反復命令シーケンスを識
別してよく、上記少なくとも1つの反復命令シーケンスは少なくとも1つの命令を含む。
3406においてプロセッサは、識別された反復命令シーケンスに応じた少なくとも第1
のサイクルに関して、複数のパイプラインユニットの第1のサブセットを選択的に無効化
してよい。3408においてプロセッサは、識別された反復命令シーケンスに応じた第2
のサイクルに関して、複数のパイプラインユニットの第2のサブセットを選択的に無効化
してよい。
3410において、プロセッサは、上記少なくとも1つの反復命令シーケンスに応じた
保存ユニットを無効化してよい。あるいは、又はこれに加えて、3412においてプロセ
ッサは、上記少なくとも1つの反復命令シーケンスに応じたフェッチユニットを無効化し
てよい。あるいは、又はこれに加えて、3414においてプロセッサは、上記少なくとも
1つの反復命令シーケンスに応じた、複数のアドレス生成器ユニットのサブセットを、選
択的に無効化してよい。
図34の方法は、複数のプロセッサと、複数の動的に構成可能な通信要素とを備えるシ
ステムにおいて動作でき、複数のプロセッサ及び複数の動的に構成可能な通信要素は、散
在型の配置において連結されてよく、複数のプロセッサはそれぞれ複数のパイプラインユ
ニットを含んでよく、また:1)複数の命令を受信し;2)受信した複数の命令に応じた
少なくとも1つの反復命令シーケンスを識別し、ここで上記少なくとも1つの反復命令シ
ーケンスは、上記複数の命令のうちの少なくとも1つの命令を含み;3)識別された反復
命令シーケンスに応じた少なくとも第1のサイクルに関して、複数のパイプラインユニッ
トの第1のサブセットを選択的に無効化し;4)識別された反復命令シーケンスに応じた
第2のサイクルに関して、複数のパイプラインユニットの第2のサブセットを選択的に無
効化するよう構成されてよい。追加の実施形態では、複数のプロセッサはそれぞれ、複数
のアドレス生成器ユニット、フェッチユニット、保存ユニットを含んでよい。保存ユニッ
トと、フェッチユニットと、複数のアドレス生成器ユニットのうちの少なくとも1つとの
うちの1つ又は複数は、少なくとも1つの反復命令シーケンスに応じた低電力モードに入
るよう構成されてよい。
以下の番号付き段落は、追加の実施形態を記載する。
多数のデータ経路の制御
1.マルチパート命令を受信するよう構成されたフェッチユニットであって、上記マル
チパート命令は複数のデータフィールドを含む、フェッチユニットと;複数のパイプライ
ンユニットを含む実行ユニットであって、上記実行ユニットは:複数のフィールドのうち
の第1のフィールドに応じた、複数のパイプラインユニットのうちの所定のパイプライン
ユニットを用いて、第1の演算を実施し;複数のフィールドのうちの第2のフィールドに
応じた、複数のパイプラインユニットのうちの少なくとも2つのパイプラインユニットを
並列に用いて、第2の演算を実施するよう構成される、実行ユニットとを備える、装置。
2.複数のパイプラインユニットはそれぞれ、複数の乗算器ユニット及び複数の加算器
ユニットを含む、実施形態1の装置。
3.複数のパイプラインユニットはそれぞれ、部分積の第1の数を部分積の第2の数へ
と圧縮するよう構成された圧縮器ユニットを含む、実施形態1の装置。
4.複数のパイプラインユニットのうちの第1のパイプラインユニットの圧縮器ユニッ
トは、複数のパイプラインユニットの第2のパイプラインユニットの圧縮器ユニットから
少なくとも1つの部分積を受信するよう構成される、実施形態4の装置。
5.複数のフィールドのサブセットの各フィールドは、複数のパイプラインユニットそ
れぞれが実施する演算を符号化する、実施形態1の装置。
6.プロセッサを動作させるための方法であって、このプロセッサは複数のパイプライ
ンユニットを含み、本方法は:マルチパート命令を受信するステップであって、このマル
チパート命令は複数のフィールドを含む、ステップ;複数のフィールドのうちの第1のフ
ィールドに応じた、複数のパイプラインユニットのうちの所定のパイプラインユニットを
用いて、第1の演算を実施するステップ;複数のフィールドのうちの第2のフィールドに
応じた、複数のパイプラインユニットのうちの少なくとも2つのパイプラインユニットを
並列に用いて、第2の演算を実施するステップを含む、方法。
7.複数のフィールドのサブセットの各フィールドは、複数のパイプラインユニットそ
れぞれが実施する演算を符号化する、実施形態6の方法。
8.第2の演算を実施するステップは、複数のパイプラインユニットのうちの少なくと
も2つのパイプラインユニットのうちの第1のパイプラインユニットによって第1の部分
積のセットを生成するステップと、複数のパイプラインユニットのうちの上記少なくとも
2つのパイプラインユニットのうちの第2のパイプラインユニットによって第2の部分積
のセットを生成するステップとを含む、実施形態6の方法。
9.複数のパイプラインユニットのうちの少なくとも2つのパイプラインユニットのう
ちの第1のパイプラインユニットによって、第1の部分積のセットを生成するステップは
、部分積の第1の数を部分積の第2の数へと圧縮するステップを含み、第2の数は第1の
数未満である、実施形態8の方法。
10.複数のパイプラインユニットはそれぞれ、複数の乗算器ユニット及び複数の加算
器ユニットを含む、実施形態6の方法。
11.複数のプロセッサであって、この複数のプロセッサはそれぞれ複数のパイプライ
ンユニットを含む、複数のプロセッサと;複数の動的に構成可能な通信要素とを備える、
システムであって、複数のプロセッサ及び複数の動的に構成可能な通信要素は散在型の配
置において連結され、複数のプロセッサはそれぞれ:マルチパート命令を受信し(ここで
マルチパート命令は複数のフィールドを含み);複数のフィールドのうちの第1のフィー
ルドに応じた、複数のパイプラインユニットのうちの所定のパイプラインユニットを用い
て、第1の演算を実施し;複数のフィールドのうちの第2のフィールドに応じた、複数の
パイプラインユニットのうちの少なくとも2つのパイプラインユニットを用いて、第2の
演算を実施するよう構成される、システム。
12.各プロセッサの複数のパイプラインユニットはそれぞれ、複数の乗算器ユニット
及び複数の加算器ユニットを含む、実施形態11のシステム。
13.複数のプロセッサそれぞれの複数のパイプラインユニットはそれぞれ、部分積の
第1の数を部分積の第2の数へと圧縮するよう構成された圧縮器ユニットを含む、実施形
態11のシステム。
14.複数のプロセッサのうちの所定のプロセッサの複数のパイプラインユニットのう
ちの第1のパイプラインユニットの圧縮器ユニットは更に、複数のプロセッサのうちの所
定のプロセッサの複数のパイプラインユニットのうちの第2のパイプラインユニットの別
の圧縮器ユニットから、少なくとも1つの部分積を受信するよう構成される、実施形態1
3のシステム。
15.複数のフィールドのサブセットの各フィールドは、複数のパイプラインユニット
それぞれが実施する演算を符号化する、実施形態11のシステム。
累算の転送
1.命令を受信するよう構成されたフェッチユニットと;複数のパイプラインユニット
を含む実行ユニットとを備える、装置であって、上記複数のパイプラインユニットはそれ
ぞれアキュムレータユニットを含み、実行ユニットは:複数のパイプラインユニットのう
ちの第1のパイプラインユニットを用いて、受信した命令に応じた第1の演算を実施して
結果を生成し;複数のパイプラインユニットのうちの第1のパイプラインユニットのアキ
ュムレータユニットに上記結果を保存し;複数のパイプラインユニットのうちの第1のパ
イプラインユニットのアキュムレータユニットに保存された結果を、プロセッサのアキュ
ムレータユニットに伝送するよう、構成される、装置。
2.複数のパイプラインユニットはそれぞれ、複数の乗算器ユニット及び複数の加算器
ユニットを含む、実施形態1の装置。
3.第1の演算は乗算演算を含み、複数のパイプラインユニットの第1のパイプライン
ユニットのアキュムレータユニットに結果を保存するために、実行ユニットは更に、複数
のパイプラインユニットのうちの第1のパイプラインユニットに、乗算演算の少なくとも
1つの部分積を保存するよう構成される、実施形態1の装置。
4.命令は複数のフィールドを含み、複数のパイプラインユニットのうちの第1のパイ
プラインユニットを用いて、受信した命令に応じた第1の演算を実施するために、実行ユ
ニットは更に、複数のパイプラインユニットのうちの第1のパイプラインユニットを用い
て、複数のフィールドのうちの第1のフィールドに応じた第1の演算を実施するよう構成
される、実施形態1の装置。
5.実行ユニットは更に、複数のフィールドのうちの第2のフィールドに応じた、複数
のパイプラインユニットのうちの少なくとも2つのパイプラインユニットを並列に用いて
、第2の演算を実施するよう構成される、実施形態5の装置。
6.複数のプロセッサを動作させるための方法であって、本方法は:複数のプロセッサ
のうちの第1のプロセッサを用いて第1の演算を実施するステップであって、第1のプロ
セッサは第1の複数のアキュムレータを含み、第1の演算を実施するステップは、第1の
複数のアキュムレータのうちの所定のアキュムレータに値を保存するステップを含む、ス
テップ;第1の複数のアキュムレータのうちの上記所定のアキュムレータに保存された値
を、複数のプロセッサのうちの第2のプロセッサが含む第2の複数のアキュムレータのう
ちの所定のアキュムレータに伝送するステップ;第2の複数のアキュムレータのうちの上
記所定のアキュムレータに保存された値に応じた、複数のプロセッサのうちの第2のプロ
セッサを用いて、第2の演算を実施するステップを含む、方法。
7.第1のプロセッサによって第1のマルチパート命令を受信するステップを更に含み
、第1のマルチパート命令は、第1の複数のフィールドを含む、実施形態6の方法。
8.第1のプロセッサを用いて第1の演算を実施するステップは、第1の複数のフィー
ルドのうちの第1のフィールドに応じた、複数のプロセッサのうちの第1のプロセッサを
用いて、第1の演算を実施するステップを含む、実施形態7の方法。
9.複数のプロセッサのうちの第2のプロセッサによって第2のマルチパート命令を受
信するステップを含み、第2のマルチパート命令は、第2の複数のフィールドを含む、実
施形態8の方法。
10.第2の複数のアキュムレータのうちの所定のアキュムレータに保存された値に応
じた第2のプロセッサを用いて第2の演算を実施するステップは、第2の複数のフィール
ドのうちの第1のフィールドに応じた、複数のプロセッサのうちの第2のプロセッサを用
いて第2の演算を実施するステップを含む、実施形態9の方法。
11.複数のプロセッサであって、これら複数のプロセッサはそれぞれ複数のアキュム
レータユニットを含む、複数のプロセッサと;複数の動的に構成可能な通信要素とを備え
る、システムであって、複数のプロセッサ及び複数の動的に構成可能な通信要素は、散在
型の配置において連結され、複数のプロセッサのうちの第1のプロセッサは:第1の命令
を受信し;第1の命令に応じた第1の演算を実施して結果を生成し;第1のプロセッサの
複数のアキュムレータユニットのうちの所定のアキュムレータユニットに上記結果を保存
し;第1のプロセッサの複数のアキュムレータユニットのうちの上記所定のアキュムレー
タユニットに保存された結果を、複数のプロセッサのうちの第2のプロセッサの複数のア
キュムレータユニットのうちの所定のアキュムレータユニットに伝送するよう構成される
、システム。
12.複数のプロセッサのうちの第2のプロセッサは:第2の命令を受信し;第2の命
令と、複数のプロセッサのうちの第2のプロセッサの複数のアキュムレータユニットのう
ちの上記所定のアキュムレータユニットに保存された値とに応じた第2の演算を実施する
よう、構成される、実施形態11のシステム。
13.第1の命令は第1のマルチパート命令を含み、第1のマルチパート命令は第1の
複数のフィールドを含み、第2の命令は第2のマルチパート命令を含み、第2のマルチパ
ート命令は第2の複数のフィールドを含む、実施形態12のシステム。
14.第1の命令に応じた第1の演算を実施するために、複数のプロセッサのうちの第
1のプロセッサは更に、第1の複数のフィールドのうちの第1のフィールドに応じた第1
の演算を実施するよう構成される、実施形態13のシステム。
15.第2の命令及び所定のアキュムレータユニットに保存された値に応じた第2の演
算を実施するために、複数のプロセッサのうちの第2のプロセッサは更に、第2の複数の
フィールドのうちの第1のフィールドに応じた第2の演算を実施するよう構成される、実
施形態13のシステム。
AGUカップリング(循環アドレス指定)
1.マルチパート命令を受信するよう構成されたフェッチユニット(ここでマルチパー
ト命令は複数のフィールドを含む)と;複数のアドレス生成器ユニットとを備える、装置
であって、複数のアドレス生成器ユニットのうちの第1のアドレス生成器ユニットは、複
数のフィールドのうちの第1のフィールドに応じた第1の演算を実施して、第1の結果を
生成し、更に、複数のアドレス生成器ユニットのうちの第2のアドレス生成器ユニットは
、複数のフィールドのうちの第2のフィールド及び上記第1の結果に応じた第2の演算を
実施する、装置。
2.複数のバッファを更に備える、実施形態1の装置。
3.複数のバッファのうちの第1のバッファは、複数のフィールドのうちの少なくとも
1つのフィールドに応じた第1のストライド値を保存するよう構成される、実施形態2の
装置。
4.複数のバッファのうちの第2のバッファは、複数のフィールドのうちの少なくとも
1つの別のフィールドに応じた第2のストライド値を保存するよう構成される、実施形態
3の装置。
5.複数のフィールドのうちの第1のフィールドに応じた第1の演算を実施するために
、複数のアドレス生成器ユニットのうちの第1のアドレス生成器ユニットは更に、第1の
ストライド値に応じた第1の演算を実施するよう構成される、実施形態3の装置。
6.プロセッサを動作させるための方法であって、上記プロセッサは、複数のアドレス
生成器ユニットを含み、本方法は:マルチパート命令を受信するステップであって、この
マルチパート命令は複数のフィールドを含む、ステップ;複数のフィールドのうちの第1
のフィールドに応じた、複数のアドレス生成器ユニットのうちの第1のアドレス生成器ユ
ニットを用いて、第1の演算を実施するステップ;複数のフィールドのうちの第2のフィ
ールドと、第1の結果とに応じた、複数のアドレス生成器ユニットのうちの第2のアドレ
ス生成器ユニットを用いて、第2の演算を実施するステップを含む、方法。
7.プロセッサは更に、複数のバッファを含む、実施形態6の方法。
8.複数のバッファのうちの第1のバッファに第1のストライド値を保存するステップ
を更に含む、実施形態7の方法。
9.複数のバッファのうちの第2のバッファに第2のストライド値を保存するステップ
を更に含む、実施形態8の方法。
10.複数のフィールドのうちの第1のフィールドに応じた、複数のアドレス生成器ユ
ニットのうちの第1のアドレス生成器ユニットを用いて第1の演算を実施するステップは
、第1のストライド値に応じた第1の演算を実施するステップを含む、実施形態7の方法
11.複数のプロセッサと;複数の動的に構成可能な通信要素とを備える、システムで
あって、複数のプロセッサ及び複数の動的に構成可能な通信要素は、散在型の配置におい
て連結され、複数のプロセッサのうちの所定のプロセッサは:マルチパート命令を受信し
、ここでマルチパート命令は複数のフィールドを含み;複数のフィールドのうちの第1の
フィールドに応じた、複数の生成器のうちの第1のアドレス生成器を用いて、第1の演算
を実施して、第1の結果を生成し;複数のフィールドのうちの第2のフィールドと上記第
1の結果とに応じた、複数の生成器のうちの第2のアドレス生成器を用いて、第2の演算
を実施するよう構成される、システム。
12.複数のプロセッサはそれぞれ複数のバッファを含む、実施形態11のシステム。
13.複数のプロセッサのうちの所定のプロセッサは更に、上記所定のプロセッサの複
数のバッファのうちの第1のバッファに各第1のストライド値を保存するよう構成される
、実施形態12のシステム。
14.複数のプロセッサのうちの所定のプロセッサは更に、上記所定のプロセッサの複
数のバッファのうちの第2のバッファに各第2のストライド値を保存するよう構成される
、実施形態13のシステム。
15.複数のフィールドのうちの第1のフィールドに応じた、複数の生成器のうちの第
1のアドレス生成器を用いて第1の演算を実施するために、複数のプロセッサのうちの所
定のプロセッサは更に、各第1のストライド値に応じた第1の演算を実施するよう構成さ
れる、実施形態13のシステム。
単一パート/マルチパートの決定を有する命令の受信
1.命令を受信するよう構成されたフェッチユニットと;複数のパイプラインユニット
を含む実行ユニットとを備える、装置であって、実行ユニットは:命令がマルチパート命
令であることの決定に応答して、複数のパイプラインユニットのうちの第1のパイプライ
ンユニットを用いて第1の演算を実施し、マルチパート命令は複数のフィールドを含み、
第1の演算は、複数のフィールドのうちの第1のフィールドに応じたものであり;複数の
フィールドのうちの第2のフィールドに応じた、複数のパイプラインユニットのうちの少
なくとも2つのパイプラインユニットを並列に用いて、第2の演算を実施するよう、構成
される、装置。
2.実行ユニットは更に、命令が単一パート命令であることの決定に応答して、複数の
パイプラインユニットのうちの第1のパイプラインユニットを用いて第3の演算を実施す
るよう構成される、実施形態1の装置。
3.命令が単一パート命令であることの決定に応答して、複数のパイプラインユニット
のうちの第1のパイプラインユニットを用いて第3の演算を実施するために、実行ユニッ
トは更に、過去に受信したマルチパート命令に応じた、複数のパイプラインユニットのう
ちの第2のパイプラインユニットを用いて、第4の演算を実施するよう構成される、実施
形態2の装置。
4.複数のアドレス生成器ユニットを更に備える、実施形態1の装置。
5.複数のアドレス生成器のうちの第1のアドレス生成器は、複数のフィールドのうち
の第2のフィールドに応じた算術演算を実施するよう構成される、実施形態4の装置。
6.プロセッサを動作させるための方法であって、プロセッサは複数のパイプラインユ
ニットを含み、本方法は;命令を受信するステップ;命令がマルチパート命令であること
の決定に応答して、複数のパイプラインユニットのうちの第1のパイプラインユニットを
用いて第1の演算を実施するステップであって、ここでマルチパート命令は複数のフィー
ルドを含み、第1の演算は複数のフィールドのうちの第1のフィールドに応じたものであ
る、ステップ;複数のフィールドのうちの第2のフィールドに応じた、複数のパイプライ
ンユニットのうちの少なくとも2つのパイプラインユニットを並列に用いて、第2の演算
を実施するステップを含む、方法。
7.命令が単一パート命令であることの決定に応答して、複数のパイプラインユニット
のうちの第1のパイプラインユニットを用いて第3の演算を実施するステップを更に含む
、実施形態6の方法。
8.複数のパイプラインユニットのうちの第1のパイプラインユニットを用いて第3の
演算を実施するステップは、過去に受信したマルチパート命令に応じた、複数のパイプラ
インユニットのうちの第2のパイプラインユニットを用いて、第4の演算を実施するステ
ップを含む、実施形態6の方法。
9.命令が単一パート命令であることの決定に応答して、第1のアドレスをフェッチす
るステップを更に含む、実施形態6の方法。
10.複数のフィールドのサブセットに応じた複数のアドレスを生成するステップを更
に含む、実施形態6の方法。
11.複数のプロセッサであって、複数のプロセッサはそれぞれ複数のパイプラインユ
ニットを含む、複数のプロセッサと;複数の動的に構成可能な通信要素とを備える、シス
テムであって、複数のプロセッサ及び複数の動的に構成可能な通信要素は、散在型の配置
において連結され、複数のプロセッサはそれぞれ:命令を受信し;命令がマルチパート命
令であることの決定に応答して、複数のパイプラインユニットのうちの第1のパイプライ
ンユニットを用いて第1の演算を実施し、ここでマルチパート命令は複数のフィールドを
含み、第1の演算は、複数のフィールドのうちの第1のフィールドに応じたものであり;
複数のフィールドのうちの第2のフィールドに応じた、複数のパイプラインユニットのう
ちの少なくとも2つのパイプラインユニットを並列に用いて、第2の演算を実施するよう
、構成される、システム。
12.複数のプロセッサはそれぞれ、命令が単一パート命令であることの決定に応答し
て、複数のパイプラインユニットのうちの第1のパイプラインユニットを用いて第3の演
算を実施するよう、更に構成される、実施形態11のシステム。
13.命令が単一パート命令であることの決定に応答して、複数のパイプラインユニッ
トのうちの第1のパイプラインユニットを用いて第3の演算を実施するために、複数のプ
ロセッサはそれぞれ、過去に受信したマルチパート命令に応じた、複数のパイプラインユ
ニットのうちの第2のパイプラインユニットを用いて、第4の演算を実施するよう、更に
構成される、実施形態12のシステム。
14.複数のプロセッサはそれぞれ、複数のフィールドのサブセットに応じた複数のア
ドレスを生成するよう、更に構成される、実施形態11のシステム。
15.複数のプロセッサはそれぞれ、複数のアドレスのうちの第1のアドレスに応じた
第1のデータを保存するよう、更に構成される、実施形態11のシステム。
反復ループ中のプロセッサの非使用部分の電力ダウン
1.複数の命令を受信するよう、及び受信した複数の命令に応じた少なくとも1つの反
復命令シーケンスを識別するよう、構成された、フェッチユニットであって、少なくとも
1つの反復命令シーケンスは、複数の命令のうちの少なくとも1つの命令を含む、フェッ
チユニットと;複数のパイプラインユニットを含む実行ユニットとを備える、装置であっ
て、上記実行ユニットは:識別された反復命令シーケンスに応じた少なくとも第1のサイ
クルに関して、複数のパイプラインユニットの第1のサブセットを選択的に無効化し;識
別された反復命令シーケンスに応じた第2のサイクルに関して、複数のパイプラインユニ
ットの第2のサブセットを選択的に無効化するよう、構成される、装置。
2.複数のアドレス生成器ユニット、フェッチユニット、保存ユニットを更に備える、
実施形態1の装置。
3.保存ユニットは、上記少なくとも1つの反復命令シーケンスに応じた低電力モード
に入るよう構成される、実施形態2の装置。
4.フェッチユニットは、上記少なくとも1つの反復命令シーケンスに応じた低電力モ
ードに入るよう構成される、実施形態2の装置。
5.複数のアドレス生成器ユニットのうちの少なくとも1つは、上記少なくとも1つの
反復命令シーケンスに応じた低電力モードに入るよう構成される、実施形態2の装置。
6.プロセッサを動作させるための方法であって、プロセッサは複数のパイプラインユ
ニットを含み、本方法は:複数の命令を受信するステップ;受信した複数の命令に応じた
少なくとも1つの反復命令シーケンスを識別するステップであって、上記少なくとも1つ
の反復命令シーケンスは少なくとも1つの命令を含む、ステップ;識別された反復命令シ
ーケンスに応じた少なくとも第1のサイクルに関して、複数のパイプラインユニットの第
1のサブセットを選択的に無効化するステップ;識別された反復命令シーケンスに応じた
第2のサイクルに関して、複数のパイプラインユニットの第2のサブセットを選択的に無
効化するステップを含む、方法。
7.プロセッサは、フェッチユニット、保存ユニット、複数のアドレス生成器ユニット
を更に含む、実施形態6の方法。
8.上記少なくとも1つの反復命令シーケンスに応じた保存ユニットを無効化するステ
ップを更に含む、実施形態7の方法。
9.上記少なくとも1つの反復命令シーケンスに応じたフェッチユニットを無効化ステ
ップを更に含む、実施形態7の方法。
10.上記少なくとも1つの反復命令シーケンスに応じた、複数のアドレス生成器ユニ
ットのサブセットを、選択的に無効化するステップを更に含む、実施形態7の方法。
11.複数のプロセッサであって、複数のプロセッサはそれぞれ複数のパイプラインユ
ニットを含む、複数のプロセッサと;複数の動的に構成可能な通信要素とを備える、シス
テムであって、複数のプロセッサ及び複数の動的に構成可能な通信要素は、散在型の配置
において連結され、複数のプロセッサはそれぞれ:複数の命令を受信し;受信した複数の
命令に応じた少なくとも1つの反復命令シーケンスを識別し、ここで上記少なくとも1つ
の反復命令シーケンスは、上記複数の命令のうちの少なくとも1つの命令を含み;識別さ
れた反復命令シーケンスに応じた少なくとも第1のサイクルに関して、複数のパイプライ
ンユニットの第1のサブセットを選択的に無効化し;識別された反復命令シーケンスに応
じた第2のサイクルに関して、複数のパイプラインユニットの第2のサブセットを選択的
に無効化するよう構成される、システム。
12.複数のプロセッサはそれぞれ、複数のアドレス生成器ユニット、フェッチユニッ
ト、保存ユニットを含む、実施形態11のシステム。
13.保存ユニットは、少なくとも1つの反復命令シーケンスに応じた低電力モードに
入るよう構成される、実施形態12のシステム。
14.フェッチユニットは、少なくとも1つの反復命令シーケンスに応じた低電力モー
ドに入るよう構成される、実施形態12のシステム。
15.複数のアドレス生成器ユニットのうちの少なくとも1つは、少なくとも1つの反
復命令シーケンスに応じた低電力モードに入るよう構成される、実施形態12のシステム
様々な実施形態において、コンピュータ可読メモリ媒体は、ソフトウェアアプリケーシ
ョンのスワップに関わる機能等の上述の様々な機能を実装するためにMPSのプロセッサ
及び/又は1つ若しくは複数の外部プロセッサによって実行可能なプログラム命令を記憶
してよい。一般に、コンピュータ可読メモリ媒体は、実行した場合に本出願に記載の機能
の一部分又は全てを実装する、命令のいずれのセットを含んでよい。一般にコンピュータ
可読メモリ媒体は、コンピュータシステムに命令及び/又はデータを提供するために使用
中にコンピュータがアクセスできる、いずれのストレージ媒体を含んでよい。例えばコン
ピュータ可読メモリ媒体は、磁気又は光媒体、例えばディスク(固定若しくは消去可能)
、テープ、CD‐ROM、DVD‐ROM、CD‐R、CD‐RW、DVD‐R、DVD
‐RW又はBlu‐ray(登録商標)といったストレージ媒体を含んでよい。ストレー
ジ媒体は更に、ユニバーサルシリアルバス(USB)インタフェース、フラッシュメモリ
インターフェイス(FMI)、シリアルペリフェラルインタフェース(SPI)等の周辺
インタフェースを介してアクセス可能な、RAM(例えば同期ダイナミックRAM(SD
RAM)、ラムバスDRAM(RDRAM)、スタティックRAM(SRAM)等)、R
OM、フラッシュメモリ、不揮発性メモリ(例えばフラッシュメモリ)等の揮発性又は不
揮発性メモリ媒体を含んでよい。ストレージ媒体は、微小電気機械システム(MEMS)
、並びにネットワーク及び/又は無線リンク等の通信媒体を介してアクセス可能なストレ
ージ媒体を含んでよい。キャリア媒体は、コンピュータがアクセス可能なストレージ媒体
、及び有線又は無線伝送等の伝送媒体を含んでよい。
好ましい実施形態との関連で以上の実施形態について説明したが、本明細書に記載した
具体的形態に上記好ましい実施形態を限定することは意図されておらず、反対に、添付の
請求項によって定義されるような本発明の精神及び範囲内に合理的に含まれ得るような代
替例、修正例、均等物を上記好ましい実施形態が包含することが意図されている。

Claims (8)

  1. 複数のパイプラインを含む1つまたは複数の実行ユニット、
    命令ストリームからマルチパート命令をフェッチするように構成されるフェッチユニットであって、前記マルチパート命令は、複数のフィールドを含む、フェッチユニット、
    複数のアドレス生成ユニット、
    を備えた装置であって、
    前記複数のアドレス生成ユニットのうちの第1のアドレス生成ユニットは、
    前記マルチパート命令の第1のフィールドに基づいて、そこから、実行ユニットによる使用のために、第1のレジスタに記憶される第1のデータを取り出すためのメモリアドレスを生成するように構成され、
    前記複数のアドレス生成ユニットのうちの第2のアドレス生成ユニットは、
    前記マルチパート命令の第2のフィールドに基づいて、そこから、実行ユニットによる使用のために、第2のレジスタに記憶される第2のデータを取り出すためのメモリアドレスを生成するように構成され、
    前記1つまたは複数の実行ユニットは、
    前記複数のフィールドの第3のフィールドに基づいて、前記複数のパイプラインのうちの第1のパイプラインを用いて、前記第1のレジスタからの前記第1のデータを演算する、第1の演算を実施し、
    前記複数のフィールドの第4のフィールドに基づいて、前記複数のパイプラインのうちの少なくとも2つのパイプラインを並列に用いて、前記第2のレジスタからの前記第2のデータを演算する、第2の演算を実施する
    ように構成される
    装置。
  2. 前記第1および第2のアドレス生成ユニットは、独立に制御される
    請求項1に記載の装置。
  3. 前記第1および第2の演算は、異なる実行スレッドのためのものである、
    請求項1に記載の装置。
  4. 前記実行ユニットは、
    レジスタに格納するために、結果オペランドを転送するように構成される、請求項1に記載の装置。
  5. 前記第1のアドレス生成ユニットは、
    前記実行ユニットによって生成される結果オペランドを格納するアドレスを生成するように構成される、請求項1に記載の装置。
  6. プロセッサのフェッチユニットによって、
    命令ストリームからマルチパート命令をフェッチするステップであって、前記マルチパート命令は、複数のフィールドを含む、ステップと、
    前記プロセッサの第1のアドレス生成ユニットによって、
    前記マルチパート命令の第1のフィールドに基づいて、そこから、実行ユニットによる使用のために、第1のレジスタに記憶される第1のデータを取り出すためのメモリアドレスを生成するステップと、
    プロセッサの第2のアドレス生成ユニットによって、
    前記マルチパート命令の第2のフィールドに基づいて、そこから、実行ユニットによる使用のために、第2のレジスタに記憶される第2のデータを取り出すためのメモリアドレスを生成するステップと
    前記複数のフィールドの第3のフィールドに基づいて、前記複数のパイプラインのうちの第1のパイプラインを用いて、前記第1のレジスタからの前記第1のデータを演算する、第1の演算を実施するステップ、
    前記複数のフィールドの第4のフィールドに基づいて、前記複数のパイプラインのうちの少なくとも2つのパイプラインを並列に用いて、前記第2のレジスタからの前記第2のデータを演算する、第2の演算を実施するステップ
    を含む方法。
  7. 前記実行ユニットによって、複数のデータパスレジスタのうちの1つに格納するための結果オペランドを転送すること、
    をさらに含む請求項6に記載の方法。
  8. 前記プロセッサの2つ以上の実行ユニットによって、マルチパート命令の異なるフィールドに基づいて、第1および第2のそれぞれの数学演算を独立して実行すること
    をさらに含む請求項6に記載の方法。
JP2021139076A 2013-05-24 2021-08-27 プログラム可能な最適化を有するメモリネットワークプロセッサ Active JP7264955B2 (ja)

Applications Claiming Priority (3)

Application Number Priority Date Filing Date Title
US201361827117P 2013-05-24 2013-05-24
US61/827,117 2013-05-24
JP2019100154A JP7210078B2 (ja) 2013-05-24 2019-05-29 プログラム可能な最適化を有するメモリネットワークプロセッサ

Related Parent Applications (1)

Application Number Title Priority Date Filing Date
JP2019100154A Division JP7210078B2 (ja) 2013-05-24 2019-05-29 プログラム可能な最適化を有するメモリネットワークプロセッサ

Publications (2)

Publication Number Publication Date
JP2021192257A true JP2021192257A (ja) 2021-12-16
JP7264955B2 JP7264955B2 (ja) 2023-04-25

Family

ID=51298926

Family Applications (3)

Application Number Title Priority Date Filing Date
JP2016515113A Pending JP2016526220A (ja) 2013-05-24 2014-05-23 プログラム可能な最適化を有するメモリネットワークプロセッサ
JP2019100154A Active JP7210078B2 (ja) 2013-05-24 2019-05-29 プログラム可能な最適化を有するメモリネットワークプロセッサ
JP2021139076A Active JP7264955B2 (ja) 2013-05-24 2021-08-27 プログラム可能な最適化を有するメモリネットワークプロセッサ

Family Applications Before (2)

Application Number Title Priority Date Filing Date
JP2016515113A Pending JP2016526220A (ja) 2013-05-24 2014-05-23 プログラム可能な最適化を有するメモリネットワークプロセッサ
JP2019100154A Active JP7210078B2 (ja) 2013-05-24 2019-05-29 プログラム可能な最適化を有するメモリネットワークプロセッサ

Country Status (5)

Country Link
US (5) US9430369B2 (ja)
EP (2) EP3005078A2 (ja)
JP (3) JP2016526220A (ja)
CN (2) CN109284131B (ja)
WO (1) WO2014190263A2 (ja)

Families Citing this family (42)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
WO2013100783A1 (en) 2011-12-29 2013-07-04 Intel Corporation Method and system for control signalling in a data path module
US10083152B1 (en) * 2012-01-27 2018-09-25 Open Invention Network Llc Virtualized multicore systems with extended instruction heterogeneity
US9582321B2 (en) * 2013-11-08 2017-02-28 Swarm64 As System and method of data processing
US9971601B2 (en) * 2015-02-13 2018-05-15 International Business Machines Corporation Dynamic assignment across dispatch pipes of source ports to be used to obtain indication of physical registers
US9747108B2 (en) * 2015-03-27 2017-08-29 Intel Corporation User-level fork and join processors, methods, systems, and instructions
WO2017074377A1 (en) * 2015-10-29 2017-05-04 Intel Corporation Boosting local memory performance in processor graphics
WO2017117116A1 (en) 2015-12-28 2017-07-06 Coherent Logix, Incorporated Processor Instructions to Accelerate FEC Encoding and Decoding
US10067809B2 (en) 2016-04-20 2018-09-04 International Business Machines Corporation System and method for batch transport using hardware accelerators
US10970133B2 (en) 2016-04-20 2021-04-06 International Business Machines Corporation System and method for hardware acceleration for operator parallelization with streams
GB2558220B (en) 2016-12-22 2019-05-15 Advanced Risc Mach Ltd Vector generating instruction
WO2018193354A1 (en) * 2017-04-17 2018-10-25 Cerebras Systems Inc. Wavelet representation for accelerated deep learning
US10726514B2 (en) 2017-04-28 2020-07-28 Intel Corporation Compute optimizations for low precision machine learning operations
US10474458B2 (en) 2017-04-28 2019-11-12 Intel Corporation Instructions and logic to perform floating-point and integer operations for machine learning
CN107608784B (zh) * 2017-06-28 2020-06-09 西安微电子技术研究所 一种在多核dsp下的海量数据流多模态调度方法
US11029956B2 (en) * 2017-08-24 2021-06-08 Sony Semiconductor Solutions Corporation Processor and information processing system for instructions that designate a circular buffer as an operand
US11086816B2 (en) 2017-09-28 2021-08-10 Intel Corporation Processors, methods, and systems for debugging a configurable spatial accelerator
US10014390B1 (en) 2017-10-10 2018-07-03 Globalfoundries Inc. Inner spacer formation for nanosheet field-effect transistors with tall suspensions
EP3704572A1 (en) * 2017-11-03 2020-09-09 Coherent Logix, Inc. Programming flow for multi-processor system
US10747709B2 (en) 2017-11-03 2020-08-18 Coherent Logix, Incorporated Memory network processor
KR102424962B1 (ko) 2017-11-15 2022-07-25 삼성전자주식회사 병렬 연산 처리를 수행하는 메모리 장치 및 이를 포함하는 메모리 모듈
CN108198124B (zh) * 2017-12-27 2023-04-25 上海联影医疗科技股份有限公司 医学图像处理方法、装置、计算机设备和存储介质
US11614941B2 (en) * 2018-03-30 2023-03-28 Qualcomm Incorporated System and method for decoupling operations to accelerate processing of loop structures
US11307873B2 (en) 2018-04-03 2022-04-19 Intel Corporation Apparatus, methods, and systems for unstructured data flow in a configurable spatial accelerator with predicate propagation and merging
US11200186B2 (en) 2018-06-30 2021-12-14 Intel Corporation Apparatuses, methods, and systems for operations in a configurable spatial accelerator
US10891240B2 (en) 2018-06-30 2021-01-12 Intel Corporation Apparatus, methods, and systems for low latency communication in a configurable spatial accelerator
US10983583B2 (en) * 2018-08-23 2021-04-20 Apple Inc. Electronic display reduced blanking duration systems and methods
JP7455137B2 (ja) * 2018-12-12 2024-03-25 インテラクティック ホールディングス リミテッド ライアビリティー カンパニー プロセッサコア間での改善されたデータ転送のための方法および装置
CN109523019B (zh) * 2018-12-29 2024-05-21 百度在线网络技术(北京)有限公司 加速器、基于fpga的加速系统及控制方法、cnn网络系统
CN109917704A (zh) * 2019-02-25 2019-06-21 湖南长高思瑞自动化有限公司 基于stm32l433低功耗控制器的故障指示器采集单元及控制方法
US20220121421A1 (en) 2019-03-15 2022-04-21 Intel Corporation Multi-tile memory management
CN109976707B (zh) * 2019-03-21 2023-05-05 西南交通大学 一种可变位宽乘法器自动化生成方法
US11169957B2 (en) * 2019-03-31 2021-11-09 Intel Corporation Systems and methods for reconfigurable systolic arrays
CN110187958B (zh) * 2019-06-04 2020-05-05 上海燧原智能科技有限公司 一种任务处理方法、装置、系统、设备及存储介质
US11037050B2 (en) 2019-06-29 2021-06-15 Intel Corporation Apparatuses, methods, and systems for memory interface circuit arbitration in a configurable spatial accelerator
US11163706B2 (en) 2019-10-22 2021-11-02 International Business Machines Corporation High bandwidth SDRAM controller
US11789896B2 (en) * 2019-12-30 2023-10-17 Star Ally International Limited Processor for configurable parallel computations
CN113407238A (zh) * 2020-03-16 2021-09-17 北京灵汐科技有限公司 一种具有异构处理器的众核架构及其数据处理方法
US11500858B2 (en) * 2020-04-08 2022-11-15 International Business Machines Corporation Generating three-dimensional spikes using low-power computing hardware
US11269526B2 (en) 2020-04-23 2022-03-08 Next Silicon Ltd Interconnected memory grid with bypassable units
US20200278865A1 (en) * 2020-05-15 2020-09-03 Intel Corporation Hazard Mitigation for Lightweight Processor Cores
EP4211567A1 (en) * 2020-09-09 2023-07-19 Ascenium, Inc. Highly parallel processing architecture with shallow pipeline
CN113268269B (zh) * 2021-06-07 2022-10-14 中科计算技术西部研究院 一种针对动态规划算法的加速方法、系统及装置

Citations (8)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPH09212361A (ja) * 1996-02-07 1997-08-15 Mitsubishi Electric Corp データ処理装置およびデータ処理方法
JPH11143710A (ja) * 1997-11-04 1999-05-28 Matsushita Electric Ind Co Ltd 処理対象値入力装置及びプログラム変換装置
JP2001306324A (ja) * 2000-03-30 2001-11-02 Agere Systems Guardian Corp マルチスレッドvliwプロセッサにおける分割可能なパケットを識別するための方法および装置
JP2005531089A (ja) * 2002-06-26 2005-10-13 コーヒレント・ロジックス・インコーポレーテッド 散在しているプロセッサと通信要素を備える処理システム
JP2008015589A (ja) * 2006-07-03 2008-01-24 Nec Corp Vliw型プロセッサおよび命令発行方法
JP2008507039A (ja) * 2004-07-13 2008-03-06 スリープラスワン テクノロジー, インコーポレイテッド プログラム可能なプロセッサのアーキテクチャ
US20100321579A1 (en) * 2009-02-11 2010-12-23 Mohammad Ahmad Front End Processor with Extendable Data Path
JP2012059195A (ja) * 2010-09-13 2012-03-22 Renesas Electronics Corp マルチスレッドプロセッサ

Family Cites Families (25)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US4295193A (en) * 1979-06-29 1981-10-13 International Business Machines Corporation Machine for multiple instruction execution
AU553416B2 (en) * 1984-02-24 1986-07-17 Fujitsu Limited Pipeline processing
US5983340A (en) * 1995-12-07 1999-11-09 Conexant Systems, Inc. Microprocessor system with flexible instruction controlled by prior instruction
US6539467B1 (en) * 1999-11-15 2003-03-25 Texas Instruments Incorporated Microprocessor with non-aligned memory access
EP1117031B1 (en) 2000-01-14 2007-07-11 Texas Instruments France Microprocessor with reduced power-consumption.
US6453405B1 (en) * 2000-02-18 2002-09-17 Texas Instruments Incorporated Microprocessor with non-aligned circular addressing
US6629234B1 (en) * 2000-03-30 2003-09-30 Ip. First, L.L.C. Speculative generation at address generation stage of previous instruction result stored in forward cache for use by succeeding address dependent instruction
US7127588B2 (en) * 2000-12-05 2006-10-24 Mindspeed Technologies, Inc. Apparatus and method for an improved performance VLIW processor
US7100060B2 (en) * 2002-06-26 2006-08-29 Intel Corporation Techniques for utilization of asymmetric secondary processing resources
US6993668B2 (en) 2002-06-27 2006-01-31 International Business Machines Corporation Method and system for reducing power consumption in a computing device when the computing device executes instructions in a tight loop
US6963988B2 (en) 2002-06-27 2005-11-08 International Business Machines Corporation Fixed point unit power reduction mechanism for superscalar loop execution
US7013383B2 (en) * 2003-06-24 2006-03-14 Via-Cyrix, Inc. Apparatus and method for managing a processor pipeline in response to exceptions
JP4283131B2 (ja) * 2004-02-12 2009-06-24 パナソニック株式会社 プロセッサ及びコンパイル方法
US7299342B2 (en) * 2005-05-24 2007-11-20 Coresonic Ab Complex vector executing clustered SIMD micro-architecture DSP with accelerator coupled complex ALU paths each further including short multiplier/accumulator using two's complement
US7873820B2 (en) * 2005-11-15 2011-01-18 Mips Technologies, Inc. Processor utilizing a loop buffer to reduce power consumption
JP4829038B2 (ja) * 2006-08-17 2011-11-30 富士通株式会社 マルチプロセッサシステム
US20080177980A1 (en) * 2007-01-24 2008-07-24 Daniel Citron Instruction set architecture with overlapping fields
JP5043560B2 (ja) * 2007-08-24 2012-10-10 パナソニック株式会社 プログラム実行制御装置
US8990543B2 (en) * 2008-03-11 2015-03-24 Qualcomm Incorporated System and method for generating and using predicates within a single instruction packet
CN101286922B (zh) * 2008-05-05 2011-02-09 华为技术有限公司 一种信令控制的方法、系统及设备
US9323551B2 (en) * 2011-01-07 2016-04-26 International Business Machines Corporation Modifying code sequence with replacement parts of which non-beginning parts trigger exception when jumped to
US8843730B2 (en) * 2011-09-09 2014-09-23 Qualcomm Incorporated Executing instruction packet with multiple instructions with same destination by performing logical operation on results of instructions and storing the result to the destination
US9557999B2 (en) * 2012-06-15 2017-01-31 Apple Inc. Loop buffer learning
US8856769B2 (en) * 2012-10-23 2014-10-07 Yong-Kyu Jung Adaptive instruction prefetching and fetching memory system apparatus and method for microprocessor system
US9715392B2 (en) * 2014-08-29 2017-07-25 Qualcomm Incorporated Multiple clustered very long instruction word processing core

Patent Citations (8)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPH09212361A (ja) * 1996-02-07 1997-08-15 Mitsubishi Electric Corp データ処理装置およびデータ処理方法
JPH11143710A (ja) * 1997-11-04 1999-05-28 Matsushita Electric Ind Co Ltd 処理対象値入力装置及びプログラム変換装置
JP2001306324A (ja) * 2000-03-30 2001-11-02 Agere Systems Guardian Corp マルチスレッドvliwプロセッサにおける分割可能なパケットを識別するための方法および装置
JP2005531089A (ja) * 2002-06-26 2005-10-13 コーヒレント・ロジックス・インコーポレーテッド 散在しているプロセッサと通信要素を備える処理システム
JP2008507039A (ja) * 2004-07-13 2008-03-06 スリープラスワン テクノロジー, インコーポレイテッド プログラム可能なプロセッサのアーキテクチャ
JP2008015589A (ja) * 2006-07-03 2008-01-24 Nec Corp Vliw型プロセッサおよび命令発行方法
US20100321579A1 (en) * 2009-02-11 2010-12-23 Mohammad Ahmad Front End Processor with Extendable Data Path
JP2012059195A (ja) * 2010-09-13 2012-03-22 Renesas Electronics Corp マルチスレッドプロセッサ

Also Published As

Publication number Publication date
US20230153117A1 (en) 2023-05-18
JP7210078B2 (ja) 2023-01-23
EP3690641A1 (en) 2020-08-05
CN109284131A (zh) 2019-01-29
US9430369B2 (en) 2016-08-30
US20210208895A1 (en) 2021-07-08
CN109284131B (zh) 2023-05-30
CN105378651B (zh) 2018-09-18
CN105378651A (zh) 2016-03-02
EP3690641B1 (en) 2024-02-21
EP3005078A2 (en) 2016-04-13
US20140351551A1 (en) 2014-11-27
US11544072B2 (en) 2023-01-03
US11016779B2 (en) 2021-05-25
US20190369990A1 (en) 2019-12-05
WO2014190263A3 (en) 2015-04-02
JP2019145172A (ja) 2019-08-29
JP7264955B2 (ja) 2023-04-25
JP2016526220A (ja) 2016-09-01
WO2014190263A2 (en) 2014-11-27
US11900124B2 (en) 2024-02-13
US20160328231A1 (en) 2016-11-10

Similar Documents

Publication Publication Date Title
JP7264955B2 (ja) プログラム可能な最適化を有するメモリネットワークプロセッサ
CN108268278B (zh) 具有可配置空间加速器的处理器、方法和系统
US10387319B2 (en) Processors, methods, and systems for a configurable spatial accelerator with memory system performance, power reduction, and atomics support features
US10469397B2 (en) Processors and methods with configurable network-based dataflow operator circuits
US20190303153A1 (en) Apparatus, methods, and systems for unstructured data flow in a configurable spatial accelerator
CN111868702A (zh) 用于可配置空间加速器中的远程存储器访问的装置、方法和系统
WO2020005448A1 (en) Apparatuses, methods, and systems for unstructured data flow in a configurable spatial accelerator
US11029958B1 (en) Apparatuses, methods, and systems for configurable operand size operations in an operation configurable spatial accelerator
CN111767080A (zh) 用于可配置空间加速器中的操作的设备、方法和系统
TWI806550B (zh) 處理器操作方法、相關電腦系統、及非暫時性電腦可存取儲存媒體
US20220100680A1 (en) Apparatuses, methods, and systems for a configurable accelerator having dataflow execution circuits
US20140351563A1 (en) Advanced processor architecture
WO2006115635A2 (en) Automatic configuration of streaming processor architectures
CN112148647A (zh) 用于存储器接口电路仲裁的装置、方法和系统
CN112148664A (zh) 用于可配置空间加速器中的时间复用的装置、方法和系统
Purkayastha et al. Exploring the efficiency of opencl pipe for hiding memory latency on cloud fpgas
Boppu Code Generation for Tightly Coupled Processor Arrays
Niu et al. Custom AI Streaming Accelerator Architecture

Legal Events

Date Code Title Description
A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20210927

A621 Written request for application examination

Free format text: JAPANESE INTERMEDIATE CODE: A621

Effective date: 20210927

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20221206

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20230221

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

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20230413

R150 Certificate of patent or registration of utility model

Ref document number: 7264955

Country of ref document: JP

Free format text: JAPANESE INTERMEDIATE CODE: R150