JP2019086976A - 情報処理システム、演算処理装置及び情報処理システムの制御方法 - Google Patents

情報処理システム、演算処理装置及び情報処理システムの制御方法 Download PDF

Info

Publication number
JP2019086976A
JP2019086976A JP2017214029A JP2017214029A JP2019086976A JP 2019086976 A JP2019086976 A JP 2019086976A JP 2017214029 A JP2017214029 A JP 2017214029A JP 2017214029 A JP2017214029 A JP 2017214029A JP 2019086976 A JP2019086976 A JP 2019086976A
Authority
JP
Japan
Prior art keywords
unit
data
transmission
target
arithmetic
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
JP2017214029A
Other languages
English (en)
Other versions
JP6930381B2 (ja
Inventor
明彦 笠置
Akihiko Kasaoki
明彦 笠置
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.)
Fujitsu Ltd
Original Assignee
Fujitsu Ltd
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 Fujitsu Ltd filed Critical Fujitsu Ltd
Priority to JP2017214029A priority Critical patent/JP6930381B2/ja
Priority to US16/174,348 priority patent/US10768932B2/en
Publication of JP2019086976A publication Critical patent/JP2019086976A/ja
Application granted granted Critical
Publication of JP6930381B2 publication Critical patent/JP6930381B2/ja
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30003Arrangements for executing specific machine instructions
    • G06F9/30007Arrangements for executing specific machine instructions to perform operations on data operands
    • G06F9/3001Arithmetic instructions
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F13/00Interconnection of, or transfer of information or other signals between, memories, input/output devices or central processing units
    • G06F13/38Information transfer, e.g. on bus
    • G06F13/40Bus structure
    • G06F13/4004Coupling between buses
    • G06F13/4022Coupling between buses using switching circuits, e.g. switching matrix, connection or expansion network
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F13/00Interconnection of, or transfer of information or other signals between, memories, input/output devices or central processing units
    • G06F13/38Information transfer, e.g. on bus
    • G06F13/42Bus transfer protocol, e.g. handshake; Synchronisation
    • G06F13/4204Bus transfer protocol, e.g. handshake; Synchronisation on a parallel bus
    • G06F13/4221Bus transfer protocol, e.g. handshake; Synchronisation on a parallel bus being an input/output bus, e.g. ISA bus, EISA bus, PCI bus, SCSI bus
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2213/00Indexing scheme relating to interconnection of, or transfer of information or other signals between, memories, input/output devices or central processing units
    • G06F2213/0024Peripheral component interconnect [PCI]

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Software Systems (AREA)
  • Computer Hardware Design (AREA)
  • Mathematical Physics (AREA)
  • Computational Mathematics (AREA)
  • Mathematical Analysis (AREA)
  • Mathematical Optimization (AREA)
  • Pure & Applied Mathematics (AREA)
  • Multi Processors (AREA)

Abstract

【課題】処理速度を向上させる情報処理システム、演算処理装置及び情報処理システムの制御方法を提供する。【解決手段】スレッド生成部202は、保持する複数のデータブロックを、自装置が搭載されたシステムボードに含まれる演算ユニット20の数と等しい数のグループに分割する。対象データ決定部205は、各グループに含まれる複数のデータブロックから第1データブロックをそれぞれ選択する。宛先決定部206は、選択された第1データブロック毎に、各演算ユニット20に割り当てられた識別番号情報と各グループに割り当てられた巡回番号情報との排他的論理和演算により得られる宛先番号情報に基づいて、システムボードに含まれる複数の演算ユニット20から互いに異なる演算ユニット20を送信先としてそれぞれ選択する。データ送信部207は、選択された各第1データブロックを、選択された演算ユニット20に対して送信する。【選択図】図4

Description

本発明は、情報処理システム、演算処理装置及び情報処理システムの制御方法に関する。
HPC(High Performance Computing)の分野では、ノードと呼ばれる計算機を多数接続した並列計算システムが用いられることが多い。ノードは、例えば1つのチップセットなどでもよい。近年では、並列計算機システムは、深層学習などにも利用される。
並列計算システムにおけるノードの接続形態には、メッシュ結合やトーラス結合がある。メッシュ結合は、複数の軸方向にメッシュ状にノードを並べ、各軸方向に隣接するノード同士をインターコネクトと呼ばれる高速ネットワークで接続する接続形態である。トーラス結合は、メッシュ結合の接続をした上で、各軸の両端のノード同士を接続する接続形態である。すべての軸がメッシュ結合またはトーラス結合であるネットワークや、一部の軸がメッシュ結合で残りの軸はトーラス結合であるような接続形態も存在する。例えば、並列計算システムには、6次元のトーラス構造となるトポロジを有する装置がある。
さらに、並列計算システムでは、複数のノードを搭載したシステムボードを複数有する構成が採用される場合がある。同じシステムボード上に配置されたノード間は、高速な専用のインターコネクトで接続される。これに対して、異なるシステムボードに配置されたノード間は、PCI(Peripheral Component Interconnect)やインフィニバンド(登録商標)を用いてネットワークスイッチを介して接続される。ここで、同一システムボード内のノード間の接続を「内側の接続」と言い、異なるシステムボード間のネットワークスイッチを介してのノード間の接続を「外側の接続」と言う。内側の接続は、専用のインターコネクトで接続されるためPCIやインフィニバンドを用いる外側の接続に比べて広い帯域幅を有し高速に通信を行うことができる。
そして、並列計算機システムの各ノードは、複雑な問題を解く場合に用いられるプログラムを高速で処理する。具体的には、並列計算機システムは、プログラムの実行単位であるジョブを複数のプロセスに分割し、分割したプロセスを各ノードに割り当てる。ここで、プロセスとは、各ノードが実際に演算処理を行うプログラムである。各ノードは、プロセスを取得した場合には、取得したプロセスの演算処理を実行する。各ノードは、プロセスの演算処理が完了すると、演算結果を管理サーバへ送信して、演算処理を終了する。また、並列計算機システムは、演算処理が終了したノードに対して新たなプロセスを送信し、演算処理を実行させる。そして、並列計算機システムは、各ノードが実行した演算処理の結果を管理サーバに集約し、ジョブの全体の演算結果を得る。
並列計算システムでは、このような演算処理においてAllreduceの処理を行う場合がある。Allreduceとは、各プロセスが算出した値を集約し、集約した値を用いて演算を行うことで得られる結果を、全てのプロセスにおいて共通化する処理である。この場合、各ノードは集団通信を行う。集団通信を行うことで、各ノードが実行するプロセスは、全てのプロセスが有する値の演算結果を保持することになる。このように、Allreduceの処理を行う場合、各ノードは他の全てのノードが有する値を取得する。ただし、Allreduceの処理において、例えば、各ノードそれぞれが有する値を他の全てのノードに送信するなどした場合にはネットワーク負荷が高くなってしまう。
そのため、Allreduceの処理を行う場合、ノード間における通信データ量を削減することが好ましい。そこで、Allreduceにおける通信データ量を削減する技術として、Halving+Doubling手法が提案されている。Halving+Doublingは、Reduce_scatter+Allgatherとも呼ばれる場合がある。
Halving+Doubling手法におけるHalving操作を行った場合、通信ステップ毎に通信データ量が半減する。一方、Doubling操作を行った場合、通信ステップ毎に通信データ量が倍化する。すなわち、Halving+Doubling手法では、処理開始後にHalvingを行うことでステップが進むにつれて通信データ量が削減され、その後Doublingを行うことでステップが進むにつれて通信データ量が増加する。そのため、Halving+Doubling手法では、ステップが小さい間は大きなデータによる相互通信が行われ、ステップの中間で小さいデータにより相互通信が行われ、その後ステップが増えるにつれ大きなデータによる相互通信が行われる。
ここで、上述したように、内側の接続と外側の接続とを有する並列計算システムでは、外側の接続の帯域幅が狭いため、外側の接続で送受信するデータのデータ量は小さいことが好ましい。そこで、内側の接続と外側の接続とを有する並列計算システムにおいて、Allreduceの処理を行う場合、内側の接続においてなるべくデータのサイズを小さくした上で外側の接続での通信を行うことが好ましい。例えば、次のような方法でAllreduceの処理を行うことが考えられる。まず、内側の接続でHalvingを行い送受信するデータ量を小さくした上で、外側の接続でのデータのAllreduce処理を行う。その後、内側の接続でDoublingを行い取り扱うデータ量を大きくしてAllreduceの処理を完了する。
このようなAllreduceの処理を実行する場合、ノードの接続形態はハイパーキューブとなる結合を有することが好ましい。n次元のハイパーキューブは、以下の特徴を有する。すなわち、n次元のハイパーキューブは2のn乗のノードで構成される。そして、各ノードは、n本のリンクを有する。さらに、各ノードに2進数のインデックスを割り当てた場合に、各ノードは、割り当てられたインデックスのビット列が1つ異なるノードと隣接しており、且つ、接続される。すなわち、ノードがハイパーキューブを構成する接続形態を有する場合、データの送信先の特定が容易であり、Allreduceの処理を行う場合のデータの送受信が容易となることで処理負荷が低減する。
さらに、並列計算機システムにおける集団通信の技術として、全体処理時間を計算して処理時間が短い方を選択するように全データ通信と部分データ通信とを切り替えて通信を実行する従来技術がある。
特開2001−325239号公報
しかしながら、ハイパーキューブを有するトポロジに単にHalving+Doublingを用いた場合、各ステップにおいて通信に使用されていない経路が存在する場合がある。そのため、単にHalving+Doublingを用いる方法では、帯域を十分に使い切れず、Allreduceの速度を向上させることは困難である。
また、全データ通信と部分データ通信とを切り替えて通信を実行する従来技術を用いても、各ステップにおいて通信に使用されない経路が発生してしまい、Allreduceの速度を向上させることは困難である。
開示の技術は、上記に鑑みてなされたものであって、処理速度を向上させた情報処理システム、演算処理装置及び情報処理システムの制御方法を提供することを目的とする。
本願の開示する情報処理システム、演算処理装置及び情報処理システムの制御方法の一つの態様において、情報処理システムは、複数の演算処理装置を有する。前記演算処理装置は、以下の各部を有する。分割部は、保持する複数のデータブロックを、自装置が搭載された前記情報処理装置に含まれる前記演算処理装置の数と等しい数のグループに分割する。データ選択部は、各グループに含まれる複数のデータブロックから第1データブロックをそれぞれ選択する。送信先選択部は、前記データ選択部が選択した第1データブロック毎に、各演算処理装置に割り当てられた識別番号情報と各グループに割り当てられた巡回番号情報との排他的論理和演算により得られる宛先番号情報に基づいて、前記情報処理装置に含まれる複数の演算処理装置から互いに異なる演算処理装置を送信先としてそれぞれ選択する。送信部は、前記データ選択部が選択した各第1データブロックを、前記送信先選択部が選択した各演算処理装置に対してそれぞれ送信する。
1つの側面では、本発明は、処理速度を向上させることができる。
図1は、実施例1に係る情報処理システムのハードウェア構成図である。 図2は、各種ハイパーキューブを表す図である。 図3は、演算ユニットのハードウェア構成図である。 図4は、ネットワーク制御部のブロック図である。 図5は、Halvingにおける処理の流れの概要を表す図である。 図6は、外部トポロジ間でのAllreducesまでの処理の流れの概要を表す図である。 図7は、Doublingにおける処理の流れの概要を表す図である。 図8は、スレッドTh1側の送受信するデータブロックの決定方法を説明するための図である。 図9は、2次元のハイパーキューブに含まれる4つの演算ユニットによるスレッドTh1に関するHalving全体を表す図である。 図10は、HalvingにおけるスレッドTh2側の送受信するデータブロックの決定方法を説明するための図である。 図11は、2次元のハイパーキューブに含まれる4つの演算ユニットによるスレッドTh2に関するHalvingを表す図である。 図12は、実施例1に係る宛先決定の処理を説明するための図である。 図13は、2次元ハイパーキューブにおける宛先の遷移を説明するための図である。 図14は、Allreduceの処理の全体のフローチャートである。 図15は、Halvingのフローチャートである。 図16は、Doublingのフローチャートである。 図17は、Halving及びDoublingを実行するためのプログラムの疑似コードの一例を示す図である。 図18は、Halvingを実現するプログラムで行われる処理のフローチャートである。 図19は、Doublingを実現するプログラムで行われる処理のフローチャートである。 図20は、実施例1に係るAllreduceの処理の効果を説明するための図である。 図21は、実施例2に係る情報処理システムのハードウェア構成図である。 図22は、実施例2に係る宛先決定の処理を説明するための図である。 図23は、3次元ハイパーキューブにおける宛先の遷移を説明するための図である。 図24は、実施例2に係る情報処理システムにおける通信毎の通信を行う演算ユニットを表す図である。 図25は、実施例3に係る情報処理システムのハードウェア構成図である。 図26は、実施例3に係る情報処理システムにおける通信毎の通信を行う演算ユニットを表す図である。
以下に、本願の開示する情報処理システム、演算処理装置及び情報処理システムの制御方法の実施例を図面に基づいて詳細に説明する。なお、以下の実施例により本願の開示する情報処理システム、演算処理装置及び情報処理システムの制御方法が限定されるものではない。
図1は、実施例1に係る情報処理システムのハードウェア構成図である。本実施例に係る情報処理システムは、2つのシステムボード1を有する。各システムボード1は、CPU(Central Processing Unit)2、2つのPCIスイッチ3、及び、4つのHCA(Host Channel Adaptor)4を有する。
各システムボード1上のCPU2は、相互に直接接続される。また、システムボード1上において、CPU2は、2つのPCIスイッチ3に接続される。CPU2は、操作者から入力されたジョブの命令を受けて、ジョブを後述する各演算ユニット20へ送信する。
各PCIスイッチ3は、CPU2及び2つの演算ユニット20に接続される。また、各PCIスイッチ3は、2つのHCA4に接続される。PCIスイッチ3は、CPU2及び演算ユニット20によるPCIを用いた通信時の経路選択を行う。
HCA4は、CPU2及び演算ユニット20によるインフィニバンドを用いた通信における通信インタフェースである。HCA4は、PCIスイッチ3に接続される。また、HCA4は、ネットワークスイッチ5に接続される。
ネットワークスイッチ5は、各システムボード1上のHCA4が接続される。ネットワークスイッチ5は、CPU2及び演算ユニット20によるインフィニバンドを用いた通信における経路選択を行う。
サブネットマネージャ6は、ネットワークスイッチ5を介して行われる通信の通信経路の管理を行う。例えば、サブネットマネージャ6は、ネットワーク上の1つのサーバ上で動作し、定期的に経路更新を行う。
演算ユニット20は、並列計算を行うための演算回路を有する。演算ユニット20は、例えば、GPU(Graphic Processing Unit)である。演算ユニット20は、ディープラーニングにおける演算処理などを実行する。以下では、演算ユニット20を「ノード」と呼ぶ場合がある。この演算ユニット20が、「演算処理装置」の一例にあたる。
1つのシステムボード1上には4つの演算ユニット20が配置される。そして、演算ユニット20は、隣り合う2つの演算ユニット20とインターコネクトで接続される。図1において太い実線で示した経路がインターコネクトを表す。
隣り合う2つの演算ユニット20と接続された4つの演算ユニット20は、2次元のハイパーキューブとなるように接続される。ここで、ハイパーキューブについて説明する。図2は、各種ハイパーキューブを表す図である。構成HQ1は、1次元のハイパーキューブである。構成HQ2は、2次元のハイパーキューブである。構成HQ3は、3次元のハイパーキューブである。構成HQ4は、4次元のハイパーキューブである。
各ノードにn個のビットを有する2進数のインデックスを割り当てた場合に、インデックスを表すビット列において1つのビットの値が異なるノード同士を接続することでn次元のハイパーキューブとなる。例えば、図2において構成HQ1〜HQ3の各ノードに付加した数字は、ビット列において1のビットの値が異なるノードに接続するように各ノードに割り当てた2進数のインデックスである。すなわち、図2の構成HQ1〜HQ3に例示したように、n次元のハイパーキューブは、割り当てられたインデックスを表すビット列において1つのビットの値が異なるノード間で相互通信が行われる。
例えば、本実施例に係る演算ユニット20は2次元のハイパーキューブとなるように接続される。そこで4つの演算ユニット20に00、01、10及び11のインデックスを割り当てた場合、以下のような通信を行う。すなわち、00のインデックスを有する演算ユニット20は、10及び01のインデックスを有するノードと通信を行う。また、01のインデックスを有する演算ユニット20は、00及び11のインデックスを有する演算ユニット20と通信を行う。10のインデックスを有する演算ユニット20は、00及び11のインデックスを有するノードと通信を行う。また、11のインデックスを有する演算ユニット20は、10及び01のインデックスを有する演算ユニット20と通信を行う。
また、本実施例では、演算ユニット20が2次元のハイパーキューブとなるように接続された場合で説明するが、3次元以上のハイパーキューブであっても以下に説明する機能と同様の機能を有することができる。そして、ハイパーキューブとなるように接続された演算ユニット20のうち特定の演算ユニット20と他の演算ユニット20を介さずに直接接続された演算ユニット20が、特定の演算ユニット20に「隣接する」演算ユニット20の一例にあたる。そして、特定の演算ユニット20と他の演算ユニット20を介さずに直接接続された演算ユニット20の数が、ハイパーキューブの次元にあたる。
図3は、演算ユニットのハードウェア構成図である。演算ユニット20は、並列演算装置21、演算制御部22、メモリ制御部23及びメモリ24を有する。さらに、演算ユニット20は、DMA(Direct Memory Access)エンジン部25、PCI制御部26、ジョブ管理部27、ネットワーク構成管理部28、ネットワーク制御部29、通信用バッファ30及びインターコネクト装置31を有する。ここで、図3では、並列演算装置21、演算制御部22、メモリ制御部23及びメモリ24を4つずつ記載したが、これらの数に特に制限は無い。
PCI制御部26は、DMAエンジン部25、ジョブ管理部27及びネットワーク構成管理部28とPCIスイッチ3との間のPCIを用いた通信の制御を行う。
ジョブ管理部27は、PCIスイッチ3及びPCI制御部26を介してCPU2から送信されたジョブを実行するための演算命令の入力を受ける。ジョブ管理部27は、取得した演算命令をキューとして取り扱う。ジョブ管理部27は、演算命令を演算制御部22へ出力する。その後、ジョブ管理部27は、演算結果の入力を演算制御部22から受ける。そして、ジョブ管理部27は、各演算制御部22から取得した演算結果をまとめてジョブの結果を取得する。その後、ジョブ管理部27は、ジョブの結果をPCI制御部26及びPCIスイッチ3などを介してCPU2へ出力する。
演算制御部22は、演算命令にしたがい、メモリ制御部23を介してメモリ24からデータを取得する。そして、演算制御部22は、取得したデータ及び演算命令を並列演算装置21へ出力する。その後、演算制御部22は、演算結果を並列演算装置21から取得する。次に、演算制御部22は、演算結果をジョブ管理部27へ出力する。
並列演算装置21は、データ及び演算命令の入力を演算制御部22から受ける。そして、並列演算装置21は、取得したデータを用いて指定された演算を実行する。その後、並列演算装置21は、演算結果を演算制御部22へ出力する。
ネットワーク構成管理部28は、CPU2が実行するデバイスドライバよりシステムボード1内の結線表を取得する。結線表は、演算ユニット20間のインターコネクトの接続状態を含む。ネットワーク構成管理部28は、取得した結線表をネットワーク制御部29へ出力する。
ネットワーク制御部29は、通信用バッファ30及びインターコネクト装置31と接続される。ネットワーク制御部29は、通信用バッファ30及びインターコネクト装置31を用いてインターコネクトを介した他の演算ユニット20との間の通信を制御する。具体的には、ネットワーク制御部29は、送信するデータを通信用バッファ30に書き込む。そして、ネットワーク制御部29は、インターコネクト装置31に対して通信用バッファ30に格納されたデータの送信を指示することで他の演算ユニット20へデータを送信する。
ネットワーク制御部29は、システムボード1の結線表をネットワーク構成管理部28から取得する。さらに、ネットワーク制御部29は、実行されるジョブで行う演算ユニット20間の通信の情報をジョブ管理部27から取得する。そして、ネットワーク制御部29は、取得した通信の情報にしたがい結線表を用いて通信相手及び送信するデータを決定する。次に、ネットワーク制御部29は、送信を決定したデータの取得要求をメモリ制御部23へ出力する。その後、ネットワーク制御部29は、取得要求に応じたデータの入力をメモリ制御部23から受ける。そして、ネットワーク制御部29は、取得したデータを決定した通信相手に送信する。
また、ネットワーク制御部29は、データの受信の通知をインターコネクト装置31から受ける。そして、ネットワーク制御部29は、通信用バッファ30に格納された他の演算ユニット20から受信したデータを取得する。そして、ネットワーク制御部29は、取得したデータとともに書き込みの指示をメモリ制御部23へ出力する。
ネットワーク制御部29が行う演算ユニット20間の通信には、Allreduceの処理も含まれる。ネットワーク制御部29によるインターコネクトを介したAllreduceの処理については後で詳細に説明する。
通信用バッファ30は、演算ユニット20間のインターコネクトを介した通信における一時格納領域である。通信用バッファ30には、他の演算ユニット20へ送信されるデータが格納される。また、通信用バッファ30には、他の演算ユニット20から受信したデータが格納される。
インターコネクト装置31は、インターコネクトにより他の演算ユニット20のインターコネクト装置31と接続する。インターコネクト装置31は、他の演算ユニット20との間のインターコネクトを介した通信を行う。インターコネクト装置31は、ネットワーク制御部29からのデータの送信指示を受けて、通信用バッファ30からデータを読み出す。そして、インターコネクト装置31は、読み出したデータをネットワーク制御部29から指定された通信相手の演算ユニット20へ送信する。また、インターコネクト装置31は、他の演算ユニット20からデータを受信すると、受信したデータを通信用バッファ30に格納する。さらに、インターコネクト装置31は、データの受信をネットワーク制御部29に通知する。
DMAエンジン部25は、CPU2などを介すことなく、PCIのバスで接続された他の演算ユニット20が有するメモリ24へのアクセス制御を行う。DMAエンジン部25は、ジョブにおけるPCIを用いた通信の情報の入力をジョブ管理部27から受ける。そして、DMAエンジン部25は、ジョブにおけるPCIを用いた通信の情報にしたがい、メモリ制御部23へデータの読み出しの指示を行う。その後、DMAエンジン部25は、メモリ24から読み出されたデータの入力をメモリ制御部23から受ける。そして、DMAエンジン部25は、取得したデータを送信先の演算ユニット20のメモリ24へPCI制御部26及びPCIスイッチ3を介して送信する。
また、DMAエンジン部25は、DMAにより他の演算ユニット20のDMAエンジン部25から送信されたデータをPCI制御部26から受信する。そして、DMAエンジン部25は、受信したデータの書き込みをメモリ制御部23へ指示する。
メモリ制御部23は、接続されたメモリ24に対するデータの読み出し及び書き込みを制御する。メモリ制御部23は、DMAエンジン部25からの読み出しの指示にしたがいメモリ24からデータを読み出し、読み出したデータをDMAエンジン部25へ出力する。また、メモリ制御部23は、DMAエンジン部25からの書込みの指示にしたがいメモリ24へデータを書き込む。
また、メモリ制御部23は、ネットワーク制御部29からの読み出しの指示にしたがいメモリ24からデータを読み出し、読み出したデータをDMAエンジン部25へ出力する。また、メモリ制御部23は、ネットワーク制御部29からの書込みの指示にしたがいメモリ24へデータを書き込む。
次に、ネットワーク制御部29によるAllreduceの処理の詳細について説明する。本実施例に係る演算処理システムは、Halving操作及びDoubling操作を行うことでAllreduceの処理を実行する。以下では、Halving操作を単に「Halving」といい、Doubling操作を単に「Doubling」という。さらに、Allreduceの処理のことを単に「Allreduce」という。
図4は、ネットワーク制御部のブロック図である。ネットワーク制御部29は、図4に示すように、プロセスID割当部201、スレッド生成部202、統括制御部203、送受信データサイズ算出部204、対象データ決定部205、宛先決定部206及びデータ送信部207を有する。さらに、ネットワーク制御部29は、データ受信部208及び同期処理部210を有する。
ここで、ネットワーク制御部29が有する演算回路により、図4に例示した、プロセスID割当部201、スレッド生成部202、統括制御部203、送受信データサイズ算出部204及び対象データ決定部205の機能が実現される。また、その演算回路により、宛先決定部206、データ送信部207、データ受信部208及び同期処理部210の機能が実現される。
また、ネットワーク制御部29は、図3に示すように実際には通信用バッファ30及びインターコネクト装置31を介して他の演算ユニット20と通信を行うが、説明の都合上、通信用バッファ30及びインターコネクト装置31を省略して説明する。以下の説明では、説明対象とする演算ユニット20を、他の演算ユニット20と区別するため、自演算ユニットという。
プロセスID割当部201は、ネットワーク構成管理部28から結線表を取得する。そして、プロセスID割当部201は、結線表を用いて自演算ユニット及び自演算ユニットとともにハイパーキューブとなるように接続された他の演算ユニット20に0から数えて2−1までの個数のプロセスIDを割り当てる。この場合nは、ハイパーキューブの次元である。このプロセスIDが、演算処理装置の「識別番号情報」の一例にあたる。
ここで、プロセスID割当部201は、図2で示した各ノードに割り当てられたインデックスと同様の規則によりプロセスIDの割り当てを行う。すなわち、本実施例に係る演算ユニット20は、2次元のハイパーキューブとなるように接続されており、プロセスID割当部201は、各演算ユニット20にプロセスIDとして00、01、10及び11を割り当てる。この場合、プロセスID割当部201は、1つのビットの値が異なるプロセスIDをインターコネクトで接続された隣り合う演算ユニット20に対して割り当てる。図5は、Halvingにおける処理の流れの概要を表す図である。プロセスID割当部201は、図5に示すプロセスIDを各演算ユニット20に割り当てる。ここで、図5における紙面にむかって縦方向に並んだ8つのボックスがブロックを表し、8つのブロックの組が1つのプロセスが有するデータ列にあたる。そして、図5における各ブロック内の番号は、各プロセスで算出されたデータ列を表す。ここで、図5では、1つのプロセスに含まれる各ブロックに対応するデータ列を同じ数字で表したが、これは演算を行ったプロセスが同じことを表す。実際には、各ブロックに対応するデータ列は、それぞれ異なる値を有することが一般的である。
その後、プロセスID割当部201は、各演算ユニット20に割り当てたプロセスIDの情報を統括制御部203へ出力する。また、プロセスID割当部201は、各演算ユニット20に割り当てたプロセスIDの情報をプロセスIDの割当対象である演算ユニット20に通知する。ここで、他の演算ユニット20からプロセスIDの通知を受ける演算ユニット20の場合、プロセスID割当部201は、他の演算ユニット20から各演算ユニット20に割り当てられたプロセスIDの通知を受ける。そして、プロセスID割当部201は、取得した各演算ユニット20に割り当てられたプロセスIDの情報をスレッド生成部202へ出力する。
スレッド生成部202は、プロセスID割当部201により各演算ユニット20に割り当てられたプロセスIDを統括制御部203から取得する。さらに、スレッド生成部202は、自己が搭載された演算ユニット20で処理するプロセスの入力を統括制御部203から受ける。そして、取得したプロセスの中でAllreduceの処理の実行が指示された場合、スレッド生成部202は、以下の処理を実行する。
スレッド生成部202は、自演算ユニットを含むハイパーキューブの次元を取得する。本実施例では、スレッド生成部202は、自演算ユニットが含まれるハイパーキューブの次元として2を取得する。そして、スレッド生成部202は、取得したプロセスが算出したデータ列をn×2個のブロックに分割する。この場合nは、ハイパーキューブの次元である。すなわち、本実施例では、スレッド生成部202は、図5に示すようにプロセスのデータ列を8個のブロックに分ける。
さらに、スレッド生成部202は、ハイパーキューブをn次元とすると、生成したブロックを2個ずつの組に分けてn個のスレッドを生成する。すなわち、本実施例では、スレッド生成部202は、図5に示すスレッドTh1及びTh2という2個のスレッドを生成する。また、スレッド生成部202は、各スレッドにnビットのサイクリックIDを割り当てる。具体的には、スレッド生成部202は、nビットのうちs(1≦s≦n)ビット目の値が1となり、他のビットの値が0であるn個のnビットのサイクリックIDを生成し、各スレッドに割り当てる。本実施例では、スレッド生成部202は、スレッドTh1にサイクリックIDとして「01」を割り当て、スレッドTh2にサイクリックIDとして「10」を割り当てる。その後、スレッド生成部202は、生成したスレッドTh1及びTh2の情報を、それぞれのスレッドTh1及びTh2に割り当てたサイクリックIDとともに統括制御部203へ出力する。このスレッド生成部202が、「分割部」の一例にあたる。そして、スレッドが、「グループ」の一例にあたる。
統括制御部203は、自演算ユニットを含む各演算ユニット20に割り当てられたプロセスID、及び、各ブロックに含まれるデータ列の入力をスレッド生成部202から受ける。そして、統括制御部203は、自演算ユニットを含む各演算ユニット20に割り当てられたプロセスIDをスレッド生成部202へ出力する。その後、統括制御部203は、スレッドTh1及びTh2の情報、スレッドTh1及びTh2に割り当てられたサイクリックIDの入力をスレッド生成部202から受ける。
そして、統括制御部203は、Allreduceの処理の開始時であれば、Halvingの実行を決定する。そして、統括制御部203は、自演算ユニットのプロセスID、スレッドTh1及びTh2の情報、スレッドTh1及びTh2に割り当てられたサイクリックID、並びに、各ブロックのデータ列を送受信データサイズ算出部204へ出力する。統括制御部203は、スレッドTh1及びTh2の情報、スレッドTh1及びTh2に割り当てられたサイクリックID、並びに、自演算ユニットのプロセスIDを宛先決定部206へ出力する。そして、統括制御部203は、Halvingの実行を送受信データサイズ算出部204及び宛先決定部206に指示する。
その後、統括制御部203は、通信の完了の通知をメモリ制御部23から受ける。そして、統括制御部203は、前回の通信においてHalvingの実行を指示した場合、演算ユニット20が含まれるハイパーキューブの次元数の回数、Halvingが実行されたか否かを判定する。本実施例では、2次元のハイパーキューブの構成であるので、統括制御部203は、Halvingが2回実行されたか否かを判定する。
例えば、2次元のハイパーキューブの構成を有する場合、スレッドTh1について1回目の通信では、図5の1回目の通信における実線矢印で示すように、各演算ユニット20からデータ列が送信される。具体的には、プロセスIDが00の演算ユニット20とプロセスIDが01の演算ユニット20とがデータを交換し、プロセスIDが10の演算ユニット20とプロセスIDが11の演算ユニット20とがデータを交換する。また、スレッドTh2について1回目の通信では、図5の1回目の通信における破線矢印で示すようにデータ列が送信される。すなわち、プロセスIDが00の演算ユニット20とプロセスIDが10の演算ユニット20とがデータを交換し、プロセスIDが01の演算ユニット20とプロセスIDが11の演算ユニット20とがデータを交換する。また、図5における一点鎖線の矢印は、各演算ユニット20が有するデータ列の変化を表す。このHalvingにおける送信データ及び送信先の決定については後で詳細に説明する。
演算ユニット20が含まれるハイパーキューブの次元数の回数のHalvingが実行されていない場合、統括制御部203は、次のHalvingの実行を送受信データサイズ算出部204及び宛先決定部206に指示する。
例えば、2次元のハイパーキューブの構成を有する場合、スレッドTh1について2回目の通信では、図5の2回目の通信における実線矢印で示すように、各演算ユニット20からデータ列が送信される。すなわち、プロセスIDが00の演算ユニット20とプロセスIDが10の演算ユニット20とがデータを交換し、プロセスIDが01の演算ユニット20とプロセスIDが11の演算ユニット20とがデータを交換する。また、スレッドTh2について2回目の通信では、図5の2回目の通信における破線矢印で示すようにデータ列が送信される。すなわち、プロセスIDが00の演算ユニット20とプロセスIDが01の演算ユニット20とがデータを交換し、プロセスIDが10の演算ユニット20とプロセスIDが11の演算ユニット20とがデータを交換する。これにより、各演算ユニット20は、スレッドTh1における異なるブロックのデータ列をまとめたデータ列を保持する。また、各演算ユニット20は、スレッドTh2における異なるブロックのデータ列をまとめたデータ列を保持する。
一方、ハイパーキューブの次元数の回数のHalvingが実行された場合、統括制御部203は、そのハイパーキューブに含まれない演算ユニット20との間でのAllreduceの処理を行うか否かを判定する。本実施例では、図1に示すように、異なるハイパーキューブに含まれる演算ユニット20との間でもAllreduceの処理を行う。そこで、統括制御部203は、外部トポロジでのAllreduceの処理の実行を決定する。そして、統括制御部203は、外部トポロジでのAllreduceの処理を外側接続処理実行部209に依頼する。その後、統括制御部203は、外部トポロジでのAllreduceの処理の完了通知を外側接続処理実行部209から受ける。
図6は、外部トポロジ間でのAllreducesまでの処理の流れの概要を表す図である。例えば、外部トポロジでのAllreduceの処理は、図6の太線矢印で示される方法で行われる。例えば、各演算ユニット20は、システムボード1間で同じプロセスIDが割り当てられたもの同士が通信を行い、データ列の受け渡しを行う。これにより、各演算ユニット20は、処理結果250で示すように外部トポロジでのHalvingの結果を合わせたデータ列を取得することができる。
外部トポロジでのAllreduceの処理の完了通知を外側接続処理実行部209から受けると、統括制御部203は、Doublingの実行を送受信データサイズ算出部204及び宛先決定部206に指示する。その後、通信の完了の通知をメモリ制御部23から受ける。そして、統括制御部203は、前回の通信においてDoublingの実行を指示した場合、演算ユニット20が含まれるハイパーキューブの次元数の回数、Doublingが実行されたか否かを判定する。本実施例では、2次元のハイパーキューブの構成であるので、統括制御部203は、Doublingが2回実行されたか否かを判定する。
図7は、Doublingにおける処理の流れの概要を表す図である。例えば、2次元のハイパーキューブの構成を有する場合、スレッドTh1についてDoublingの1回目の通信では、図7の4回目の通信における実線矢印で示すように、各演算ユニット20からデータ列が送信される。すなわち、プロセスIDが00の演算ユニット20とプロセスIDが10の演算ユニット20とがデータを交換し、プロセスIDが01の演算ユニット20とプロセスIDが11の演算ユニット20とがデータを交換する。また、スレッドTh2についてDoublingの1回目の通信では、図7の4回目の通信における破線矢印で示すようにデータ列が送信される。すなわち、プロセスIDが00の演算ユニット20とプロセスIDが01の演算ユニット20とがデータを交換し、プロセスIDが10の演算ユニット20とプロセスIDが11の演算ユニット20とがデータを交換する。
さらに、2次元のハイパーキューブの構成を有する場合、スレッドTh1についてDoublingの2回目の通信では、図7の5回目の通信における実線矢印で示すように、各演算ユニット20からデータ列が送信される。具体的には、プロセスIDが00の演算ユニット20とプロセスIDが01の演算ユニット20とがデータを交換し、プロセスIDが10の演算ユニット20とプロセスIDが11の演算ユニット20とがデータを交換する。また、スレッドTh2についてDoublingの2回目の通信では、図7の5回目の通信における破線矢印で示すようにデータ列が送信される。すなわち、プロセスIDが00の演算ユニット20とプロセスIDが10の演算ユニット20とがデータを交換し、プロセスIDが01の演算ユニット20とプロセスIDが11の演算ユニット20とがデータを交換する。これにより、図7に示すように、5回目の通信の後は、2次元のハイパーキューブに含まれる演算ユニット20の全てが、各ブロックにおいて同じ値のデータ列を有する。このDoublingにおける送信データ及び送信先の決定については後で詳細に説明する。
ここで、本実施例とは異なり、自演算ユニットが含まれるハイパーキューブに含まれる演算ユニット20間でAllreduceの処理が完結する場合もある。その場合、統括制御部203は、Halvingの完了後、直ぐにDoublingに移る。
演算ユニット20が含まれるハイパーキューブの次元数の回数のDoublingが実行されていない場合、統括制御部203は、次のDoublingの実行を送受信データサイズ算出部204及び宛先決定部206に指示する。
これに対して、演算ユニット20が含まれるハイパーキューブの次元数の回数のDoublingが実行された場合、統括制御部203は、内側トポロジでの同期処理の実行を同期処理部210へ通知する。その後、統括制御部203は、内部トポロジでの同期の完了の通知を同期処理部210から受けると、外部トポロジでの同期処理の実行を同期処理部210へ通知する。その後、統括制御部203は、外部トポロジでの同期の完了の通知を同期処理部210から受けると、Allreduceの処理が完了したと判定する。そして、統括制御部203は、ジョブ管理部27にAllreduceの処理の完了を通知する。
送受信データサイズ算出部204は、スレッドTh1及びTh2の情報、スレッドTh1及びTh2に割り当てられたサイクリックID、並びに、各ブロックのデータ列の入力を統括制御部203から受ける。そして、送受信データサイズ算出部204は、送受信を行うデータサイズを算出する。
演算ユニット20がn次元のハイパーキューブとなるように接続された場合、Halvingの実行を指示されると、送受信データサイズ算出部204は、初回の通信では2−1個のデータ列のブロックを送受信するデータサイズとする。その後、送受信データサイズ算出部204は、通信回数が進むにしたがい送受信するブロックを1/2倍したものをデータサイズとする。例えば、2回目の通信では、送受信データサイズ算出部204は、(2−1)×1/2個のブロックを送受信するデータサイズとする。本実施例では、送受信データサイズ算出部204は、初回の通信における送受信するデータサイズを2個のブロックとする。さらに、送受信データサイズ算出部204は、2回目の通信における送受信するデータサイズを1個のブロックとする。その後、送受信データサイズ算出部204は、決定した送受信するデータサイズを対象データ決定部205へ出力する。また、送受信データサイズ算出部204は、スレッドTh1及びTh2の情報、スレッドTh1及びTh2に割り当てられたサイクリックID、並びに、各ブロックのデータ列を対象データ決定部205へ出力する。
一方、Doublingの実行を指示された場合、送受信データサイズ算出部204は、初回の通信では1個のデータ列のブロックを送受信するデータサイズとする。その後、送受信データサイズ算出部204は、通信回数が進むにしたがい送受信するブロックを2倍したものをデータサイズとする。例えば、2回目の通信では、送受信データサイズ算出部204は、2個のブロックを送受信するデータサイズとする。本実施例では、送受信データサイズ算出部204は、初回の通信における送受信するデータサイズを1個のブロックとする。さらに、送受信データサイズ算出部204は、2回目の通信における送受信するデータサイズを2個のブロックとする。その後、送受信データサイズ算出部204は、決定した送受信するデータサイズを対象データ決定部205へ出力する。また、送受信データサイズ算出部204は、スレッドTh1及びTh2の情報、スレッドTh1及びTh2に割り当てられたサイクリックID、並びに、各ブロックのデータ列を対象データ決定部205へ出力する。
対象データ決定部205は、送受信するデータサイズ、スレッドTh1及びTh2の情報、スレッドTh1及びTh2に割り当てられたサイクリックID、並びに、各ブロックのデータ列の入力を送受信データサイズ算出部204から受ける。対象データ決定部205は、各ブロックの並び順を固定する。対象データ決定部205は、このブロックの並び順をAllreduceの処理が完了するまで維持する。
図8は、スレッドTh1側の送受信するデータブロックの決定方法を説明するための図である。例えば、対象データ決定部205は、図8に示す順序でブロックの並び順を固定する。以下では、図8のように並び順が固定されたブロックの関係について、紙面に向かった場合の上下方向を用いて説明する。対象データ決定部205は、各スレッドTh1及びTh2について送受信するデータ列を決定する。以下に、対象データ決定部205による送受信するデータの決定方法の詳細について説明する。
Halvingの実行を指示された場合、対象データ決定部205は、送受信するデータサイズでスレッドTh1及びTh2を分割して対象判定用グループを生成する。対象データ決定部205は、1回目の通信ではスレッドTh1及びTh2を2分割し、2回目以降の通信では通信回数が増えるにしたがい前回の通信の2倍の個数でスレッドTh1及びTh2を分割する。例えば、2回目の通信であれば、対象データ決定部205は、スレッドTh1及びTh2を4分割する。
本実施例では、対象データ決定部205は、演算ユニット20のプロセスIDが00であれば、1回目の通信において、図8における対象判定用グループ301及び302にスレッドTh1を分ける。また、2回目の通信において、対象データ決定部205は、対象判定用グループ305及び306を含む4つの対象判定用グループにスレッドTh1を分ける。
同様に、演算ユニット20のプロセスIDが01であれば、対象データ決定部205は、1回目の通信において、図8における対象判定用グループ311及び312にスレッドTh1を分ける。また、2回目の通信において、対象データ決定部205は、対象判定用グループ315及び316を含む4つの対象判定用グループにスレッドTh1を分ける。以下では、対象判定用グループの並びも、ブロックの並びに対応させて紙面に向いて上下方向で説明する。
次に、対象データ決定部205は、生成した対象判定用グループに送受信対象インデックスを割り振る。ここで、対象データ決定部205は、k回目の送受信対象インデックスとして二進数で表されるkビット(k桁)の数を順次増加するように上から下に向けて対象判定用グループに割り当てる。対象データ決定部205は、1回目の通信であれば1ビットで表される2進数の数を順次増加するように送受信対象インデックスとして対象判定用グループに割り当てる。また、2回目の通信であれば、対象データ決定部205は、2ビットで表される2進数の数を順次増加するように送受信対象インデックスとして対象判定用グループに割り当てる。
本実施例では、1回目の通信において、対象データ決定部205は、演算ユニット20のプロセスIDが00であれば、図8に示すように、対象判定用グループ301に送受信対象インデックスとして「0」を割り当てる。また、対象データ決定部205は、対象判定用グループ302に送受信対象インデックスとして「1」を割り当てる。
同様に、演算ユニット20のプロセスIDが01であれば、対象データ決定部205は、1回目の通信において、対象判定用グループ311に送受信対象インデックスとして「0」を割り当てる。また、対象データ決定部205は、対象判定用グループ312に送受信対象インデックスとして「1」を割り当てる。
また、2回目の通信において、対象データ決定部205は、演算ユニット20のプロセスIDが00であれば、対象判定用グループ305に送受信対象インデックスとして「00」を割り当てる。また、対象データ決定部205は、対象判定用グループ306に送受信対象インデックスとして「01」を割り当てる。また、対象データ決定部205は、下に続く他の2つ対象判定用グループにそれぞれ送受信対象インデックスとして「10」及び「11」を割り当てる。
同様に、演算ユニット20のプロセスIDが01であれば、対象データ決定部205は、2回目の通信において、1番上の対象判定用グループに送受信対象インデックスとして「00」を割り当てる。また、対象データ決定部205は、その下の対象判定用グループに送受信対象インデックスとして「01」を割り当てる。さらに、対象データ決定部205は、対象判定用グループ315に送受信対象インデックスとして「10」を割り当て、対象判定用グループ316に送受信対象インデックスとして「11」を割り当てる。
次に、対象データ決定部205は、送受信対象グループの中から送信対象とする領域及び受信対象とする領域を決定する。ここで、受信対象とする領域とは、受信データを用いた演算対象とするデータの領域である。
具体的には、対象データ決定部205は、1回目の通信では、プロセスIDの1ビット目と送受信対象インデックスとが同じ値である対象判定用グループを受信対象の領域とする。また、対象データ決定部205は、プロセスIDの1ビット目を反転した値と送受信対象インデックスが同じ値である対象判定用グループを受信対象の領域とする。
例えば、プロセスIDが00であれば1ビット目が「0」であるので、対象データ決定部205は、送受信対象インデックスが「0」である対象判定用グループ301を受信対象の領域とする。また、対象データ決定部205は、送受信対象インデックスが「1」である対象判定用グループ302を送信対象の領域とする。また、プロセスIDが01であれば1ビット目が「1」であるので、対象データ決定部205は、送受信対象インデックスが「1」である対象判定用グループ312を受信対象の領域とする。また、対象データ決定部205は、送受信対象インデックスが「0」である対象判定用グループ311を送信対象の領域とする。
そして、対象データ決定部205は、受信対象の領域とした対象判定用グループに対応するブロックのデータ列を受信対象のデータとする。また、対象データ決定部205は、送信対象の領域とした対象判定用グループに対応するブロックのデータ列を送信対象のデータとする。
例えば、プロセスIDが00の演算ユニット20の対象データ決定部205は、1回目の通信において、対象判定用グループ301に対応する領域303に含まれるブロックのデータ列を受信対象のデータとする。また、対象データ決定部205は、対象判定用グループ302に対応する領域304に含まれるブロックのデータ列を送信対象のデータとする。
また、プロセスIDが01の演算ユニット20の対象データ決定部205は、1回目の通信において、対象判定用グループ312に対応する領域314に含まれるブロックのデータ列を受信対象のデータとする。また、対象データ決定部205は、対象判定用グループ311に対応する領域313に含まれるブロックのデータ列を送信対象のデータとする。
次に、2回目の通信では、対象データ決定部205は、プロセスIDの1ビット目の値と送受信対象インデックスの2ビット目の値とが同じ値である対象判定用グループを送受信対象の対象判定用グループとする。言い換えれば、前回の通信で受信対象の領域に含まれる対象判定用グループが今回の通信における送受信対象の対象判定用グループとなる。さらに、対象データ決定部205は、送受信対象の対象判定用グループの中から、プロセスIDの2ビット目の値と送受信対象インデックスの1ビット目の値とが同じ値である対象判定用グループを受信対象の領域とする。また、対象データ決定部205は、プロセスIDの2ビット目を反転した値と送受信対象インデックスの1ビット目の値とが同じ値である対象判定用グループを受信対象の領域とする。
例えば、プロセスIDが00であれば1ビット目が「0」であるので、対象データ決定部205は、送受信対象インデックスの2ビット目が「0」である対象判定用グループ305及び306を送受信対象の対象判定用グループとする。そして、プロセスIDが00であれば2ビット目が「0」であるので、対象データ決定部205は、送受信対象インデックスの1ビット目が「0」である対象判定用グループ305を受信対象の領域とする。また、対象データ決定部205は、送受信対象インデックスが「1」である対象判定用グループ306を送信対象の領域とする。
また、プロセスIDが01であれば1ビット目が「1」であるので、対象データ決定部205は、送受信対象インデックスの2ビット目が「1」である対象判定用グループ315及び316を送受信対象の対象判定用グループとする。そして、プロセスIDが01であれば2ビット目が「0」であるので、対象データ決定部205は、送受信対象インデックスの1ビット目が「0」である対象判定用グループ315を受信対象の領域とする。また、対象データ決定部205は、送受信対象インデックスが「1」である対象判定用グループ316を送信対象の領域とする。
そして、対象データ決定部205は、受信対象の領域とした対象判定用グループに対応するブロックのデータ列を受信対象のデータとする。また、対象データ決定部205は、送信対象の領域とした対象判定用グループに対応するブロックのデータ列を送信対象のデータとする。
例えば、プロセスIDが00の演算ユニット20の対象データ決定部205は、2回目の通信において、対象判定用グループ305に対応する領域307に含まれるブロックのデータ列を受信対象のデータとする。また、対象データ決定部205は、対象判定用グループ306に対応する領域308に含まれるブロックのデータ列を送信対象のデータとする。また、プロセスIDが01の演算ユニット20の対象データ決定部205は、2回目の通信において、対象判定用グループ315に対応する領域317に含まれるブロックのデータ列を受信対象のデータとする。また、対象データ決定部205は、対象判定用グループ316に対応する領域318に含まれるブロックのデータ列を送信対象のデータとする。
本実施例では、2次元のハイパーキューブの場合であるので、2回目の通信でHalvingが完了する。ただし、3次元以上のハイパーキューブとなるように接続された場合、さらにHalvingの通信が継続する。p回目の通信において、スレッドTh1に関して、対象データ決定部205は、以下のように送信対象及び受信対象の領域を決定する。対象データ決定部205は、プロセスIDの1ビット目からp−1ビット目までの値を並び順を逆にした数列と送受信対象インデックスの2ビット目からpビット目までの値を並べた数列とが一致する対象判定用グループを送受信対象の対象判定用グループとする。そして、対象データ決定部205は、送受信対象の対象判定用グループの中から、プロセスIDのpビット目の値と送受信対象インデックスの1ビット目の値とが同じ値である対象判定用グループを受信対象の領域とする。また、対象データ決定部205は、プロセスIDのpビット目を反転した値と送受信対象インデックスの1ビット目の値とが同じ値である対象判定用グループを受信対象の領域とする。
すなわち、プロセスIDの1ビット目からpビット目までの値の並び順を逆にした数列と送受信対象インデックスの1ビット目からpビット目までの値を並べた数列とが一致する対象判定用グループが、受信対象の領域となる。また、プロセスIDの1ビット目からpビット目までの値の並び順を逆にした数列の最下位ビットを反転させた数列と送受信対象インデックスのpビット目から1ビット目までの値を並べた数列とが一致する対象判定用グループが、送信対象の領域となる。
図9は、2次元のハイパーキューブに含まれる4つの演算ユニットによるスレッドTh1に関するHalving全体を表す図である。図9において、実線で囲われたブロックが受信対象のデータである。また、破線で囲われたブロックが送信対象のデータである。図9の紙面に向かって右側が各演算ユニット20において送受信が行われるデータにあたるブロックを表し、左側が送信対象及び受信対象の領域を表す。
ハイパーキューブに含まれる各演算ユニット20の対象データ決定部205は、通信毎にスレッドTh1に関する送信対象のデータ及び受信対象のデータを図9に示すように選択する。そして、各演算ユニット20の対象データ決定部205は、スレッドTh1に関して、図9に示す送信対象のデータを送信し、受信データ及び図9に示す受信対象のデータを用いて演算を行うことを繰り返す。
また、スレッドTh2に関して、対象データ決定部205は、送受信するデータサイズでスレッドTh2を分割して対象判定用グループを生成する。対象データ決定部205は、1回目の通信ではスレッドTh2を2分割し、2回目以降の通信では通信回数が増えるにしたがい前回の通信の2倍の個数でスレッドTh2を分割する。例えば、2回目の通信であれば、対象データ決定部205は、スレッドTh2を4分割する。図10は、HalvingにおけるスレッドTh2側の送受信するデータブロックの決定方法を説明するための図である。
例えば、本実施例では、対象データ決定部205は、演算ユニット20のプロセスIDが00であれば、1回目の通信において、図10における対象判定用グループ331及び332にスレッドTh2を分ける。また、2回目の通信において、対象データ決定部205は、対象判定用グループ335及び336を含む4つの対象判定用グループにスレッドTh2を分ける。同様に、演算ユニット20のプロセスIDが01であれば、1回目の通信において、対象データ決定部205は、図10における対象判定用グループ341及び342にスレッドTh2を分ける。また、2回目の通信において、対象データ決定部205は、対象判定用グループ345及び346を含む4つの対象判定用グループにスレッドTh2を分ける。
次に、対象データ決定部205は、スレッドTh1の場合と同様に、生成した対象判定用グループに送受信対象インデックスを割り振る。本実施例では、1回目の通信において、対象データ決定部205は、演算ユニット20のプロセスIDが00であれば、図10に示すように、対象判定用グループ331に送受信対象インデックスとして「0」を割り当てる。また、対象データ決定部205は、対象判定用グループ332に送受信対象インデックスとして「1」を割り当てる。
同様に、演算ユニット20のプロセスIDが01であれば、対象データ決定部205は、1回目の通信において、対象判定用グループ341に送受信対象インデックスとして「0」を割り当て、対象判定用グループ342に送受信対象インデックスとして「1」を割り当てる。
また、2回目の通信において、対象データ決定部205は、演算ユニット20のプロセスIDが00であれば、対象判定用グループ335に送受信対象インデックスとして「00」を割り当てる。また、対象データ決定部205は、対象判定用グループ336に送受信対象インデックスとして「01」を割り当てる。また、対象データ決定部205は、下に続く他の2つ対象判定用グループにそれぞれ送受信対象インデックスとして「10」及び「11」を割り当てる。
同様に、演算ユニット20のプロセスIDが01であれば、対象データ決定部205は、2回目の通信において、1番上の対象判定用グループに送受信対象インデックスとして「00」を割り当てる。また、対象データ決定部205は、その下の対象判定用グループに送受信対象インデックスとして「01」を割り当てる。さらに、対象データ決定部205は、対象判定用グループ345に送受信対象インデックスとして「10」を割り当て、対象判定用グループ346に送受信対象インデックスとして「11」を割り当てる。
次に、対象データ決定部205は、送受信対象グループの中から送信対象とする領域及び受信対象とする領域を決定する。具体的には、対象データ決定部205は、スレッドTh2のサイクリックIDにおいて値が1のビットの位置を確認し、値が1のビットの番号を並び替えの基準とする。本実施例では、対象データ決定部205は、2ビット目の値が1であることを確認し、2を並び替えの基準とする。
対象データ決定部205は、1回目の通信では、プロセスIDの並び替えの基準である2ビット目と送受信対象インデックスとが同じ値である対象判定用グループを受信対象の領域とする。また、対象データ決定部205は、プロセスIDの2ビット目を反転した値と送受信対象インデックスが同じ値である対象判定用グループを受信対象の領域とする。
例えば、プロセスIDが00であれば2ビット目が「0」であるので、対象データ決定部205は、送受信対象インデックスが「0」である対象判定用グループ331を受信対象の領域とする。また、対象データ決定部205は、送受信対象インデックスが「1」である対象判定用グループ332を送信対象の領域とする。また、プロセスIDが01であれば2ビット目が「0」であるので、対象データ決定部205は、送受信対象インデックスが「0」である対象判定用グループ341を受信対象の領域とする。また、対象データ決定部205は、送受信対象インデックスが「1」である対象判定用グループ342を送信対象の領域とする。
そして、対象データ決定部205は、受信対象の領域とした対象判定用グループに対応するブロックのデータ列を受信対象のデータとする。また、対象データ決定部205は、送信対象の領域とした対象判定用グループに対応するブロックのデータ列を送信対象のデータとする。
例えば、プロセスIDが00の演算ユニット20の対象データ決定部205は、1回目の通信において、対象判定用グループ331に対応する領域333に含まれるブロックのデータ列を受信対象のデータとする。また、対象データ決定部205は、対象判定用グループ332に対応する領域334に含まれるブロックのデータ列を送信対象のデータとする。
また、プロセスIDが01の演算ユニット20の対象データ決定部205は、1回目の通信において、対象判定用グループ341に対応する領域343に含まれるブロックのデータ列を受信対象のデータとする。また、対象データ決定部205は、対象判定用グループ342に対応する領域344に含まれるブロックのデータ列を送信対象のデータとする。この1回目の通信において対象データ決定部205が送信対象のデータとして決定したブロックに含まれるデータ列が、「第1データブロック」の一例にあたる。
次に、2回目の通信では、対象データ決定部205は、プロセスIDの並び替えの基準である2ビット目の値と送受信対象インデックスの2ビット目の値とが同じ値である対象判定用グループを送受信対象の対象判定用グループとする。言い換えれば、前回の通信で受信対象の領域に含まれる対象判定用グループが今回の通信における送受信対象の対象判定用グループとなる。さらに、対象データ決定部205は、送受信対象の対象判定用グループの中から、プロセスIDの1ビット目の値と送受信対象インデックスの1ビット目の値とが同じ値である対象判定用グループを受信対象の領域とする。また、対象データ決定部205は、プロセスIDの1ビット目を反転した値と送受信対象インデックスの1ビット目の値とが同じ値である対象判定用グループを受信対象の領域とする。
例えば、プロセスIDが00であれば2ビット目が「0」であるので、対象データ決定部205は、送受信対象インデックスの2ビット目が「0」である対象判定用グループ335及び336を送受信対象の対象判定用グループとする。そして、プロセスIDが00であれば1ビット目が「0」であるので、対象データ決定部205は、送受信対象インデックスの1ビット目が「0」である対象判定用グループ335を受信対象の領域とする。また、対象データ決定部205は、送受信対象インデックスが「1」である対象判定用グループ336を送信対象の領域とする。
また、プロセスIDが01であれば2ビット目が「0」であるので、対象データ決定部205は、送受信対象インデックスの2ビット目が「0」である対象判定用グループ345及び346を送受信対象の対象判定用グループとする。そして、プロセスIDが01であれば1ビット目が「1」であるので、対象データ決定部205は、送受信対象インデックスの1ビット目が「1」である対象判定用グループ346を受信対象の領域とする。また、対象データ決定部205は、送受信対象インデックスが「0」である対象判定用グループ345を送信対象の領域とする。
そして、対象データ決定部205は、受信対象の領域とした対象判定用グループに対応するブロックのデータ列を受信対象のデータとする。また、対象データ決定部205は、送信対象の領域とした対象判定用グループに対応するブロックのデータ列を送信対象のデータとする。
例えば、プロセスIDが00の演算ユニット20の対象データ決定部205は、2回目の通信において、対象判定用グループ335に対応する領域337に含まれるブロックのデータ列を受信対象のデータとする。また、対象データ決定部205は、対象判定用グループ336に対応する領域338に含まれるブロックのデータ列を送信対象のデータとする。また、プロセスIDが01の演算ユニット20の対象データ決定部205は、2回目の通信において、対象判定用グループ346に対応する領域348に含まれるブロックのデータ列を受信対象のデータとする。また、対象データ決定部205は、対象判定用グループ345に対応する領域347に含まれるブロックのデータ列を送信対象のデータとする。この2回目の通信において、対象データ決定部205が送信対象のデータとして決定したブロックに含まれるデータ列が、「第2データブロック」の一例にあたる。
本実施例では、演算ユニット20が2次元のハイパーキューブとなるように接続された場合であるので、スレッドTh1の場合と同様に2回目の通信でHalvingが完了する。ただし、3次元以上のハイパーキューブの場合、さらにHalvingの通信が継続する。p回目の通信において、対象データ決定部205は、スレッドTh2に関して、プロセスIDの並び替えの基準である2ビット目からpビット目までの値を並び順を逆にした数列を生成する。対象データ決定部205は、生成した数列と送受信対象インデックスのpビット目から2ビット目までの値を並べた数列とが一致する対象判定用グループを送受信対象の対象判定用グループとする。そして、対象データ決定部205は、送受信対象の対象判定用グループの中から、プロセスIDの1ビット目の値と送受信対象インデックスの1ビット目の値とが同じ値である対象判定用グループを受信対象の領域とする。また、対象データ決定部205は、プロセスIDのpビット目を反転した値と送受信対象インデックスの1ビット目の値とが同じ値である対象判定用グループを受信対象の領域とする。
このp回目の通信における送信対象及び受信対象の領域は、プロセスIDの並び替えの基準の1つ下の1ビット目の値をpビット目の次のビットに移動し、ビットの番号を1〜pに振り直した状態のpビットの並び替え数列を用いて表現可能である。すなわち、この並び替え数列の1ビット目からpビット目までの値を並び順を逆にした数列と送受信対象インデックスの1ビット目からpビット目までの値を並べた数列とが一致する対象判定用グループが、受信対象の領域となる。また、この並び替え数列の1ビット目からpビット目までの値を並び順を逆にした数列の最下位ビットを反転させた数列と送受信対象インデックスの1ビット目からpビット目までの値を並べた数列とが一致する対象判定用グループが、送信対象の領域となる。
さらに、n次元のハイパーキューブの構成を有する場合、スレッドの数がn個となる。対象データ決定部205は、n個のスレッドそれぞれに関して送信対象及び受信対象のデータの決定を行う。そこで、スレッドThq(1≦q≦n)の場合について考える。対象データ決定部205は、スレッドThqのサイクリックIDにおいて値が1のビットの位置を確認し、値が1のビットの番号を並び替えの基準とする。ここでは、対象データ決定部205は、qビット目の値が1であることを確認し、qを並び替えの基準とする。
この場合、並び替え数列は、プロセスIDの1番目のビットから並び替えの基準の1つ下のq−1番目のビットまでの値の数列をpビット目の隣、すなわちp−1ビット目と反対側に移動し、ビットの番号を1〜pに振り直した状態のpビットの数列である。そして、この並び替え数列の1ビット目からpビット目までの値を並び順を逆にした数列と送受信対象インデックスの1ビット目からpビット目までの値を並べた数列とが一致する対象判定用グループが、受信対象の領域となる。また、この並び替え数列の1ビット目からpビット目までの値を並び順を逆にした数列の最下位ビットを反転させた数列と送受信対象インデックスの1ビット目からpビット目までの値を並べた数列とが一致する対象判定用グループが、送信対象の領域となる。
図11は、2次元のハイパーキューブに含まれる4つの演算ユニットによるスレッドTh2に関するHalvingを表す図である。図11において、実線で囲われたブロックが受信対象のデータである。また、破線で囲われたブロックが送信対象のデータである。図11の紙面に向かって右側が各演算ユニット20において送受信が行われるデータにあたるブロックを表し、左側が送信対象及び受信対象の領域を表す。
各演算ユニット20の対象データ決定部205は、通信毎にスレッドTh2に関する送信対象のデータ及び受信対象のデータを図11に示すように選択する。そして、各演算ユニット20の対象データ決定部205は、スレッドTh2に関して、図11に示す送信対象のデータを送信し、受信データ及び図11に示す受信対象のデータを用いて演算を行うことを繰り返す。
これに対して、Doublingの実行を指示された場合、対象データ決定部205は、Halvingのときとは逆の手順を辿るように送受信対象のデータを決定する。例えば、対象データ決定部205は、以下の方法で送受信対象のデータを決定する。
送受信するデータサイズでスレッドTh1及びTh2を分割して対象判定用グループを生成する。具体的には、n次元のハイパーキューブの構成を有する場合、対象データ決定部205は、Doublingにおける1回目の通信ではスレッドを2分割する。2回目以降の通信では、対象データ決定部205は、通信回数が増えるにしたがい前回の通信の1/2倍の個数でスレッドTh1及びTh2を分割する。例えば、2回目の通信であれば、対象データ決定部205は、スレッドを2n−1分割する。
次に、対象データ決定部205は、Halvingの場合と同様に、生成した対象判定用グループに送受信対象インデックスを割り振る。
n+1−p回目の通信において、スレッドTh1に関して、対象データ決定部205は、以下のように送信対象及び受信対象の領域を決定する。対象データ決定部205は、プロセスIDの1ビット目からp−1ビット目までの値を並び順を逆にした数列と送受信対象インデックスの2ビット目からpビット目までの値を並べた数列とが一致する対象判定用グループを送受信対象の対象判定用グループとする。そして、対象データ決定部205は、送受信対象の対象判定用グループの中から、プロセスIDのpビット目を反転させた値と送受信対象インデックスの1ビット目の値とが同じ値である対象判定用グループを受信対象の領域とする。また、対象データ決定部205は、プロセスIDのpビット目の値と送受信対象インデックスの1ビット目の値とが同じ値である対象判定用グループを送信対象の領域とする。
すなわち、プロセスIDの1ビット目からpビット目までの値の並び順を逆にした数列と送受信対象インデックスの1ビット目からpビット目までの値を並べた数列とが一致する対象判定用グループが、送信対象の領域となる。また、プロセスIDの1ビット目からpビット目までの値の並び順を逆にした数列の最下位ビットを反転させた数列と送受信対象インデックスのpビット目から1ビット目までの値を並べた数列とが一致する対象判定用グループが、受信対象の領域となる。
さらに、n次元のハイパーキューブの構成を有する場合、スレッドの数がn個となる。対象データ決定部205は、n個のスレッドそれぞれに関して送信対象及び受信対象のデータの決定を行う。そこで、スレッドThq(1≦q≦n)の場合のn+1−p回目の通信について考える。対象データ決定部205は、スレッドThqのサイクリックIDにおいて値が1のビットの位置を確認し、値が1のビットの番号を並び替えの基準とする。ここでは、対象データ決定部205は、qビット目の値が1であることを確認し、qを並び替えの基準とする。
この場合、並び替え数列は、プロセスIDの1番目のビットから並び替えの基準の1つ下のq−1番目のビットまでの値の数列をpビット目の隣、すなわちp−1ビット目と反対側に移動し、ビットの番号を1〜pに振り直した状態のpビットの数列である。そして、この並び替え数列の1ビット目からpビット目までの値を並び順を逆にした数列と送受信対象インデックスの1ビット目からpビット目までの値を並べた数列とが一致する対象判定用グループが、受信対象の領域となる。また、この並び替え数列の1ビット目からpビット目までの値を並び順を逆にした数列の最下位ビットを反転させた数列と送受信対象インデックスの1ビット目からpビット目までの値を並べた数列とが一致する対象判定用グループが、送信対象の領域となる。
図4に戻って説明を続ける。対象データ決定部205は、スレッドTh1及びTh2における送信対象のデータの情報をデータ送信部207へ出力する。また、対象データ決定部205は、スレッドTh1及びTh2における受信対象のデータの情報をデータ受信部208へ出力する。この対象データ決定部205が、「データ選択部」の一例にあたる。
宛先決定部206は、スレッドTh1及びTh2の情報、スレッドTh1及びTh2に割り当てられたサイクリックID、並びに、自演算ユニットのプロセスIDの入力を統括制御部203から受ける。そして、宛先決定部206は、スレッド毎に以下の処理を実行して送信先の演算ユニット20を決定する。以下では、各スレッドに対して宛先決定部206が行う処理について説明する。図12は、宛先決定部による宛先決定の処理を説明するための図である。
Halvingの実行を指定された1回目の通信の場合、宛先決定部206は、プロセスIDとそのスレッドに割り当てられたサイクリックID(CyclicID)との排他的論理和を求める。そして、宛先決定部206は、求めた排他的論理和を送信先のプロセスIDとする演算ユニット20をそのスレッドにおけるデータの送信先とする。
例えば、1回目の通信であれば、図12に示すようにプロセスIDが00の場合、宛先決定部206は、プロセスIDである「00」とスレッドTh1に割り当てられたサイクリックIDである「01」との排他的論理和を求め、値として「01」を取得する。そして、宛先決定部206は、スレッドTh1のデータの送信先をプロセスIDが01である演算ユニット20に決定する。また、宛先決定部206は、プロセスIDである「00」とスレッドTh2に割り当てられたサイクリックIDである「10」との排他的論理和を求め、値として「10」を取得する。そして、宛先決定部206は、スレッドTh2のデータの送信先をプロセスIDが10である演算ユニット20に決定する。
2回目の通信の場合、宛先決定部206は、各スレッドに割り当てられたサイクリックIDの1の位置を1つ左にシフトさせる。このサイクリックIDの1の位置を1つ左にシフトさせる処理が、「1つシフトさせる」処理の一例にあたる。すなわち、宛先決定部206は、各スレッドに割り当てられたサイクリックIDの1の位置を1ビット上位へずらす。この時、宛先決定部206は、最上位ビットの値が1であるサイクリックIDの場合、1ビット目の値を1にする。例えば、宛先決定部206は、スレッドTh1のサイクリックIDを「01」から「10」に変更する。また、宛先決定部206は、スレッドTh2のサイクリックIDを「10」から「01」に変更する。
次に、宛先決定部206は、プロセスIDとそのスレッドの変更後のサイクリックIDとの排他的論理和を求める。そして、宛先決定部206は、求めた排他的論理和を送信先のプロセスIDとする演算ユニット20をそのスレッドにおけるデータの送信先とする。
例えば、2回目の通信であれば、プロセスIDが00の場合、宛先決定部206は、プロセスIDである「00」とスレッドTh1の変更後のサイクリックIDである「10」との排他的論理和を求め、値として「10」を取得する。そして、宛先決定部206は、スレッドTh1のデータの送信先をプロセスIDが10である演算ユニット20に決定する。また、宛先決定部206は、プロセスIDである「00」とスレッドTh2の変更後のサイクリックIDである「01」との排他的論理和を求め、値として「01」を取得する。そして、宛先決定部206は、スレッドTh2のデータの送信先をプロセスIDが01である演算ユニット20に決定する。
図13は、2次元ハイパーキューブにおける宛先の遷移を説明するための図である。図13の各丸が演算ユニット20を表し、各丸に付した番号が各演算ユニット20のプロセスIDを表す。1回目の通信では、実線矢印401で示すように、プロセスIDが00の演算ユニット20は、プロセスIDが01の演算ユニット20をスレッドTh1のデータの送信先とする。また、破線矢印402で示すように、プロセスIDが00の演算ユニット20は、プロセスIDが10の演算ユニット20をスレッドTh2のデータの送信先とする。次に、2回目の通信では、実線矢印403で示すように、プロセスIDが00の演算ユニット20は、プロセスIDが10の演算ユニット20をスレッドTh1のデータの送信先とする。また、破線矢印404で示すように、プロセスIDが00の演算ユニット20は、プロセスIDが01の演算ユニット20をスレッドTh2のデータの送信先とする。
このように、演算ユニット20は、1回の通信でスレッド毎に異なる演算ユニット20をデータの送信先とする。これにより、演算ユニット20は、1回の通信で隣接する全ての演算ユニット20へデータの送信を行え、使用しない経路の発生を抑制でき、帯域を十分に使うことが可能となる。
これに対して、Doublingの実行を指定された1回目の通信の場合、宛先決定部206は、Halvingの最後の通信で用いたサイクリックIDを取得する。次に、プロセスIDとそのスレッドに割り当てられたサイクリックIDとの排他的論理和を求める。そして、宛先決定部206は、求めた排他的論理和を送信先のプロセスIDとする演算ユニット20をそのスレッドにおけるデータの送信先とする。
この後、宛先決定部206は、前回の通信において各スレッドで用いたサイクリックIDの1の位置を1つ右にシフトさせる。すなわち、宛先決定部206は、前回の通信において各スレッドで用いたプロセスIDの1の位置を1ビット下位へずらす。そして、宛先決定部206は、プロセスIDとそのスレッドの変更後のサイクリックIDとの排他的論理和を求める。そして、宛先決定部206は、求めた排他的論理和を送信先のプロセスIDとする演算ユニット20をそのスレッドにおけるデータの送信先とする。
このサイクリックIDが、「巡回番号情報」の一例にあたる。そして、サイクリックIDの1の位置を1つ右シフトさせる処理が、「巡回番号情報を1つシフトさせる」処理の一例にあたる。また、宛先決定部206による排他的論理和により求められる送信先となるプロセスIDが、「各演算処理装置に割り当てられた識別番号情報と各グループに割り当てられた巡回番号情報との排他的論理和演算により得られる宛先番号情報」の一例にあたる。すなわち、宛先決定部206は、図12に示すように、巡回番号情報であるサイクリックIDと識別番号情報であるプロセスIDとの排他的論理和演算を行い、排他的論理和演算により宛先番号情報であるプロセスIDを算出する。そして、宛先決定部206は、算出したプロセスIDを図13に示す各通信における送信先の演算ユニット20のプロセスIDとする。
次に、宛先決定部206は、サイクリックIDを左にシフトさせてデータの送信先となる演算ユニット20を選ぶことで、各スレッドが保持するデータと重ならないデータを有する演算ユニット20をスレッド毎のデータの送信先とすることができる。この各スレッドが保持するデータと重ならないデータを有する演算ユニット20が、「補完相手の演算処理装置」の一例にあたる。
さらに、ここで説明した宛先決定部20による宛先決定の処理が、「識別番号情報と巡回番号情報との排他的論理和演算により得られる宛先番号情報を基に、隣接する演算処理装置の中から異なる演算処理装置を送信先として選択する」処理の一例にあたる。
図4に戻って説明を続ける。宛先決定部206は、スレッドTh1及びTh2のデータの送信先の情報をデータ送信部207へ出力する。この宛先決定部206が、「送信先選択部」の一例にあたる。
データ送信部207は、スレッドTh1及びTh2における送信対象のデータの情報の入力を対象データ決定部205から受ける。また、データ送信部207は、スレッドTh1及びTh2のデータの送信先の情報を宛先決定部206から受ける。
データ送信部207は、取得したスレッドTh1及びTh2における送信対象のデータの情報で指定されたブロックに格納されたデータ列の取得をメモリ制御部23に依頼する。その後、データ送信部207は、取得したスレッドTh1及びTh2における送信対象のデータの情報で指定されたブロックに格納されたデータ列の入力をメモリ制御部23から受ける。この取得したデータが、スレッドTh1及びTh2における送信データである。そして、データ送信部207は、スレッドTh1における送信データをスレッドTh1のデータの送信先に対して送信する。また、データ送信部207は、スレッドTh2における送信データをスレッドTh2のデータの送信先に対して送信する。
例えば、Halvingの実行の際の1回目の通信において、自演算ユニットのプロセスIDが00であれば、データ送信部207は、図8における領域304に含まれるブロックのデータ列をプロセスIDが01の演算ユニット20へ送信する。また、データ送信部207は、図10における領域334に含まれるブロックのデータ列をプロセスIDが10の演算ユニット20へ送信する。また、2回目の通信において、自演算ユニットのプロセスIDが00であれば、データ送信部207は、図8における領域308に含まれるブロックのデータ列をプロセスIDが10の演算ユニット20へ送信する。また、データ送信部207は、図10における領域338に含まれるブロックのデータ列をプロセスIDが01の演算ユニット20へ送信する。このデータ送信部207が、「送信部」の一例にあたる。
データ受信部208は、受信対象のデータの情報の入力を対象データ決定部205から受ける。そして、データ受信部208は、他の演算ユニット20から送信されたデータ列の入力を受ける。ここで、入力された各データ列はブロック毎に並べられており、データ受信部208は、各データ列が受信対象のデータのいずれのブロックに対応するかを判断することができる。その後、データ受信部208は、取得した各データ列に対応する受信対象データとそれぞれのデータ列との加算をメモリ制御部23に依頼する。このデータ受信部208が、「受信部」の一例にあたる。
外側接続処理実行部209は、外部トポロジでのAllreduceの処理の依頼を統括制御部203から受ける。そして、外側接続処理実行部209は、自演算ユニットが含まれるハイパーキューブ以外のハイパーキューブを形作る演算ユニット20との間でAllreduce処理を実行する。この外側トポロジにおけるAllreduceの処理はその手法に特に制限は無く、外側接続処理実行部209は、従来のAllreduceの処理の手順などを用いて処理を行ってもよい。また、外側接続処理実行部209は、外側トポロジにおける接続をサブネットマネージャ6に依頼して外側トポロジにおけるAllreduceの処理についての経路管理を行ってもよい。そして、外側接続処理実行部209は、外側トポロジとのAllreduce処理が完了すると、外側トポロジにおけるAllreduceの処理の完了を統括制御部203に通知する。
同期処理部210は、Doublingの実行完了後、内側トポロジでの同期処理の実行の通知を統括制御部203から受ける。そして、同期処理部210は、ハイパーキューブに含まれる各演算ユニット20の間で同じデータが共有されたか否かを確認する。例えば、同期処理部210は、他の演算ユニット20のメモリ24に格納されたデータ列を取得する。さらに、同期処理部210は、自演算ユニットが有するAllreduce処理の演算結果であるデータ列の取得をメモリ制御部23に依頼して、メモリ制御部23からデータ列を取得する。そして、同期処理部210は、各演算ユニット20のメモリ24に格納されたデータ列が同じであるか否かを確認する。同じデータが供給された場合、メモリ制御部23は、内部トポロジにおける同期完了を統括制御部203に通知する。
その後、同期処理部210は、外側トポロジでの同期処理の実行の通知を統括制御部203から受ける。同期処理部210は、Allreduceの処理を行うハイパーキューブに含まれる各演算ユニット20以外の演算ユニット20の間で同じデータが共有されたか否かを確認する。例えば、同期処理部210は、他のシステムボード1上のAllreduceの処理の対象とした演算ユニット20のうちのいずれかのメモリ24に格納されたデータ列を取得する。そして、同期処理部210は、取得したデータ列と自演算ユニットのメモリ24に格納されたデータ列が同じであるか否かを確認する。同じデータが共有された場合、メモリ制御部23は、外部トポロジにおける同期完了を統括制御部203に通知する。
メモリ制御部23は、送信対象のデータとして決定されたデータ列の取得の依頼をデータ送信部207から受ける。そして、メモリ制御部23は、指定されたデータ列をメモリ24から取得する。その後、メモリ制御部23は、取得したデータ列をデータ送信部207へ出力する。
また、メモリ制御部23は、受信データである各データ列の入力をデータ受信部208から受ける。また、メモリ制御部23は、各データ列に対応する受信対象データと各データ列との加算依頼をデータ受信部208から受信する。そして、メモリ制御部23は、各データ列に対応する受信対象データをメモリ24から取得する。そして、メモリ制御部23は、取得した受信対象データと受信データであるデータ列を並列演算装置21へ出力し、加算を依頼する。その後、メモリ制御部23は、受信データである各データ列と対応する受信対象データとの加算結果を並列演算装置21から取得する。そして、メモリ制御部23は、加算結果をそれぞれの受信対象データが格納されていたブロックに格納されるようにメモリ24に記憶させる。そして、メモリ制御部23は、1回の通信において取得したデータの演算が終了し演算結果をメモリ24への格納が完了すると統括制御部203に通信の完了を通知する。
さらに、メモリ制御部23は、自演算ユニットが有するAllreduce処理の演算結果であるデータ列の取得の依頼を同期処理部210から受ける。そして、メモリ制御部23は、Doubling処理が完了したデータ列をメモリ24から取得する。そして、メモリ制御部23は、取得したデータ列を同期処理部210へ出力する。
次に、図14を参照して、Allreduceの処理の全体的な流れについて説明する。図14は、Allreduceの処理の全体のフローチャートである。ここでは、演算ユニット20がn次元のハイパーキューブに含まれる場合で説明する。
プロセスID割当部201は、結線表をネットワーク構成管理部28から取得する。そして、プロセスID割当部201は、演算ユニット20が含まれるハイパーキューブの情報を結線表から取得する(ステップS1)。
次に、プロセスID割当部201は、ハイパーキューブに含まれる2個の各演算ユニット20にnビットの固有のプロセスIDを割り当てる(ステップS2)。そして、プロセスID割当部201は、各演算ユニット20に割り当てたプロセスIDを統括制御部203へ出力する。
それぞれの演算ユニット20の統括制御部203は、各演算ユニット20に割り当てられたプロセスIDをプロセスID割当部201から取得する。そして、統括制御部203は、2個のプロセスに対する並列Allreduce処理を開始する(ステップS3)。統括制御部203は、各演算ユニット20に割り当てられたプロセスIDをスレッド生成部202へ出力する。
スレッド生成部202は、各演算ユニット20に割り当てられたプロセスIDの入力を統括制御部203から受ける。そして、スレッド生成部202は、自演算ユニットが含まれるハイパーキューブの次元を取得する。ここでは、ハイパーキューブがn次元の場合で説明する。スレッド生成部202は、自演算ユニットに割り当てられたプロセスの情報をジョブ管理部27から取得する。そして、スレッド生成部202は、自演算ユニットに割り当てられたプロセスによる演算結果のデータ列をn個の組に分けてn個のスレッドTh1〜Thnを生成し、生成したスレッドそれぞれに識別番号情報を割り当てる(ステップS4)。その後、スレッド生成部202は、識別番号情報及び各スレッドTh1〜Thnに含まれるデータ列の情報を含むスレッドの情報を統括制御部203へ出力する。
統括制御部203は、スレッドの情報をスレッド生成部202から取得する。そして、統括制御部203は、n個のスレッドTh1〜Thn毎にHalvingを実行する(ステップS5〜S7)。Halvingの詳細については後で説明する。
Halving完了後、統括制御部203は、n個のスレッドTh1〜Thn毎に外側トポロジにおけるAllreduceの処理を実行する(ステップS8〜S10)。
外側トポロジにおけるAllreduceの処理完了後、統括制御部203は、n個のスレッドTh1〜Thn毎にDoublingを外側接続処理実行部209に実行させる(ステップS11〜S13)。Doublingの詳細については後で説明する。
Doublingの処理完了後、統括制御部203は、n個のスレッドTh1〜Thnの間の同期処理を同期処理部210に実行させる(ステップS14)。
その後、統括制御部203は、自演算ユニットが実行するプロセスを含む2個のプロセス間の同期処理を同期処理部210に実行させる(ステップS15)。これにより、統括制御部203は、並列Allreduce処理を完了する。
次に、図15を参照して、Halvingの処理の流れについて説明する。図15は、Halvingのフローチャートである。図15のフローチャートは、図14におけるステップS5〜S7で実行される処理の一例にあたる。
スレッド生成部202は、各スレッドにnビットのサイクリックIDを割り当てサイクリックIDの初期化を行う(ステップS101)。統括制御部203は、各スレッドのサイクリックIDをスレッド生成部202から取得する。
次に、統括制御部203は、i=0とする(ステップS102)。
次に、統括制御部203は、自演算ユニットのプロセスID、スレッドの情報、各スレッドに割り当てられたサイクリックID、並びに、各ブロックのデータ列を送受信データサイズ算出部204へ出力する。送受信データサイズ算出部204は、初回の通信では2−1個のデータ列のブロックを送受信するデータサイズとする。その後、送受信データサイズ算出部204は、前回の通信におけるデータサイズを1/2倍して、今回の通信において送受信するデータサイズとして算出する(ステップS103)。そして、送受信データサイズ算出部204は、送受信するデータサイズを対象データ決定部205へ出力する。また、送受信データサイズ算出部204は、各スレッドの情報、各スレッドに割り当てられたサイクリックID、並びに、各ブロックのデータ列を対象データ決定部205へ出力する。
対象データ決定部205は、送受信するデータサイズ、スレッドTh1及びTh2の情報、スレッドTh1及びTh2に割り当てられたサイクリックID、並びに、各ブロックのデータ列の入力を送受信データサイズ算出部204から受ける。次に、対象データ決定部205は、送受信を行うデータサイズで各スレッドを分割して対象判定用グループを生成する。そして、対象データ決定部205は、対象判定用グループに送受信対象インデックスを割り振り、プロセスID及び送受信対象インデックスを用いて受信対象のデータの格納領域を求める(ステップS104)。
次に、対象データ決定部205は、プロセスID及び送受信対象インデックスを用いて送信対象のデータの格納領域を求める(ステップS105)。その後、対象データ決定部205は、送信対象のデータの格納領域の情報をデータ送信部207へ出力する。また、対象データ決定部205は、受信対象のデータの格納領域の情報をデータ受信部208へ出力する。
また、宛先決定部206は、各スレッドの情報、スレッドに割り当てられたサイクリックID、並びに、自演算ユニットのプロセスIDの入力を統括制御部203から受ける。そして、宛先決定部206は、スレッド毎に、プロセスIDとサイクリックIDとの排他的論理和を求めて、スレッド毎に送信先の演算ユニット20のプロセスIDを求める(ステップS106)。その後、宛先決定部206は、スレッド毎の送信先の演算ユニット20のプロセスIDをデータ送信部207へ出力する。
データ送信部207は、送信対象のデータの格納領域の情報の入力を対象データ決定部205から受ける。また、データ送信部207は、スレッド毎の送信先の演算ユニット20のプロセスIDの入力を宛先決定部206から受ける。また、データ受信部208は、受信対象のデータの格納領域の情報の入力を対象データ決定部205から受ける。そして、データ送信部207及びデータ受信部208は、データの送受信を行う(ステップS107)。この時、データ受信部208は、他の演算ユニット20からの受信データを対応する受信対象のデータの情報とともにメモリ制御部23へ出力する。メモリ制御部23は、受信データと受信対象のデータとの演算を並列演算装置21に行わせ、演算結果をメモリ24の受信対象のデータの格納領域であった場所に格納する。その後、メモリ制御部23は、データの受信完了を統括制御部203へ通知する。
統括制御部203は、データの受信完了をメモリ制御部23から受信する。そして、統括制御部203は、各スレッドに割り当てられたサイクリックIDの値をサイクリックに左にシフトさせる(ステップS108)。
その後、統括制御部203は、i=nか否かを判定する(ステップS109)。i=nでない場合(ステップS109:否定)、統括制御部203は、iを1つインクリメントする(ステップS110)。その後、統括制御部203は、ステップS103へ戻る。
これに対して、i=nの場合(ステップS109:肯定)、統括制御部203は、Halvingの処理を終了する。
次に、図16を参照して、Doublingの処理の流れについて説明する。図16は、Doublingのフローチャートである。図16のフローチャートは、図14におけるステップS11〜S13で実行される処理の一例にあたる。
統括制御部203は、Halving終了時の送受信したデータサイズ及び各スレッドのサイクリックIDを取得する(ステップS201)。
次に、統括制御部203は、i=0とする(ステップS202)。
次に、統括制御部203は、各スレッドのサイクリックIDの値をサイクリックに右にシフトする(ステップS203)。
その後、統括制御部203は、自演算ユニットのプロセスID、スレッドの情報、各スレッドに割り当てられたサイクリックID、並びに、各ブロックのデータ列を送受信データサイズ算出部204へ出力する。送受信データサイズ算出部204は、初回の通信では1個のデータ列のブロックを送受信するデータサイズとする。その後、送受信データサイズ算出部204は、前回の通信におけるデータサイズを2倍して、今回の通信において送受信するデータサイズを計算する(ステップS204)。そして、送受信データサイズ算出部204は、送受信するデータサイズを対象データ決定部205へ出力する。また、送受信データサイズ算出部204は、各スレッドの情報、各スレッドに割り当てられたサイクリックID、並びに、各ブロックのデータ列を対象データ決定部205へ出力する。
対象データ決定部205は、送受信するデータサイズ、スレッドTh1及びTh2の情報、スレッドTh1及びTh2に割り当てられたサイクリックID、並びに、各ブロックのデータ列の入力を送受信データサイズ算出部204から受ける。次に、対象データ決定部205は、送受信を行うデータサイズで各スレッドを分割して対象判定用グループを生成する。そして、対象データ決定部205は、対象判定用グループに送受信対象インデックスを割り振り、プロセスID及び送受信対象インデックスを用いて受信対象のデータの格納領域を求める(ステップS205)。
次に、対象データ決定部205は、プロセスID及び送受信対象インデックスを用いて送信対象のデータの格納領域を求める(ステップS206)。その後、対象データ決定部205は、送信対象のデータの格納領域の情報をデータ送信部207へ出力する。また、対象データ決定部205は、受信対象のデータの格納領域の情報をデータ受信部208へ出力する。
また、宛先決定部206は、各スレッドの情報、スレッドに割り当てられたサイクリックID、並びに、自演算ユニットのプロセスIDの入力を統括制御部203から受ける。そして、宛先決定部206は、スレッド毎に、プロセスIDとサイクリックIDとの排他的論理和を求めて、スレッド毎に送信先の演算ユニット20のプロセスIDを求める(ステップS207)。その後、宛先決定部206は、スレッド毎の送信先の演算ユニット20のプロセスIDをデータ送信部207へ出力する。
データ送信部207は、送信対象のデータの格納領域の情報の入力を対象データ決定部205から受ける。また、データ送信部207は、スレッド毎の送信先の演算ユニット20のプロセスIDの入力を宛先決定部206から受ける。また、データ受信部208は、受信対象のデータの格納領域の情報の入力を対象データ決定部205から受ける。そして、データ送信部207及びデータ受信部208は、データの送受信を行う(ステップS208)。この時、データ受信部208は、他の演算ユニット20からの受信データを対応する受信対象のデータの情報とともにメモリ制御部23へ出力する。メモリ制御部23は、受信データと受信対象のデータとの演算を並列演算装置21に行わせ、演算結果をメモリ24の受信対象のデータの格納領域であった場所に格納する。その後、メモリ制御部23は、データの受信完了を統括制御部203へ通知する。
統括制御部203は、データの受信完了をメモリ制御部23から受信する。そして、統括制御部203は、i=nか否かを判定する(ステップS209)。i=nでない場合(ステップS209:否定)、統括制御部203は、iを1つインクリメントする(ステップS210)。その後、統括制御部203は、ステップS203へ戻る。
これに対して、i=nの場合(ステップS209:肯定)、統括制御部203は、Doublingの処理を終了する。
さらに、Halving及びDoublingを実行するためのプログラムについて説明する。図17は、Halving及びDoublingを実行するためのプログラムの疑似コードの一例を示す図である。
図17におけるCyclicLeftShift(val)は、valの値をサイクリックに左にシフトする関数である。また、CyclicRightShift(val)は、valの値をサイクリックに右にシフトする関数である。さらに、SendRecv(dst,scr,size,peer)は、scrのアドレスからsize分をpeerへ送り、peerから送られた分のデータをdstに上書きする関数である。また、SendRecv_Add(dst,scr,size,peer)は、scrのアドレスからsize分をpeerへ送り、peerから送られた分のデータをdstに加算する関数である。また、StepHistは、実行中のHalving又はDoublingの処理の進行状態を表す値である。
次に、図18を参照して、図17で示したプログラムのHalvingについての処理の流れを説明する。図18は、Halvingを実現するプログラムで行われる処理のフローチャートである。図18は、図15のフローチャートの処理をプログラムで実現した場合の一例にあたる。ここでは、ネットワーク制御部29が有する演算回路を動作主体として各処理について説明する。また、ここでは、スレッドの識別子として、0〜n−1までの値で表されるthredIDを用いる。
演算回路は、1つだけ1の値を有するnビットのサイクリックID(CyclicID)の1の値の場所を左に1つずつシフトさせていくことで各スレッドに割り当てるサイクリックIDを生成し、CyclicIDの初期化を行う。また、演算回路は、StepHist=0とする。さらに、演算回路は、プロセスの演算結果全体のデータサイズ(D)をnで除算した値にthredIDを乗算する。次に、演算回路は、乗算結果にメモリ24の先頭アドレス(MemAddr)を加算して、スレッド毎のoffsetを算出して、offsetの初期化を行う(ステップS301)。
次に、演算回路は、i=0とする(ステップS302)。
次に、演算回路は、StepHistの最下位に注目するビットを追加する(ステップS303)。具体的には、演算回路は、StepHistのビット列を左に1つシフトさせる。この場合、演算回路は、最下位ビットを0とする。そして、演算回路は、CyclicIDにおいて1が立つビットと同じビットが、プロセスID(processID)でも1であるかを判定する。例えば、演算回路は、サイクリックIDとプロセスIDとの論理積を求め、求めた値が0より大きいか否かを判定し、0より大きければそのビットがプロセスIDでも1であると判定し、0以下であればそのビットがプロセスIDでは0であると判定する。そして、そのビットがプロセスIDでも1である場合、演算回路は、StepHistと、同じビット数で最下位ビットが1であるビット列との排他的論理和を求めることで、StepHistの最下位ビットを1にする。これに対して、そのビットがプロセスIDでは0である場合、演算回路は、StepHistと、同じビット数ですべてのビットが0であるビット列との排他的論理和を求めることで、StepHistの最下位ビットを0にする。
次に、演算回路は、送受信を行うデータサイズを算出(ステップS304)。具体的には、演算回路は、プロセスの演算結果全体のデータサイズをnで除算した値を2のi乗で除算して、BufferSizeを求める。このBufferSizeが、送受信を行うデータサイズとなる。
次に、演算回路は、受信対象となるデータの先頭アドレスを求める(ステップS305)。具体的には、演算回路は、StepHistにBufferSizeを乗算した値にoffsetを加算することで、受信対象となるデータの先頭アドレスであるRecvAddを算出する。
より詳しく説明すると、各スレッドのブロックは2×2個に分割される。そして、演算回路は、スレッドの分割された各領域に、1+iビットの送受信対象インデックスを割り当てる。また、この時点でStepHistも同様に1+iビットで表現される値を有する。そこで、演算回路は、送受信対象インデックスがStepHistの値と一致する領域を受信対象となるデータの領域とする。そして、演算回路は、そのインデックス倍のBufferSizeを求めることで受信対象となるデータの先頭アドレスが求められる。
次に、演算回路は、送信対象となるデータの先頭アドレスを求める(ステップS306)。具体的には、受信先の先頭アドレスに対して、最下位ビットが異なる送受信対象インデックスを有する領域が送信対象となるデータの領域となる。そこで、演算回路は、StepHistと、StepHistと同じビット数で最下位ビットが1の値との排他的論理和を求める。そして、演算回路は、求めた排他的論理和の値にBufferSizeを乗算し、乗算結果にoffsetを加算することで、送信対象となるデータの先頭アドレスであるSendAddを算出する。
次に、演算回路は、送信相手の演算ユニット20のプロセスIDを求める(ステップS307)。具体的には、演算回路は、サイクリックIDとプロセスIDとの排他的論理和を算出し、算出結果を送受信相手の演算ユニット20のプロセスIDであるPeerとする。
その後、演算回路は、データの送受信及び受信データの加算処理を実行する(ステップS308)。具体的には、演算回路は、SendRecv_Add(RecvAdd,SendAdd,BufferSize,Peer)を求める。
次に、演算回路は、CyclicLeftShift(CycicID)を行い、サイクリックIDの値をサイクリックに左にシフトする(ステップS309)。
そして、演算回路は、iがnより小さいか否かを判定する(ステップS310)。iがnより小さい場合(ステップS310:肯定)、演算処理部は、iの値を1つインクリメントし(ステップS311)、ステップS303へ戻る。
これに対して、i=nの場合(ステップS310:否定)、演算処理部は、Halvingを終了する。
次に、図19を参照して、図17で示したプログラムのDoublingについての処理の流れを説明する。図19は、Doublingを実現するプログラムで行われる処理のフローチャートである。図19は、図16のフローチャートの処理をプログラムで実現した場合の一例にあたる。ここでも、ネットワーク制御部29が有する演算回路を動作主体として各処理について説明する。
演算回路は、Halving終了時のBufferSize、サイクリックID、StepHist及びoffsetを取得する(ステップS401)。
次に、演算回路は、i=0とする(ステップS402)。
次に、演算回路は、CyclicRightShift(CyclicID)を行い、サイクリックIDの値をサイクリックに右にシフトする(ステップS403)。すなわち、演算回路は、Halvingとは逆順に通信相手とデータの交換を行う。Halvingでは、最後にデータの送受信を行った後に一度左へのシフトが実行されたため、ここでは、演算回路は、最初に右へのシフトを実行する。
次に、演算回路は、受信対象となるデータの先頭アドレスを計算する(ステップS404)。具体的には、Doublingにおいては、送受信対象のデータの領域がHalvingの時と逆になる。そこで、演算回路は、StepHistと、StepHistと同じビット数で最下位ビットが1の値との排他的論理和を求める。そして、演算回路は、求めた排他的論理和の値にBufferSizeを乗算し、乗算結果にoffsetを加算することで、受信対象となるデータの先頭アドレスであるRecvAddを算出する。
次に、演算回路は、送信対象となるデータの先頭アドレスを求める(ステップS405)。具体的には、演算回路は、StepHistにBufferSizeを乗算した値にoffsetを加算することで、送信対象となるデータの先頭アドレスであるSendAddを算出する。
次に、演算回路は、送信相手の演算ユニット20のプロセスIDを求める(ステップS406)。具体的には、演算回路は、サイクリックIDとプロセスIDとの排他的論理和を算出し、算出結果を送受信相手の演算ユニット20のプロセスIDであるPeerとする。
次に、演算回路は、次の通信時の送受信を行うデータサイズを計算(ステップS407)。具体的には、演算回路は、今回の通信におけるデータサイズを2倍にしたものを次の通信時の送受信を行うデータサイズとする。
その後、演算回路は、データの送受信及び受信データの加算処理を実行する(ステップS408)。具体的には、演算回路は、SendRecv(RecvAdd,SendAdd,CyclicID,BufferSize,Peer)を求める。
次に、演算回路は、StepHistの値を右にシフトさせる(ステップS409)。この場合の右へのシフトはサイクリックな右シフトではない。右にシフトさせることで、StepHistの1ビット目の値が消滅する。これにより、演算回路は、StepHistの値をHalvingの時の逆順で遷移させる。
そして、演算回路は、iがnより小さいか否かを判定する(ステップS410)。iがnより小さい場合(ステップS410:肯定)、演算処理部は、iの値を1つインクリメントし(ステップS411)、ステップS403へ戻る。
これに対して、i=nの場合(ステップS410:否定)、演算処理部は、Doublingを終了する。
以上に説明したように、本実施例に係る情報処理システムは、演算ユニットが含まれるハイパーキューブの次元でプロセスを分割して生成したスレッド毎に異なる演算ユニットとの間でデータの送受信を行うことでAllreduceの処理を実行する。これにより、Allreduceの処理を行うに当たり、通信をする際に不使用の通信経路の発生を抑制することができ、処理速度を向上させることができる。
図20は、実施例1に係るAllreduceの処理の効果を説明するための図である。図20は、縦軸で従来のAllreduce処理に対する通信時間の倍率を表し、横軸でハイパーキューブの次元数を表す。
1本のケーブルの帯域がbバイト/秒の場合で説明する。この場合、1本の経路でDバイトのデータの通信を行うのに係る時間は、D/b秒である。そのため、データの通信量が半分になると通信時間はD/2bとなる。すなわち、演算ユニットが2次元のハイパーキューブの構成の場合、スレッドのサイズは全体の半分になるため、送受信するデータサイズも半分になり、通信時間も半分になる。そして、1度に通信を行う経路が倍になるので、帯域は2bバイト/秒となる。また、n次元のハイパーキューブの構成の場合、帯域はnbバイト/秒であり、各経路での送受信するデータサイズはD/nバイトとなる。したがって、図20に示すように、本願に係るAllreduceの処理を実行した場合、従来のAllreduceの処理に比べて処理速度が向上する。
また、演算ユニットがネットワークスイッチで接続されたトポロジにおいて、本実施例に係るAllreduceの処理を実行した場合、各演算ユニットからネットワークスイッチに延びる1本のネットワーク上で、同時に複数のデータの送信が行われる。そのため、ネットワークスイッチへ向かう経路に負荷が集中し、速度の低下が発生するおそれがある。これは、多段のネットワークスイッチを用いた場合でも同様である。そのため、本実施例に係るAllreduceの処理を行う情報処理システムは、演算ユニットがスイッチを介さない直接結合網を有する場合でより効果を発揮できる。
図21は、実施例2に係る情報処理システムのハードウェア構成図である。本実施例に係る情報処理システムは、システムボード1上に8つの演算ユニット20が搭載される。そして、演算ユニット20は、3次元のハイパーキューブとなるように接続される。
本実施例に係る演算ユニット20も実施例1と同様に、図3で表されるハードウェアを有する。さらに、ネットワーク制御部29のブロック図は、図4で表される。以下の説明では、実施例1と同様の各部の機能については説明を省略する場合がある。
本実施例に係るスレッド生成部202は、演算ユニット20が3次元のハイパーキューブに含まれるため、図22に示すように、1つのプロセスに対して3つのスレッドTh1〜Th3を生成する。図22は、実施例2に係る宛先決定の処理を説明するための図である。
送受信データサイズ算出部204は、実施例1と同様に送受信するデータサイズを決定する。送受信されるデータサイズは、図22における太枠で囲われたブロックに格納されたデータ列のサイズである。すなわち、データサイズは、通信毎に半分のサイズとなる。
また、対象データ決定部205は、生成した対象判定用グループに送受信対象インデックスを割り振り、実施例1と同様に受信対象とする領域及び送信対象とする領域を決定する。そして、対象データ決定部205は、その決定した領域に対応するデータを送信対象のデータ及び受信対象のデータとする。
また、宛先決定部206は、図22に示すようにスレッド毎にプロセスIDとサイクリックIDとの排他的論理和を求め、その値をそのスレッドにおける送信先のプロセスIDとする。図22は、プロセスIDとして000が割り当てられた演算ユニット20による各通信における送信先のプロセスIDの決定を表す。図22では、各通信においてスレッド毎にサイクリックIDを記載した。そして、サイクリックIDから延びる矢印の先にプロセスIDとサイクリックIDとの排他的論理和から求まる送信先のプロセスIDを記載した。
この場合、図23に示すように、通信毎に送信先の演算ユニット20は変化する。図23は、3次元ハイパーキューブにおける宛先の遷移を説明するための図である。図23の各丸が演算ユニット20を表し、各丸に付した番号が各演算ユニット20のプロセスIDを表す。
1回目の通信では、実線矢印411で示すように、プロセスIDが000の演算ユニット20は、プロセスIDが001の演算ユニット20をスレッドTh1のデータの送信先とする。また、破線矢印412で示すように、プロセスIDが000の演算ユニット20は、プロセスIDが010の演算ユニット20をスレッドTh2のデータの送信先とする。さらに、一点鎖線矢印413で示すように、プロセスIDが000の演算ユニット20は、プロセスIDが100の演算ユニット20をスレッドTh3のデータの送信先とする。
次に、2回目の通信では、実線矢印414で示すように、プロセスIDが000の演算ユニット20は、プロセスIDが010の演算ユニット20をスレッドTh1のデータの送信先とする。また、破線矢印415で示すように、プロセスIDが000の演算ユニット20は、プロセスIDが100の演算ユニット20をスレッドTh2のデータの送信先とする。さらに、一点鎖線矢印416で示すように、プロセスIDが000の演算ユニット20は、プロセスIDが001の演算ユニット20をスレッドTh3のデータの送信先とする。
次に、3回目の通信では、実線矢印417で示すように、プロセスIDが000の演算ユニット20は、プロセスIDが100の演算ユニット20をスレッドTh1のデータの送信先とする。また、破線矢印418で示すように、プロセスIDが000の演算ユニット20は、プロセスIDが001の演算ユニット20をスレッドTh2のデータの送信先とする。さらに、一点鎖線矢印419で示すように、プロセスIDが000の演算ユニット20は、プロセスIDが010の演算ユニット20をスレッドTh3のデータの送信先とする。
このように、演算ユニット20は、1回の通信でスレッド毎に異なる演算ユニット20をデータの送信先とする。これにより、演算ユニット20は、1回の通信で隣接する全ての演算ユニット20へデータの送信を行え、使用しない経路の発生を抑制でき、帯域を十分に使うことが可能となる。
まとめると、宛先決定部206は、図22に示すように、巡回番号情報であるサイクリックIDと識別番号情報であるプロセスIDとの排他的論理和演算を行い、排他的論理和演算により宛先番号情報であるプロセスIDを算出する。そして、宛先決定部206は、算出したプロセスIDを図23に示す各通信における送信先の演算ユニット20のプロセスIDとする。
図24は、実施例2に係る情報処理システムにおける通信毎の通信を行う演算ユニットを表す図である。図24では、3次元のハイパーキューブとなるように接続された8個の演算ユニット20のそれぞれに#00〜#07までの符号を割り当てて通信を行う演算ユニット20を表現した。この場合、情報処理システムは、データ量が24mのAllreduce処理を実行する。
図24では、パターンが付されていない通信がスレッドTh1のデータを送受信する演算ユニット20の組を表す。また、斜線パターンが付された通信がスレッドTh2のデータを送受信する演算ユニット20の組を表す。さらに、ドットパターンが付された通信がスレッドTh3のデータを送受信する演算ユニット20の組を表す。
そして、通信量は、Halvingが行われることにより、1回目の通信で4mであり、2回目の通信で半分の2mとなり、3回目の通信で1mとなる。その後、Doublingが行われることにより、通信量は、4回目の通信で2mとなり、5回目の通信で4mとなる。
図24に示すように、演算ユニット#00〜#07は、いずれも各通信において、隣接する演算ユニット20との通信を実行する。そして、演算ユニット#00〜#07は、各通信においてスレッド毎の通信先の演算ユニット20を変更していくことで、Allreduceの処理を実行する。
以上に説明したように、3次元のハイパーキューブとなるように演算ユニットが接続された場合であっても、通信に使用しない経路の発生を抑えることができ、処理速度を向上させることができる。
図25は、実施例3に係る情報処理システムのハードウェア構成図である。本実施例に係る情報処理システムは、1つのシステムボード1上に2つの演算ユニット20が搭載される。そして、演算ユニット20は、2次元のハイパーキューブとなるように接続される。そして、4つのシステムボード1がネットワークスイッチ5経由で相互に接続される。
この場合も、送受信データサイズ算出部204は、通信毎に送受信対象のデータサイズを決定する。そして、対象データ決定部205は、データサイズに応じて送信対象のデータ及び受信対処のデータを決定する。ただし、2次元のハイパーキューブの場合は、1回通信でHalvingが終了する。同様に、1回の通信でDoublingが終了する。
図26は、実施例3に係る情報処理システムにおける通信毎の通信を行う演算ユニットを表す図である。図26では、4つのシステムボード1において1次元のハイパーキューブとなるように接続された8個の演算ユニット20のそれぞれに#0〜#7までの符号を割り当てて通信を行う演算ユニット20を表現した。この場合、情報処理システムは、データ量が24mのAllreduce処理を実行する。
この場合は、各システムボード1間でのAllreduce処理が行われる。すなわち、4つのシステムボード1のぞれぞれの間で相互にデータの交換が行われる。このように、Allreduceの対象とするシステムボード1が増えることで、ネットワークスイッチ5を介したAllreduceの処理が増加する。
以上に説明したように、1次元のハイパーキューブとなるように接続された場合であっても、通信に使用しない経路の発生を抑えることができ、処理速度を向上させることができる。ただし、システムボードが増えることで、ネットワークスイッチを介したAllreduce処理が増加するので、直接接続された演算ユニットを増やしてネットワークスイッチを用いたAllreduceの処理を削減することがより好ましい。
ここで、以上の実施例では、プロセスIDの割り当てをハイパーキューブに含まれるいずれかの演算ユニット20が実行する場合で説明したが、これに限らず、例えば、プロセスID割当用の演算ユニット20を配置してもよい。
1 システムボード
2 CPU
3 PCIスイッチ
4 HCA
5 ネットワークスイッチ
6 サブネットマネージャ
20 演算ユニット
21 並列演算装置
22 演算制御部
23 メモリ制御部
24 メモリ
25 DMAエンジン部
26 PCI制御部
27 ジョブ管理部
28 ネットワーク構成管理部
29 ネットワーク制御部
30 通信用バッファ
31 インターコネクト装置
201 プロセスID割当部
202 スレッド生成部
203 統括制御部
204 送受信データサイズ算出部
205 対象データ決定部
206 宛先決定部
207 データ送信部
208 データ受信部
209 外側接続処理実行部
210 同期処理部

Claims (11)

  1. 複数の演算処理装置をそれぞれ搭載する複数の情報処理装置を有する情報処理システムであって、
    前記演算処理装置は、
    保持する複数のデータブロックを、自装置が搭載された前記情報処理装置に含まれる前記演算処理装置の数と等しい数のグループに分割する分割部と、
    各グループに含まれる複数のデータブロックから第1データブロックをそれぞれ選択するデータ選択部と、
    前記データ選択部が選択した第1データブロック毎に、各演算処理装置に割り当てられた識別番号情報と各グループに割り当てられた巡回番号情報との排他的論理和演算により得られる宛先番号情報に基づいて、前記情報処理装置に含まれる複数の演算処理装置から互いに異なる演算処理装置を送信先としてそれぞれ選択する送信先選択部と、
    前記データ選択部が選択した各第1データブロックを、前記送信先選択部が選択した各演算処理装置に対してそれぞれ送信する送信部と
    を備えたことを特徴とする情報処理システム。
  2. 前記送信先選択部は、前記情報処理装置に含まれる複数の演算処理装置のうち自装置に隣接する前記演算処理装置の中から互いに異なる前記演算処理装置を送信先として選択することを特徴とする請求項1に記載の情報処理システム。
  3. 各前記演算処理装置は、自装置に隣接する前記演算処理装置の数のビット数で表される前記識別番号情報が割り当てられ、
    前記送信先選択部は、前記ビット数で表される前記巡回番号情報を各グループに割り当て、自装置に割り当てられた前記識別番号情報と、前記巡回番号情報との排他的論理和演算を行い、排他的論理和演算により得られる前記宛先番号情報と一致する前記識別番号情報が割り当てられた演算処理装置を、排他的論理和演算に用いた巡回番号情報が割り当てられたグループの送信先として選択する
    ことを特徴とする請求項1又は2に記載の情報処理システム。
  4. 前記演算処理装置は、他の演算処理装置から送信された第1データブロックを受信し、複数の前記データブロックのうち受信した第1データブロックに対応する所定データブロックと受信した第1データブロックとを用いて演算を行い、演算結果を前記所定データブロックのデータとする受信部をさらに備えることを特徴とする請求項1〜3のいずれか一つに記載の情報処理システム。
  5. 前記送信先選択部は、前記送信部による前記第1データブロックの送信及び前記受信部による前記演算結果の格納の完了後、前記巡回番号情報を1つシフトさせることを特徴とする請求項4に記載の情報処理システム。
  6. 前記データ選択部は、前記送信部による前記第1データブロックの送信及び前記受信部による前記演算結果の格納の完了後、各グループのそれぞれの中から第2データブロックを選択し、
    前記送信先選択部は、前記識別番号情報と1つシフトさせた巡回番号情報との排他的論理和演算を行うことで、前記データ選択部が選択した第2データブロック毎に互いに異なり、且つ、各第2データブロックが含まれる前記グループにおける前記第1データブロックの送信先とは異なる前記演算処理装置を、前記情報処理装置に含まれる複数の演算処理装置の中から送信先として選択し、
    前記送信部は、前記データ選択部が選択した各第2データブロックを、前記送信先選択部が選択した前記演算処理装置に対して送信する
    ことを特徴とする請求項5に記載の情報処理システム。
  7. 前記送信先選択部は、前記第2データブロックの補完相手である第3データブロックを保持する演算処理装置を送信先として選択することを特徴とする請求項6に記載の情報処理システム。
  8. 前記データブロックは、前記演算処理装置が保持するデータを、隣接する前記演算処理装置の数で2をべき乗した数を隣接する演算処理装置の数に乗算した値に分割されたデータ群であることを特徴とする請求項1〜7のいずれか一つに記載の情報処理システム。
  9. 前記演算処理装置は、それぞれに所定ビットで表される前記識別番号情報が割り当てられ、前記識別番号情報における1つのビットの値が異なる演算処理装置同士が接続されることを特徴とする請求項1〜8のいずれか一つに記載の情報処理システム。
  10. 保持する複数のデータブロックを自装置が搭載された情報処理装置に含まれる演算処理装置の数と等しい数のグループに分割する分割部と、
    各グループに含まれる複数のデータブロックから第1データブロックをそれぞれ選択するデータ選択部と、
    前記データ選択部が選択した第1データブロック毎に、各演算処理装置に割り当てられた識別番号情報と各グループに割り当てられた巡回番号情報との排他的論理和演算により得られる宛先番号情報に基づいて、前記情報処理装置に含まれる複数の演算処理装置から互いに異なる演算処理装置を送信先としてそれぞれ選択する送信先選択部と、
    前記データ選択部が選択した各第1データブロックを、前記送信先選択部が選択した各演算処理装置に対して送信する送信部と
    を備えたことを特徴とする演算処理装置。
  11. 複数の演算処理装置を有する情報処理システムの制御方法であって、
    前記演算処理装置が保持する複数のデータブロックを、各演算処理装置が搭載された情報処理装置に含まれる演算処理装置の数と等しい数のグループに分割し、
    各グループに含まれる複数のデータブロックから第1データブロックをそれぞれ選択し、
    選択された第1データブロック毎に、各演算処理装置に割り当てられた識別番号情報と各グループに割り当てられた巡回番号情報との排他的論理和演算により得られる宛先番号情報に基づいて、前記情報処理装置に含まれる複数の演算処理装置から互いに異なる演算処理装置を送信先として選択し、
    選択した各第1データブロックを、選択した演算処理装置に対して送信する
    ことを特徴とする情報処理システムの制御方法。
JP2017214029A 2017-11-06 2017-11-06 情報処理システム、演算処理装置及び情報処理システムの制御方法 Active JP6930381B2 (ja)

Priority Applications (2)

Application Number Priority Date Filing Date Title
JP2017214029A JP6930381B2 (ja) 2017-11-06 2017-11-06 情報処理システム、演算処理装置及び情報処理システムの制御方法
US16/174,348 US10768932B2 (en) 2017-11-06 2018-10-30 Information processing system, arithmetic processing circuit, and control method for information processing system

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
JP2017214029A JP6930381B2 (ja) 2017-11-06 2017-11-06 情報処理システム、演算処理装置及び情報処理システムの制御方法

Publications (2)

Publication Number Publication Date
JP2019086976A true JP2019086976A (ja) 2019-06-06
JP6930381B2 JP6930381B2 (ja) 2021-09-01

Family

ID=66328647

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2017214029A Active JP6930381B2 (ja) 2017-11-06 2017-11-06 情報処理システム、演算処理装置及び情報処理システムの制御方法

Country Status (2)

Country Link
US (1) US10768932B2 (ja)
JP (1) JP6930381B2 (ja)

Families Citing this family (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
WO2021195988A1 (en) * 2020-03-31 2021-10-07 Alibaba Group Holding Limited Network congestion avoidance over halving-doubling collective communication

Citations (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPH11110362A (ja) * 1997-10-01 1999-04-23 Hitachi Ltd 計算機間データ通信方法
JP2007249810A (ja) * 2006-03-17 2007-09-27 Fujitsu Ltd 並列計算機のリダクション処理方法及び並列計算機
JP2009301101A (ja) * 2008-06-10 2009-12-24 Nec Corp プロセッサ間通信システム、プロセッサ、プロセッサ間通信方法、および、通信方法
WO2011059090A1 (ja) * 2009-11-16 2011-05-19 インターナショナル・ビジネス・マシーンズ・コーポレーション ネットワークを構成している複数のノード(プロセッサ)間において、全対全通信(A2A:all-to-allcommunication)を含む、複数の計算処理をスケジューリングする方法、プログラム及び並列計算機システム。
JP2014164756A (ja) * 2013-02-22 2014-09-08 International Business Maschines Corporation 並列コンピューティング・システムにおける全対全メッセージ交換のための方法、システム、計算ノード、およびコンピュータ・プログラム(並列コンピューティング・システムにおける全対全メッセージ交換)

Family Cites Families (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
AU665521B2 (en) * 1990-10-03 1996-01-11 Thinking Machines Corporation Parallel computer system
JP2001325239A (ja) 2000-05-16 2001-11-22 Hitachi Ltd 並列計算機のリダクション処理装置および処理方法
US7280752B2 (en) * 2002-02-22 2007-10-09 Intel Corporation Network address routing using multiple routing identifiers
US7490218B2 (en) * 2004-01-22 2009-02-10 University Of Washington Building a wavecache
JP5861354B2 (ja) * 2011-09-22 2016-02-16 富士通株式会社 演算処理装置及び演算処理装置の制御方法

Patent Citations (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPH11110362A (ja) * 1997-10-01 1999-04-23 Hitachi Ltd 計算機間データ通信方法
JP2007249810A (ja) * 2006-03-17 2007-09-27 Fujitsu Ltd 並列計算機のリダクション処理方法及び並列計算機
JP2009301101A (ja) * 2008-06-10 2009-12-24 Nec Corp プロセッサ間通信システム、プロセッサ、プロセッサ間通信方法、および、通信方法
WO2011059090A1 (ja) * 2009-11-16 2011-05-19 インターナショナル・ビジネス・マシーンズ・コーポレーション ネットワークを構成している複数のノード(プロセッサ)間において、全対全通信(A2A:all-to-allcommunication)を含む、複数の計算処理をスケジューリングする方法、プログラム及び並列計算機システム。
JP2014164756A (ja) * 2013-02-22 2014-09-08 International Business Maschines Corporation 並列コンピューティング・システムにおける全対全メッセージ交換のための方法、システム、計算ノード、およびコンピュータ・プログラム(並列コンピューティング・システムにおける全対全メッセージ交換)

Non-Patent Citations (1)

* Cited by examiner, † Cited by third party
Title
山崎雅文ほか: "MPIを用いたDeep Learning処理高速化の提案", 情報処理学会研究報告 ハイパフォーマンスコンピューティング(HPC) 2016−HPC−155 [O, vol. Vol.2016-HPC-155, No.6, JPN6021026998, 8 August 2016 (2016-08-08), JP, pages 1 - 8, ISSN: 0004548289 *

Also Published As

Publication number Publication date
JP6930381B2 (ja) 2021-09-01
US10768932B2 (en) 2020-09-08
US20190138302A1 (en) 2019-05-09

Similar Documents

Publication Publication Date Title
US10554496B2 (en) Heterogeneous SoC IP core placement in an interconnect to optimize latency and interconnect performance
US9253085B2 (en) Hierarchical asymmetric mesh with virtual routers
JP5429382B2 (ja) ジョブ管理装置及びジョブ管理方法
EP0942377A1 (en) Method for performing all-to-all communication in parallel computers
CN114424214A (zh) 用于高效深度学习的混合数据-模型并行性
CN111079078B (zh) 面向结构网格稀疏矩阵的下三角方程并行求解方法
JP2023078228A (ja) 光ネットワークを用いた再構成可能な計算ポッド
JP5798378B2 (ja) 装置、処理方法、およびプログラム
KR20160037737A (ko) 스케쥴러 컴퓨팅 장치, 그것을 포함하는 분산 컴퓨팅 시스템의 데이터 노드 및 그것의 방법
US20190146802A1 (en) Information processing apparatus, arithmetic processing apparatus, and control method for information processing apparatus
JP6930381B2 (ja) 情報処理システム、演算処理装置及び情報処理システムの制御方法
CN117955897A (zh) 数据通信方法、装置、服务器及存储介质
JP6459630B2 (ja) データ転送制御装置、データ転送制御プログラム、および並列計算システム
CN113204423A (zh) 一种用于同步计算任务数据的方法、系统和可读介质
US11656920B2 (en) Information processing apparatus and computer-readable storage medium storing parallel computing program
US20150288596A1 (en) Systems and methods for selecting a router to connect a bridge in the network on chip (noc)
JP2014222473A (ja) データ処理装置、データ処理方法、データ処理制御装置、プログラムおよび記録媒体
CN115037747A (zh) 数据通信方法及装置、分布式系统、设备和介质
CN113204422A (zh) 用于分布式并行深度学习的高效片间互连拓扑结构
CN113268338A (zh) 一种计算设备的通信实现方法以及系统
US20150365343A1 (en) Parallel computer system and control method
CN116710930A (zh) 执行程序的编译方法、芯片、电子设备及计算机可读存储介质
US5513364A (en) Data transfer device and multiprocessor system
JP7087953B2 (ja) 情報処理システム及び情報処理システムの制御方法
US11973694B1 (en) Ad-hoc allocation of in-network compute-resources

Legal Events

Date Code Title Description
A621 Written request for application examination

Free format text: JAPANESE INTERMEDIATE CODE: A621

Effective date: 20200807

A977 Report on retrieval

Free format text: JAPANESE INTERMEDIATE CODE: A971007

Effective date: 20210623

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

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20210726

R150 Certificate of patent or registration of utility model

Ref document number: 6930381

Country of ref document: JP

Free format text: JAPANESE INTERMEDIATE CODE: R150