JPWO2016024508A1 - マルチプロセッサ装置 - Google Patents

マルチプロセッサ装置 Download PDF

Info

Publication number
JPWO2016024508A1
JPWO2016024508A1 JP2016542545A JP2016542545A JPWO2016024508A1 JP WO2016024508 A1 JPWO2016024508 A1 JP WO2016024508A1 JP 2016542545 A JP2016542545 A JP 2016542545A JP 2016542545 A JP2016542545 A JP 2016542545A JP WO2016024508 A1 JPWO2016024508 A1 JP WO2016024508A1
Authority
JP
Japan
Prior art keywords
instruction
processor
processing
register
memory
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
JP2016542545A
Other languages
English (en)
Other versions
JP6551751B2 (ja
Inventor
高田 周一
周一 高田
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Architek
Original Assignee
Architek
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 Architek filed Critical Architek
Publication of JPWO2016024508A1 publication Critical patent/JPWO2016024508A1/ja
Application granted granted Critical
Publication of JP6551751B2 publication Critical patent/JP6551751B2/ja
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F15/00Digital computers in general; Data processing equipment in general
    • G06F15/76Architectures of general purpose stored program computers
    • G06F15/80Architectures of general purpose stored program computers comprising an array of processing units with common control, e.g. single instruction multiple data processors
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F15/00Digital computers in general; Data processing equipment in general
    • G06F15/76Architectures of general purpose stored program computers
    • G06F15/80Architectures of general purpose stored program computers comprising an array of processing units with common control, e.g. single instruction multiple data processors
    • G06F15/8053Vector processors
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F17/00Digital computing or data processing equipment or methods, specially adapted for specific functions
    • G06F17/10Complex mathematical operations
    • G06F17/16Matrix or vector computation, e.g. matrix-matrix or matrix-vector multiplication, matrix factorization
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30098Register arrangements
    • G06F9/3012Organisation of register space, e.g. banked or distributed register file
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/32Address formation of the next instruction, e.g. by incrementing the instruction counter
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/34Addressing or accessing the instruction operand or the result ; Formation of operand address; Addressing modes
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/38Concurrent instruction execution, e.g. pipeline, look ahead
    • G06F9/3824Operand accessing
    • 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, look ahead
    • G06F9/3836Instruction issuing, e.g. dynamic instruction scheduling or out of order instruction execution
    • G06F9/3851Instruction issuing, e.g. dynamic instruction scheduling or out of order instruction execution from multiple instruction streams, e.g. multistreaming
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/38Concurrent instruction execution, e.g. pipeline, look ahead
    • G06F9/3885Concurrent instruction execution, e.g. pipeline, look ahead using a plurality of independent parallel functional units
    • G06F9/3887Concurrent instruction execution, e.g. pipeline, look ahead using a plurality of independent parallel functional units controlled by a single instruction for multiple data lanes [SIMD]
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06TIMAGE DATA PROCESSING OR GENERATION, IN GENERAL
    • G06T1/00General purpose image data processing
    • G06T1/20Processor architectures; Processor configuration, e.g. pipelining

Abstract

マルチプロセッサ装置は、外部メモリ、複数のプロセッサ、メモリ集約装置、レジスタメモリ、マルチプレクサ、及び全体制御装置を備える。メモリ集約装置は、複数のプロセッサのメモリアクセスを集約する。レジスタメモリは、プロセッサが管理するレジスタ数とプロセッサの最大処理数の積の数が用意される。マルチプレクサは、プロセッサのレジスタアクセスに対し与えられた命令に従ってレジスタメモリのアクセスを行う。全体制御装置は、命令からパラメータを抽出しプロセッサとマルチプレクサに与え制御するとともに、与えられた処理数分を同一命令にてプロセッサでレジスタメモリのアドレッシングを変化させて順次処理させ、処理数分が終われば次の命令に切り替えて与えられた処理数分の処理を繰り返させる。

Description

本発明は、複数のプロセッサで構成されるマルチプロセッサ装置に関する。
デジタル信号処理において、プログラムによって動作するプロセッサ、例えばDSPなどは、さまざまなアルゴリズムを網羅するにあたって必要不可欠なものである。近年、画像処理など非常に処理量の多い処理が必要になってきた。このため、複数のプロセッサで構成した装置、例えばGPU(グラフィックスプロセッシングユニット)がDSPに代わるものとして出てきた。
従来例をこのGPUを例にして述べる。図2は特開2009−37593号公報に記載されているGPUの構成である。このGPUは、外部メモリ装置(EMU)201、外部メモリ202、ベクトル処理エンジン(VPE)205、ベクトル制御装置(VCU)206、ベクトル処理装置(VPU)207を備える。
ベクトル処理装置(VPU)207はマルチプロセッサの核となる演算器を有しかつ複数個からなる。この上位の制御装置としてベクトル制御装置(VCU)206があり、これらを含む1つのセットとしてベクトル処理エンジン(VPE)205がある。ベクトル処理エンジン(VPE)205はさらに複数個からなり、お互いのアクセスが相互にできるよう外部メモリ装置(EMU)201を中継しクロスバー接続されている。また、外部メモリ202とも接続しているので、メモリアクセスも可能である。
データおよびプログラムの単位である命令は、ベクトル処理装置(VPU)207が持つL1キャッシュ(最下層となるレベル1のキャッシュもしくはテンポラリの記憶装置)、ベクトル処理エンジン(VPE)205が持つL2キャッシュ(上位となるレベル2のキャッシュもしくはテンポラリの記憶装置)に蓄えられる。それぞれ、階層的なメモリアクセスの流れとなる。
ベクトル処理エンジン(VPE)205の実装数は、多ければ多いほど性能は上がる。しかしながら、ベクトル処理エンジン(VPE)205の動作は同時に同じ命令を実行するSIMD(単一命令複数データ)型を基本とするので、実装数が多くなると、メモリアクセスが同時刻に集中し、外部メモリ装置(EMU)206もしくは外部メモリ202の物理的なメモリ帯域の制限により性能劣化が生じる。このため、ベクトル処理装置(VPU)207の実装数を数個に限定し、逆にベクトル処理エンジン(VPE)205を増やす。ベクトル処理エンジン(VPE)205には、異なるプログラム、もしくは時間差を考慮した同じプログラムを与えれば、上記の同時刻のアクセスの集中を避けることができる。
一方、各ベクトル処理エンジン(VPE)205は、外部メモリ装置(EMU)201を介しての疎結合となり、データ交換を効率的に行う仕組みが必要である。データ交換は、大きなプログラムを小さなプログラムに分解する(ベクトル処理装置(VPU)207へ処理を分散し性能を高める)場合に必要となる。プログラミングの複雑化を避けるため、これらのデータ交換はプログラムとは関係なく自動的に行われる。
データ交換を自動的に行う方法を述べる。先ず、メモリアクセスの要求と転送先、転送元のメッセージを定義しておく。それらを各々の装置が発行および受け取り、処理を行う。複数のメッセージはそれぞれの装置で調停され順序を守りながら並行に処理される。メッセージの処理を行うのは主にベクトル処理エンジン(VPE)にあるDMA(Direct Memory Access)装置である。このような仕組みで、ベクトル処理エンジン(VPE)205のL2キャッシュやベクトル処理装置(VPU)207のL1キャッシュおよび外部メモリ202の間のデータ通信が自動的に行われる。これらの処理は突き放し制御になっており、プログラムで意識する必要はない。
次に、ベクトル処理装置(VPU)207について述べる。
SIMD型を考えた場合、1つのユニットは簡単化し回路規模を圧縮して数を揃えた方がよい。また、簡単化することで高い周波数で動作させることができる。このため、1つのユニットは単純なパイプライン構造となり、一般的なプロセッサのように高い機能を持たないことが多い。例えば、スーパースカラーなど回路コストの高い方式は採用しないことが多い。
プロセッサの構造を簡単化すると、フロー依存が課題となる。例えば、レジスタAを読み出してパイプライン処理し、レジスタBに書き込む場合、次の命令でレジスタBを読み出すには、前の命令のレジスタBへの書き込みを待つ必要がある。大きなプログラムでは、命令の順序の入れ替えなどのスケジューリングである程度回避可能であるが、プログラムを分散化するとプログラムが小さくなりスケジューリングが難しくなる。
結局、レジスタBへの書き込みが終了するまで次の命令のレジスタBの読み出しを止めることになる(ハザードの発生)。図3はパイプライン処理において、ハザードの有無を時間軸に沿って示したもので、命令1の書き込みと命令2の読み込みレジスタが同一の場合に生じたハザードを示している。
従来のプロセッサではこれを解決するため、図4のように異なるプログラムを互い違いにして与え、フロー依存が生じない手法が考えられた。図4では、プログラムをABCDの4つを用意し、それぞれの命令を交互に与える。プログラムABCDで異なるレジスタを用意すれば、プログラムAが書き込むレジスタは、他のプログラムBCDの読み込みレジスタとは重ならない。また、プログラムAの命令A1と命令A2とは時間差が3つあるので、フロー依存が生じてもハザードが生じる心配はない。
以上のように、簡単な構造のプロセッサを数個まとめ、それぞれの命令とデータをキューイング可能なクロスバーで接続し、さらにプログラムの与え方に工夫することで、プロセッサの稼働率の向上とメモリ使用帯域の分散を図ることができる。
特開2009-37593号公報
しかしながら、従来のマルチプロセッサ装置にあっては、以下のような問題点があった。
先ず、プログラムを適切にプロセッサに分配しておく必要がある。静的な手法としては、プログラム全体の分割と配分を予めコンパイラなどで決めておく方法がある。しかし、同時に処理したいプログラムが追加されたりすると、分割と配分を再度決めなおさなければならない。これはプログラム開発の効率を悪くする。
動的な手法としては、それぞれのプロセッサの状態を監視する機構を装備する方法がある。監視は、プログラムの進捗具合を共有メモリ等に配置しておき、プロセッサ自体がそれを参照して実行可能なプログラムがあれば自ら実行する。もしくは、別のプロセッサを別途専用に用意しておき、それぞれのプロセッサの状態を逐次管理・起動する。いずれにせよ、全体のハードウェアの機構は複雑化しコスト増となる。
次に、プロセッサ間の通信が頻繁に起きると、プロセッサ間のデータの通信が滞って、オーバヘッドになりうる場合がある。また、プロセッサ間の通信効率を上げようとすれば、クロスバーのようなバススイッチが必要となり、回路コストが増大する。
最後に、1つのプロセッサに異なるプログラムを交互に実行させるには、異なるプログラムを用意しないといけない。例えば、従来例の複数のベクトル処理エンジン(VPE)205に複数のプログラムを用意し、さらにそれを複数のプログラムに分割することを考える。これは、静的および動的に関わらず、プログラムの生産性を低下させる要因となる。また、1つのプロセッサに与えるプログラムの数も、パイプラインの段数が多くなるとそれに比例した分が必要となる。このため、パイプラインの段数を上げて動作周波数を上げる、もしくは高度な演算をさせると、プログラム分割の問題がさらに大きくなる。
上述の課題を解決するため、本発明は、以下の技術的手段を採用している。すなわち、本発明に係るマルチプロセッサ装置は、外部メモリ、複数のプロセッサ、メモリ集約装置、レジスタメモリ、マルチプレクサ、及び全体制御装置を備える。メモリ集約装置は、複数のプロセッサのメモリアクセスを集約する。レジスタメモリは、プロセッサが管理するレジスタ数とプロセッサの最大処理数の積の数が用意される。マルチプレクサは、プロセッサのレジスタアクセスに対し与えられた命令に従ってレジスタメモリのアクセスを行う。全体制御装置は、命令からパラメータを抽出しプロセッサとマルチプレクサに与え制御する。また、全体制御装置は、与えられた処理数分を同一命令にてプロセッサでレジスタメモリのアドレッシングを変化させて順次処理させ、処理数分が終われば次の命令に切り替えて与えられた処理数分の処理を繰り返させる。
本発明では、物理的なプロセッサ数に対するレジスタだけを用意するのではなく、非常に大きい論理的なプロセッサ数分のレジスタを用意し、処理数を自動で調整する。その結果、プログラムの分割を考慮することなく、簡単に並列処理できるマルチプロセッサ装置を提供することができる。また、調整は処理数の加減算だけなので、プロセッサの並列度は簡単に増減できる。加えて、プログラムはプロセッサの数を意識することはない。
また、本発明によれば、プロセッサのパイプラインの段数を格段に増やしても、またフロー依存になっても性能に影響しにくく、高度な演算および動作周波数の向上が容易に図れる。メモリレイテンシが増えても同様に影響が少なく、複雑なメモリアクセス構造を取らずとも自動的に突き放し制御になる。従って、プロセッサ個々に単純なメモリアクセスを行う機構を備えるだけである。
比較的に大きいレジスタは必要になるが、パイプライン段数の許容度が増加するに伴い、アクセス速度に劣る低コストSRAMが使用可能なので、コスト増加は少ない。
命令の更新頻度が低いため、命令キャッシュ等を装備して高速化する必要がなく、非常に長い語長を要する演算装置の並列化も容易である。
以上のように、プログラム作成が容易になり、性能と機能がスケーラブルかつコストパフォーマンスに優れたマルチプロセッサ装置が本発明により提供できる。
図1は、本発明の一実施形態におけるマルチプロセッサ装置を説明する図である。 図2は、従来のマルチプロセッサ装置の構成を説明する図である。 図3は、従来のマルチプロセッサ装置のハザードが発生しない場合とする場合のパイプライン動作を説明する図である。 図4は、従来のマルチプロセッサ装置の異なるプログラムを交互に実行したパイプライン動作を説明する図である。 図5は、本発明の一実施形態におけるマルチプロセッサ装置のレジスタへのアクセスを説明する図である。 図6は、本発明の一実施形態におけるマルチプロセッサ装置のレジスタメモリに対する構造を説明する図である。 図7は、本発明の一実施形態におけるマルチプロセッサ装置において、ハザードが発生しない場合の処理サイクルとレジスタメモリに対するアドレッシングを説明する図である。 図8は、本発明の一実施形態におけるマルチプロセッサ装置において、ハザードが発生する場合の処理サイクルとレジスタメモリに対するアドレッシングを説明する図である。 図9は、本発明の一実施形態におけるマルチプロセッサ装置を複数の処理ユニットで構成することを説明する図である。 図10は、本発明の一実施形態におけるマルチプロセッサ装置において、異なる論理プロセッサへのレジスタアクセスを説明する図である。 図11は、本発明の一実施形態におけるマルチプロセッサ装置において、画像処理で横方向および縦方向のレジスタアクセスを説明する図である。 図12は、本発明の一実施形態におけるマルチプロセッサ装置の分岐条件の生成を説明する図である。 図13は、本発明の一実施形態におけるマルチプロセッサ装置において、分岐条件を使って生成した画像例を示す図である。
以下、本発明の実施の形態について、図面を参照して詳細に説明する。
本発明の第1の実施形態に係るマルチプロセッサ装置について説明する。本実施の形態は、図1と図5から図9を用いて説明する。
複数のプロセッサはSIMD型とし、単一命令を複数実行するものとする。図1に示すように、このマルチプロセッサ装置100は、メモリ集約装置101、外部メモリ102、マルチプレクサ103、全体制御装置105、レジスタメモリ106、複数のプロセッサ107を備える。メモリ集約装置101は、複数のプロセッサ107のメモリアクセスを集約する。マルチプレクサ103は、プロセッサ107のレジスタアクセスに対し与えられた命令に従ってレジスタメモリ106のアクセスを行う。
この例では、プロセッサ107は物理的に8個とし、SIMDとして処理できる論理的な個数(最大処理数)は1024個とする。レジスタメモリ106はプロセッサ107から読み書きするレジスタであり、論理的なプロセッサ数分のレジスタが用意される。例えば、プロセッサ1つあたり16個のレジスタを持つのであれば、16×1024で16384個のレジスタが用意される。つまり、論理的に保持するレジスタはプロセッサ1024個分(16384個のレジスタ)であり、単位時間(1サイクル)当たり物理的に処理できる数は最大8個となる。
8個のプロセッサ107は処理数がN回の命令が与えられると、レジスタに対するアドレッシングを変化させて、与えられた処理数Nの命令を逐次処理する。ここで言うアドレッシングとは、レジスタメモリ106において、物理プロセッサごと(8×16個のレジスタ)に割り付けられた番地に対するアクセスである。例えば、処理数N=300の場合、38回のアドレッシングを行う。この場合、37回のアドレッシングにおいて8個のプロセッサ107が命令を処理し、1回のアドレッシングにおいて4個のプロセッサ107が命令を処理する。したがって、アドレッシングは0から37まで変化することになる。プロセッサはパイプライン構造を取り、1命令1サイクルのスループットがあるとすれば、38サイクルでN=300の処理が可能である。なお、これらの実行回数を制御するのは、全体制御装置105である。すなわち、全体制御装置105は、与えられた処理数分を同一命令にてプロセッサ107でレジスタメモリ106のアドレッシングを変化させて順次処理させる。また、全体制御装置105は、プロセッサ107による当該処理が完了すると、次の命令に切り替えて与えられた処理数分の処理を繰り返させる。特に限定されないが、ここでは、命令は、外部メモリ102に格納されている。また、全体制御装置105は、命令からパラメータを抽出しプロセッサ107とマルチプレクサ103に与え制御する。
図5は上記の動作を示す図である。ここでは、便宜上、レジスタメモリ106を読み出しと書き込みの2つに分けて図示している。図5では、レジスタメモリ106間をプロセッサ107が1サイクルごとに昇順にアドレッシングして、合計N=300の処理を実行している。
レジスタメモリ106では、上述したように読み出しと書き込みが発生する。例えば、2項演算では、1プロセッサ当たり16個用意されたレジスタのうち2個を読み出し、レジスタ1個に書き込む。どのレジスタをオペランドとして選ぶかは命令にオペランド番号として記述されており、マルチプレクサ103がオペランド番号を受け取ってスイッチする。
ここで、レジスタメモリ106は、8個のプロセッサ107のアクセスを同時に受け付けるが、8個全て同じ命令なのでオペランド番号も同じである。従って、マルチプレクサ103は、各プロセッサ107に対して、同一のアドレッシング、かつ同一のスイッチを実現すればよい。ただし、16個のレジスタは同時に複数選択できるよう、最大16のレジスタ群に分けておく必要がある。なお、スループットを最大化させるには、読み出しと書き込みが同時にできるようにするべきである。これらは、16バンクの2ポートSRAMを用意することで実現できる。
図6は上記の動作を示す図である。図6では、便宜上、マルチプレクサ103を、読み出し動作をするマルチプレクサ103と、書き込み動作をするマルチプレクサ103との2つに分割して示している。図6に示すように、上記の動作では、16バンクに分けたSRAMに共通のアドレッシングを行い、命令に記述してある読み出しオペランド番号2つをマルチプレクサ103(便宜上上下2つに分けた下方)に入れ、必要なオペランド2つを選択してプロセッサ107に入れる。同様に、命令に記述してある書き込みオペランド番号1つをマルチプレクサ103(便宜上上下2つに分けた上方)に入れ、プロセッサ107の演算結果を指定したバンクのSRAMに格納する。
実際には、プロセッサ107はパイプライン処理を行うので、読み出しと書き込みのアドレッシングはこのパイプラインの段数分だけ遅延する。従って、FIFOメモリ等を用いて書き込みのアドレッシングに遅延を付ける。アドレッシングは絶えず変化し、さらに遅延がつくため、読み出しと書き込みの衝突(同一アドレスへのアドレッシング)は起こらない。
命令が次に切り替わるのは、処理数N=300の処理が終わった後になる。この様子を図7に示す。図7において、横軸は時間に対応し、縦軸はアドレッシングに対応する。図7において、横棒はパイプライン処理中を示し、左端がオペランドの読み出し、右端がオペランドの書き込みに相当する。8個のプロセッサ107は同一命令を処理数N=300になるまで実施するため、命令0の開始から次に実行される命令1の開始までに、38サイクルの差が生じる。この差があるため、フロー依存になってもハザードは生じない。例えば、論理プロセッサnの命令0において「R0=R1+R2」(Rはレジスタ、添え字は番号)とし、命令1において「R3=R0*R0」を記述して、命令0で生成するR0を命令1で使用しても、フロー依存でありながら命令0のR0への書き込みはかなり前に完了しているので問題は生じない。
これは、処理数N÷プロセッサ数>パイプライン段数の関係であれば、ハザードの問題は生じないことを示している。つまり、処理数Nが多いほどプロセッサ数を増やしても、もしくはパイプライン段数を増やしても性能劣化が生じにくいことを意味する。
パイプライン段数が増加しても性能が劣化しにくい本構成は、各プロセッサ107がメモリ集約装置101を通して、外部メモリ102へアクセスする場合にも有効である。メモリ集約装置101は基本的にメモリへのランダムなアドレス要求に対して、近接するアドレスがある場合に複数の要求を連結したり、キャッシュを搭載して局所的なメモリアクセスの高速化を行ったりする。しかしながら、このような最適化をすればするほど、応答速度の指標であるレイテンシに揺らぎが生じる。しかし、パイプライン段数の上限が高くハザードが生じにくい状態であれば、これらレイテイシもある程度吸収できる。例えば、命令0において「R0=[R1]」([]内はメモリアドレス)、命令1において「R3=R0*R0」とフロー依存の記述をしても、メモリレイテンシが38サイクル以下であればペナルティは発生しない。
また、パイプライン段数を簡単に増やすことができるので、高度な演算も取り入れることができる。例えば、CORDIC(Coordinate Rotation Digital Computer)と呼ばれる手法は、加減算を繰り返し三角関数や双曲線関数の算出、および割り算を行うことができるが、数十回の繰り返しを必要とするので従来は実装に制限があった。本構成では、このCORDICを実装しても、特別な機構や制約を設けずに使用できる。例えば、命令0において「R0=sin(R1)」、命令1において「R3=arctan(R0)」とフロー依存の記述をしても、パイプライン段数が38サイクル以下であればペナルティは発生しない。
さらに、高い動作周波数で読み書きするレジスタは、一般的にフリップフロップで構成されるが、本構成では、パイプライン段数に余裕があるため、低コストなSRAMを使用しても問題にならない。例えば、パイプライン化されたSRAMを使用すれば、アクセスタイムに数サイクルが必要であっても、スループットは1サイクルなので問題にならない。
一方、図7から分かるように、命令は38サイクルの期間不変である。逆に言うと、命令の更新頻度は低く、命令キャッシュ等のアクセスを高速化する手段をとる必要がない。この特徴は、命令の長さ(語長)の制限も解消し、VLIW(Very Long Instruction Word)と言われる水平型命令(演算器が並列し基本的にお互いを干渉しない)の実装にも有利である。
図9は、マルチプロセッサ装置を複数の処理ユニットで構成することを説明する図である。図9に示すように、このマルチプロセッサ装置100は、整数ユニット801(乗算と加算)、浮動小数点ユニット802(乗算と加算)、上述したCORDICユニット803(三角関数と双曲線関数の算出および割り算)、メモリアクセスユニット804を備える。各プロセッサ107はこれらを含み、マルチプレクサ103はそれぞれのユニットの命令ごとに必要なレジスタを選択し供給するよう拡張されている。
それぞれのユニット801から804はパイプライン化されており、図中の各ユニットのマス目を1サイクル消費して処理するが、それぞれのレイテンシは異なる。このため、この例では、FIFOメモリによりタイミングのずれを吸収し、同期化してマルチプレクサ103に結果を返す。図9によれば、基本的にレジスタ読み出しからレジスタ書き込みまでは一方通行で、相互に干渉もなく構造は簡単である。これは、高速化する場合に有利となる。
以上の構成では、命令の語長を簡単に拡張できる。また、ユニットを簡単に着脱(有効化及び無効化)できることから回路の追加・削減を容易に実現できる。これらの結果、ユーザーが目的に合わせて処理回路を簡単にカスタマイズできるマルチプロセッサ装置の提供が容易になる。
なお、レジスタメモリ106は基本的にプロセッサ個々にアクセスするものであるが、別途、共通にアクセス可能なレジスタを用意してもよい。このようなレジスタは、例えば、全体の処理に共通の変数を参照する場合に使用される。ただし、複数のプロセッサから書き込まれると、本来とは違った値になる可能性があるので、それを避けるために、論理プロセッサごとに書き込む値を合計してヒストグラムを作るなどの構成にすることが好ましい。
本発明の第2の実施形態に係るマルチプロセッサ装置について説明する。本実施の形態は、図8を参照しながら説明する。
上述のように、第1の実施形態で説明したマルチプロセッサ装置100は、処理数Nが大きいほど効果も大きくなる。しかしながら、論理プロセッサ数(最大処理数)は1024個と固定なので、処理数Nが論理プロセッサ数に満たない場合の対応と、処理数Nが論理プロセッサ数を越えた場合の対応が必要な場合がある。
画像処理を考えた場合、プロセッサごとに画素処理を行うと仮定すれば、QVGAサイズで320×240=76,800なので、処理数は十分大きい。一方、当該処理数は最大論理プロセッサ数1024を越えるため、分割処理が必要になる。分割は構成上、従来のプロセッサのように命令ごとに切り替えるのではなく、一連のプログラムが終了してから切り替える。
例えば、QVGA画像のAffine変換(画像の回転)を考える。C言語に近い書き方をすると、当該変換は、以下のようになる。ここで、変数x,yはQVGAの座標、C0からC5はAffine変換の回転を表す定数、mem[][]はQVGAのそれぞれの画素を格納するメモリ記述である。以下の記述では、R2とR3に、マトリクス計算(Affine変換)で得られる転送元の座標を代入し、R0を介して転送元のデータを読み出し、読み出した値を変数x,yが示す転送先の座標に書き込んでいる。
for (y=0; y<240; y++)
for (x=0; x<320; x++) {
R2 = C0 * x + C1 * y + C2;
R3 = C3 * x + C4 * y + C5;
R0 = mem[R3][R2];
mem[y][x] = R0;
}
変数x,yの2重ループになるが、マルチプロセッサ装置100によると上述のAffine変換は、以下のような実行手順で実行される。ここで、変数xは物理的なプロセッサ数である8個ごとに走査され、変数iはプロセッサ数8個分並列に処理される。すなわち、変数yが1つ変化するステップで、一連のプログラムを全て処理し、それをY座標が最大になるまで繰り返している。
for (y=0; y<240; y++) {
for (x=0; x<320; x+=8)
for (i=0; i<8; i++)
R2 = C0 * (x+i) + C1 * y + C2;
for (x=0; x<320; x+=8)
for (i=0; i<8; i++)
R3 = C3 * (x+i) + C4 * y + C5;
for (x=0; x<320; x+=8)
for (i=0; i<8; i++)
R0 = mem[R3][R2];
for (x=0; x<320; x+=8)
for (i=0; i<8; i++)
mem[y][x] = R0;
}
一方、以上の処理において、論理プロセッサ数を無駄にせず、パイプライン段数に余裕を持たせたい場合は、例えば、以下のように、ループ数を変数yで1/3倍、変数xで3倍にして補正してやればよい(変数x,yを参照している部分の補正は省略)。これにより、変数yに沿う方向で3行分の画素を1行に結合した状態での処理が可能になる。ここでは、3つの処理を1つに結合する例を示しているが、結合対象となる処理数は特に限定されず、任意に設定することができる。なお、変数xは最大960になるので、1024−960=64は無駄になる(説明の簡単のため無駄をなくした最適化は省く)。
for (y=0; y<240/3; y++)
for (x=0; x<320*3; x+=8)
同様に、HDサイズ1920×960の場合は、以下のように、ループ数を変数yで2倍、変数xで1/2倍にして補正してやればよい。これにより、変数yに沿う方向で1行分の画素を2行に分割した状態での処理が可能になる。ここでは、1つの処理を2つに分割する例を示しているが、分割数は特に限定されず、任意に設定することができる。
for (y=0; y<960*2; y++)
for (x=0; x<1920/2; x+=8)
なお、与えるプログラムが意図してこのような変更をする必要はない。上記の補正は、論理プロセッサ数と画像のサイズが与えられていれば簡単に算出できるので、全体制御装置105が自動的に調整する。このような調整は、例えば、1024を越えない最大X座標の倍数を見つけるなどにより実現できる。つまり、本実施形態においても、論理プロセッサ数や物理プロセッサ数などを意識する必要はなく、従来通りのプログラムを与えればよい。
しかしながら、画像処理と言っても二次元配列ではなく、曲線描画のベクター操作など短く補正できない処理もある。また、メモリアクセスで吸収しきれないレイテンシが発生することもある。図8は、パイプラインの段数が60の場合に生じるハザードの様子を表している。この例では、命令0で38回プロセッサ107を起動した直後、命令1でプロセッサ107を起動できない。命令0の処理が終了するサイクル60まで待機させる必要がある。すなわち、命令を切り替えて新たな命令を実行する際に、切替前の命令において、新たな命令の処理順番と同じ処理順番で実施された処理が終了していなければ当該処理が終了するまで新たな命令についての処理を待機させる必要がある。ここで、処理順番は、順番に処理される処理数Nの命令における処理の位置を意味する。例えば、処理順番が「10」である処理は、処理数Nの命令のうち、第10番目に実施された処理を意味する。
ただし、命令が変わっても同一レジスタさえ参照しなければ、待機させる必要は無い。また、例えばメモリアクセスにおいて、事前にメモリアクセスをしておき、数命令後に読み込んだメモリの値を参照するようにすれば、処理数Nを仮想的に数倍にすることができ、レイテンシの揺らぎを大きく吸収できる。
全体制御装置105が動的にこれらを制御するには、命令の前後もしくはいくつか離れた命令間でフロー依存を検知すればよい。ただし、当該制御ではオペランド番号の総当り検査が必要になる。一方、全体制御装置105に静的なフロー依存の情報を与え処理してもよい。プログラム中の前後のレジスタ番号の重なりの有無がフロー依存の情報になる。例えば、近接するn個前の命令の依存関係は無視するなどがコンパイラで変換される。すなわち、切替前の命令において、新たな命令の処理順番と同じ処理順番で実施されるとともに、予め指定された命令数以前に実施された処理が終了していなければ当該処理が終了するまで新たな命令についての処理を待機させる。この場合、予め指定された命令数よりも後に実施された処理については終了を確認することなく、新たな命令についての処理が実施される。
以上の制御により、処理数Nやプロセッサの数、プログラムの大きさなどの条件に変更が生じても、構成を大きく変えることなく、ハザードの発生を抑制することができる。
本発明の第3の実施形態に係るマルチプロセッサ装置について説明する。本実施の形態は、図6と図7と図10と図11を参照しながら説明する。
先ず、第2の実施形態と同様、本実施形態のマルチプロセッサ装置100は、画像処理を扱うものとする。このマルチプロセッサ装置100は、図7に示すように、アドレッシングを変化させ逐次命令を実行する形式を取り、アドレッシングは画像処理のX座標に沿って行うものとする。また、プログラム中の命令を実行し終わった後、次のY座標について再度処理を行い、画像全体を処理し終わった時点で終了するものとする。
各プロセッサ107間の通信は外部メモリ102上で行うと、データの往復分のサイクルがかかり非効率である。例えば画像処理の一つであるフィルタを行う場合、左右の画素の演算が必要であり、既に読み出したデータもしくは処理した結果を横方向に参照する必要性が生じる。
この場合、横方向の異なる論理プロセッサのレジスタを参照する必要があるが、図6から分かるように、このような参照はレジスタメモリ106のバンクごとの読み出しをシフトすることで実現可能である。上述のように、各プロセッサ107において実行される命令は同一であるため、シフトするオペランド番号とシフト量は固定である。したがって、横方向の参照を実現するには、読み出し用のマルチプレクサ103にシフト量を命令から与えるだけでよい。この場合、命令には相対的に参照するシフト量が記載される。なお、シフト量にはシフト方向の情報(加算または減算の情報)が含まれる。
また、レジスタファイル106へのアドレッシングも上記のシフト量に合わせて変更する。シフト量を指定したオペランドと指定しないオペランドの演算を同時に行うことがあるため、シフト量が指定されていないバンクは操作しない。
図10は、正方向に12離れた論理プロセッサのレジスタを参照している。12離れているので、処理中のアドレッシングをnとすれば、相対的なアドレッシングはn+1およびn+2にまたがる。1回のアドレッシングで読み出せるのは8個の整えられた連続したデータ(物理プロセッサ数分)なので、これをまたぐ場合、アドレッシングの最初だけ2回行う。次以降のアドレッシングは、前回アクセスした値(データ)を憶えておけば、新たなアドレッシング1回で済む。
例えば、最初の2回のアドレッシングにおいて、アドレッシングn+1の8個のデータと、アドレッシングn+2の8個のデータを取得する場合、使用しないアドレッシングn+2の局所位置番号(論理プロセッサ番号を8で割った余り)「4」から「7」のデータを記憶する。そして、次のアドレッシングでは、アドレッシングn+3の8個のデータを取得する。これにより、記憶していたアドレッシングn+2の局所位置番号「4」から「7」のデータと、新たに取得したアドレッシングn+3の局所位置番号「0」から「3」のデータを使用可能な状態になる。この場合、使用しないアドレッシングn+3の局所位置番号「4」から「7」のデータは記憶され、後続の処理に使用される。
以上のように、全体制御装置105は命令に異なるプロセッサのレジスタ参照があれば、アドレッシングの開始だけ2回アクセスさせる。ただし、本事例の場合、異なるプロセッサのレジスタ参照であっても、8の倍数の相対的な参照であれば、アドレッシングが2つにまたがることはないため、2回アクセスさせる必要はない。
マルチプレクサ103は、アドレッシングn+1とアドレッシングn+2のデータに対して、図10に示すように、物理プロセッサの番号0から3までにアドレッシングn+1のデータを配分し、物理プロセッサの番号4から7までにアドレッシングn+2のデータを配分する。前者は、論理プロセッサの局所位置番号4から7をシフトしてそれぞれに与える。同様に後者は、論理プロセッサの局所位置番号0から3をシフトしてそれぞれに与える。
以上により、横方向の異なる論理プロセッサへのレジスタが参照可能となる。
次に縦方向の異なる論理プロセッサへのレジスタ参照方法について述べる。ここで、縦方向の処理は画像処理の上下の画素の演算を行うこととする。
図7にあるように、本実施形態のマルチプロセッサ装置100は、X座標に対して全ての命令の実行が終了するまで、異なるY座標の実行は行わない。従って、異なるY座標の処理中の値は参照できない。ただし、新たなY座標のプログラム開始時点で、前のY座標で処理し終わった結果がレジスタメモリ106に残っている。これを参照することで、Y座標の小さい方の論理プロセッサのレジスタ値が使用できる。
ここで、レジスタR0からR3を窓として利用し、異なるY座標の処理結果を再利用させることを考える。すなわち、Rn(n=0から3)が現在のY座標−4+nの処理結果を格納しておくものとする。プログラムの開始時はこのままR0からR3を使用すればいいが、次のY座標の処理する場合、新たにR0からR3を更新する必要がある。
Y座標を更新するたびにプログラムが変えるのは非効率なため、どのY座標の処理であっても、R0からR3は次のY座標の処理から見て同じ相対位置に見せなければならない。従って、X座標の処理を終えた時点で、R1からR0へ、R2からR1へ、R3からR2へ、さらにR3には現行のY座標の結果を転送しなければならない。これをプログラム上で行うと、数命令消費することになる。
このため、レジスタを選択するマルチプレクサ103に対して、命令で指定されたオペランド番号にY座標の最下位の4bitを加えることにする。4bitはレジスタ数の最大(ここでは「16」)をカバーできるbit数である。例えば、Y=0では+0、Y=22(10110)では+6(0110)、Y=23(10111)では+7(0111)となる。Y=23を処理する時点で、R0はY=22の処理におけるR1に相当する。このように、R0からR3まで、古い順すなわちY座標の小さい順にしかるべきデータが並ぶことになる。
なお、Y座標の大きい方の値は、処理していないので参照することができない。しかし、過去の結果のいくつかを参照できるので、Y座標の処理に対して、少し小さいY座標の処理を行うことにすれば、上下を参照して処理することに等しくなる。例えば、Y=100の時点において、Y=96,97,98,99で取得したデータが見えるとする。Y=100の処理ではあるが、Y=98を中心とした処理を行えば、前後のデータを参照することができる。
以上から、図11のように、横方向を参照する場合は命令でシフト数(論理プロセッサ間の距離)を指定し、縦方向を参照する場合は意図的に設けたレジスタの窓を参照するプログラムを作成するだけでよくなる。なお、横方向および縦方向の開始・終了時点(すなわち、外周の画素)は、ミラーリングやコピーなどの端処理を含むものとする。ミラーは座標が−1であれば1、−2であれば2とみなして処理するものであり、コピーは座標が負であれば全て座標0とみなして処理するものである。負だけではなく、座標の最大数を超えた場合も同様である。
本発明の第4の実施形態に係るマルチプロセッサ装置について説明する。本実施の形態は、図7と図9と図12と図13を参照しながら説明する。
SIMD型プロセッサでは分岐があると、全ての論理プロセッサで同じ命令を実行しなければならないため、分岐不要時も分岐させる必要がある。分岐不要時は、レジスタへの書き込みを制限するなどして、分岐しても処理をさせないようにする。これにより、実質的に、プログラムの一部分の処理を飛ばして、後続の処理を実施するジャンプを実現することができる。これは、分岐の有無(分岐フラグ)を記録しておかないと、多重分岐に対応できないことを意味する。
本実施形態のマルチプロセッサ装置100は、論理プロセッサごとに分岐条件を蓄えて、蓄えた情報から処理の有無を決定する。これにより、8個のプロセッサ107に同一の命令を入力している場合でも、プロセッサ107ごとに分岐を実現することができる。ここでレジスタメモリ106は、一般的に使用するレジスタの他に、キャリーやオーバーフローなどの演算結果と上記の分岐条件フラグを持つこととする。
図9に示した4つのユニット構成を想定し、演算結果CC(コンディションコード)を定義しておく。図9の整数ユニット801とメモリアクセスユニット804のコンディションコードはまとめてCCint、浮動小数点ユニットはCCmad、CORDICユニットはCCcorとする。CCは、正負を表すN、ゼロを表すZ、オーバーフローを表すV、キャリーを表すCの4bitからなる。
図12は、分岐フラグF0からF3を生成する過程を示している。レジスタメモリ106に含まれる分岐フラグ111は、4つのレベルF0からF3で構成される。分岐フラグ111を生成するため元情報の選択は、選択テーブル112に基づいて行われる。当該選択は、命令の中で指定される。
生成テーブル113は、選択テーブル112に基づいて選択された元情報を構成する4bitの全ての組み合わせ(2の4乗の16パターン)を表しており、4bitの各桁の状態から更新用の分岐フラグを生成するテーブルである。当該生成テーブル113を用いた更新用の分岐フラグの生成も命令の中で指定される。
指示テーブル114は分岐フラグ111と、生成テーブル113で生成した更新用の分岐フラグを組み合わせ新たな分岐フラグを生成(選択)するテーブルである。当該指示テーブル114を用いた新たな分岐フラグの生成も命令の中で指定される。
判断テーブル115は、分岐フラグ111を構成する4bitの全ての組み合わせ(2の4乗の16パターン)を表しており、4bitの各桁状態から判断フラグを生成(選択)するテーブルである。当該判断テーブル115を用いた判断フラグの生成も命令の中で指定される。
書込み指示テーブル116は、判断テーブル115で生成した判断フラグを元に、レジスタメモリ106への書き込みと、分岐フラグ111への書き込みの有無を決定するテーブルである。当該書込み指示テーブルを用いた書き込みの有無の決定も命令の中で指定される。
図12に示すように、各ユニットの演算結果に付属するCC(CCint、CCmad、CCcor)か、分岐フラグ111のいずれかから、選択テーブル112に基づいて更新用の分岐フラグが生成される。例えば、CCintのNZVCのうちNとZのbitが1の場合に分岐フラグを立てたければ、選択テーブル112は「1」とし、生成テーブル113は2進数表現で「1111000000000000」(NZが両立するパターン)とする。
次に、更新用の分岐フラグを、元の4つのレベルの分岐フラグにどう組み込むかを指示テーブル114に基づいて指示する。例えば、最も過去に生成したフラグを押し出し、空いた箇所に新たな分岐フラグを挿入する場合、指示テーブル114は「2」とする。この指示テーブル114に基づいて生成された結果が、次の分岐フラグ111になる。
一方、図12の分岐フラグ111の状態によって、演算結果をレジスタメモリ106に書き込むか否か、および分岐フラグ111に書き込むか否かを決めておく。例えば、分岐フラグ111のF0とF1の2bitを変化させて4つの状態を作る場合、判断テーブル115で状態ごとの設定を行い、指示テーブル116を「1」にして処理を行う。これを、以下のC言語に近い書き方で説明する(マルチプロセッサに関わるfor文は省略)。
switch (F0,F1) {
case 00:
R0 = R1 + R2;
break;
case 01:
R0 = R1 + R2;
break;
case 10:
R3 = R4 / R1;
break;
case 11:
R0 = R1 + R2;
R3 = R4 / R1;
break;
}
プロセッサ107に与える命令は、R0=R1+R2と、R3=R4/R1の2つだけ用意すればよい。そして、R0=R1+R2はF0とF1が「10」の場合に不活性化する設定(判断テーブル115は2進数表現で0100010001000100=0x4444)を行えばよい。また、R3=R4/R1はF0とF1が「00」と「01」の場合に不活性化する設定(判断テーブル115は2進数表現で0011001100110011=0x3333)を行えばよい。この場合、プロセッサ107に与えるプログラムは以下のようになる。ここで、Judge[]は2進数のテーブル索引をするものとし、F3210は分岐フラグF3からF0をbit連結したものとする。
Judge = 0x4444; if (!Judge[F3210]) R0 = R1 + R2;
Judge = 0x3333; if (!Judge[F3210]) R3 = R4 / R1;
以上説明したように、本構成では、同一命令でありながら、論理プロセッサごとの状態(コンディションコード)で異なる処理を効率的に行うことが可能になる。
次に、命令にプログラム番号が付いており、条件により指定されたプログラム番号へ分岐する場合を述べる。
プログラム番号の分岐は、全ての論理プロセッサの分岐になるため、どの条件で分岐するかを決定しなくてはならない。このような条件は、例えば、上述した判断テーブル115で索引した判断フラグが、論理プロセッサ全てで真になるか、もしくは1つでも真になるか、または真の反対になるかなどさまざまである。
当該条件は命令に記載しておけばよいが、例えば分岐でループさせた場合、ループを抜け出す条件が真になりえない場合がある。これは、論理プロセッサ個々では抜け出す条件になるが、全ての論理プロセッサ(処理しない部分は除く)が揃って抜け出す条件にならない場合が出てくるからである。そこで、条件の記載のほかに、ループ回数の上限を記載する。
ここで図7を見ると、命令0から命令1への切り替わりは、命令0の最後のアドレッシングが終了した時点になる。命令0が関わるパラメータ(オペランド指定など)は一度読み込んで蓄えておくだけでよく、命令1に関しては命令0が読み込まれた直後のサイクル以降に、予め読み込んでおいてもよい。この場合、FIFOメモリ等でパラメータをスタックしておく。
しかしながら、分岐を行う場合、命令0のサイクル37の時点でないと論理プロセッサ全ての分岐フラグの判定ができていない。命令0のサイクル37の時点で分岐した先の命令を取得しようとすると、プロセッサ107の起動がその分遅延してしまう。これは性能劣化に繋がる。
これを解決するため、遅延分岐を採用する。遅延分岐は、命令0が分岐命令であったとしても、無条件で命令1を実行し、命令1の終了時点で分岐を行うものである。この操作により、命令0実行中に命令1のパラメータを取得し、命令1実行中に命令0終了時点に決まる分岐先の命令のパラメータを取得すればよく、プロセッサ107は連続して起動することができる。
以下は、図9の構成時に分岐命令を使用したプログラム例である。64×64のマンデルブロ集合(複素平面上のフラクタル図形)画像生成で、漸化式Xn+1=Xn*Xn−Yn*Yn+a,Yn+1=2XnYn+bの収束回数を記録し図形化するものである。for文以下の先頭番号は命令番号であり、5つの命令で実現する。このうち、命令2,3で最大64のループを行い、収束回数をカウント後、その値を画素値とする。
for (y=0; y<64; y++)
for (x=0; x<64; x++) {
0: R4 = 1/16 * x - 2; R3 = F3210 = 0;
1: R5 = 1/32 * y - 1; R0=R1=0;
2: R2 = R0 * R0 - R1 * R1 + R4; R8 = sqrt(R1 * R1 - 4); R3 += 1;
Judge = 0xaaaa; if (!&Judge[F3210] & (Loop < 64)) goto 2;
Form = 0x3333; F0 |= Form[CCcor];
3: R1 = (R0 * R1 + R5) * 2; R9 = sqrt(R2 * R2 - 4); R0 = R2;
Form = 0x3333; F0 |= Form[CCcor];
4: mem[x][y] = R3;
}
命令0と1では、操作するX,Y座標の正規化を行うとともに、分岐フラグ111の初期化と変数の初期化を行う。
命令2では、浮動小数点ユニット802で漸化式の計算(R2)と、CORDICユニット803で収束判定の計算(R8)を行う。また、収束回数R3をインクリメントする。ここで、分岐フラグ111のF0を見て、全ての論理プロセッサ(処理しない部分は除く)が1でない場合、命令2をループさせる(命令中の記号「!&」は否定と全てと言う意味)。ループ回数は最大64に設定しており、遅延分岐なので命令3は必ず実行される。また、CORDICユニット803の結果がオーバーフローV(表現できない結果、すなわちR*R−2*2<0)でなければ、F0に上書きさせる。これは、R1が2以上で発散・終了したことを示す。
命令3では、命令2同様、浮動小数点ユニット802で漸化式の計算(R1)と、CORDICユニット803で収束判定の計算(R9)を行う。分岐フラグF0も命令2同様の判定を行い、結果を上書きさせる。
命令4では、収束度を外部メモリ102に書き出す。
上記のプログラムを実行すると、図13に示すシミュレーション結果が得られる。プログラムは命令2と3をループするので平均2サイクル消費し、平均16回で収束する場合、プロセッサ数が8個であれば、1画素あたり2×16/8=4サイクルの性能が得られる。もし、従来のプロセッサで行うとすれば、条件分岐と演算を数サイクルかけて実行することになり、数倍の性能差が生じる。
このように、分岐フラグを集約することで、少ない命令数でプログラムが実行できる。特に、演算器を並列に用いて命令数を少なくするシステムで効果を発揮する。
以上説明したように、本明細書は、外部メモリ、複数のプロセッサ、外部メモリ、複数のプロセッサ、メモリ集約装置、レジスタメモリ、マルチプレクサ、及び全体制御装置を備えるマルチプロセッサ装置を開示している。この構成において、メモリ集約装置は、複数のプロセッサのメモリアクセスを集約する。レジスタメモリは、プロセッサが管理するレジスタ数とプロセッサの最大処理数の積の数が用意される。マルチプレクサは、プロセッサのレジスタアクセスに対し与えられた命令に従ってレジスタメモリのアクセスを行う。全体制御装置は、命令からパラメータを抽出しプロセッサとマルチプレクサに与え制御するとともに、与えられた処理数分を同一命令にてプロセッサでレジスタメモリのアドレッシングを変化させて順次処理させ、処理数分が終われば次の命令に切り替えて与えられた処理数分の処理を繰り返させる。
以上の構成において、全体制御装置は、上述の与えられた処理数が最大処理数を越える処理数であればいくつかに分割して処理を実行し、上述の与えられた処理数が最大処理数に満たない処理数であればいくつかを結合して処理を実行する構成を採用することができる。
また、以上の構成において、全体制御装置が、命令を切り替えて新たな命令を実行する際に、切替前の命令において、新たな命令の処理順番と同じ処理順番で実施された処理が終了していなければ当該処理が終了するまで新たな命令についての処理を待機させる構成を採用することができる。または、全体制御装置が、切替前の命令において同じ処理順番で実施された処理のレジスタ書き込み位置と新たな命令でのレジスタ読み込み位置が等しい場合は当該処理が終了するまで新たな命令についての処理を待機させる構成を採用することもできる。あるいは、全体制御装置が、切替前の命令において、新たな命令の処理順番と同じ処理順番で実施されるとともに、予め指定された命令数以前に実施された処理が終了していなければ当該処理が終了するまで新たな命令についての処理を待機させる構成を採用することもできる。この場合、全体制御装置は、予め指定された命令数よりも後に実施された処理については終了を確認することなく、新たな命令についての処理を実施する。
さらに、以上の構成において、全体制御装置が、与えられた命令から各プロセッサによる処理順番に関する相対的なシフト量を抽出して、当該シフト量をマルチプレクサに与えるとともに、当該シフト量がプロセッサの数の整数倍以外であればレジスタメモリへのアドレッシングを最初だけ2回行うよう指示する構成を採用することもできる。この場合、マルチプレクサは、レジスタメモリのアドレッシングで得られるデータと、過去のアドレッシングで得られたデータから、上述のシフト量に従ってデータをシフトさせて抽出するとともに、当該抽出したデータを複数のプロセッサに与える構成にすることができる。この構成により、レジスタアクセス時にアドレッシングとデータのシフトだけで、プロセッサ間のデータ交換が可能であり、特に、画像処理など2D処理に有効である。
加えて、以上の構成において、プロセッサは、与えられた命令と個々の演算結果から分岐条件を示すフラグを生成し、命令に従ってレジスタメモリに格納された複数の分岐フラグと組み合わせ新たな分岐フラグとしてレジスタメモリに格納する構成を採用することができる。この場合、プロセッサは与えられた命令と個々の前記レジスタメモリに格納された複数の分岐フラグから、レジスタメモリへの演算結果の書き込みの有無、もしくは指定された命令への移動の有無を決定する。この構成を採用することで、マルチプロセッサ装置の弱点である分岐に対し、複数の条件を凝縮することで、消費する命令数を少なくすることができる。
本発明のマルチプロセッサ装置は、計算機システムの応用であるデジタルAV機器、携帯端末、携帯電話、コンピュータ機器、車載制御機器、医療機器などに応用できる。
100 マルチプロセッサ装置
101 メモリ集約装置
102 外部メモリ
103 マルチプレクサ
105 全体制御装置
106 レジスタメモリ
107 プロセッサ

Claims (5)

  1. 外部メモリと、
    複数のプロセッサと、
    前記複数のプロセッサのメモリアクセスを集約するメモリ集約装置と、
    前記プロセッサが管理するレジスタ数と前記プロセッサの最大処理数の積の数のレジスタメモリと、
    前記プロセッサのレジスタアクセスに対し与えられた命令に従って前記レジスタメモリのアクセスを行うマルチプレクサと、
    命令からパラメータを抽出し前記プロセッサと前記マルチプレクサに与え制御するとともに、与えられた処理数分を同一命令にて前記プロセッサで前記レジスタメモリのアドレッシングを変化させて順次処理させ、処理数分が終われば次の命令に切り替えて与えられた処理数分の処理を繰り返させる全体制御装置と、
    を備えるマルチプロセッサ装置。
  2. 前記全体制御装置は、前記与えられた処理数が前記最大処理数を越える処理数であればいくつかに分割して処理を実行し、前記与えられた処理数が前記最大処理数に満たない処理数であればいくつかを結合して処理を実行する、請求項1記載のマルチプロセッサ装置。
  3. 前記全体制御装置は、命令を切り替えて新たな命令を実行する際に、切替前の命令において、新たな命令の処理順番と同じ処理順番で実施された処理が終了していなければ当該処理が終了するまで新たな命令についての処理を待機させる、または切替前の命令において同じ処理順番で実施された処理のレジスタ書き込み位置と新たな命令でのレジスタ読み込み位置が等しい場合は当該処理が終了するまで新たな命令についての処理を待機させる、あるいは切替前の命令において、新たな命令の処理順番と同じ処理順番で実施されるとともに、予め指定された命令数以前に実施された処理が終了していなければ当該処理が終了するまで新たな命令についての処理を待機させる、請求項1記載のマルチプロセッサ装置。
  4. 前記全体制御装置は、与えられた命令から前記各プロセッサによる処理順番に関する相対的なシフト量を抽出して、当該シフト量を前記マルチプレクサに与えるとともに、当該シフト量が前記プロセッサの数の整数倍以外であれば前記レジスタメモリへのアドレッシングを最初だけ2回行うよう指示し、
    前記マルチプレクサは、前記レジスタメモリのアドレッシングで得られるデータと、過去のアドレッシングで得られたデータから、前記シフト量に従ってデータをシフトさせて抽出するとともに、当該抽出したデータを前記複数のプロセッサに与える、請求項1記載のマルチプロセッサ装置。
  5. 前記プロセッサは、与えられた命令と個々の演算結果から分岐条件を示すフラグを生成し、命令に従って前記レジスタメモリに格納された複数の分岐フラグと組み合わせ新たな分岐フラグとして前記レジスタメモリに格納し、
    前記プロセッサは与えられた命令と個々の前記レジスタメモリに格納された複数の分岐フラグから、前記レジスタメモリへの演算結果の書き込みの有無、もしくは指定された命令への移動の有無を決定する、請求項1記載のマルチプロセッサ装置。
JP2016542545A 2014-08-12 2015-08-05 マルチプロセッサ装置 Active JP6551751B2 (ja)

Applications Claiming Priority (3)

Application Number Priority Date Filing Date Title
JP2014164137 2014-08-12
JP2014164137 2014-08-12
PCT/JP2015/072246 WO2016024508A1 (ja) 2014-08-12 2015-08-05 マルチプロセッサ装置

Publications (2)

Publication Number Publication Date
JPWO2016024508A1 true JPWO2016024508A1 (ja) 2017-06-01
JP6551751B2 JP6551751B2 (ja) 2019-07-31

Family

ID=55304138

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2016542545A Active JP6551751B2 (ja) 2014-08-12 2015-08-05 マルチプロセッサ装置

Country Status (3)

Country Link
US (1) US10754818B2 (ja)
JP (1) JP6551751B2 (ja)
WO (1) WO2016024508A1 (ja)

Families Citing this family (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US11500632B2 (en) 2018-04-24 2022-11-15 ArchiTek Corporation Processor device for executing SIMD instructions
US11561694B2 (en) * 2020-06-04 2023-01-24 Fujitsu Limited Arithmetic processor and arithmetic apparatus
EP4268177A1 (en) * 2020-12-23 2023-11-01 Imsys AB A method and system for rearranging and distributing data of an incoming image for processing by multiple processing clusters
US20220207148A1 (en) * 2020-12-26 2022-06-30 Intel Corporation Hardening branch hardware against speculation vulnerabilities
CN114553700A (zh) * 2022-02-24 2022-05-27 树根互联股份有限公司 设备分组方法、装置、计算机设备及存储介质

Family Cites Families (14)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPH077385B2 (ja) * 1983-12-23 1995-01-30 株式会社日立製作所 データ処理装置
US5790879A (en) * 1994-06-15 1998-08-04 Wu; Chen-Mie Pipelined-systolic single-instruction stream multiple-data stream (SIMD) array processing with broadcasting control, and method of operating same
US5513366A (en) * 1994-09-28 1996-04-30 International Business Machines Corporation Method and system for dynamically reconfiguring a register file in a vector processor
US7100026B2 (en) * 2001-05-30 2006-08-29 The Massachusetts Institute Of Technology System and method for performing efficient conditional vector operations for data parallel architectures involving both input and conditional vector values
JP3971535B2 (ja) * 1999-09-10 2007-09-05 株式会社リコー Simd型プロセッサ
US6892361B2 (en) * 2001-07-06 2005-05-10 International Business Machines Corporation Task composition method for computer applications
US8041929B2 (en) * 2006-06-16 2011-10-18 Cisco Technology, Inc. Techniques for hardware-assisted multi-threaded processing
JP4801605B2 (ja) 2007-02-28 2011-10-26 株式会社リコー Simd型マイクロプロセッサ
US7627744B2 (en) 2007-05-10 2009-12-01 Nvidia Corporation External memory accessing DMA request scheduling in IC of parallel processing engines according to completion notification queue occupancy level
JP5049802B2 (ja) * 2008-01-22 2012-10-17 株式会社リコー 画像処理装置
US20100115233A1 (en) * 2008-10-31 2010-05-06 Convey Computer Dynamically-selectable vector register partitioning
US8542732B1 (en) * 2008-12-23 2013-09-24 Elemental Technologies, Inc. Video encoder using GPU
US8112551B2 (en) * 2009-05-07 2012-02-07 Cypress Semiconductor Corporation Addressing scheme to allow flexible mapping of functions in a programmable logic array
JP6081300B2 (ja) * 2013-06-18 2017-02-15 株式会社東芝 情報処理装置及びプログラム

Also Published As

Publication number Publication date
JP6551751B2 (ja) 2019-07-31
US10754818B2 (en) 2020-08-25
WO2016024508A1 (ja) 2016-02-18
US20170116153A1 (en) 2017-04-27

Similar Documents

Publication Publication Date Title
US9830156B2 (en) Temporal SIMT execution optimization through elimination of redundant operations
RU2427895C2 (ru) Оптимизированная для потоков многопроцессорная архитектура
JP6551751B2 (ja) マルチプロセッサ装置
CN111104164A (zh) 一种用于执行矩阵乘运算的装置和方法
US20110231616A1 (en) Data processing method and system
CN117724763A (zh) 用于矩阵操作加速器的指令的装置、方法和系统
GB2458554A (en) Coalescing memory accesses from multiple threads in a parallel processing system
US20220121444A1 (en) Apparatus and method for configuring cooperative warps in vector computing system
US8370845B1 (en) Method for synchronizing independent cooperative thread arrays running on a graphics processing unit
JP6493088B2 (ja) 演算処理装置及び演算処理装置の制御方法
US20210166156A1 (en) Data processing system and data processing method
CN108470211B (zh) 一种卷积计算的实现方法、设备和计算机存储介质
US9286114B2 (en) System and method for launching data parallel and task parallel application threads and graphics processing unit incorporating the same
JP2013196706A (ja) ミニコア基盤の再構成可能プロセッサ、そのためのスケジュール装置及び方法
CN111459543B (zh) 一种管理寄存器文件单元的方法
CN102629238B (zh) 支持向量条件访存的方法和装置
US20220206800A1 (en) Apparatuses, methods, and systems for instructions for aligning tiles of a matrix operations accelerator
US6785743B1 (en) Template data transfer coprocessor
US8413151B1 (en) Selective thread spawning within a multi-threaded processing system
US9477628B2 (en) Collective communications apparatus and method for parallel systems
US8473948B1 (en) Method for synchronizing independent cooperative thread arrays running on a graphics processing unit
CN202133997U (zh) 一种数据的重排装置
CN102012802A (zh) 面向向量处理器数据交换的方法及装置
JP4444305B2 (ja) 半導体装置
CN112506853A (zh) 零缓冲流水的可重构处理单元阵列及零缓冲流水方法

Legal Events

Date Code Title Description
A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A821

Effective date: 20161209

A621 Written request for application examination

Free format text: JAPANESE INTERMEDIATE CODE: A621

Effective date: 20180327

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20180411

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

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20190619

R150 Certificate of patent or registration of utility model

Ref document number: 6551751

Country of ref document: JP

Free format text: JAPANESE INTERMEDIATE CODE: R150

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250