JP6372331B2 - 並列演算装置、並列演算システム、および並列演算プログラム - Google Patents

並列演算装置、並列演算システム、および並列演算プログラム Download PDF

Info

Publication number
JP6372331B2
JP6372331B2 JP2014247478A JP2014247478A JP6372331B2 JP 6372331 B2 JP6372331 B2 JP 6372331B2 JP 2014247478 A JP2014247478 A JP 2014247478A JP 2014247478 A JP2014247478 A JP 2014247478A JP 6372331 B2 JP6372331 B2 JP 6372331B2
Authority
JP
Japan
Prior art keywords
processor
synchronization
processing
memory
signal line
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
JP2014247478A
Other languages
English (en)
Other versions
JP2016110407A (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.)
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 JP2014247478A priority Critical patent/JP6372331B2/ja
Priority to US14/956,945 priority patent/US9891655B2/en
Publication of JP2016110407A publication Critical patent/JP2016110407A/ja
Application granted granted Critical
Publication of JP6372331B2 publication Critical patent/JP6372331B2/ja
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F1/00Details not covered by groups G06F3/00 - G06F13/00 and G06F21/00
    • G06F1/04Generating or distributing clock signals or signals derived directly therefrom
    • G06F1/12Synchronisation of different clock signals provided by a plurality of clock generators
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F15/00Digital computers in general; Data processing equipment in general
    • G06F15/16Combinations of two or more digital computers each having at least an arithmetic unit, a program unit and a register, e.g. for a simultaneous processing of several programs
    • G06F15/163Interprocessor communication
    • G06F15/173Interprocessor communication using an interconnection network, e.g. matrix, shuffle, pyramid, star, snowflake
    • G06F15/17306Intercommunication techniques
    • G06F15/17325Synchronisation; Hardware support therefor
    • 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/52Program synchronisation; Mutual exclusion, e.g. by means of semaphores

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • Software Systems (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Computer Hardware Design (AREA)
  • Mathematical Physics (AREA)
  • Multi Processors (AREA)

Description

本発明は、並列演算装置、並列演算システム、および並列演算プログラムに関する。
従来、各々のノードがプロセッサとメモリとを有し、メモリをノード間で共用する複数のノードを含むシステムを構築する、いわゆるNUMA(Non−Uniform Memory Access)と呼ばれる技術がある。
関連する先行技術として、例えば、マルチプロセッサシステムにおいて、コンパイラにより処理対象となる入力プログラムから自動的に並列性を持つタスクを抽出し、各プロセッサユニットの特性に合わせて当該タスクを配置するものがある。また、参照先行のデータ依存がある配列をワーク変数に設定し、ループを生成し、該ループの後に、データ依存のある配列を前記ワーク変数に置換したループの実行文を計算する技術がある。また、先行命令のトランザクションを全て出力した後に同期用のトランザクションを、トランザクションでメモリアクセスをシリアライズする主記憶と、トランザクションでキャッシュコヒーレンス制御の完了保証を行うコヒーレンス部とに出力する技術がある。また、共有メモリ上に各プロセッサの同期フラグ領域を割り当て、ソフトウェアにより同期フラグ領域を実行状態に応じて更新し、各プロセッサはバリア同期に参加する他のプロセッサの同期フラグ領域同士を比較することでバリア同期処理を行う技術がある。また、スレッド間同期オーバーヘッド情報ファイルとマシンサイクル数取得ライブラリを使用して、スレッドを並列処理の単位として共有メモリ型計算機上で実行可能なオブジェクトコードを生成する技術がある。
特開2006−293768号公報 特開2010−191506号公報 特開2000−194680号公報 特開2005−071109号公報 特開2007−108838号公報
しかしながら、従来技術によれば、NUMAを適用したシステム上で、異なるノードに属するプロセッサが実行する処理同士が同期する場合、同一のノードに属するプロセッサが実行する処理同士が同期する場合に比べると、システムの処理性能が劣化する。
1つの側面では、本発明は、システムに含まれる複数のプロセッサが実行する処理同士が同期する場合のシステムの処理性能の向上を図ることができる並列演算装置、並列演算システム、および並列演算プログラムを提供することを目的とする。
本発明の一側面によれば、各々のノードが複数のプロセッサとメモリとを有する複数のノードを含み各々のノードの間のプロセッサ同士を接続する信号線を有する並列演算システム内の第1処理を実行する第1プロセッサと、第1処理と同期する第2処理を実行する第2プロセッサとが異なるノードに属する場合、第1プロセッサと第2プロセッサとが信号線を用いた第1同期処理を実行することを決定する並列演算装置、並列演算システム、および並列演算プログラムが提案される。
本発明の一態様によれば、システムに含まれる複数のプロセッサが実行する処理同士が同期する場合のシステムの処理性能の向上を図ることができるという効果を奏する。
図1は、本実施の形態にかかる並列演算システム100の動作例を示す説明図である。 図2は、サーバシステム200の構成例を示す説明図である。 図3は、サーバ201のハードウェア構成例を示す説明図である。 図4は、CPU同期処理とメモリ同期処理との一例を示す説明図である。 図5は、サーバ201の機能構成例を示すブロック図である。 図6は、性能測定用プログラム601の一例を示す説明図である。 図7は、性能測定用プログラム601内のパラメータパターンの一例を示す説明図である。 図8は、同期手法別性能情報510の一例を示す説明図である。 図9は、依存性ループを含むプログラム901の一例を示す説明図である。 図10は、同期手法の決定結果の一例を示す説明図である。 図11は、同期手法の決定結果に従った依存性ループを含む処理の流れの一例を示す説明図である。 図12は、依存性ループ検出時処理手順の一例を示すフローチャートである。 図13は、同期手法決定処理手順の一例を示すフローチャートである。 図14は、依存性ループ実行処理手順の一例を示すフローチャート(その1)である。 図15は、依存性ループ実行処理手順の一例を示すフローチャート(その2)である。 図16は、依存性ループ実行処理手順の一例を示すフローチャート(その3)である。
以下に図面を参照して、開示の並列演算装置、並列演算システム、および並列演算プログラムの実施の形態を詳細に説明する。
図1は、本実施の形態にかかる並列演算システム100の動作例を示す説明図である。並列演算システム100は、NUMAを適用したシステムである。具体的には、図1に示す並列演算システム100は、2つのノードを有する。以下、並列演算システム100に含まれるノードを、「NUMAノード」と呼称する。また、2つのノードを、「NUMA−0ノード」と、「NUMA−1ノード」と呼称する。
また、NUMAノードは、複数のプロセッサとメモリとを有する。ここで、複数のプロセッサは、1つのCPU(Central Processing Unit)に複数のプロセッサコアを有するマルチコアプロセッサでもよいし、シングルプロセッサが複数あるものでもよい。以下、プロセッサを、単に「コア」と称する。NUMA−0ノードは、コアc0、c1、メモリm0を有する。また、NUMA−1ノードは、コアc2、c3、メモリm1を有する。また、NUMAノードに含まれるコアの個数は、2以上でもよく、NUMAノードの間で個数が異なってもよい。また、NUMAノードに含まれるメモリは複数でもよく、NUMAノードの間で個数が異なってもよい。
ここで、並列演算システム100に含まれる複数のコアが実行する処理同士が同期する場合がある。処理同士が同期する場合とは、複数の処理の各々の処理の実行される順序を担保しなければならない場合である。処理同士が同期する場合としては、具体的には、例えば、スレッド並列における依存性ループがある。また、例えば、処理同士が排他制御を行う場合である。以下の例では、スレッド並列における依存性ループを用いて説明を行う。
スレッド並列における依存性ループは、ループの一回当たりの処理同士の間に依存関係があるものである。ここで、ループの一回当たりの処理を、「イテレーション」と呼称する。また、1つ以上のイテレーションを一つのスレッドとして、並列演算システム100に含まれる複数のコアに実行させる。依存関係がある例として、先行するイテレーションを行った結果を、次のイテレーションの入力として用いる場合である。依存関係がある場合、先行するイテレーションと次のイテレーションとを並列に実行することはできず、先行するイテレーションが完了した後に、次のイテレーションを実行することになる。例えば、OpenMPのループ構文では、ordered構文を用いると、依存性ループを生成することができる。
また、スレッド並列における依存性ループは、同期処理として、post処理と、wait処理とによって実現される。先行するスレッドを実行するコアは、実行するスレッドが担当するイテレーションが終了した場合、先行するスレッドの後に実行するスレッドを実行するコアに、post処理を行う。先行するスレッドの後に実行するスレッドを実行するコアは、wait処理により待機状態となっており、post処理による通知を受けると、待機状態を解除する。
同期処理となるpost処理と、wait処理とについて、さらに説明する。post処理と、wait処理とは、NUMAノードに含まれるメモリを用いたものがある。以下の記載では、メモリを用いたpost処理と、wait処理とを、まとめて、「メモリ同期処理」と呼称する。そして、メモリを用いたpost処理を、「メモリ同期によるpost処理」と呼称し、メモリを用いたwait処理を、「メモリ同期によるwait処理」と呼称する。
例えば、先行するスレッドを実行するコアは、スレッド間で共有される変数counterを、1イテレーション実行ごとにインクリメントする。ここで、変数counterは、NUMAノードに含まれるメモリ内に確保されたチャンクに格納される。そして、インクリメントする度に、先行するスレッドを実行するコアは、変数counterの値を更新する。先行するスレッドを実行するコアは、変数counterがイテレーション終了値endより大きくなった場合、実行を終了する。最後の変数counterの更新が、メモリ同期によるpost処理となる。
一方、先行するスレッドの後に実行するスレッドは、変数counterの値を参照し、変数counterの値が自スレッドのイテレーション開始値startよりも小さい場合待機し、start以上の場合待機を解除し自スレッドのイテレーションを実行する。startよりも小さい場合待機して、start以上の場合には待機を解除することが、メモリ同期によるwait処理となる。
ここで、異なるNUMAノードに属するコアが実行する処理がメモリ同期処理を実行する場合、同一のNUMAノードに属するコアが実行する処理がメモリ同期処理する場合に比べると、システムの処理性能が劣化する。特に、メモリ同期処理に用いるチャンクサイズが小さくなるにつれて、先行するスレッドを実行するコアと、次のスレッドを実行するコアとで、待ち時間が多くなる恐れがある。
例えば、チャンクサイズが、変数counterの値を1つ分しか記憶できないサイズであったとする。この場合、先行するスレッドを実行するコアは、一旦変数counterの値を書き込んだ後、次のスレッドを実行するコアが変数counterの値を参照した後でないと、再び書き込むことはできない。このように、変数counterの値を1つ分しか記憶できないサイズであると、先行するスレッドを実行するコアは、変数counterの値を連続して書き込むことができなくなり、待ち時間が多くなる。
そこで、並列演算システム100は、異なるノード内のコアが実行する処理が同期を行う場合、異なるノード内のコア同士を接続する専用の信号線を用いた第1同期処理を行う。これにより、並列演算システム100は、メモリを用いた第2同期処理、すなわち、前述したメモリ同期処理を行うよりもシステム性能が向上する。信号線を用いた同期処理については後述する。図1の例では、スレッドt0、t1がメモリ同期処理を行うと、図1の破線が示すようにデータの移動が行われるため、第1同期処理を行う場合に比べて、遅延が発生することになる。
図1を用いて、具体的な並列演算システム100の動作を説明する。並列演算システム100は、各々のNUMAノードの間のプロセッサ同士を接続する信号線を有する。図1の例では、並列演算システム100は、コアc1とコアc2とを接続する信号線hを有する。そして、図1の例では、第1プロセッサとしてコアc1と、第2プロセッサとしてコアc2とがスレッド並列における依存性ループを実行するものとする。コアc1は、第1処理としてスレッドt0を実行し、コアc2は、第2処理としてスレッドt1を実行するものとする。そして、スレッドt0が、スレッドt1に先行するスレッドであるとする。
このように、コアc1とコアc2とは異なるNUMAノードに属するため、並列演算装置は、信号線hを用いた同期処理を実行することを決定する。ここで、決定する主体となる並列演算装置とは、コアc1とメモリm0とをコンピュータシステムと見做したものでもよいし、メモリm1とコアc2とをコンピュータシステムと見做したものでもよいし、並列演算システム100の外にあるコンピュータでもよい。
また、異なるノード内のコア同士を接続する信号線を用いた第1同期処理も、post処理と、wait処理とを有する。また、並列演算システム100は、各々のノードに含まれる複数のコアの各々のコア同士を接続する信号線を有してもよく、この場合、各々のノードに含まれる複数のコアの各々のコア同士を接続する信号線を用いた第3同期処理を実行してもよい。さらに、第3同期処理も、post処理と、wait処理とを有する。以下の記載では、第1同期処理と第3同期処理とをまとめて、「CPU同期処理」と呼称する。そして、信号線を用いたpost処理を、「CPU同期によるpost処理」と呼称し、信号線を用いたwait処理を、「CPU同期によるwait処理」と呼称する。CPU同期処理とメモリ同期処理との例については、図4に説明する。また、以下の説明では、CPU同期処理とメモリ同期処理とをまとめて、「同期手法」と呼称する。
以下に、CPU同期処理の具体的な動作例を示す。CPU同期処理では、スレッド間で共有される変数を持たずに、それぞれのスレッドがローカル変数local_counterを有する。そして、先行するスレッドt0を実行するコアc1は、ローカル変数local_counterの値を更新する。コアc1は、ローカル変数local_counterがイテレーション終了値endより大きくなった場合、信号線hを介して、自スレッドの担当するイテレーションが終了したことを示すフラグを通知する。信号線hを介してフラグを通知することが、CPU同期によるpost処理となる。
一方、スレッドt0の後に実行するスレッドt1を実行するコアc2は、フラグの通知を受けるまで待機して、フラグの通知を受けた場合には、待機を解除し自スレッドのイテレーションを実行する。フラグの通知を受けるまで待機して、フラグの通知を受けた場合に待機を解除することが、CPU同期によるwait処理となる。
次に、並列演算システム100をサーバシステムに適用した例を、図2を用いて説明する。
図2は、サーバシステム200の構成例を示す説明図である。サーバシステム200は、サーバ201と、ログインノード202とを有する。サーバ201は、並列演算システム100を有する。
並列演算システム100は、NUMA−0ノード、NUMA−1ノードを有する。ここで、ハードウェア同期線は、図1に示した信号線hに相当する。NUMA−0ノードが有するハードウェアとNUMA−1ノードが有するハードウェアとは同一であるため、以下の説明では、NUMA−0ノードが有するハードウェアに限って説明する。
NUMA−0ノードは、コアc0、c1、L1キャッシュメモリl10、l11、L2キャッシュメモリl20、メモリm0、ハードウェア同期線h0を有する。L1キャッシュメモリl10は、コアc0が用いる1次キャッシュメモリである。また、L1キャッシュメモリl11は、コアc1が用いる1次キャッシュメモリである。L2キャッシュメモリl20は、コアc0、c1が用いる2次キャッシュメモリである。
ハードウェア同期線h0、h1は、並列演算システム100内の全てのコア同士を接続する信号線であってもよいし、並列演算システム100内の一部のコア同士を接続する信号線であってもよい。一部のコア同士を接続する例として、並列演算システム100は、コアc0、c1の信号線と、コアc1、c2の信号線と、コアc2、c3の信号線と、コアc3、c0の信号線というように、リングを形成するように信号線を有してもよい。
ログインノード202は、並列演算システム100を利用する利用者が操作するコンピュータである。具体的には、ログインノード202は、利用者の操作により、科学技術計算を行うジョブを並列演算システム100に送信する。
図3は、サーバ201のハードウェア構成例を示す説明図である。図3において、サーバ201は、並列演算システム100と、ROM(Read Only Memory)301と、ディスクドライブ302と、ディスク303と、通信インターフェース304と、を含む。また、並列演算システム100と、ROM301と、ディスクドライブ302と、通信インターフェース304とは、バス305によってそれぞれ接続される。
並列演算システム100は、サーバ201の全体の制御を司る演算処理装置群である。ROM301は、ブートプログラムなどのプログラムを記憶する不揮発性メモリである。
ディスクドライブ302は、並列演算システム100の制御に従ってディスク303に対するデータのリードおよびライトを制御する制御装置である。ディスクドライブ302には、例えば、磁気ディスクドライブ、ソリッドステートドライブなどを採用することができる。ディスク303は、ディスクドライブ302の制御で書き込まれたデータを記憶する不揮発性メモリである。例えばディスクドライブ302が磁気ディスクドライブである場合、ディスク303には、磁気ディスクを採用することができる。また、ディスクドライブ302がソリッドステートドライブである場合、ディスク303には、半導体素子によって形成された半導体メモリ、いわゆる半導体ディスクを採用することができる。
通信インターフェース304は、ネットワークとなるLAN(Local Area Network)、WAN(Wide Area Network)、インターネットなどと、内部のインターフェースを司り、他の装置からのデータの入出力を制御する制御装置である。具体的には、通信インターフェース304は、ネットワークを介してログインノード202等に接続される。通信インターフェース304には、例えば、モデムやLANアダプタなどを採用することができる。
また、サーバシステム200の運用者が、サーバ201を直接操作する場合、サーバ201は、ディスプレイ、キーボード、マウスといったハードウェアを有してもよい。
また、ログインノード202のハードウェアは特に図示しないが、CPUと、RAM(Random Access Memory)と、ROMと、ディスクドライブと、ディスクと、通信インターフェースと、ディスプレイ、キーボード、マウスとを有する。
図4は、CPU同期処理とメモリ同期処理との一例を示す説明図である。図4の例では、NUMAノードに閉じたCPU同期処理と、NUMAノードにまたがるCPU同期処理と、NUMAノードにまたがるメモリ同期処理との一例を示す。
図4では、NUMAノードに閉じたCPU同期処理の通知例を、一点鎖線の矢印で示す。また、NUMAノードにまたがるCPU同期処理の通知例を、実線の矢印で示す。また、NUMAノードにまたがるメモリ同期処理の通知例を、破線の矢印で示す。
NUMAノードにまたがるCPU同期処理と、NUMAノードにまたがるメモリ同期処理とでは、メモリを経由する分、NUMAノードにまたがるCPU同期処理の方が高速となる。しかし、NUMAノードに閉じたCPU同期処理と、NUMAノードに閉じたメモリ同期処理とでは、以下の条件のいずれかを満たす場合、メモリ同期処理の方が高速になる可能性がある。1つ目の条件は、NUMA−0ノードであれば、L1キャッシュメモリl10、l11と、L2キャッシュメモリl20との通信速度が高速である場合である。2つ目の条件は、NUMA−0ノードであれば、L1キャッシュメモリl10、l11の間で、直接データ転送が行える場合である。3つ目の条件は、チャンクサイズが大きい場合である。
そこで、サーバ201は、チャンクサイズ等のパラメータやメモリの特性等に応じて、CPU同期処理とメモリ同期処理とのうち高速となる同期手法を決定する。具体的な方法について、図5を用いて説明する。
(サーバ201の機能構成例)
図5は、サーバ201の機能構成例を示すブロック図である。サーバ201は、制御部500を有する。制御部500は、決定部501と、実行部502とを含む。制御部500は、記憶装置に記憶されたプログラムを並列演算システム100内のいずれかのコアが実行することにより、各部の機能を実現する。記憶装置とは、具体的には、例えば、図1に示した並列演算システム100内のメモリ、図3に示したROM301、ディスク303などである。また、各部の処理結果は、並列演算システム100内のいずれかのコアのレジスタや、並列演算システム100内のキャッシュメモリ等に格納される。
また、サーバ201は、同期手法別性能情報510にアクセス可能である。同期手法別性能情報510は、メモリ同期処理を行う際に確保するチャンクサイズに応じたCPU同期処理の処理性能とメモリ同期処理の処理性能との比較結果を記憶する。また、同期手法別性能情報510は、いずれかの処理を繰り返す回数に応じたCPU同期処理の処理性能とメモリ同期処理の処理性能との比較結果を記憶してもよい。ここで、いずれかの処理は、依存性ループの一回分の処理であれば、どのような処理でもよく、または何も行わない処理であってもよい。いずれかの処理の具体的な例としては、図6で示す。また、いずれかの処理を繰り返す回数は、依存性ループに含まれるイテレーションの個数でもよいし、依存性ループをスレッドに分割した際の一個当たりのイテレーションの個数でもよい。また、同期手法別性能情報510は、依存性ループをスレッドに分割した際のスレッド数に応じたCPU同期処理の処理性能とメモリ同期処理の処理性能との比較結果を記憶してもよい。
同期手法別性能情報510は、並列演算システム100内のメモリ、ディスク303といった記憶装置に格納される。同期手法別性能情報510の記憶内容の一例は、図8で説明する。
決定部501は、第1コアと、第1スレッドと同期する第2スレッドを実行する第2コアとが異なるNUMAノードに属する場合、CPU同期処理を実行することを決定する。
また、決定部501は、第1コアと第2コアとが同一のノードに属する場合、第1コアと第2コアとが属するNUMAノードに含まれるメモリを用いたメモリ同期処理を実行することを決定してもよい。
また、第1コアと第2コアとが同一のノードに属するものとする。この場合、決定部501は、同期手法別性能情報510を参照して、メモリ同期処理を行う際に確保するチャンクサイズに基づいて、CPU同期処理またはメモリ同期処理のうちのいずれか一方を実行することを決定してもよい。
例えば、メモリ同期処理を行う際に確保するチャンクサイズと同一のサイズに対応する比較結果が同期手法別性能情報510に格納されていたとする。この場合、決定部501は、これから確保するチャンクサイズと同一のサイズに対応する比較結果を取得して、比較結果がより高速であると示した同期手法を実行することを決定する。また、例えば、メモリ同期処理を行う際に確保するチャンクサイズと同一のサイズに対応する比較結果が同期手法別性能情報510に格納されていなかったとする。この場合、決定部501は、例えば、これから確保するチャンクサイズと最も近いサイズに対応する比較結果を取得して、比較結果がより高速であると示した同期手法を実行することを決定する。
また、第1コアと第2コアとが同一のノードに属するものとする。この場合、決定部501は、同期手法別性能情報510を参照して、第1スレッドと第2スレッドとが所定の処理を繰り返す回数に基づいて、CPU同期処理またはメモリ同期処理のうちのいずれか一方を実行することを決定する。ここで、所定の処理は、ログインノード202から送信されたジョブから生成されたものの一部であって、一回のイテレーションに相当する。所定の処理の具体例は、図9で示す。また、第1スレッドと第2スレッドとは、所定の処理を同数回繰り返すものでもよいし、異なる回数回繰り返すものでもよい。第1スレッドと第2スレッドとが所定の処理を繰り返す回数は、第1スレッドと第2スレッドとが所定の処理を繰り返す回数の合計でもよいし、平均でもよい。
実行部502は、決定部501が決定した同期処理を実行する。例えば、決定部501がCPU同期処理を実行することを決定しており、実行部502を有するコアが、post処理を実行するものとする。この場合、実行部502は、CPU同期によるpost処理を実行する。
図6は、性能測定用プログラム601の一例を示す説明図である。図6に示す性能測定用プログラム601は、同期手法別性能情報510を生成する際に用いるプログラムである。図6の例で、依存性ループは、「#pragma omp ordered」で指定された次の中括弧で指定される部分となる。
性能測定用プログラム601において、「loop」と、「chunk」と、「threads」は、それぞれ、総ループ数、チャンクサイズ、スレッド数を示し、性能測定用プログラム601に対するパラメータである。「loop」と、「chunk」と、「threads」が取り得る値については、図7で説明する。
図7は、性能測定用プログラム601内のパラメータパターンの一例を示す説明図である。図7で示すように、パラメータ「chunk」が取り得る値は、「loop」に依存しており、「loop/2」、「loop/4」、「loop/8」、…、1である。そして、パラメータ「chunk」が取り得る値の個数は、floor(log2loop)である。ここで、floor(x)は、x以下の最大の整数を示す。
ここで、説明の簡略化のため、本実施の形態におけるchunk=1となるデータサイズは、1回のループで2つのスレッド間でデータをやりとりする際に用いるデータサイズとする。例えば、2つのスレッドでカウンタの値をやりとりするならば、chunk=1は、1回のループでカウンタの値を記憶可能なデータサイズである。同様に、chunk=xであれば、1回のループでカウンタの値を記憶可能なデータサイズのx倍となる。また、n番目のchunkは、(1/2)n×loopとなる。ただし、(1/2)n×loop≧1となる。
また、パラメータ「loop」が取り得る値は、100、1,000、10,000、50,000、100,000である。そして、パラメータ「chunk」が取り得る値の個数は、5である。
また、パラメータ「threads」が取り得る値は、2、3、4、…、NUMAノード内のコア数である。そして、パラメータ「threads」が取り得る値の個数は、NUMAノード内のコア数−1である。
従って、性能測定用プログラム601により実行される回数は、floor(log2loop)×5×(NUMAノードのコア数−1)となる。
図8は、同期手法別性能情報510の一例を示す説明図である。同期手法別性能情報510は、図7で示した各パラメータを軸として、CPU同期処理とメモリ同期処理とのうち、どちらが高速であるかを示した情報である。図8に示す同期手法別性能情報510は、あるtheads数における、chunkとloopとの組み合わせに応じて、CPU同期処理とメモリ同期処理とのうち高速な手法を示したものである。ここで、説明の簡略化のため、図8中で示す「C」は、CPU同期処理の方が高速であることを示すものとし、図8中で示す「M」は、メモリ同期処理の方が高速であることを示すものとする。
図8に示す同期手法別性能情報510は、レコード801−1〜5を有する。例えば、レコード801−1は「loop」=100である際のchunk=1、2、4、8、…における、CPU同期処理とメモリ同期処理とのうち高速な手法を示す。
次に、図9〜図11を用いて、依存性ループを実行する際の同期手法の決定結果と、決定結果に従って依存性ループを実行する例を示す。
図9は、依存性ループを含むプログラム901の一例を示す説明図である。プログラム901は、「chunk」=25、「loop」=200、「threads」=4とする依存性ループの例を示す。プログラム901内で、所定の処理は、「#pragma omp ordered」で指定された次の中括弧で指定される部分「printf(“i=%d¥n”,i);」となる。
また、プログラム901を実行するNUMAノードは2つであり、NUMA−0ノードのコアc0、c1と、NUMA−1ノードのコアc2、c3とが、それぞれ、スレッドt0〜t3を実行するものとする。また、スレッドを実行するコアは、図2で示した右隣のコアと通信を行うものとする。さらに、最終スレッドを実行するコアの右隣は、コアc0であるとする。例えば、スレッドt0を実行するコアc0は、スレッドt1を実行するコアc1と通信する。また、スレッドt3を実行するコアc3は、スレッドt0を実行するコアc0と通信する。
そして、スレッドt0は、依存性ループの0〜24回目を実行した後、post処理でスレッドt1に通知した後、wait処理を行ってwait状態になり、スレッドt3から通知を受けて100〜124回目を実行するものとする。スレッドt1は、スレッドt0から通知を受けて依存性ループの25〜49回目を実行した後、post処理でスレッドt2に通知した後、wait処理を行ってwait状態になり、スレッドt0から通知を受けて125〜149回目を実行するものとする。
スレッドt2は、スレッドt1から通知を受けて依存性ループの50〜74回目を実行した後、post処理でスレッドt3に通知した後、wait処理を行ってwait状態になり、スレッドt1から通知を受けて150〜174回目を実行するものとする。スレッドt3は、スレッドt2から通知を受けて依存性ループの75〜99回目を実行した後、post処理でスレッドt0に通知した後、wait処理を行ってwait状態になり、スレッドt2から通知を受けて175〜199回目を実行するものとする。
以降の説明において、スレッドが依存性ループを行うイテレーションの塊を、「イテレーショングループ」と呼称する場合がある。
図10は、同期手法の決定結果の一例を示す説明図である。コアc0〜c3は、それぞれ、post処理で行う同期手法と、wait処理で行う同期手法とを決定する。図10の例では、コアc0〜c3は、それぞれ、通信を行うコア同士が同一のNUMAノードに属するものであればCPU同期処理を実行すると決定し、通信を行うコア同士が異なるNUMAノードに属するものであればメモリ同期処理を実行するものとする。
図10で示すように、例えば、コアc0は、コアc0がpost処理を行ってコアc1がwait処理を行う場合には、コアc0とコアc1は同一のNUMAノードに属するため、同期手法としてメモリ同期処理を実行すると決定する。また、コアc0は、コアc3がpost処理を行ってコアc0がwait処理を行う場合には、コアc3とコアc0は異なるNUMAノードに属するため、同期手法としてCPU同期処理を実行すると決定する。
このように、各コアが実行するスレッドの中では、同期手法が異なる場合があるが、post処理とwait処理とで通信するコア同士では、判断材料が同一であるため、同期手法が一致する。
図11は、同期手法の決定結果に従った依存性ループを含む処理の流れの一例を示す説明図である。図11において、点線は、post処理による通知を示し、一点鎖線は、wait処理による待機状態を示す。
図11で示すように、スレッドt0を実行するコアc0は、依存性ループの0〜24回目を実行し、メモリ同期によるpost処理でスレッドt1を実行するコアc1に通知し、CPU同期によるwait処理を行ってwait状態になる。そして、コアc0は、スレッドt3を実行するコアc3からCPU同期によるpost処理による通知を受けて100〜124回目を実行する。また、スレッドt1を実行するコアc1は、まず、メモリ同期によるwait処理を行ってwait状態になる。そして、コアc1は、コアc0からメモリ同期によるpost処理による通知を受けて依存性ループの25〜49回目を実行し、CPU同期によるpost処理でスレッドt2を実行するコアc2に通知し、メモリ同期によるwait処理を行いwait状態になる。
また、スレッドt2を実行するコアc2は、まず、CPU同期によるwait処理を行ってwait状態になる。そして、コアc2は、コアc1からCPU同期によるpost処理による通知を受けて依存性ループの50〜74回目を実行し、メモリ同期によるpost処理でスレッドt3を実行するコアc3に通知し、CPU同期によるwait処理を行いwait状態になる。また、スレッドt3を実行するコアc3は、まず、メモリ同期によるwait処理を行ってwait状態になる。そして、コアc3は、コアc2からメモリ同期によるpost処理による通知を受けて依存性ループの75〜99回目を実行し、CPU同期によるpost処理でスレッドt0を実行するコアc0に通知し、メモリ同期によるwait処理を行いwait状態になる。
図11で示すように、post処理とwait処理とで通信するコア同士では、同期手法が一致しており、依存性ループを正しく実行できることがわかる。次に、図12〜図16を用いて、サーバシステム200が行う処理をフローチャートとして示す。
図12は、依存性ループ検出時処理手順の一例を示すフローチャートである。依存性ループ検出時処理は、依存性ループを検出した際に実行する処理である。また、依存性ループ検出時処理は、依存性ループを検出した各コアが実行する。図12〜図16では、コアc0が実行する例を用いて説明を行う。
コアc0は、スレッド内で、依存性ループを検出する(ステップS1201)。次に、コアc0は、スレッド内のpost処理またはwait処理について、同期手法決定処理を実行する(ステップS1202)。同期手法決定処理は、図13で説明する。
そして、コアc0は、決定結果を用いて、依存性ループ実行処理を実行する(ステップS1203)。依存性ループ実行処理は、図14〜図16で説明する。ステップS1203の処理終了後、コアc0は、依存性ループ検出時処理を終了する。依存性ループ検出時処理を実行することにより、サーバシステム200は、依存性ループをより高速に実行することができる。
図13は、同期手法決定処理手順の一例を示すフローチャートである。同期手法決定処理は、post処理またはwait処理を実行する際の同期手法を決定する処理である。ここで、post処理を実行する際には、コアc0は、通知を送るコアのIDがわかっているものとする。同様に、wait処理を実行する際には、コアc0は、通知を受けるコアのIDがわかっているものとする。また、同期手法決定処理は、ライブラリで提供されるプログラムが呼び出されることにより実行される。また、前述のライブラリは、同期手法決定処理を実行する際に、総ループ数と、スレッド数と、チャンクサイズとを決定する。
コアc0は、post処理を実行する際であれば通知を送るコア、または、wait処理を実行する際であれば通知を受けるコア、とのハードウェア同期線が存在するか否かを判断する(ステップS1301)。ステップS1301において、具体的には、ライブラリで提供されるプログラムには、ハードウェア同期線が存在するか否かをOSに問い合わせるAPI(Application Programming Interface)が記述されている。コアc0は、前述のAPIを呼び出すことにより、ハードウェア同期線が存在するか否かを判断する。
ハードウェア同期線が存在する場合(ステップS1301:Yes)、コアc0は、次に、post処理を実行するのか、またはwait処理を実行するのかを判断する(ステップS1302)。post処理を実行する場合(ステップS1302:post処理)、コアc0は、NUMAノードにまたがるpost処理か否かを判断する(ステップS1303)。wait処理を実行する場合(ステップS1302:wait処理)、コアc0は、NUMAノードにまたがるwait処理か否かを判断する(ステップS1304)。
NUMAノードにまたがるpost処理でない場合(ステップS1303:No)、または、NUMAノードにまたがるwait処理でない場合(ステップS1304:No)、コアc0は、CPU同期処理とメモリ同期処理とのうち高速な手法を判断する(ステップS1305)。具体的には、例えば、コアc0は、同期手法別性能情報510を参照して、前述のライブラリが決定した総ループ数と、スレッド数と、チャンクサイズとに基づいて、CPU同期処理とメモリ同期処理とのうち高速な手法を判断する。
NUMAノードにまたがるpost処理である場合(ステップS1303:Yes)、または、NUMAノードにまたがるwait処理である場合(ステップS1304:Yes)、または、CPU同期処理が高速である場合(ステップS1305:CPU同期処理)、コアc0は、CPU同期処理を同期手法として決定する(ステップS1306)。具体的には、コアc0は、post処理を実行する場合には、CPU同期処理を、post処理の同期手法として決定し、wait処理を実行する場合には、CPU同期処理を、wait処理の同期手法として決定する。
一方、メモリ同期処理が高速である場合(ステップS1305:メモリ同期処理)、または、ハードウェア同期線が存在しない場合(ステップS1301:No)、コアc0は、メモリ同期処理を同期手法として決定する(ステップS1307)。具体的には、コアc0は、post処理を実行する場合には、メモリ同期処理を、post処理の同期手法として決定し、wait処理を実行する場合には、メモリ同期処理を、wait処理の同期手法として決定する。
ステップS1306、またはステップS1307の処理終了後、コアc0は、同期手法決定処理を終了する。同期手法決定処理を実行することにより、コアc0は、post処理またはwait処理を実行する際の同期手法として、CPU同期処理とメモリ同期処理とのうち高速な同期手法を選ぶことができる。
図14は、依存性ループ実行処理手順の一例を示すフローチャート(その1)である。また、図15は、依存性ループ実行処理手順の一例を示すフローチャート(その2)である。また、図16は、依存性ループ実行処理手順の一例を示すフローチャート(その3)である。依存性ループ実行処理は、依存性ループを実行する処理である。また、図14〜図16では、図9〜図11で示した依存性ループを実行する際の処理であるとする。
ここで、依存性ループ実行処理で用いる変数の説明を行う。counterは、スレッド間の共有変数であり、メモリ同期処理で使用される共有変数のカウンタである。以下の変数は、スレッド内でローカルな変数である。local_counterは、CPU同期処理で使用されるスレッドローカルのカウンタである。start、endは、それぞれ、スレッドが担当するイテレーションの開始値、終了値である。chunkは、スレッドが担当するチャンクサイズである。roleには、postを示す識別子またはwaitを示す識別子が格納される。
コアc0は、counterを0に設定する(ステップS1401)。次に、コアc0は、roleをpostかwaitのどちらかに設定する(ステップS1402)。ステップS1402において、具体的には、先頭のスレッドであるスレッドt0を実行するコアは、roleをpostに設定し、他のコアは、roleをwaitに設定する。従って、コアc0は、スレッドt0を実行するため、roleをpostに設定する。また、コアc1〜c3は、roleをwaitに設定する。
ステップS1402の処理終了後、または、ステップS1509の処理終了後、コアc0は、自スレッドが担当するイテレーショングループが残っているか否かを判断する(ステップS1403)。自スレッドが担当するイテレーショングループが残っていない場合(ステップS1403:No)、コアc0は、依存性ループ実行処理を終了する。
一方、自スレッドが担当するイテレーショングループが残っている場合(ステップS1403:Yes)、コアc0は、担当するイテレーショングループのstart、end、chunkを受け取る(ステップS1404)。ここで、start、end、chunkは、同期手法決定処理が提供されるライブラリによって決定される値である。次に、コアc0は、local_counterを0に設定する(ステップS1405)。
ステップS1405の処理終了後、または、ステップS1605の処理終了後、コアc0は、roleが次に示す識別子のいずれに一致するかを判断する(ステップS1406)。次に示す識別子は、postを示す識別子と、waitを示す識別子とである。roleがpostを示す識別子である場合(ステップS1406:post)、コアc0は、post処理の同期手法がメモリ同期処理かCPU同期処理かを判断する(ステップS1501)。ここで、post処理の同期手法は、ステップS1306、またはステップS1307のいずれかで決定されたものである。
post処理の同期手法がメモリ同期処理である場合(ステップS1501:メモリ同期処理)、コアc0は、counterがendより大きいか否かを判断する(ステップS1502)。counterがend以下である場合(ステップS1502:No)、コアc0は、1イテレーション実行する(ステップS1503)。そして、コアc0は、counterをcounter+1に設定する(ステップS1504)。ステップS1504の処理終了後、コアc0は、ステップS1502の処理に移行する。
一方、post処理の同期手法がCPU同期処理である場合(ステップS1501:CPU同期処理)、コアc0は、local_counterがchunk以上か否かを判断する(ステップS1505)。local_counterがchunk未満である場合(ステップS1505:No)、コアc0は、1イテレーション実行する(ステップS1506)。次に、コアc0は、local_counterをlocal_counter+1に設定する(ステップS1507)。ステップS1507の処理終了後、コアc0は、ステップS1505の処理に移行する。
一方、local_counterがchunk以上である場合(ステップS1505:Yes)、コアc0は、CPU post送信する(ステップS1508)。ステップS1508の処理終了後、または、counterがendより大きい場合(ステップS1502:Yes)、コアc0は、roleをwaitを示す識別子に設定する(ステップS1509)。ステップS1509の処理終了後、コアc0は、ステップS1403の処理に移行する。
roleがwaitを示す識別子である場合(ステップS1406:wait)、コアc0は、wait処理の同期手法がメモリ同期処理かCPU同期処理かを判断する(ステップS1601)。ここで、wait処理の同期手法は、ステップS1306、またはステップS1307のいずれかで決定されたものである。
wait処理の同期手法がメモリ同期処理である場合(ステップS1601:メモリ同期処理)、コアc0は、counterがstartより小さいか否かを判断する(ステップS1602)。counterがstartより小さい場合(ステップS1602:Yes)、コアc0は、再び、ステップS1602の処理を実行する。
wait処理の同期手法がCPU同期処理である場合(ステップS1601:CPU同期処理)、コアc0は、CPU waitする(ステップS1603)。ステップS1603の処理を行うことにより、コアc0は、ハードウェア同期線hを介した通知を受けるまで待機することになる。そして、postからの通知を受けた後、コアc0は、counterをstartに設定する(ステップS1604)。
ステップS1604の処理終了後、または、counterがstart以上である場合(ステップS1602:No)、コアc0は、roleをpostを示す識別子に設定する(ステップS1605)。ステップS1605の処理終了後、コアc0は、ステップS1406の処理に移行する。依存性ループ実行処理を実行することにより、コアc0は、CPU同期処理とメモリ同期処理とのうち高速な同期手法を用いて、依存性ループを実行することができる。
以上説明したように、並列演算システム100によれば、異なるNUMAノード内のコアが実行する処理が同期を実行する場合、CPU同期処理を実行する。これにより、並列演算システム100は、異なるNUMAノード内のコアが実行する処理が同期を実行する場合、メモリ同期処理を行う場合に比べて並列演算システム100の処理性能を向上させることができる。
また、並列演算システム100によれば、同一のNUMAノード内のコアが実行する処理が同期を実行する場合、メモリ同期処理を実行する。これにより、並列演算システム100は、同一のNUMAノード内のコアが実行する処理が同期を実行する場合、ほとんどのケースにおいてCPU同期処理を行う場合に比べて並列演算システム100の処理性能を向上させることができる。
また、並列演算システム100によれば、同期手法別性能情報510を参照して、チャンクサイズに応じて、CPU同期処理またはメモリ同期処理のうちのいずれか一方を実行することを決定してもよい。これにより、並列演算システム100は、チャンクサイズが大きい場合にはメモリ同期処理を実行することを決定するとともに、チャンクサイズが小さい場合にはCPU同期処理を実行することを決定することができる。
また、並列演算システム100によれば、同期手法別性能情報510を参照して、イテレーションの回数に基づいて、CPU同期処理またはメモリ同期処理のうちのいずれか一方を実行することを決定してもよい。これにより、並列演算システム100は、イテレーションの回数が少ない場合にはCPU同期処理を実行することを決定するとともに、イテレーションの回数が多い場合にはメモリ同期処理を実行することを決定することができる。
また、並列演算システム100に含まれる第1コアと第2コアとが依存性ループを実行するとする。そして、第1コアまたは第2コアのいずれか一方のコアが、上述した決定基準、例えば、第1コアと第2コアとが同一のNUMAノードに属しており、CPU同期処理を実行することを決定したとする。このとき、第1コアまたは第2コアのうちの他方のコアは、第1コアと第2コアとが同一のNUMAノードに属するため、CPU同期処理を実行することを決定してもよい。これにより、決定結果を他方のコアに送信しなくてよくなる。
なお、本実施の形態で説明した並列演算方法は、予め用意されたプログラムをパーソナル・コンピュータやワークステーション等のコンピュータで実行することにより実現することができる。本並列演算プログラムは、ハードディスク、フレキシブルディスク、CD−ROM(Compact Disc−Read Only Memory)、DVD(Digital Versatile Disk)等のコンピュータで読み取り可能な記録媒体に記録され、コンピュータによって記録媒体から読み出されることによって実行される。また本並列演算プログラムは、インターネット等のネットワークを介して配布してもよい。
上述した実施の形態に関し、さらに以下の付記を開示する。
(付記1)各々のノードが複数のプロセッサとメモリとを有する複数のノードを含み前記各々のノードの間のプロセッサ同士を接続する信号線を有する並列演算システム内の第1処理を実行する第1プロセッサと、前記第1処理と同期する第2処理を実行する第2プロセッサとが異なるノードに属する場合、前記第1プロセッサと前記第2プロセッサとが前記信号線を用いた第1同期処理を実行することを決定する、
制御部を有することを特徴とする並列演算装置。
(付記2)前記制御部は、
前記第1プロセッサと前記第2プロセッサとが同一のノードに属する場合、前記第1プロセッサと前記第2プロセッサとが属するノードに含まれるメモリを用いた第2同期処理を実行することを決定することを特徴とする付記1に記載の並列演算装置。
(付記3)前記並列演算システムは、さらに、前記各々のノードに含まれる複数のプロセッサの各々のプロセッサ同士を接続する信号線を有し、
前記制御部は、
前記第1プロセッサと前記第2プロセッサとが同一のノードに属する場合、前記第2同期処理を行う際に確保するメモリのサイズに応じた前記各々のノードに含まれる複数のプロセッサの各々のプロセッサ同士を接続する信号線を用いた第3同期処理の処理性能と前記第2同期処理の処理性能との比較結果を参照して、前記第2同期処理を行う際に確保するメモリのサイズに基づいて、前記第3同期処理または前記第2同期処理のうちのいずれか一方を実行することを決定することを特徴とする付記2に記載の並列演算装置。
(付記4)前記並列演算システムは、さらに、前記各々のノードに含まれる複数のプロセッサの各々のプロセッサ同士を接続する信号線を有し、
前記第1処理と前記第2処理とは、所定の処理を繰り返す処理であって、
前記制御部は、
前記第1プロセッサと前記第2プロセッサとが同一のノードに属する場合、いずれかの処理を繰り返す回数に応じた前記各々のノードに含まれる複数のプロセッサの各々のプロセッサ同士を接続する信号線を用いた第3同期処理の処理性能と前記第2同期処理の処理性能との比較結果を参照して、前記第1処理と前記第2処理とが前記所定の処理を繰り返す回数に基づいて、前記第3同期処理または前記第2同期処理のうちのいずれか一方を実行することを決定することを特徴とする付記2または3に記載の並列演算装置。
(付記5)前記並列演算装置は、前記第1プロセッサまたは前記第2プロセッサのうちのいずれか一方のプロセッサを含み、
前記第1プロセッサまたは前記第2プロセッサのうちの他方のプロセッサは、前記第1同期処理、または前記第1プロセッサと前記第2プロセッサとが同一のノードに属する場合に前記第1プロセッサと前記第2プロセッサとが属するノードに含まれるメモリを用いた第2同期処理を実行することを決定した他の並列演算装置に含まれることを決定することを特徴とする付記1〜4のいずれか一つに記載の並列演算装置。
(付記6)各々のノードが複数のプロセッサとメモリとを有する複数のノードを含み前記各々のノードの間のプロセッサ同士を接続する信号線を有する並列演算システムであって、
前記並列演算システム内のいずれかのプロセッサは、
前記並列演算システム内の第1処理を実行する第1プロセッサと、前記第1処理と同期する第2処理を実行する第2プロセッサとが異なるノードに属する場合、前記第1プロセッサと前記第2プロセッサとが前記信号線を用いた第1同期処理を実行することを決定する、
ことを特徴とする並列演算システム。
(付記7)コンピュータに、
各々のノードが複数のプロセッサとメモリとを有する複数のノードを含み前記各々のノードの間のプロセッサ同士を接続する信号線を有する並列演算システム内の第1処理を実行する第1プロセッサと、前記第1処理と同期する第2処理を実行する第2プロセッサとが異なるノードに属する場合、前記第1プロセッサと前記第2プロセッサとが前記信号線を用いた第1同期処理を実行することを決定する、
処理を実行させることを特徴とする並列演算プログラム。
(付記8)コンピュータが、
各々のノードが複数のプロセッサとメモリとを有する複数のノードを含み前記各々のノードの間のプロセッサ同士を接続する信号線を有する並列演算システム内の第1処理を実行する第1プロセッサと、前記第1処理と同期する第2処理を実行する第2プロセッサとが異なるノードに属する場合、前記第1プロセッサと前記第2プロセッサとが前記信号線を用いた第1同期処理を実行することを決定する、
処理を実行することを特徴とする並列演算方法。
c0〜c3 コア
h 信号線
m0、m1 メモリ
100 並列演算システム
500 制御部
501 決定部
502 実行部
510 同期手法別性能情報

Claims (6)

  1. 各々のノードが複数のプロセッサとメモリとを有する複数のノードを含み前記各々のノードの間のプロセッサ同士を接続する第1信号線と、前記各々のノードに含まれる複数のプロセッサの各々のプロセッサ同士を接続する第2信号線と、を有する並列演算システム内の第1処理を実行する第1プロセッサと、前記第1処理と同期する第2処理を実行する第2プロセッサとが異なるノードに属する場合、前記第1プロセッサと前記第2プロセッサとが前記第1信号線を用いた第1同期処理を実行することを決定し、前記第1プロセッサと前記第2プロセッサとが同一のノードに属する場合、前記第1プロセッサと前記第2プロセッサとが属するノードに含まれるメモリを用いた第2同期処理を行う際に確保するメモリのサイズに応じた、前記第2信号線を用いた第3同期処理の処理性能と前記第2同期処理の処理性能との比較結果を参照して、前記第2同期処理を行う際に確保するメモリのサイズに基づいて、前記第3同期処理または前記第2同期処理のうちのいずれか一方を実行することを決定する、
    制御部を有することを特徴とする並列演算装置。
  2. 各々のノードが複数のプロセッサとメモリとを有する複数のノードを含み、前記各々のノードの間のプロセッサ同士を接続する第1信号線と、前記各々のノードに含まれる複数のプロセッサの各々のプロセッサ同士を接続する第2信号線と、を有する並列演算システムであって、
    前記並列演算システム内のいずれかのプロセッサは、
    前記並列演算システム内の第1処理を実行する第1プロセッサと、前記第1処理と同期する第2処理を実行する第2プロセッサとが異なるノードに属する場合、前記第1プロセッサと前記第2プロセッサとが前記第1信号線を用いた第1同期処理を実行することを決定し、前記第1プロセッサと前記第2プロセッサとが同一のノードに属する場合、前記第1プロセッサと前記第2プロセッサとが属するノードに含まれるメモリを用いた第2同期処理を行う際に確保するメモリのサイズに応じた、前記第2信号線を用いた第3同期処理の処理性能と前記第2同期処理の処理性能との比較結果を参照して、前記第2同期処理を行う際に確保するメモリのサイズに基づいて、前記第3同期処理または前記第2同期処理のうちのいずれか一方を実行することを決定する、
    ことを特徴とする並列演算システム。
  3. コンピュータに、
    各々のノードが複数のプロセッサとメモリとを有する複数のノードを含み、前記各々のノードの間のプロセッサ同士を接続する第1信号線と、前記各々のノードに含まれる複数のプロセッサの各々のプロセッサ同士を接続する第2信号線と、を有する並列演算システム内の第1処理を実行する第1プロセッサと、前記第1処理と同期する第2処理を実行する第2プロセッサとが異なるノードに属する場合、前記第1プロセッサと前記第2プロセッサとが前記第1信号線を用いた第1同期処理を実行することを決定し、前記第1プロセッサと前記第2プロセッサとが同一のノードに属する場合、前記第1プロセッサと前記第2プロセッサとが属するノードに含まれるメモリを用いた第2同期処理を行う際に確保するメモリのサイズに応じた、前記第2信号線を用いた第3同期処理の処理性能と前記第2同期処理の処理性能との比較結果を参照して、前記第2同期処理を行う際に確保するメモリのサイズに基づいて、前記第3同期処理または前記第2同期処理のうちのいずれか一方を実行することを決定する、
    処理を実行させることを特徴とする並列演算プログラム。
  4. 各々のノードが複数のプロセッサとメモリとを有する複数のノードを含み、前記各々のノードの間のプロセッサ同士を接続する第1信号線と、前記各々のノードに含まれる複数のプロセッサの各々のプロセッサ同士を接続する第2信号線と、を有する並列演算システム内の所定の処理を繰り返す第1処理を実行する第1プロセッサと、前記第1処理と同期し前記所定の処理を繰り返す第2処理を実行する第2プロセッサとが異なるノードに属する場合、前記第1プロセッサと前記第2プロセッサとが前記第1信号線を用いた第1同期処理を実行することを決定し、前記第1プロセッサと前記第2プロセッサとが同一のノードに属する場合、いずれかの処理を繰り返す回数に応じた、前記第2信号線を用いた第3同期処理の処理性能と、前記第1プロセッサと前記第2プロセッサとが属するノードに含まれるメモリを用いた第2同期処理の処理性能と、の比較結果を参照して、前記第1処理と前記第2処理とが前記所定の処理を繰り返す回数に基づいて、前記第3同期処理または前記第2同期処理のうちのいずれか一方を実行することを決定する、
    制御部を有することを特徴とする並列演算装置。
  5. 各々のノードが複数のプロセッサとメモリとを有する複数のノードを含み、前記各々のノードの間のプロセッサ同士を接続する第1信号線と、前記各々のノードに含まれる複数のプロセッサの各々のプロセッサ同士を接続する第2信号線と、を有する並列演算システムであって、
    前記並列演算システム内のいずれかのプロセッサは、
    前記並列演算システム内の所定の処理を繰り返す第1処理を実行する第1プロセッサと、前記第1処理と同期し前記所定の処理を繰り返す第2処理を実行する第2プロセッサとが異なるノードに属する場合、前記第1プロセッサと前記第2プロセッサとが前記第1信号線を用いた第1同期処理を実行することを決定し、前記第1プロセッサと前記第2プロセッサとが同一のノードに属する場合、いずれかの処理を繰り返す回数に応じた、前記第2信号線を用いた第3同期処理の処理性能と、前記第1プロセッサと前記第2プロセッサとが属するノードに含まれるメモリを用いた第2同期処理の処理性能と、の比較結果を参照して、前記第1処理と前記第2処理とが前記所定の処理を繰り返す回数に基づいて、前記第3同期処理または前記第2同期処理のうちのいずれか一方を実行することを決定する、
    ことを特徴とする並列演算システム。
  6. コンピュータに、
    各々のノードが複数のプロセッサとメモリとを有する複数のノードを含み、前記各々のノードの間のプロセッサ同士を接続する第1信号線と、前記各々のノードに含まれる複数のプロセッサの各々のプロセッサ同士を接続する第2信号線と、を有する並列演算システム内の所定の処理を繰り返す第1処理を実行する第1プロセッサと、前記第1処理と同期し前記所定の処理を繰り返す第2処理を実行する第2プロセッサとが異なるノードに属する場合、前記第1プロセッサと前記第2プロセッサとが前記第1信号線を用いた第1同期処理を実行することを決定し、前記第1プロセッサと前記第2プロセッサとが同一のノードに属する場合、いずれかの処理を繰り返す回数に応じた、前記第2信号線を用いた第3同期処理の処理性能と、前記第1プロセッサと前記第2プロセッサとが属するノードに含まれるメモリを用いた第2同期処理の処理性能と、の比較結果を参照して、前記第1処理と前記第2処理とが前記所定の処理を繰り返す回数に基づいて、前記第3同期処理または前記第2同期処理のうちのいずれか一方を実行することを決定する、
    処理を実行させることを特徴とする並列演算プログラム。
JP2014247478A 2014-12-05 2014-12-05 並列演算装置、並列演算システム、および並列演算プログラム Active JP6372331B2 (ja)

Priority Applications (2)

Application Number Priority Date Filing Date Title
JP2014247478A JP6372331B2 (ja) 2014-12-05 2014-12-05 並列演算装置、並列演算システム、および並列演算プログラム
US14/956,945 US9891655B2 (en) 2014-12-05 2015-12-02 Parallel operation system, apparatus and medium

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
JP2014247478A JP6372331B2 (ja) 2014-12-05 2014-12-05 並列演算装置、並列演算システム、および並列演算プログラム

Publications (2)

Publication Number Publication Date
JP2016110407A JP2016110407A (ja) 2016-06-20
JP6372331B2 true JP6372331B2 (ja) 2018-08-15

Family

ID=56094280

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2014247478A Active JP6372331B2 (ja) 2014-12-05 2014-12-05 並列演算装置、並列演算システム、および並列演算プログラム

Country Status (2)

Country Link
US (1) US9891655B2 (ja)
JP (1) JP6372331B2 (ja)

Families Citing this family (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US10074151B2 (en) * 2015-09-30 2018-09-11 Intel Corporation Dense optical flow acceleration
CN107807851A (zh) * 2016-09-09 2018-03-16 华为数字技术(苏州)有限公司 一种虚拟机内存在numa节点间的迁移方法和装置
JP2019049843A (ja) * 2017-09-08 2019-03-28 富士通株式会社 実行ノード選定プログラム、実行ノード選定方法及び情報処理装置
WO2023212200A1 (en) * 2022-04-29 2023-11-02 Tesla, Inc. Enhanced global flags for synchronizing coprocessors in processing system

Family Cites Families (10)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPS63188259A (ja) * 1987-01-30 1988-08-03 Nec Software Ltd 複合計算機システムのタスク同期方式
JP3858492B2 (ja) 1998-12-28 2006-12-13 株式会社日立製作所 マルチプロセッサシステム
JP3304928B2 (ja) * 1999-07-29 2002-07-22 日本電気株式会社 バリア同期方法およびバリア同期用プログラムを記録した記録媒体
JP4276028B2 (ja) 2003-08-25 2009-06-10 株式会社日立製作所 マルチプロセッサシステムの同期方法
JP4082706B2 (ja) 2005-04-12 2008-04-30 学校法人早稲田大学 マルチプロセッサシステム及びマルチグレイン並列化コンパイラ
JP2007108838A (ja) 2005-10-11 2007-04-26 Hitachi Ltd コンパイル方法及びコンパイル装置
JP5218129B2 (ja) 2009-02-16 2013-06-26 富士通株式会社 コンパイル装置およびコンパイルプログラム
WO2010109761A1 (ja) * 2009-03-25 2010-09-30 日本電気株式会社 並列処理システム、並列処理方法、ネットワークスイッチ装置、及び並列処理プログラムの記録媒体
US20120179896A1 (en) * 2011-01-10 2012-07-12 International Business Machines Corporation Method and apparatus for a hierarchical synchronization barrier in a multi-node system
US8966491B2 (en) * 2012-04-27 2015-02-24 Oracle International Corporation System and method for implementing NUMA-aware reader-writer locks

Also Published As

Publication number Publication date
US9891655B2 (en) 2018-02-13
JP2016110407A (ja) 2016-06-20
US20160161981A1 (en) 2016-06-09

Similar Documents

Publication Publication Date Title
Ben-Nun et al. Groute: An asynchronous multi-GPU programming model for irregular computations
Luo et al. Prague: High-performance heterogeneity-aware asynchronous decentralized training
JP5576798B2 (ja) 決定論的マルチプロセッシング(deterministicmultiprocessing)
JP6372331B2 (ja) 並列演算装置、並列演算システム、および並列演算プログラム
Spafford et al. Maestro: data orchestration and tuning for opencl devices
EP2472398B1 (en) Memory-aware scheduling for NUMA architectures
Si et al. MT-MPI: Multithreaded MPI for many-core environments
US8479185B2 (en) Method and system for utilizing parallelism across loops
US11861272B2 (en) Comprehensive contention-based thread allocation and placement
JP6205168B2 (ja) 並列構造化重複検出を利用する並列モデル検査のためのシステムおよび方法
Phillips et al. A CUDA implementation of the High Performance Conjugate Gradient benchmark
US11226798B2 (en) Information processing device and information processing method
US9921838B2 (en) System and method for managing static divergence in a SIMD computing architecture
Khasanov et al. Implicit data-parallelism in Kahn process networks: Bridging the MacQueen Gap
US9665354B2 (en) Apparatus and method for translating multithread program code
Son et al. Timeline scheduling for out-of-core ray batching
Rockenbach et al. High-level stream and data parallelism in c++ for gpus
Dong et al. Porting hep parameterized calorimeter simulation code to gpus
Chen et al. Contention and locality-aware work-stealing for iterative applications in multi-socket computers
Madsen et al. Enorm: Efficient window-based computation in large-scale distributed stream processing systems
Zhang et al. Mocl: an efficient OpenCL implementation for the matrix-2000 architecture
JP2014164664A (ja) タスク並列処理方法、装置及びプログラム
WO2020238348A1 (zh) 区块的验证方法、装置及设备
JP5687603B2 (ja) プログラム変換装置、プログラム変換方法、および変換プログラム
JP5423876B2 (ja) 検証支援プログラム、検証支援装置、および検証支援方法

Legal Events

Date Code Title Description
A621 Written request for application examination

Free format text: JAPANESE INTERMEDIATE CODE: A621

Effective date: 20170804

A977 Report on retrieval

Free format text: JAPANESE INTERMEDIATE CODE: A971007

Effective date: 20180327

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20180403

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20180604

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

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20180702

R150 Certificate of patent or registration of utility model

Ref document number: 6372331

Country of ref document: JP

Free format text: JAPANESE INTERMEDIATE CODE: R150