JP5885481B2 - 情報処理装置、情報処理方法、及びプログラム - Google Patents

情報処理装置、情報処理方法、及びプログラム Download PDF

Info

Publication number
JP5885481B2
JP5885481B2 JP2011264112A JP2011264112A JP5885481B2 JP 5885481 B2 JP5885481 B2 JP 5885481B2 JP 2011264112 A JP2011264112 A JP 2011264112A JP 2011264112 A JP2011264112 A JP 2011264112A JP 5885481 B2 JP5885481 B2 JP 5885481B2
Authority
JP
Japan
Prior art keywords
data
core
thread
processing
bank
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Active
Application number
JP2011264112A
Other languages
English (en)
Other versions
JP2013117790A (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.)
Canon Inc
Original Assignee
Canon 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 Canon Inc filed Critical Canon Inc
Priority to JP2011264112A priority Critical patent/JP5885481B2/ja
Priority to US13/684,353 priority patent/US9274831B2/en
Publication of JP2013117790A publication Critical patent/JP2013117790A/ja
Application granted granted Critical
Publication of JP5885481B2 publication Critical patent/JP5885481B2/ja
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/46Multiprogramming arrangements
    • G06F9/48Program initiating; Program switching, e.g. by interrupt
    • G06F9/4806Task transfer initiation or dispatching
    • G06F9/4843Task transfer initiation or dispatching by program, e.g. task dispatcher, supervisor, operating system
    • G06F9/4881Scheduling strategies for dispatcher, e.g. round robin, multi-level priority queues
    • 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/30087Synchronisation or serialisation 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/3885Concurrent instruction execution, e.g. pipeline or look ahead using a plurality of independent parallel functional units
    • G06F9/3889Concurrent instruction execution, e.g. pipeline or look ahead using a plurality of independent parallel functional units controlled by multiple instructions, e.g. MIMD, decoupled access or execute

Landscapes

  • Engineering & Computer Science (AREA)
  • Software Systems (AREA)
  • Theoretical Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Advance Control (AREA)
  • Multi Processors (AREA)
  • Image Processing (AREA)
  • Memory System (AREA)
  • Executing Machine-Instructions (AREA)

Description

本発明は、リダクション処理を行う並列計算機に対する命令を生成する情報処理装置、情報処理方法、及びプログラムに関する。
近年、CPUコアを複数用いて計算機の処理能力を向上させるアプローチが行われている。特に、GPU(Graphics Processing Unit)にグラフィクス処理以外の処理を行わせる、GPGPU(General Purpose GPU)又はGPU Computingが脚光を浴びている。GPUは数10〜1000個を超える多数の演算コアを持っており、全ての演算コアを動作させた場合のピーク性能は非常に高い。しかしながら、GPUの持つ高い性能を発揮するには、従来とは異なるプログラミング技法が必要になる。以下ではGPGPUとしてはNVIDIA社のCUDAを例にとり説明を行うが、詳細については非特許文献1で述べられているため、割愛する。
GPGPUは通常、SPMD(Single Program−Multiple Data)で動作する。従って、同一プログラム(カーネル)が各々のスレッドで同時に実行される。GPGPUの演算能力は、多くの演算コアに休みなく処理をさせつづけることにより、より向上する。ところで多くのアプリケーションは、並列処理を行った後に各スレッドで行った演算結果をひとつにまとめ上げる処理が必要とする。こうした処理のうち、よく用いられるものとして並列リダクション処理が挙げられる。並列リダクション処理においては、複数のデータが徐々にまとめられて処理結果が得られる。このとき、データがまとめられるにつれて並列リダクション処理に参加するスレッドの数はだんだん減っていく。すなわち、何も行っていないスレッド(アイドルコア)が増えていくため、処理資源が無駄になる。並列リダクションの例としては非特許文献2に詳しいので、ここでは割愛する。
さらに並列リダクション処理においては、各スレッド間での通信が発生する。この通信を共有メモリを介して行う場合、複数のスレッドが同時に通信を行うため、アクセスのコンフリクトが発生する。コンフリクトしたアクセスは順に処理され、処理が完了するまで他のアクセスは待たされることになるため、大きく処理速度が低下してしまう。
特許文献1には、並列に動作可能な複数の演算器を備える計算機上で実行されるプログラムをコンパイルする方法が開示されている。特許文献1の方法によれば、ある命令を出す場合に見積もられた使用レジスタ数が、使用可能なレジスタ数よりも大きい場合に、同時にアクティブなレジスタの数を減らすために、その命令が別の命令に変更される。
特許第3311381号公報
NVIDIA CUDATM NVIDIA CUDA C Programming Guide Version3.1.1 7/21/2010 CUDA Technical Training Volume II:CUDA Case Studies Q2 2008
しかしながら特許文献1に記載の技術は、GPGPUのように複数のコアがSPMDで動作する場合が考慮されていない。すなわち、特許文献1に記載の技術によれば、複数のコアが異なる命令に従って動作するように指示される。しかしながらこのような動作を行わないGPGPUにおいては、特許文献1に記載の技術に従うとかえって動作速度が低下することが考えられる。
本発明は、複数のスレッドが互いに通信しながら演算を行うシステムにおいて、メモリアクセスのコンフリクトを減らしながら演算コアの利用率を高め、演算速度を向上させることを目的とする。
本発明の目的を達成するために、例えば、本発明の情報処理装置は以下の構成を備える。すなわち、
複数のバンクで構成されるメモリに接続された複数の演算コアに対する命令を生成する情報処理装置であって、
前記複数の演算コアは、
前記命令によって指定された演算コアが互いに同期して、
初期データを前記演算コアが保持するレジスタへと読み込む読込サイクルと、
前記演算コアごとに予め対応付けられたバンク内の領域から読み込んだデータと、前記演算コアが保持するレジスタ内のデータとを用いて演算を行い、演算結果を前記演算コアが保持するレジスタに格納する演算サイクルと、
前記メモリへ前記演算コアが保持するレジスタ内のデータを書き込む書込サイクルとを用いるものであり
前記情報処理装置は、
1回の前記書込サイクルにおいて演算コアがメモリへの書き込みアクセスを行う回数に少なくとも関連する値をそれぞれのバンクごとに保持する保持手段と、
前記複数の演算コアのうち、対応するバンクについての前記保持手段の保持する値所定値未満である演算コアを、他の演算コアからデータを受信する継続演算コアとして選択する第1の選択手段と、
前記継続演算コアに対してデータを送信する送信演算コアを選択する第2の選択手段と、
前記送信演算コアに、前記書込サイクルにおいて、レジスタ内のデータを前記継続演算コアに対応付けられたバンク内の領域に書き込ませるための命令と、前記継続演算コアに、当該書込サイクルに続く前記演算サイクルにおいて、当該継続演算コアに対応付けられたバンク内の領域からデータを読み込ませるための命令と、を生成する生成手段と、
前記第1の選択手段が前記継続演算コアを選択する際に、選択された前記継続
演算コアに予め対応付けられたバンクについての前記保持手段の保持する値をインクリメントする更新手段と、
を備えることを特徴とする。
本発明によれば、複数のスレッドが互いに通信しながら演算を行うシステムにおいて、メモリアクセスのコンフリクトを減らしながら演算コアの利用率を高め、演算速度を向上させることができる。
実施例の結果を用いて動作するシステムの構成例。 実施例の結果を用いて動作するシステムを説明する図。 実施例の結果を用いて動作するシステムを説明する図。 実施例の結果を用いて動作するシステムを説明する図。 実施例の結果を用いて動作するシステムを説明する図。 実施例のスケジューリング方法を説明する図。 実施例を適用したシステムの構成例。 実施例の動作を説明する図。 実施例で用いられるデータテーブルの例。 実施例の動作を説明する図。 実施例の動作を説明する図。 実施例の動作を説明する図。 実施例の動作を説明する図。 実施例の動作を説明する図。 実施例の動作を説明する図。 実施例の動作を説明する図。 実施例の動作を実行しうるコンピュータの一例を示すブロック図。
以下、本発明の実施例を図面に基づいて説明する。ただし、本発明の範囲は以下の実施例に限定されるものではない。
図1に、並列リダクション処理を行うシステムの構成例を示す。図1に示すシステムは、以下で詳細に示すように、本実施例に係る情報処理装置が定めたスケジューリングに従って処理を行う。演算部1は、複数の処理エレメントPE(演算コア)を備える。図1の例では、演算部1は8つの処理エレメントを備え、それぞれの処理エレメントをPE0(10)〜PE7(17)と呼ぶことにする。また、各々の処理エレメントPEはクロスバスイッチ2を介して共有メモリ4へアクセスすることが可能である。
共有メモリ4は複数のバンクに分かれており、各バンクはそれぞれ異なるメモリコントローラを経由してクロスバスイッチ2と接続される。図1の例では、共有メモリ4は4つのバンクに分かれており、それぞれのバンクをバンク0(40)〜バンク3(43)と呼ぶことにする。また、図1のシステムはバンク0〜バンク3のそれぞれに対応するメモリコントローラを備え、それぞれメモリコントローラ0(30)〜メモリコントローラ3(33)と呼ぶことにする。
演算部1が有するそれぞれの処理エレメントPEが、共有メモリ4に対して同時にアクセス要求を発行する場合がある。異なるバンクへのアクセス要求が発行された場合であれば、演算部1は遅延なく共有メモリ4にアクセスすることができる。しかし、同一バンクへのアクセス要求が同時に発行された場合(これをバンクコンフリクトと呼ぶ)、メモリコントローラがこれらのアクセス要求を処理するためにはある程度の時間を要する。またバンクコンフリクトによる処理遅延は、同一のメモリコントローラに対するアクセス要求が多いほど、大きくなる。
図2は処理エレメント(PE0(10)〜PE7(17))のひとつの構成をさらに詳細に示した例である。処理ユニットPU100はあらゆる演算を行う。処理ソフトウェアには、処理動作の主体であるスレッドが、この処理ユニットPU100上で動作しているように見える。なお、以降の説明では、処理ユニットPEn内の処理ユニットPU100PEで動作しているスレッドのことを、スレッドnと呼ぶ。すなわち、処理ユニットPE0〜PE7のそれぞれで動作しているスレッドを、スレッド1〜7と呼ぶ。本実施例において、全スレッドは同一プログラムの同一行を実行する。このため、いくつかのスレッドは必要のない処理を行うことがある。このような場合、不図示のマスクレジスタによって処理結果は破棄される。
リダクション処理は、処理エレメントが複数のデータから1つのデータを算出することを繰り返すことにより行われる。この処理を本明細書では統合処理と呼ぶことにする。例えば、多数のデータのうち2個ずつを統合することを繰り返すことにより、多数のデータから1つの処理結果(演算処理結果)を得ることができる。統合処理の例としては、複数のデータを加算すること、複数のデータの最大値を求めること、複数のデータの最小値を求めること、などがある。もっとも、その他の統合処理が本実施例において採用されてもよい。リダクション処理においては多数のデータからいくつかのデータを選択することと選択されたデータを統合することとが繰り返されるが、どのデータを先に選択しても通常は同じ結果が得られる。
統合処理においてPU100は、処理レジスタ内(101)の値と、データレジスタ内内(102)の値とを用いて演算を行い、演算結果を処理レジスタ101に書き戻す。データレジスタ102は、1以上のレジスタで構成されうる。図2の例では、データレジスタ102はデータレジスタ0(1020)及びデータレジスタ1(1021)を有する。また、リダクション処理を開始するにあたって、各処理エレメントのローカルレジスタ103は、予め初期データを格納している。この初期データは、リダクション処理を開始するにあたって不図示の記憶媒体からローカルレジスタ103へと読み込まれてもよい。本実施例において処理エレメントPEは2つのデータレジスタ1020,1021を有する。しかしながら、処理エレメントPEが有するデータレジスタの数は1つでもよいし、3つ以上でもよい。
図3は、共有メモリ4のメモリ領域がどのようにバンクにマップされているかを表す。図3において、1番目のデータはバンク0に、2番目のデータはバンク1に、3番目のデータはバンク2に、4番目のデータはバンク3に、それぞれマップされている。そして、5〜8番目のデータもまた、それぞれバンク0〜バンク3にマップされている。
図4は共有メモリ4に格納されるデータに対する、メモリ領域の割当て例である。それぞれの四角形はデータが格納される1つの領域を表し、四角形の内部に書かれている番号は、マップされているバンクの番号である。つまり、それぞれのメモリ領域にアクセスする場合には、番号で示されるバンク内へのアクセスが行われる。本実施例においては、10グループの初期データ群のそれぞれについて、リダクション処理が行われるものとする。すなわち、1グループの初期データ群を構成するそれぞれのデータが各処理エレメントPEに格納されている。本実施例においては、1グループの初期データ群は8個の初期データで構成され、それぞれの初期データは各処理エレメントPEのローカルレジスタ103に格納されている。もっとも、1グループの初期データ群を構成する初期データの数が、処理エレメントPEの数に一致している必要はない。
各処理エレメントPEは、この1グループの初期データ群についてリダクション処理を行い、処理結果を得る。同様に各処理エレメントPEは、他の9グループについても、初期データ群を構成するデータを格納している。そして各処理エレメントPEは、他の9グループの初期データ群についてもリダクション処理を行い、9個の処理結果を得る。このように得られたリダクション処理結果は、共有メモリ内の結果出力領域51に出力される。結果出力領域51は10グループのそれぞれに対応する10個の領域(510〜519)を有し、10個の出力結果は先頭から順に格納される。
また、共有メモリ4は通信用エリア52を備える。この通信用エリア52は、スレッド間の通信のために用いられる。各スレッドには、予め通信用エリアが割り当てられて(対応付けられて)いる。具体的には、通信領域520〜527は、それぞれスレッド0〜スレッド7に割り当てられている。そしてスレッド0〜スレッド7は、それぞれに割り当てられた通信領域520〜527内のデータを読み込むように構成されている。
また、それぞれの通信領域520〜527は、それぞれのデータレジスタ1020,1021に対応するデータ領域を有している。本実施例においては1つの処理エレメントPEは2つのデータレジスタ1020,1021を有するため、それぞれの通信領域520〜527は2つのデータ領域を有する。具体的には、通信領域520はデータ領域5200と5201とを有し、通信領域527はデータ領域5270と5271とを有する。それぞれのデータレジスタは、対応するデータ領域内のデータを読み込むように構成されている。
例えばスレッド3からスレッド2へと通信を行う場合について、具体的に説明する。まずスレッド3は、データ領域5220又はデータ領域5221にデータを書き込む。次にスレッド2は、データ領域5220又はデータ領域5221内のデータを、データレジスタ1020又は1021に書き込む。この際、データ領域5220内のデータはデータレジスタ0(1020)へと、データ領域5221内のデータはデータレジスタ1(1021)へと、それぞれ読み込まれる。このように、各データレジスタが読み込むデータが格納されているデータ領域は、予め固定的に定められている。
図5は、並列リダクション処理における、処理ユニットPU100上で動作している1つのスレッドが行う統合処理を示すフローチャートである。ここで、この1つのスレッドをスレッドAと呼ぶ。ステップS11でスレッドAは、ローカルレジスタ103内の初期データを処理レジスタ101に読み込む。ステップS12でスレッドAは、他のスレッドからリダクション対象データが送られてきている場合、通信用エリア52からデータレジスタ0,1(1020,1021)にデータを読み込む。ステップS13でスレッドAは、処理レジスタ101内のデータとデータレジスタ0,1(1020,1021)内のデータとの統合処理を行う。例えば、統合処理として最大値を求める場合、処理レジスタ101内の値が“3”、データレジスタ0(1020)内の値が“5”であるならば、処理結果として”5”が得られる。そしてスレッドAは、得られた処理結果を処理レジスタ101に書き戻す。この例では、統合処理により処理レジスタ101内の値は“5”に更新される。なお、初期データをローカルレジスタ103から読み出し、統合処理をすることなく読み出した値を他のスレッドに渡す場合は、ステップS12およびS13の処理は省略される。
ステップS19でスレッドAは、さらにリダクション処理を行うか否かを判定する。例えば、他のスレッドからリダクション対象データが送られてきている場合に、送られてきたデータを用いてリダクション処理を行うことができる。さらにリダクション処理を行う場合、処理はステップS12に戻る。さらなるリダクション処理を行わずに処理結果を共有メモリ4に書き込む場合、処理はステップS14に進む。
ステップS14においてスレッドAは、処理レジスタ101内の値を共有メモリ4に書き込む。例えば、処理結果を他のスレッドに渡す場合、スレッドAは、通信用エリア52内の相手スレッドについてのデータ領域に、処理レジスタ101内の値を書き込む。またもし1グループの初期データ群に対するリダクション処理が完了したのであれば、スレッドAは結果出力領域51内の対応する領域(510〜519)に処理レジスタ101内の値を書き込む。
並列リダクション処理においては、ステップS12及びステップS13における繰り返し回数は、それぞれのスレッドによって異なる。したがって、あるスレッドがステップS12を実行しようとする際に、別のスレッドではステップS14を実行しようとしていることがありえる。しかしながら上述のように、本実施例においては各スレッドは一度に同じ命令を実行するように構成されている。したがって、このように異なるスレッドが異なるステップを実行しようとすることは、実行速度に大きなペナルティをもたらしうる。
本実施例においては、図6のように、1回の統合処理が、初期データ設定フェーズ(ステップS21、読込サイクル)、読込・統合処理フェーズ(ステップS22、演算サイクル)、及び結果書込みフェーズ(ステップS23、書込サイクル)の3つに分けられる。そして、命令によって指定された各スレッドが同期して各々のフェーズを開始するように、本実施例に係る情報処理装置はスケジューリングを行う。図5と図6とを比較すると、ステップS21はステップS11に、ステップS22はステップS12およびS13に、ステップS23はステップS14に、それぞれ対応する。これらのフェーズを繰り返すことにより、リダクション処理の結果がメモリに書き込まれる。
本実施例によれば、あるスレッドで読込・統合処理フェーズS22(共有メモリ読込S12及び統合処理S13)を実行している場合、他のスレッドも読込・統合処理フェーズS22を実行するように、スケジューリングが行われる。読込・統合処理フェーズS22を実行する必要のないスレッドによる処理結果はマスクレジスタによって破棄されるため、実質的にはこのようなスレッドは何も処理をしていない状態(アイドル状態)となる。本実施例の方法によれば、一見アイドル状態の時間が増えるように見える。しかしながら、異なる処理を複数のスレッドが同時に実行しようとすると、一方が処理をしている間、他方のスレッドはアイドル状態となる。もちろん逆も成り立つため、アイドル状態にある時間がかえって増えてしまう。そのため、本実施例のように複数のスレッドに同期して同じ処理を行わせることにより、アイドル状態にある時間が減り、より効率的な処理が実現されることが期待される。
スレッド間通信は共有メモリ4上の通信用エリア52を介して行われ、リダクション結果は結果出力領域51に書き込まれる。この際、複数のスレッドから共有メモリ4の同じバンクに対して同時にアクセスが行われると、バンクコンフリクトが起きるため、このことは速度的に大きなペナルティとなる。そこで本実施例では、バンクへの同時アクセス数は、許容できる限界の数(以下、許容アクセス数と呼ぶ)以下となるように制御される。なお、以下の説明において、「バンクコンフリクト数=同時アクセス数−1」であり、「許容バンクコンフリクト数=許容アクセス数−1」である。
本実施例に係る情報処理装置であるスケジューリングシステム6は、各スレッドに対する命令を順次生成することにより、各スレッドの動作をスケジューリングする。スケジューリングシステム6は、図1に示した実行環境に接続されていてもよいし、接続されていなくてもよい。例えば、実行環境とは独立なスケジューリングシステム6が、以下で説明する処理を行い、各スレッドに対する命令を生成してもよい。
生成された命令は命令出力バッファ61に出力される。命令は例えば、実行環境におけるプログラム(たとえばCUDAのソースコード)という形で出力されうる。出力された命令は、例えば記憶媒体を介して、図1に示される実行環境へと入力されてもよい。そして、出力された命令に従って、各スレッドは動作を行う。こうして、それぞれのスレッドの動作がスケジューリングされる。スケジューリング処理を予め行っておくことは、実行速度を向上させる点で有利である。
また、命令出力バッファ61に出力された命令は、図1に示される実行環境によって直接アクセスされてもよい。この場合命令出力バッファ61は、それぞれの処理エレメントPEに対して(各スレッドに対して)備えられていてもよい。そしてそれぞれのスレッドは、対応する命令出力バッファ61に格納された値に従って動作する。こうして、それぞれのスレッドの動作がスケジューリングされる。
このようなスケジューリングシステム6は、例えば通常のコンピュータを用いて実現することもできる。図17は、このようなコンピュータの基本構成を示す図である。このコンピュータにおいて図7に示すスケジューリングシステム6の機能を実行するためには、各機能構成をプログラムにより表現し、このコンピュータに読み込ませればよい。こうして、このコンピュータでスケジューリングシステム6の全ての機能を実現することができる。この場合、図7をはじめとする構成要素の各々は関数、若しくはCPUが実行するサブルーチンで機能させればよい。
また、コンピュータプログラムは通常、CD−ROM等のコンピュータが読み取り可能な記憶媒体に格納されている。この記憶媒体を、コンピュータが有する読み取り装置(CD−ROMドライブ等)にセットし、システムにコピー若しくはインストールすることで実行可能になる。従って、係るコンピュータが読み取り可能な記憶媒体も本発明の範疇にあることは明らかである。
図17においてCPU1701は、コンピュータ全体の動作をコントロールする。例えCPU1701は、一次記憶1702に格納されたプログラムの実行等を行う。一次記憶1702は、主にRAM等のメモリであり、二次記憶1703に記憶されたプログラム等を読み込んで格納する。二次記憶1703は、例えばハードディスク、CD−ROM等がこれに該当する。プログラムは二次記憶1703に格納され、プログラム実行時に一次記憶1702に読み込んで、CPU1701が実行処理を行う。入力デバイス1704とはコンピュータに情報を入力するデバイスであって、例えばマウスやキーボード等がこれに該当する。入力デバイス1704を用いることにより、ユーザがコンピュータに情報を入力することが可能であってもよい。出力デバイス1705とはコンピュータが情報を出力するデバイスであって、モニタ及びプリンタを含む。読込デバイス1706は、外部の情報を取得するためのデバイスである。読込デバイス1706は、メモリカードリーダ及びネットワークカードを含む。バス1708は、上述の各部を接続し、データのやりとりを可能とする。
図7に本実施例に係るスケジューリング方法を用いて処理エレメントPEに対する命令を生成する、スケジューリングシステム6の構成例を示す。スケジューリングシステム6は、以下の処理を行うことにより、命令出力バッファ61に命令を書き込む。なお、GPGPU上で動作するプログラムの開発においては、同一処理は、同一コードを用いてコーディングすることが通常である。しかしながら、こうしたプログラムを書くためのノウハウは既に知られていることから、本明細書においてはこうしたノウハウについては省略する。
以下では図7を参照しながら、本実施例におけるリダクション処理についてより詳しく説明する。本実施例では上述のように、10グループの初期データ群のそれぞれについてリダクション処理が行われる。以下の説明では、それぞれの初期データ群(データグループ)をデータ0、データ1、・・・、データ9と呼ぶことにする。
リダクションスケジューリング部62は、ワークメモリ63を参照しながら、命令出力バッファ61に命令を書き込む。リダクションスケジューリング部62が行う処理の流れを図8に示す。ステップS31においてリダクションスケジューリング部62は、全てのデータグループについてリダクション処理が終了したか否かをチェックする。リダクション処理が終了している場合、リダクションスケジューリング部62の処理は終了する。リダクション処理が終了していない場合、リダクションスケジューリング部62は以下の1ループのリダクション処理(ステップS32〜ステップS36)を行う。
ステップS32においてリダクションスケジューリング部62は、初期データ設定フェーズS21のスケジューリングを行う。ステップS33においてリダクションスケジューリング部62は、読込・統合処理フェーズS22のスケジューリングを行う。またステップS34及びS35においてリダクションスケジューリング部62は、結果書き込みフェーズS23のスケジューリングを行う。リダクションスケジューリング部62は、共有メモリ4のバンクコンフリクト数を含むリソース使用状況を、ワークメモリ63上でシミュレーションしながら、これらのスケジューリングを行う。ステップS36においてリダクションスケジューリング部62は、次のループにおけるスケジューリングを行うのに先立って、処理対象データテーブル634を更新する。図9(A)〜(D)は、ワークメモリ63上でシミュレーションされたリソース使用状況を示すデータテーブルの例である。以下に、図9(A)〜(D)を参照しながら、これらの処理についてより詳しく説明する。
ステップS32において、リダクションスケジューリング部62の初期設定スケジューリング部621は、初期データ設定フェーズS21のスケジューリングを行う。本実施例においては、スレッド0からスレッド7までの全スレッドに対して、順番にスケジューリングを行う。具体的な例としては、初期設定スケジューリング部621はまず、命令出力バッファ61にスレッド0についての命令を書き込む。その後初期設定スケジューリング部621は、スレッド1〜7についても、命令出力バッファ61に順次命令を書き込む。こうして初期設定スケジューリング部621は、スケジューリングを行うことができる。
図10(A)は、ステップS32の詳細なフローチャートである。ステップS32においては、スレッド0〜7のそれぞれについて図10(A)に示される処理が行われ、それぞれのスレッドに対する処理は同様である。以下では、スレッド0についての処理について説明する。
ステップS41において初期設定スケジューリング部621は、命令出力バッファ61に同期命令を出力する。同期命令によって、各スレッドが初期データ設定フェーズS21を同期して行うことができる。同期命令としては、例えばCUDAでは__syncthreads()という命令が用意されている。
ステップS42において初期設定スケジューリング部621は、ローカルレジスタ103から処理レジスタ101へのデータの読み込みをスケジューリングする。具体的には初期設定スケジューリング部621は、データ0からデータ9までのそれぞれに順次着目する。そして、着目データグループについての初期データをローカルレジスタ103から処理レジスタ101へと読み込ませるか否かを判定する。
図10(B)は、ステップS42のより具体的な処理のフローチャートである。ステップS421で初期設定スケジューリング部621は、スレッド0がいずれかのデータグループに属するデータを処理するようにスケジューリングされているか否かを判定する。この判定は、処理対象データテーブル634を参照して行うことができる。
処理対象データテーブル634は、スレッド数分の要素(本実施例の場合8個)を持つ配列である。それぞれの要素は、各スレッドがどのデータグループを処理対象としているかを示す。各要素は無効を示す値“F”で初期化されている。スケジューリングシステム6が、あるデータグループについての初期データをあるスレッドに読み込ませる命令を生成した際に、そのスレッドに対応する要素には、そのデータグループを示す数値が設定される。例えば図9(A)においては、グループ1についての初期データを読み込む命令が生成されたスレッドに対応する要素には、数値”1”が書き込まれている。また、スケジューリングシステム6が、あるスレッドに対してあるデータグループについてのリダクション処理を完了させる命令を生成した際には、そのスレッドに対応する要素は再度“F”で初期化される。例えばスケジューリングシステム6が、あるスレッドに処理レジスタ101内のデータを出力させる命令を生成した際に、そのスレッドに対応する要素は再度“F”で初期化される。
具体的には、処理対象データテーブル634において着目データグループに対応する要素が”F”ではなければ、スレッド0はいずれかのデータグループに属するデータを処理するようにスケジューリングされていると判定することができる。このような場合初期設定スケジューリング部621は、着目データグループについてのスケジューリングを終了し、次のデータグループに着目して図10(B)の処理を行う。
一方で処理対象データテーブル634においてスレッド0に対応する要素が”F”である場合、処理はステップS422に進む。この場合、スレッド0はデータを処理するようにはスケジューリングされていない。そこで、次に初期設定スケジューリング部621は、着目データグループに属する初期データをスレッド0に読み込ませる命令を生成するか否かを判定する。具体的にはステップS422において初期設定スケジューリング部621は、着目データグループに属する初期データをスレッド0に読み込ませる命令を既に生成しているか否かを判定する。ステップS422の処理は、データタッチテーブル632を参照して行うことができる。
データタッチテーブル632はスレッド数×データグループ数(本実施例の場合、8×10)の二次元配列であり、各要素は予め“F”で初期化されている。各要素はそれぞれのスレッド及びデータグループに対応している。あるスレッドがあるデータグループに属する初期データを読み込む命令が生成された場合、対応する要素に“T”が設定される。
初期設定スケジューリング部621は、スレッド0と着目データグループとに対応する要素に”T”が設定されている場合には、着目データグループに属する初期データをスレッド0に読み込ませる命令は既に生成されているものと判定することができる。この場合、初期設定スケジューリング部621は、着目データグループについてのスケジューリングを終了し、次のデータグループに着目して図10(B)の処理を行う。
一方でスレッド0と着目データグループとに対応する要素に”F”が設定されている場合には、着目データグループに属する初期データをスレッド0に読み込ませる命令はまだ生成されていないものと判定することができる。この場合、処理はステップS423に進む。ステップS423において初期設定スケジューリング部621は、命令出力バッファ61に、着目データグループについての初期データをローカルレジスタ103から処理レジスタ101へと読み込むことをスレッド0に指示する命令を書き込む。さらに初期設定スケジューリング部621は、データタッチテーブル632のスレッド0と着目データグループとに対応する要素を、”T”で更新する。さらに初期設定スケジューリング部621は、処理対象データテーブル634のスレッド0に対応する要素に、着目データグループを示す番号を設定する。
以上の図10(A)の処理をスレッド0〜7のそれぞれについて行うことにより、初期データ設定フェーズS21の処理が完了する。
ステップS33において、リダクションスケジューリング部62の読込・統合スケジューリング部622は、読込・統合処理フェーズS22のスケジューリングを行う。ステップS33においても、ステップS32と同様に、読込・統合スケジューリング部622はスレッド0からスレッド7までの全スレッドに対して順にスケジューリングを行う。図11(A)は、ステップS33の詳細なフローチャートである。ステップS33においても、ステップS32と同様に、スレッド0〜7のそれぞれについて図11(A)に示される処理が行われ、それぞれのスレッドに対する処理は同様である。以下では、スレッド0についての処理について説明する。
ステップS51において読込・統合スケジューリング部622は、ステップS41と同様に、命令出力バッファ61に同期命令を出力する。
ステップS52において読込・統合スケジューリング部622は、通信用エリア52からのデータの読み込み及び統合処理をスケジューリングする。
図11(B)は、ステップS42のより具体的な処理のフローチャートである。ステップS521において読込・統合スケジューリング部622は、スレッド0が継続スレッドであるか否かを判定する。この判定は、継続スレッドテーブル633を参照して行うことができる。
継続スレッド(継続演算コア)とは、前の次の結果書き込みフェーズS23において、処理レジスタ101の値を通信用エリア52に出力しないように命令されたスレッドである。継続スレッドは、読込・統合処理フェーズS22において、他スレッドからの通信データを読み込み、統合処理を行う(ただし、データを読み込まない場合もある)。本実施例においては、後述する通信スレッド決定部624によって、各スレッドが継続スレッドであるか否かが判定されている。
継続スレッドテーブルは、スレッド数分の要素(本実施例の場合8個)を持つ配列であり、それぞれのスレッドに対していくつのスレッドからデータが送られてきているのかを示す。すなわち、継続スレッドテーブルの要素の最小値は0であり、最大値は各処理エレメントPE内のデータレジスタの数(本実施例では2)である。また、継続スレッドではないスレッドに対応する要素は、値“F”を有する。
このように、スレッド0に対応する継続スレッドテーブル内の要素が”F”である場合、読込・統合スケジューリング部622は、スレッド0は継続スレッドではないと判定することができる。ステップS521で継続スレッドではないと判断された場合、スレッド0についてのスケジューリング処理は終了し、読込・統合スケジューリング部622は次のスレッドについて図11(A)の処理を行う。
ステップS521で継続スレッドであると判断された場合、処理はステップS522に進む。ステップS522において読込・統合スケジューリング部622は、「通信用エリア52からデータをデータレジスタ102に読み込む」ことを示す命令を命令出力バッファ61に出力する。それぞれのスレッドが通信用エリアから読み込むデータの数は、継続スレッドテーブル内の、それぞれのスレッドに対応する要素に格納されている。
本実施例においては、スレッド0に対応する継続スレッドテーブル内の要素が”1”である場合、読込・統合スケジューリング部622は、スレッド0にデータ領域5200内の値をデータレジスタ0に読み込ませる命令を生成する。また、スレッド0に対応する継続スレッドテーブル内の要素が”2”である場合、読込・統合スケジューリング部622は、スレッド0にデータ領域5200内の値をデータレジスタ0に読み込ませる命令を生成する。スレッド0に対応する継続スレッドテーブル内の要素が”2”である場合、読込・統合スケジューリング部622はさらに、スレッド0にデータ領域5201内の値をデータレジスタ1に読み込ませる命令を生成する。
このように本実施例においては、各スレッドに対応する継続スレッドテーブル内の要素が示す値がデータレジスタ102の数よりも少ない場合、この要素が示す数のデータを通信用エリアから読み込ませる命令が生成される。この場合読込・統合スケジューリング部622は、より先頭側に位置するデータを優先して読み込ませるように、命令を生成する。しかしながら別の実施例において読込・統合スケジューリング部622は、継続スレッドテーブル内の要素が”F”ではない場合に、全てのデータレジスタ102へと通信用エリア52から値を読み込む命令を生成してもよい。
ステップS523において読込・統合スケジューリング部622は、「処理レジスタ101とデータレジスタ102の間で統合処理を行う」ことを示す命令を命令出力バッファ61に出力する。この統合処理は、処理レジスタ101と各データレジスタ102の間で順次行われる。このような命令を受けたスレッドは、まず処理レジスタ101とデータレジスタ0(1020)との間での統合処理を行い、結果を処理レジスタ101に書き込む。さらにこのスレッドは、処理レジスタ101とデータレジスタ1(1021)との間で統合処理を行って結果を処理レジスタ101に書き込む。
この統合処理は、ステップS522においてデータレジスタ102へと読み込まれた値の数だけ繰り返されれば十分である。例えば、データレジスタ1020にのみ値が読み込まれた場合、すなわちスレッド0に対応する継続スレッドテーブル内の要素が”1”である場合、処理レジスタ101とデータレジスタ0(1020)との間でのみ統合が行われればよい。
しかしながら、データレジスタ102へと読み込まれた値の数に従って分岐処理を行うと、実行環境によってはかえって実行時間がかかってしまうことがある。そこで本実施例においては、ステップS522とステップS523との間で読込・統合スケジューリング部622は、「統合処理を行う必要がないデータレジスタ102のデータを書き換える」命令を命令出力バッファ61に出力する。ここで読込・統合スケジューリング部622は、データレジスタ102の値を、統合処理を行っても結果に影響しない値に書き換えればよい。
具体的な例としては、統合処理として各要素の加算が行われ、スレッド0に対応する継続スレッドテーブル内の要素が”1”である場合、読込・統合スケジューリング部622は「“0”をデータレジスタ1(1021)にセットする」命令を出力すればよい。統合処理として最大値を求める場合も同様である。このような処理を行うことにより、ステップS523において読込・統合スケジューリング部622は、単純に処理レジスタ101と全てのデータレジスタ102との統合処理を行う命令を出力すればよい。この場合、実行時に条件分岐を行わなくてもよい。
ステップS34及びS35において、リダクションスケジューリング部62の結果出力スケジューリング部623及び通信スレッド決定部624は、結果書込みフェーズS23のスケジューリングを行う。結果書込みフェーズS23において各スレッドは、結果出力領域51にリダクション結果を出力するか、又は他のスレッドに対しデータを送信する。本実施例においては、どちらの場合にも共有メモリ4に対する書き込みが行われる。したがって、これらの動作は同一コードで実行可能である。また、1つのスレッドが1回の結果書き込みフェーズS23において両方の動作を行うことはない。したがって本実施例においてそれぞれのスレッドは、1回の結果書込みフェーズS23において、結果出力領域51へリダクション結果を出力するか、他のスレッドに対してデータを送信するか、あるいはアイドル状態にあるようにスケジューリングされる。
もし、結果出力領域51へのリダクション結果の出力と、他のスレッドに対するデータの送信とを、同一コードで実行することが困難であるときは、これらを異なるフェーズにおいて行えばよい。例えば、これらの間でメモリへの書込み手順が大きく異なる場合が挙げられる。この場合、各フェーズの先頭で同期命令出力を行う点を除いて、以下に示す本実施例と同様にスケジューリング処理を行えばよい。
まず、結果出力領域51にリダクション処理の結果が出力されるステップS34について説明する。ステップS34の開始時に、結果出力スケジューリング部623は、バンクコンフリクトテーブル631と継続スレッドテーブル633とを初期化する。具体的には結果出力スケジューリング部623は、バンクコンフリクトテーブル631の各要素に値”0”を格納する。また結果出力スケジューリング部623は、継続スレッドテーブル633の各要素に値”F”を格納する。
ステップS34においても、ステップS32と同様に、結果出力スケジューリング部623はスレッド0からスレッド7までの全スレッドに対して順にスケジューリングを行う。図12(A)は、ステップS34の詳細なフローチャートである。ステップS34においても、ステップS32と同様に、スレッド0〜7のそれぞれについて図12(A)に示される処理が行われ、それぞれのスレッドに対する処理は同様である。以下では、スレッド0についての処理について説明する。
ステップS61において結果出力スケジューリング部623は、ステップS41と同様に、命令出力バッファ61に同期命令を出力する。ステップS62において結果出力スケジューリング部623は、スレッド0の処理レジスタ101に格納されているデータを、結果出力領域51に出力するか否かを判定する。
図12(B)は、ステップS62のより具体的な処理のフローチャートである。ステップS621において結果出力スケジューリング部623は、スレッド0が処理レジスタ101に格納しているデータが、結果出力領域51に出力されるか否かを判定する。処理レジスタ101に格納されているデータが、各データグループについての最終的な処理結果である場合に、このデータは結果出力領域51に出力される。
この判定は例えば、データタッチテーブル632及び処理対象データテーブル634を参照して行うことができる。ここで、スレッド0が処理しているデータグループを着目データグループとする。着目データグループについての処理を予め定められた数のスレッドが開始しており、かつ着目データグループを処理しているスレッドがスレッド0だけである場合に、スレッド0が処理レジスタ101に格納しているデータは結果出力領域51に出力される。ここで、予め定められた数は通常、着目データグループに属する初期データをローカルレジスタ103に有しているスレッドの数に一致する。
着目データグループについての処理を予め定められた数のスレッドが開始している場合、データタッチテーブルにおいて着目データグループに対応する要素”T”の数は予め定められた数に一致する。本実施例においては10スレッドのそれぞれが各データグループを処理するため、着目データグループに対応する要素”T”の数が10である場合に、着目データグループについての処理を予め定められた数のスレッドが開始していると判定できる。また、処理対象データテーブル634において着目データグループに対応する値を有する要素の数が1つである場合、着目データグループを処理しているスレッドはスレッド0だけであると判定することができる。
スレッド0が処理レジスタ101に格納しているデータが、結果出力領域51に出力されない場合、ステップS62の処理は終了し、次のスレッドについて図12(A)の処理が行われる。スレッド0が処理レジスタ101に格納しているデータが、結果出力領域51に出力される場合、処理はステップS622に進む。ステップS622において、結果出力スケジューリング部623は、着目データグループについての処理結果を書き込むバンクへのアクセス要求の数(アクセス回数)を確認する。本実施例においては上述のように、そこで同一バンクに対して同時にアクセスすることが可能なスレッド数の上限(許容アクセス数)を予め定めておき、この上限に従ってスケジューリングを行う。
各バンクに対するアクセス要求の数(管理情報)は、バンクコンフリクトテーブル631で管理され保持される。バンクコンフリクトテーブル631はバンク数分の要素(本実施例では4つ)を持つ配列である。バンクコンフリクトテーブル631の各要素は予め0に初期化されている。そして、結果出力スケジューリング部623が各バンクへのアクセスをスケジューリングするたびに、各バンクに対応する要素に1が加えられる。
そして結果出力スケジューリング部623は、着目データグループについての処理結果を書き込むバンクへのアクセス要求の数が、予め定められた許容アクセス数未満(所定回数未満)であるか否かを確認する。許容アクセス数未満である場合、処理はステップS623に進む。許容アクセス数以上であった場合、スレッド0についての図12Aの処理は終了する。すなわち、現在の結果書込みフェーズS23においてスレッド0に結果出力領域51へと結果を書き込ませる命令は生成されず、次回以降の結果書込みフェーズS23においてスレッド0に結果を書き込ませる命令が生成される。
ステップS623で結果出力スケジューリング部623は、「処理レジスタ101内の値を、結果出力領域51内の着目データグループに対応する領域に書き込む」ことを、スレッド0についての命令出力バッファ61に出力する。さらに結果出力スケジューリング部623は、着目データグループについての処理結果を書き込むバンクに対応する、バンクコンフリクトテーブル631の要素の値に1を加える。
次に、他のスレッドに対しデータが送信されるステップS35における、通信スレッド決定部624の処理について説明する。ステップS35においては、通信スレッド決定部624はスレッド0〜スレッド7について順次スケジューリングを行うのではなく、以下のように処理を行う。
図13Aは、ステップS35の詳細なフローチャートである。ステップS71において通信スレッド決定部624は、全データグループのそれぞれについて、データを送信するスレッド(送信スレッド、送信演算コア)とデータを受信するスレッド(継続スレッド)とを決定する。本実施例では通信スレッド決定部624は、データ0からデータ9までのそれぞれに順次着目し、着目データグループについて送信スレッドと継続スレッドとを決定する。
図13Bは、ステップS71の詳細なフローチャートである。ステップS711で通信スレッド決定部624の継続スレッド決定部6241は、継続スレッドを1つ選択する(第1の選択)。もし継続スレッドがなければ、着目データグループについての図13(B)の処理を終了し、次の着目データグループについて図13(B)の処理を行う。ステップS712で通信スレッド決定部624の送信スレッド決定部6242は、ステップS711で選択された継続スレッドにデータを送信する送信スレッドを判定する(第2の選択)。ステップS711及びステップS712を繰り返すことにより、1組の結果書込フェーズと続く読込・統合処理フェーズとにおいてデータが送受信される継続スレッドと送信スレッドとのセットが繰り返し選択される。
ステップS711のより詳細なフローチャートを図14に示す。ステップS81で継続スレッド決定部6241は、着目データグループを処理しているスレッドから1つを選択する。ここで継続スレッド決定部6241は、通信用エリア52内の対応するデータ領域が属するバンクへの同時アクセス数が最も少ないスレッドを選択する。
どのスレッドが着目データグループを処理しているのかは、処理対象データテーブル634を参照して判定することができる。例えば継続スレッド決定部6241は、処理対象データテーブル634における、各スレッドに対応する要素の値が、着目データグループの番号と一致するか否かを判定すればよい。一致する場合、そのスレッドは着目データグループを処理している。
また継続スレッド決定部6241は、バンクコンフリクトテーブル631を参照して、それぞれのバンクに対する同時アクセス数を判定することができる。上述のように、バンクコンフリクトテーブル631は、それぞれのバンクに対する同時アクセス数を要素として有している。
本実施例のように、対応するデータ領域が属するバンクへの同時アクセス数が最も少ないスレッドを継続スレッドとして選択することにより、それぞれのバンクへの同時アクセス数を平準化させることができる。なお、1つのスレッドが複数のデータ領域からデータを読み込む場合、このスレッドは複数のバンクからデータを読み込むかもしれない。このような場合、継続スレッド決定部6241は、それぞれのバンクについての同時アクセス数を判定する。そして継続スレッド決定部6241は、同時アクセス数の最大値を、スレッドに対応するデータ領域が属するバンクへの同時アクセス数として用いる。こうすることにより、全てのバンクのバンクコンフリクト数を許容アクセス数以下に抑えることができる。
ステップS82において継続スレッド決定部6241は、ステップS711においてスレッドが選択されたか否かを判定する。スレッドが選択されなかった場合、継続スレッド決定部6241は、着目データグループについては継続スレッドがないものと判定する。そして、継続スレッド決定部6241は図13(B)の処理を終了し、次の着目データグループについて送信スレッドと継続スレッドとを決定する。
ステップS83において継続スレッド決定部6241は、ステップS711において選択されたスレッドについて、対応するデータ領域が属するバンクへの同時アクセス数が許容アクセス数未満であるかを否かを判定する。同時アクセス数が許容アクセス数以上である場合、継続スレッド決定部6241は、着目データグループについては更なる継続スレッドがないものと判定する。そして継続スレッド決定部6241は、図13(B)の処理を終了し、次の着目データグループについて送信スレッドと継続スレッドとを決定する。
同時アクセス数が許容アクセス数未満である場合、継続スレッド決定部6241はステップS711において選択されたスレッドを継続スレッドとして判定する。ステップS84において継続スレッド決定部6241は、継続スレッドテーブル633のうちステップS711において選択された継続スレッドに対応する要素を“0”で更新する。さらに継続スレッド決定部6241は、バンクコンフリクトテーブル631において、ステップS711において選択された継続スレッドに対応するデータ領域が属するバンクについての要素の値をインクリメントする(例えば1を加える)。こうして継続スレッド決定部6241は、バンクコンフリクトテーブル631を更新する。そして、処理はステップS712に進む。
ステップS712のより詳細なフローチャートを図15に示す。ステップS91で送信スレッド決定部6242は、ステップS711で選択された継続スレッドにデータを送信する送信スレッドを決定する。具体的には送信スレッド決定部6242は、着目データグループを処理対象としているスレッドのうち、まだ継続スレッド又は送信スレッドとして選択されていないスレッドを送信スレッドとして選択する。各スレッドが継続スレッド又は送信スレッドとして選択されているか否かは、継続スレッドテーブル633を参照して判定することができる。本実施例においては、スレッドに対応する継続スレッドテーブル633内の要素が”F”であり、かつ着目データグループを処理対象としているスレッドを、送信スレッド決定部6242は送信スレッドとして選択すればよい。
本実施例において送信スレッド決定部6242は、1つの継続スレッドに対応する送信スレッドを、継続スレッドが有するデータレジスタ102の数だけ選択する。この場合、各送信スレッドからのデータが、それぞれのデータレジスタ102へと読み込まれる。着目データグループを処理対象としており、かつ継続スレッド又は送信スレッドとして選択されていないスレッドの数がデータレジスタ102の数よりも多い場合、送信スレッド決定部6242は以下のようにして送信スレッドを選択することができる。
すなわち送信スレッド決定部6242は、各スレッドに対応するデータ領域が属するバンクに対する同時アクセス数がより多いスレッドを選択する。本実施例において、送信スレッドに対応するデータ領域には、データの書き込みは行われない。したがって、このように対応するデータ領域が属するバンクに対する同時アクセス数がより多いスレッドを送信スレッドとして選択する(継続スレッドとして選択しない)ことにより、各バンクへの同時アクセス数を平準化することができる。一方で、着目データグループを処理対象としており、かつ継続スレッド又は送信スレッドとして選択されていないスレッドの数が、継続スレッドが有するデータレジスタ102の数よりも少ない場合、送信スレッド決定部6242は全てのスレッドを選択できる。
ステップS92において送信スレッド決定部6242は、継続スレッドテーブル633のうち、ステップS711で決定された継続スレッドに対応する要素を更新する。具体的には送信スレッド決定部6242は、継続スレッドにデータを送信する送信スレッドの数を、継続スレッドに対応する要素として継続スレッドテーブル633に格納する。
ステップS93において送信スレッド決定部6242は、ステップS91で選択された送信スレッドに対して、中間書込み処理を行うように命令を出力する。具体的には送信スレッド決定部6242は、「送信スレッドのそれぞれが、処理レジスタ101の内容を、継続スレッドが読み込むデータ領域にコピーする」ことを示す命令を、命令出力バッファ61に出力する。
例えば継続スレッドがスレッド0、送信スレッドがスレッド2とスレッド3である場合、送信スレッド決定部6242は、「スレッド2が処理レジスタ101の内容をデータ領域5200へコピーする」ことを示す命令を命令出力バッファ61に出力する。また送信スレッド決定部6242は、「スレッド3が処理レジスタ101の内容をデータ領域5201へコピーする」ことを示す命令を命令出力バッファ61に出力する。
図16は、ステップS36のより具体的な処理のフローチャートである。ステップS101でデータテーブル修正部625は、ステップS34においていずれかのスレッドに結果出力領域51に処理レジスタ101の内容を出力させる命令が生成されたか否かを判定する。またデータテーブル修正部625は、ステップS35においていずれかのスレッドに通信用エリア52に処理レジスタ101の内容を出力させる命令が生成されたか否かを判定する。どちらの命令も生成されていないのであれば、図16の処理は終了する。どちらかの命令が生成された場合、処理はステップS102に進む。ステップS102においてデータテーブル修正部625は、処理対象データテーブル634内の、処理レジスタ101の内容を出力する命令の対象となるスレッドに対応する要素を、無効を示す値“F”で更新する。
上述の実施例では、共有メモリのバンク数およびメモリコントローラの数を4、処理エレメントの数を8、処理エレメント内のデータレジスタの数を2、リダクション処理を行うデータグループの数を10とした。しかしながら、本発明はこれらの数に限定されない。また、上述の実施例に係るシステムにおいては、データレジスタ数及び許容アクセス数を変化させることにより、処理時間も変動する。また、最適なデータレジスタ数及び許容アクセス数は、ハードウェアの構成によって異なる。したがって、これらの値を適宜選択することにより、処理時間をより短くすることが可能である。
(他の実施形態)
本発明は、以下の処理を実行することによっても実現される。即ち、上述した実施形態の機能を実現するソフトウェア(プログラム)をネットワーク又は各種記憶媒体を介してシステム或いは装置に供給する。そして、そのシステム或いは装置のコンピュータ(又はCPUやMPU等)がプログラムコードを読み出して実行する。この場合、そのプログラム、及び該プログラムを記憶した記憶媒体は本発明を構成することになる。

Claims (4)

  1. 複数のバンクで構成されるメモリに接続された複数の演算コアに対する命令を生成する情報処理装置であって、
    前記複数の演算コアは、
    前記命令によって指定された演算コアが互いに同期して、
    初期データを前記演算コアが保持するレジスタへと読み込む読込サイクルと、
    前記演算コアごとに予め対応付けられたバンク内の領域から読み込んだデータと、前記演算コアが保持するレジスタ内のデータとを用いて演算を行い、演算結果を前記演算コアが保持するレジスタに格納する演算サイクルと、
    前記メモリへ前記演算コアが保持するレジスタ内のデータを書き込む書込サイクルとを用いるものであり
    前記情報処理装置は、
    1回の前記書込サイクルにおいて演算コアがメモリへの書き込みアクセスを行う回数に少なくとも関連する値をそれぞれのバンクごとに保持する保持手段と、
    前記複数の演算コアのうち、対応するバンクについての前記保持手段の保持する値所定値未満である演算コアを、他の演算コアからデータを受信する継続演算コアとして選択する第1の選択手段と、
    前記継続演算コアに対してデータを送信する送信演算コアを選択する第2の選択手段と、
    前記送信演算コアに、前記書込サイクルにおいて、レジスタ内のデータを前記継続演算コアに対応付けられたバンク内の領域に書き込ませるための命令と、前記継続演算コアに、当該書込サイクルに続く前記演算サイクルにおいて、当該継続演算コアに対応付けられたバンク内の領域からデータを読み込ませるための命令と、を生成する生成手段と、
    前記第1の選択手段が前記継続演算コアを選択する際に、選択された前記継続
    演算コアに予め対応付けられたバンクについての前記保持手段の保持する値をインクリメントする更新手段と、
    を備えることを特徴とする情報処理装置。
  2. 前記第1の選択手段及び前記第2の選択手段は、複数の前記演算コアの中から、1組の書込サイクルと続く演算サイクルとにおいてデータが送受信される前記継続演算コアと前記送信演算コアとのセットを繰り返し選択し、
    前記第1の選択手段は、対応付けられたバンクについての前記保持手段の保持する値がより小さい演算コアを、前記継続演算コアとして選択し、
    前記第2の選択手段は、対応付けられたバンクについての前記保持手段の保持する値がより大きい演算コアを、前記送信演算コアとして選択する
    ことを特徴とする、請求項1に記載の情報処理装置。
  3. 複数のバンクで構成されるメモリに接続された複数の演算コアに対する命令を生成する情報処理装置が行う情報処理方法であって、
    前記複数の演算コアは、
    前記命令によって指定された演算コアが互いに同期して、
    初期データを前記演算コアが保持するレジスタへと読み込む読込サイクルと、
    演算コアごとに予め対応付けられたバンク内の領域から読み込んだデータと、前記演算コアが保持するレジスタ内のデータとを用いて演算を行い、演算結果を前記演算コアが保持するレジスタに格納する演算サイクルと、
    前記メモリへ前記演算コアが保持するレジスタ内のデータを書き込む書込サイクルとを用いるものであり
    前記情報処理装置は、1回の前記書込サイクルにおいて演算コアがメモリに書き込みアクセスを行う回数に少なくとも関連する値をそれぞれのバンクごとに保持する保持手段を備え、
    前記情報処理方法は、
    前記情報処理装置の第1の選択手段が、前記複数の演算コアのうち、対応するバンクについての前記保持手段の保持する値所定値未満である演算コアを、他の演算コアからデータを受信する継続演算コアとして選択する第1の選択工程と、
    前記情報処理装置の第2の選択手段が、前記継続演算コアに対してデータを送信する送信演算コアを選択する第2の選択工程と、
    前記情報処理装置の生成手段が、前記送信演算コアに、前記書込サイクルにおいて、レジスタ内のデータを前記継続演算コアに対応付けられたバンク内の領域に書き込ませるための命令と、前記継続演算コアに、当該書込サイクルに続く前記演算サイクルにおいて、当該継続演算コアに対応付けられたバンク内の領域からデータを読み込ませるための命令と、を生成する生成工程と、
    前記第1の選択工程で前記継続演算コアを選択する際に、前記情報処理装置の更新手段が、選択された前記継続演算コアに予め対応付けられたバンクについての前記保持手段の保持する値をインクリメントする更新工程と、
    を備えることを特徴とする情報処理方法。
  4. コンピュータを、請求項1又は2に記載の情報処理装置の各手段として機能させるための、コンピュータプログラム。
JP2011264112A 2011-12-01 2011-12-01 情報処理装置、情報処理方法、及びプログラム Active JP5885481B2 (ja)

Priority Applications (2)

Application Number Priority Date Filing Date Title
JP2011264112A JP5885481B2 (ja) 2011-12-01 2011-12-01 情報処理装置、情報処理方法、及びプログラム
US13/684,353 US9274831B2 (en) 2011-12-01 2012-11-23 Information processing apparatus, information processing method, and storage medium

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
JP2011264112A JP5885481B2 (ja) 2011-12-01 2011-12-01 情報処理装置、情報処理方法、及びプログラム

Publications (2)

Publication Number Publication Date
JP2013117790A JP2013117790A (ja) 2013-06-13
JP5885481B2 true JP5885481B2 (ja) 2016-03-15

Family

ID=48524972

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2011264112A Active JP5885481B2 (ja) 2011-12-01 2011-12-01 情報処理装置、情報処理方法、及びプログラム

Country Status (2)

Country Link
US (1) US9274831B2 (ja)
JP (1) JP5885481B2 (ja)

Families Citing this family (8)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US8689237B2 (en) 2011-09-22 2014-04-01 Oracle International Corporation Multi-lane concurrent bag for facilitating inter-thread communication
US9378045B2 (en) 2013-02-28 2016-06-28 Oracle International Corporation System and method for supporting cooperative concurrency in a middleware machine environment
US9110715B2 (en) 2013-02-28 2015-08-18 Oracle International Corporation System and method for using a sequencer in a concurrent priority queue
US10095562B2 (en) * 2013-02-28 2018-10-09 Oracle International Corporation System and method for transforming a queue from non-blocking to blocking
JP2014059862A (ja) 2012-08-22 2014-04-03 Canon Inc データフローのリソース割り当て装置および方法
US9454313B2 (en) 2014-06-10 2016-09-27 Arm Limited Dynamic selection of memory management algorithm
US12045660B2 (en) 2020-09-25 2024-07-23 Huawei Technologies Co., Ltd. Method and apparatus for a configurable hardware accelerator
CN117971501B (zh) * 2024-03-28 2024-07-09 北京壁仞科技开发有限公司 一种数据访问方法、设备、存储介质及程序产品

Family Cites Families (6)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP3311381B2 (ja) 1992-03-18 2002-08-05 富士通株式会社 コンパイラにおける命令スケジューリング処理方法
US6029190A (en) * 1997-09-24 2000-02-22 Sony Corporation Read lock and write lock management system based upon mutex and semaphore availability
JP2001175617A (ja) * 1999-12-17 2001-06-29 Hitachi Ltd コンパイラ並列化方法
US7219185B2 (en) * 2004-04-22 2007-05-15 International Business Machines Corporation Apparatus and method for selecting instructions for execution based on bank prediction of a multi-bank cache
US8245232B2 (en) * 2007-11-27 2012-08-14 Microsoft Corporation Software-configurable and stall-time fair memory access scheduling mechanism for shared memory systems
US9189282B2 (en) * 2009-04-21 2015-11-17 Empire Technology Development Llc Thread-to-core mapping based on thread deadline, thread demand, and hardware characteristics data collected by a performance counter

Also Published As

Publication number Publication date
JP2013117790A (ja) 2013-06-13
US9274831B2 (en) 2016-03-01
US20130145373A1 (en) 2013-06-06

Similar Documents

Publication Publication Date Title
JP5885481B2 (ja) 情報処理装置、情報処理方法、及びプログラム
JP6525286B2 (ja) プロセッサコア及びプロセッサシステム
Lebedev et al. MARC: A many-core approach to reconfigurable computing
CN110308982B (zh) 一种共享内存复用方法及装置
CN103197916A (zh) 用于源操作数收集器高速缓存的方法和装置
Wozniak et al. Language features for scalable distributed-memory dataflow computing
JP2013196706A (ja) ミニコア基盤の再構成可能プロセッサ、そのためのスケジュール装置及び方法
JP6551751B2 (ja) マルチプロセッサ装置
JP2014164667A (ja) リストベクトル処理装置、リストベクトル処理方法、プログラム、コンパイラ、及び、情報処理装置
JP2012038219A (ja) プログラム変換装置、およびそのプログラム
Das et al. Enabling on-device smartphone GPU based training: Lessons learned
US9311156B2 (en) System and method for distributing data processes among resources
JP5278538B2 (ja) コンパイルシステム、コンパイル方法およびコンパイルプログラム
CN103218259A (zh) 计算任务的调度和执行
JP5687603B2 (ja) プログラム変換装置、プログラム変換方法、および変換プログラム
Castellana et al. An adaptive memory interface controller for improving bandwidth utilization of hybrid and reconfigurable systems
Lin et al. swFLOW: A dataflow deep learning framework on sunway taihulight supercomputer
JP2014164664A (ja) タスク並列処理方法、装置及びプログラム
JP5238876B2 (ja) 情報処理装置及び情報処理方法
JP6368452B2 (ja) 非同期のデバイスによって実行されるタスクのスケジューリングの向上
Tarakji et al. The development of a scheduling system GPUSched for graphics processing units
US20120137300A1 (en) Information Processor and Information Processing Method
JP2018120307A (ja) アクセラレータ処理管理装置、ホスト装置、アクセラレータ処理実行システム、方法およびプログラム
WO2021212045A1 (en) Synchronization of processing elements and software managed memory hierarchy in a machine learning accelerator
KR20130011805A (ko) 시뮬레이션 장치 및 그의 시뮬레이션 방법

Legal Events

Date Code Title Description
A621 Written request for application examination

Free format text: JAPANESE INTERMEDIATE CODE: A621

Effective date: 20141201

A977 Report on retrieval

Free format text: JAPANESE INTERMEDIATE CODE: A971007

Effective date: 20150928

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20151030

A521 Written amendment

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20151224

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

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20160209

R151 Written notification of patent or utility model registration

Ref document number: 5885481

Country of ref document: JP

Free format text: JAPANESE INTERMEDIATE CODE: R151