JP6582367B2 - 情報処理装置、情報処理装置の制御方法および情報処理装置の制御プログラム - Google Patents

情報処理装置、情報処理装置の制御方法および情報処理装置の制御プログラム Download PDF

Info

Publication number
JP6582367B2
JP6582367B2 JP2014147499A JP2014147499A JP6582367B2 JP 6582367 B2 JP6582367 B2 JP 6582367B2 JP 2014147499 A JP2014147499 A JP 2014147499A JP 2014147499 A JP2014147499 A JP 2014147499A JP 6582367 B2 JP6582367 B2 JP 6582367B2
Authority
JP
Japan
Prior art keywords
thread
processing
memory
main storage
parallel
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
JP2014147499A
Other languages
English (en)
Other versions
JP2016024578A (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 JP2014147499A priority Critical patent/JP6582367B2/ja
Priority to US14/712,950 priority patent/US9697123B2/en
Priority to EP15167947.9A priority patent/EP2975520A1/en
Publication of JP2016024578A publication Critical patent/JP2016024578A/ja
Application granted granted Critical
Publication of JP6582367B2 publication Critical patent/JP6582367B2/ja
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F12/00Accessing, addressing or allocating within memory systems or architectures
    • G06F12/02Addressing or allocation; Relocation
    • G06F12/08Addressing or allocation; Relocation in hierarchically structured memory systems, e.g. virtual memory systems
    • G06F12/0802Addressing of a memory level in which the access to the desired data or data block requires associative addressing means, e.g. caches
    • G06F12/0806Multiuser, multiprocessor or multiprocessing cache systems
    • G06F12/0815Cache consistency protocols
    • 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/54Interprogram communication
    • 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/54Interprogram communication
    • G06F9/543User-generated data transfer, e.g. clipboards, dynamic data exchange [DDE], object linking and embedding [OLE]
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F12/00Accessing, addressing or allocating within memory systems or architectures
    • G06F12/02Addressing or allocation; Relocation
    • G06F12/08Addressing or allocation; Relocation in hierarchically structured memory systems, e.g. virtual memory systems
    • G06F12/0802Addressing of a memory level in which the access to the desired data or data block requires associative addressing means, e.g. caches
    • G06F12/0804Addressing of a memory level in which the access to the desired data or data block requires associative addressing means, e.g. caches with main memory updating
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F12/00Accessing, addressing or allocating within memory systems or architectures
    • G06F12/02Addressing or allocation; Relocation
    • G06F12/08Addressing or allocation; Relocation in hierarchically structured memory systems, e.g. virtual memory systems
    • G06F12/0802Addressing of a memory level in which the access to the desired data or data block requires associative addressing means, e.g. caches
    • G06F12/0866Addressing of a memory level in which the access to the desired data or data block requires associative addressing means, e.g. caches for peripheral storage systems, e.g. disk cache
    • G06F12/0868Data transfer between cache memory and other subsystems, e.g. storage devices or host systems
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F12/00Accessing, addressing or allocating within memory systems or architectures
    • G06F12/02Addressing or allocation; Relocation
    • G06F12/08Addressing or allocation; Relocation in hierarchically structured memory systems, e.g. virtual memory systems
    • G06F12/0802Addressing of a memory level in which the access to the desired data or data block requires associative addressing means, e.g. caches
    • G06F12/0866Addressing of a memory level in which the access to the desired data or data block requires associative addressing means, e.g. caches for peripheral storage systems, e.g. disk cache
    • G06F12/0873Mapping of cache memory to specific storage devices or parts thereof
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2212/00Indexing scheme relating to accessing, addressing or allocation within memory systems or architectures
    • G06F2212/25Using a specific main memory architecture
    • G06F2212/254Distributed memory
    • G06F2212/2542Non-uniform memory access [NUMA] architecture
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2212/00Indexing scheme relating to accessing, addressing or allocation within memory systems or architectures
    • G06F2212/27Using a specific cache architecture
    • G06F2212/271Non-uniform cache access [NUCA] architecture
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2212/00Indexing scheme relating to accessing, addressing or allocation within memory systems or architectures
    • G06F2212/28Using a specific disk cache architecture
    • G06F2212/283Plural cache memories

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Software Systems (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Multi Processors (AREA)
  • Memory System (AREA)
  • Information Transfer Systems (AREA)

Description

本発明は、情報処理装置、情報処理装置の制御方法および情報処理装置の制御プログラムに関する。
非均一メモリアクセス(NUMA:Non-Uniform Memory Access)アーキテクチャを利用した情報処理装置(以下、「NUMA型情報処理装置」と適宜記す)が提案されている。NUMA型情報処理装置は、演算処理装置としてのプロセッサ(CPU(Central Processing Unit)コアとも呼ぶ)と主記憶装置としてのメモリとを有する複数のノードを有し、インターコネクトを介してノード間を接続する構成を有する。
NUMA型情報処理装置において、各ノードは、例えば、インターコネクトを介してストレージ装置に接続される。NUMA型情報処理装置は、例えば、ノード間や、ノード内のメモリとストレージ装置との間でデータ転送を行う。
特開2011−238278号公報 特開平11−120116号公報 特開2006−11913号公報 特開2003−67357号公報 特開平07−182298号公報 特開2002−140229号公報
NUMA型情報処理装置において、例えば、ハードウェアリソースを効率的に利用するためや、処理速度を高速化するために、演算に関連するデータの転送を効率的に行うことが望ましい。
本実施の形態の一つの側面は、情報処理装置におけるデータ転送を効率的に行うことを目的とする。
本実施の形態の第1の側面は、演算処理を実行する演算処理装置とデータを記憶する主記憶装置とをそれぞれ備える複数のノードを有する情報処理装置において、一のノードに属する演算処理装置は、ジョブ実行指示に応じて、並列演算処理における各演算処理装置が分担する並列演算データを、前記主記憶装置以外の主記憶装置から自己の主記憶装置へ転送処理するためのI/Oスレッドを、前記各演算処理装置に作成し、前記複数のノードの各演算処理装置は、前記I/Oスレッドを実行して、演算処理装置が分担する並列演算データを、前記主記憶装置以外の主記憶装置から自己の主記憶装置へ転送する処理を分散して行うことを特徴とする情報処理装置である。
第1の側面によれば、情報処理装置におけるデータ転送を効率的に行うことができる。
図1は、本実施の形態に関連する技術を説明する図である。 図2は、本実施の形態における情報処理システムSYSのシステム構成を示す図である。 図3は、図2の並列情報処理システム1のハードウェア構成図である。 図4は、図2の並列情報処理システム1のソフトウェア構成図である。 図5は、図3のコアが図4で説明したソフトウェアを実行している状態を示した図である。 図6は、図3のストレージシステムとメモリとを説明する図である。 図7は、図6のリード用配列、ライト用配列を説明する図である。 図8は、演算用ファイルFAを説明する図である。 図9は、演算結果ファイルFBを説明する図である。 図10は、並列情報処理の流れを説明するフロー図である。 図11は、図10のステップS1における並列I/O初期化処理を説明するフロー図である。 図12は、物理メモリのアドレスで示される領域が属するNUMAノードの特定を説明する図である。 図13は、図10のステップS3におけるリード要求処理の概略を説明するフロー図である。 図14は、図13のリード処理用ページリストの作成を説明するフロー図である。 図15は、リード処理用ページリストを説明する図である。 図16は、図13のリード処理や図17のライト処理を説明するフロー図である。 図17は、図10のステップS13におけるライト要求処理の概略を説明するフロー図である。 図18は、図17のライト処理用ページリストの作成を説明するフロー図である。 図19は、ライト処理用ページリストを説明する図である。
[非均一メモリアクセス]
図1は、本実施の形態に関連する技術を説明する図である。なお、以下の図の説明において、同じ要素については同一の符号を付して、一度した説明を省略する。
図1の並列情報処理システム1000は、非均一メモリアクセス(以下、NUMAと適宜記す)により並列情報処理を実行する。並列情報処理システム1000は、第1のNUMAノード1100、第2のNUMAノード1200と、ストレージシステム1300とを有する。なお、NUMAノードの数は例示である。
(NUMAノード)
第1のNUMAノード1100、第2のNUMAノード1200は、それぞれ、複数のCPUコア(以下、コアと適宜記す)と、1つのメモリを有する。このメモリは、物理メモリであり、例えばDRAM(Dynamic Random Access Memory)である。
第1のNUMAノード1100は、第1のコア1110と、第2のコア1120と、第1のメモリ1130とを有する。第2のNUMAノード1200は、第3のコア1210と、第4のコア1220と、第2のメモリ1230とを有する。
第1のコア1110と、第2のコア1120と、第1のメモリ1130と、第3のコア1210と、第4のコア1220と、第2のメモリ1230と、ストレージシステム1300は、バスBに接続されている。
(CPUコア)
第1のコア1110は、ユーザアプリケーションのユーザスレッドUTH1を実行する。ユーザアプリケーションは、例えば、演算用データに対して、並列情報処理を実行し、演算結果を出力するアプリケーションである。
なお、スレッドとは、ある処理を複数の処理に分割し同時に実行する場合において、分割される処理単位である。換言すれば、スレッドとは、CPU利用の実行単位、すなわち、プログラムの実行単位である。
第1のコア1110は、さらに、データの転送(入出力処理とも呼ぶ)を実行するI/OスレッドIOTHを実行する。I/OスレッドIOTHは、例えば、オペレーティングシステム(OS:Operating System)のカーネルにより実行される。I/OスレッドIOTHは、ユーザスレッドにより呼び出され、データの入出力処理を行う。
第2のコア1120は、前記したユーザアプリケーションのユーザスレッドUTH2を実行する。第3のコア1210は、前記したユーザアプリケーションのユーザスレッドUTH3を実行する。第4のコア1220は、前記したユーザアプリケーションのユーザスレッドUTH4を実行する。
ユーザスレッドUTH1〜UTH4の各々は、演算用データに対して、各スレッドに割り当てられた並列情報処理を実行し、演算結果を出力する。
(NUMA最適化)
NUMA型情報処理装置においては、あるノードのコアが別のノードのメモリ(リモートメモリとも呼ぶ)にアクセスする時間は、このノードのコアが自ノードのメモリ(ローカルメモリとも呼ぶ)にアクセスする時間よりも長くなる。
そこで、並列情報処理システム1000は、コアがアクセスするデータを可能な限りこのコアから近いメモリ(ローカルメモリ)に配置するメモリ割り当て制御を行う。かかるメモリ割り当て制御を"NUMA最適化"と適宜記す。
オペレーティングシステム本体以外のアプリケーションが動作するメモリ空間(ユーザ空間と適宜記す)でのプログラム動作に基づく"NUMA 最適化"技術においては、コア毎の処理負荷が均一になるように、各コアが実行するユーザスレッドにユーザアプリケーションの処理が割り当てられる。そして、かかる技術は、ユーザスレッドが頻繁にアクセスするデータを、このユーザスレッドを実行するコアに近いメモリに配置する。すなわち、かかる技術では、ユーザアプリケーションのデータアクセスパターンに応じて、メモリへのデータ配置を決定している。
(データ読み出し、書き込み処理の一例)
並列情報処理においては、ストレージシステム1300からデータを読み出す処理、メモリ(例えば、第1のメモリ1130)からデータを読み出し、ストレージシステム1300に書き込む処理が実行される。
このデータ読み出し処理、データ書き込み処理において、ストレージシステム1300とメモリとの間でデータが直接転送されるメモリ領域は、オペレーティングシステムの
のメモリ空間(以下、カーネル空間とも呼ぶ)内に確保されたバッファ領域である。そして、ユーザ空間とストレージシステム1300との間のデータ転送は、このバッファ領域を介して間接的に行われる。すなわち、オペレーティングシステムによって、カーネル空間のバッファ領域とユーザ空間との間で、コアを使用してデータがコピーされる。なお、このコピー処理は、ユーザアプリケーションがオペレーティングシステムに対して発行するシステムコールの延長で実行される。
(演算用データの読み出し)
ユーザスレッドUTH1〜UTH4が前記した並列情報処理を実行する前に、I/OスレッドIOTHは、例えばストレージシステム1300から演算用データを読み出し、メモリに記憶する。
この記憶において、I/OスレッドIOTHは、例えば、ローカルメモリである第1のメモリ1130の第2のバッファ1182に演算用データを読み込む。次いで、I/OスレッドIOTHは、第2のバッファ1182に読み込んだ演算用データを、第1のバッファ1181にコピーする。ここで、第2のバッファ1182は、カーネル空間のバッファ領域である。そして、第1のバッファ1181は、いわゆるユーザ空間のバッファ領域である。
(並列情報処理)
ここで、ユーザスレッドUTH1、UTH2は、第1のメモリ1130の第1のバッファ1181にアクセス(ローカルアクセス)し、ユーザスレッドUTH1、UTH2用の演算用データに並列情報処理を行う。そして、ユーザスレッドUTH1、UTH2は、第1のバッファ1181に並列情報処理の結果を示す結果データを書き込む。
また、ユーザスレッドUTH3、UTH4は、第1のメモリ1130の第1のバッファ1181にアクセス(リモートアクセス)し、ユーザスレッドUTH3、UTH4用の演算用データを読み出し、第2のメモリ1230の第1のバッファ1281に書き込む。そして、ユーザスレッドUTH3、UTH4は、ユーザスレッドUTH3、UTH4用の演算用データに並列情報処理を行う。そして、ユーザスレッドUTH3、UTH4は、第1のバッファ1281に並列情報処理の結果を示す結果データを書き込む。
I/OスレッドIOTHは、ユーザスレッドUTH3、UTH4が実行する結果データの書き込みが終了するまで待ち状態に入っている。
ユーザスレッドUTH3、UTH4は、前記したように第1のメモリ1130にリモートアクスして、ユーザスレッドUTH3、UTH4用の演算用データを読み出し、第2のメモリ1230の第1のバッファ1281に書き込む。このリモートアクセスは、前記したように、ローカルアクセスに比べて時間がかかる。
そのため、ユーザスレッドUTH1、UTH2の演算処理の開始時点よりも、ユーザスレッドUTH3、UTH4の演算処理の開始時点が遅れる。その結果、ユーザスレッドUTH1、UTH2が、第1のバッファ1181に対する結果データの書き込みが終了した時点よりも遅れて、ユーザスレッドUTH3、UTH4は、第1のバッファ1281に対する結果データの書き込みを終了する。この遅れ(終了タイミングのばらつきとも呼ばれる)により、I/OスレッドIOTHにおける前記した待ち状態の時間が長くなる。
(演算結果データの書き込み)
この待ち状態が終了すると、I/OスレッドIOTHは、第1のメモリ1130における第1のバッファ1181に書き込まれた演算結果データを第2のバッファ1182にコピーする。そして、I/OスレッドIOTHは、コピーした演算結果データをストレージシステム1300に書き込む。
この書き込みが終了すると、I/OスレッドIOTHは、第2のメモリ1230における第1のバッファ1281に書き込まれた演算結果データを第2のバッファ1282にコピーする。そして、I/OスレッドIOTHは、コピーした演算結果データをストレージシステム1300に書き込む。
なお、I/OスレッドIOTHは、ユーザスレッドからの書き込み要求を受けると、このユーザスレッドが動作するCPUコアで実行され、前記した書き込みを行う。また、第2のバッファ1282は、カーネル空間のバッファ領域である。そして、第1のバッファ1281は、いわゆるユーザ空間のバッファ領域である。
(データ転送におけるNUMA最適化)
前記したように、リモートアクセスにより、I/Oスレッドの待ち状態が長くなると処理時間が長くなるだけでなく、コア、メモリのリソースが無駄になる。
ここで、データ転送における"NUMA最適化"の有無により、ノード内のメモリとストレージシステム1300との間のデータ転送の効率が大きく異なる。データ転送の動作主体は、オペレーティングシステム側のI/OスレッドIOTHであるので、このデータ転送に"NUMA最適化"を適用することは困難である。この困難な理由を説明する。
データ転送において、I/OスレッドIOTHは、ユーザアプリケーション(ユーザスレッド)によるメモリアクセスの要求を受け、この要求に基づき、メモリにアクセスする。すなわち、I/OスレッドIOTHは、いわばユーザスレッドのメモリアクセスを代行するように動作している。そのため、I/OスレッドIOTHは、このユーザスレッドのデータアクセスパターンなどの"NUM最適化"に必要な情報を持たない。
このデータアクセスパターンは、あるユーザスレッドが、記憶装置に記憶されたどの演算用データに対して演算処理を実行するのかを示すパターンである。
このように、I/OスレッドIOTHは、"NUM最適化"に必要な情報を持たないので、このデータ転送に"NUMA最適化"を適用することは困難である。
(データ転送の効率向上)
さて、図1の例では、1つのコアが、ノード内のメモリとストレージシステム1300との間のデータ転送を実行するため、このコアに対する処理負荷が増大し、このコアの処理能力が低下することがある。その結果、このデータ転送の効率が低下する。そこで、このデータ転送処理を各コアに並列処理させて、このデータ転送処理を分散すれば、コアが実行する転送処理の負荷が分散される。その結果、このデータ転送の効率が向上する。
このデータ転送処理の分散において、終了タイミングのばらつきを抑えるためには、並列情報処理装置は、以下の処理が求められる。この処理とは、コアの各々が、前記したデータアクセスパターンに基づき、アクセスするデータをストレージ装置から読み出し、ローカルメモリに書き込む処理である。以下、ノード内のメモリとストレージ装置との間でデータ転送を効率的に行う並列情報処理装置について説明する。
[情報処理システムのシステム構成]
図2は、本実施の形態における情報処理システムSYSのシステム構成を示す図である。情報処理システムSYSは、並列情報処理システム(並列情報処理装置)1と、ログインノード2と、第1の操作用端末31〜第i(小文字のiは、3以上の整数)の操作用端末3iとを有する。以下、並列情報処理システム(並列情報処理装置)1を並列情報処理システム1と記す。
並列情報処理システム1とログインノード2とはネットワークNT1を介して接続され、ログインノード2と第1の操作用端末31〜第iの操作用端末3iとはネットワークNT2を介して接続している。ネットワークNT1、NT2は、例えばLAN(Local Area Network)である。
並列情報処理システム1は、複数のコア(プロセッサコアとも呼ばれる)を利用して並列に情報処理を行うことで、プログラムを高速に実行する。並列情報処理システム1は、例えば、NUMAアーキテクチャを利用した情報処理装置である。
ログインノード2は、ユーザのログイン処理や、プログラム開発や、並列情報処理システム1に対するジョブ操作を実行する。例えば、ログインノード2は、ジョブキューイングシステムを有し、並列情報処理システム1にジョブの実行指示を行い、並列情報処理システム1にジョブを実行させる。並列情報処理システム1は、ジョブの実行指示に応答し、図3で説明するNUMAノード内の複数のコアの1つにメインスレッドを生成させ、この1つのコアにこのメインスレッドを実行させる。すると、メインスレッドは、他のコアの各々にサブスレッドを生成させ、他のコアの各々にサブスレッドを実行させる。
また、ログインノード2は、並列情報処理システム1において実行されるジョブの管理、スケジューリング、監視を実行する。
第1の操作用端末31〜第iの操作用端末3iは、ログインノード2を介して、並列情報処理システム1にジョブの実行を指示する。ログインノード2は、この指示に応答し、ジョブをキューイングし、キューイングされたジョブの実行を並列情報処理システム1に指示する。
さらに、第1の操作用端末31〜第iの操作用端末3iは、このジョブの実行により並列情報処理システム1が出力したジョブの結果(演算結果)を受信し、例えば、表示装置(図示しない)に演算結果を出力する。
[ハードウェア構成]
図3は、図2の並列情報処理システム1のハードウェア構成図である。並列情報処理システム1は、第1のNUMAノードND1〜第4のNUMAノードND4と、ストレージシステム(記憶装置)STRと、接続装置CNCとを有する。ストレージシステム(記憶装置)STRをストレージシステムSTRと記す。
並列情報処理システム1は、演算処理装置としてのプロセッサ(コアとも呼ぶ)と、主記憶装置としてのメモリとを有する複数のノードを有する情報処理装置(コンピュータとも呼ぶ)の一例である。
第j(jは1〜4の整数)のNUMAノードNDjは、それぞれ、複数のコアと、1つ以上のメモリとを有する。このメモリは、例えばDRAMである。図3の例では、第jのNUMAノードNDjは、2つのコアと、第jのメモリMjを有する。
例えば、第1のNUMAノードND1は、第1のコアC1と、第2のコアC2と、第1のメモリM1とを有する。第2のNUMAノードND2は、第3のコアC3と、第4のコアC4と、第2のメモリM2とを有する。第3のNUMAノードND3は、第5のコアC5と、第6のコアC6と、第3のメモリM3とを有する。第4のNUMAノードND4は、第7のコアC7と、第8のコアC8と、第4のメモリM4とを有する。
第k(kは1〜8の整数)のコアCkは、それぞれ第kのスレッド群Tkを実行する。例えば、第1のコアC1は、第1のスレッド群T1を実行する。
並列情報処理システム1は、上記したNUMAノードの構成により、マルチプロセスを実行可能である。そして、並列情報処理システム1は、8つのコアの各々が実行するユーザスレッド(演算スレッドとも呼ぶ)で並列情報処理するマルチスレッドモデルの並列情報処理アプリケーション(プログラム)を実行する。なお、マルチプロセスかつマルチスレッドモデルはハイブレッドモデルとも呼ばれる。
ストレージシステムSTRは、1以上の大容量記憶装置を有する。大容量記憶装置は、例えば、補助記憶装置としてのハードディスクドライブや、ソリッドステートドライブでもよい。ストレージシステムSTRは、例えば、ノード内の主記憶装置以外の主記憶装置の一例である。
接続装置CNCは、図2のログインノード2に対する接続インターフェイスとして機能し、ネットワークNT1に接続する。
第1のコアC1〜第8のコアC8、第1のメモリM1〜第4のメモリM4、ストレージシステムSTR、接続装置CNCは、それぞれ、バスBに接続する。なお、ストレージシステムSTRとバスBとをPCI(Peripheral Component Interconnect)バスにより接続してもよい。
なお、図3で説明したNUMAノードの数(4つ)、各NUMAノードが有するコアの数(2つ)、メモリの数(1つ)は、例示であり、その他の数であってもよい。
[ソフトウェア構成]
図4は、図2の並列情報処理システム1のソフトウェア構成図である。ユーザアプリケーション10は、図1で説明した、例えば、演算対象となるデータである演算用データに対して、並列情報処理を実行し、演算結果を出力するアプリケーションである。
ユーザアプリケーション10は、図5に示す第1のユーザスレッド(演算処理部)101〜第8のユーザスレッド(演算処理部)108を含む。以下、ユーザスレッド(演算処理部)をユーザスレッドと記す。
第1のユーザスレッド101〜第8のユーザスレッド108は、演算用データに対して、各スレッドに割り当てられた並列情報処理を実行し、演算結果を出力する。なお、この演算処理は、様々な演算処理を含み、情報処理とも呼ばれる。第1のユーザスレッド101〜第8のユーザスレッド108は、演算処理を実行する演算処理部の一例である。
I/Oサブシステム20は、ストレージシステムSTRから演算用データを読み出し、第1のメモリM1〜第4のメモリM4に書き込む処理(以下、リード処理と適宜記す)を実行する。
第1のユーザスレッド101〜第8のユーザスレッド108は、自スレッドを実行するコアが属するノード内のメモリに書き込まれた演算用データに対して前記した並列情報処理を実行する。そして、第1のユーザスレッド101〜第8のユーザスレッド108は、自スレッドを実行するコアが属するノード内のメモリ(自スレッドのメモリ)に演算結果を示すデータ(以下、演算結果データと適宜記す)を書き込む。なお、同一コアで実行されるI/Oスレッドとユーザスレッドとを、ペアのI/Oスレッド、ユーザスレッドと呼ぶ。
I/Oサブシステム20は、第1のメモリM1〜第4のメモリM4に書き込まれた演算結果データをストレージシステムSTRに書き込む処理(以下、ライト処理と適宜記す)を実行する。
I/Oサブシステム20は、並列I/O処理初期化部21と、並列I/O処理部22と、I/Oスレッド23と、ページリスト取得部(特定部)24とを有する。以下、ページリスト取得部(特定部)24をページリスト取得部24と記す。
並列I/O処理初期化部21は、I/Oスレッド23を作成する。並列I/O処理部22は、I/Oスレッド23にリード処理、ライト処理の実行を指示する。
I/Oスレッド23は、図5に示す、第1のI/Oスレッド(転送部)231〜第8のI/Oスレッド(転送部)238を含みリード処理、ライト処理を実行する。以下、I/Oスレッド(転送部)をI/Oスレッドと記す。第1のI/Oスレッド231〜第8のI/Oスレッド238は、演算処理に関連するデータを転送する転送部の一例である。
ページリスト取得部24は、メモリにおける記憶位置(記憶領域とも呼ぶ)のアドレスを格納するリストを取得する。この記憶位置のアドレスは、第1のI/Oスレッド231〜第8のI/Oスレッド238が、演算用データを書き込む、第jのメモリMjにおける記憶位置を示すアドレスである。また、このメモリにおける領域のアドレスは、第jのメモリMjにおいて演算結果データが書き込まれる記憶位置を示すアドレスである。
カーネル30は、オペレーティングシステムの基本的機能を実行するソフトウェアである。この基本的機能は、例えば、ストレージシステムSTR、第1のメモリM1〜第4のメモリM4などのハードウェア資源の管理、割り込み処理、スレッド間通信などである。
[ソフトウェアの実行]
図5は、図3のコアが図4で説明したソフトウェアを実行している状態を示した図である。
第k(kは1〜8の整数)のコアCkは、第kのスレッド群THk、第kのカーネル30kを実行する。第kのスレッド群THkは、第kのユーザスレッド10k、第kのI/Oスレッド23kの何れか1、または、2つを含むスレッド群である。図5では、第kのスレッド群THkは、第kのユーザスレッド10kと第kのI/Oスレッド23kとを含むように示している。
例えば、第1のコアC1は、第1のユーザスレッド101、第1のI/Oスレッド231、第1のカーネル301を実行する。
第k(kは1〜8の整数)のコアCkは、第kのユーザスレッド10kと、第kのI/Oスレッド23kとを実行するプロセッサの一例である。
図4のカーネル30は、第1のコアC1〜第8のコアC8の何れかの1以上のコアで動作している。例えば、第kのユーザスレッド10kが、システムコールを利用してカーネル30が提供する処理の実行をカーネル30に指示する。すると、カーネル30は、第kのユーザスレッド10kが動作している第kのコアCkで動作し、実行指示を受けた処理を行う。このように、第kのコアCkでカーネル30が動作している状態を、図4における符号30k(301〜308)で模式的に示している。
さらに、第1のコアC1は、並列I/O処理初期化部21と、並列I/O処理部22と、ページリスト取得部24とを実行する。
[ストレージシステムとメモリ]
図6は、図3のストレージシステムとメモリとを説明する図である。ストレージシステムSTRは、演算用ファイルFA、演算結果ファイルFB、プログラムPG1を記憶する。さらに、ストレージシステムSTRは、演算用ファイルFAのファイルポインタ情報(第1のアドレス情報)IN1、対応情報(第2のアドレス情報)IN2、演算結果ファイルFBのファイルポインタ情報(第3のアドレス情報)IN3を記憶する。以下、ファイルポインタ情報(第1のアドレス情報)IN1、対応情報(第2のアドレス情報)IN2、ファイルポインタ情報 (第3のアドレス情報)IN3については、それぞれ、ファイルポインタ情報IN1、対応情報IN2、ファイルポインタ情報IN3と記す。
なお、ファイルポインタ情報IN1については図8で説明し、対応情報IN2については図12で説明し、ファイルポインタ情報IN3については図9で説明する。
演算用ファイルFAは、演算用データが格納されるファイルである。演算結果ファイルFBは、演算結果データが格納されるファイルである。
プログラムPG1は、ユーザアプリケーション10、I/Oサブシステム20、カーネル30の実行ファイルである。例えば、第1のコアC1は、並列情報処理システム1の起動時に、ストレージシステムSTRからプログラムPG1を読み出し、例えば第1のメモリM1に展開する。このプログラムPG1の展開により、ユーザアプリケーション10、I/Oサブシステム20、カーネル30が実行される。
なお、この実行ファイルを外部記憶媒体(図示しない)に記憶してもよい。この記憶媒体(記録媒体とも呼ばれる)は、例えば、CD-ROM(Compact Disc Read Only Memory)、DVD(Digital Versatile Disc)などの可搬型記憶媒体である。この場合、並列情報処理システム1は、例えば、接続インターフェイス(図示しない)を介して、外部記憶媒体に記憶されたデータを読み取る記憶媒体読み取り装置(図示しない)と接続する。
第j(jは1〜4の整数)のメモリMjは、リード用配列Rjと、ライト用配列Wjと、テンポラリバッファTBjとを有する。例えば、第1のメモリM1は、リード用配列R1と、ライト用配列W1と、テンポラリバッファTB1とを有する。
第jのメモリMjのリード用配列Rjは、演算用ファイルFAに格納されている演算用データの一部を記憶する配列である。第jのメモリMjのライト用配列Wjは、演算結果データが書き込まれる配列である。なお、図6における、"リード処理"、"ライト処理"、"コピー"については、図16で説明する。
図7は、図6のリード用配列、ライト用配列を説明する図である。なお、図7においては、図を簡略化するため、メモリ以外のハードウェア構成や、図6に示したテンポラリバッファTB1〜TB4の図示を省略している。リード用配列、ライト用配列の対応領域については、図10のステップS2で説明する。
[演算用ファイル]
図8は、演算用ファイルFAを説明する図である。演算用ファイルFAは、演算処理の対象である演算用データ(対象データとも呼ぶ)を格納するファイルである。演算用ファイルFAには、第k(kは1〜8の整数)のユーザスレッド10k用の演算用データが区分されて格納されている。なお、演算用ファイルFAは、ヘッダ情報などの各種制御情報を有するが、この各種制御情報の図示を省略している。
ファイルポインタPTR1a〜ファイルポインタPTR9aは、ストレージシステムSTRにおける演算用ファイルFAのアドレス(ファイルポインタとも呼ぶ)を示している。
第kのユーザスレッド10kの演算用データは、ファイルポインタPTR(k)a〜PTR(k+1)aで示される領域に格納されている。ここで、"(k)"は、"1"〜"8"の整数を示し、"(k+1)"は、"k"に、"1"を加算した整数を示す。
例えば、第1のユーザスレッド101の演算用データは、ファイルポインタPTR1a〜PTR2aで示される領域に格納されている。第2のユーザスレッド102の演算用データは、ファイルポインタPTR2a〜PTR3aで示される領域に格納されている。第3のユーザスレッド103の演算用データは、ファイルポインタPTR3a〜PTR4aで示される領域に格納されている。
第4のユーザスレッド104の演算用データは、ファイルポインタPTR4a〜PTR5aで示される領域に格納されている。第6のユーザスレッド106の演算用データは、ファイルポインタPTR6a〜PTR7aで示される領域に格納されている。第7のユーザスレッド107の演算用データは、ファイルポインタPTR7a〜PTR8aで示される領域に格納されている。第8のユーザスレッド108の演算用データは、ファイルポインタPTR8a〜PTR9aで示される領域に格納されている。
図6に示したファイルポインタ情報IN1は、ストレージシステムSTRにおける、第kのユーザスレッド10kの演算用データの記憶位置を示すファイルポインタPTR(k)a〜PTR(k+1)aである。なお、ファイルポインタ情報IN1は、前記した第1のアドレス情報(図6参照)の一例である。前記した第1のアドレス情報は、ストレージシステムSTRにおける、第kのユーザスレッド10kの演算処理の対象となる演算用データの記憶位置を示す情報である。
ユーザアプリケーション10の開発者(以下、開発者と適宜記す)は、演算用ファイルFA、ファイルポインタ情報IN1を作成し、ストレージシステムSTRに記憶する。
なお、開発者は、ファイルポインタ情報IN1を、ユーザアプリケーション10の開発時に、ユーザアプリケーション10に予め設定してもよいし、ユーザアプリケーション10の実行開始時に、ユーザアプリケーション10に設定してもよい。
他にも、開発者は、ファイルポインタ情報IN1を、演算用ファイルFAのヘッダ領域に格納してもよい。
[演算結果ファイル]
図9は、演算結果ファイルFBを説明する図である。演算結果ファイルFBには、第k(kは1〜8の整数)のユーザスレッド10kの演算結果データが区分されて格納される。なお、演算結果ファイルFBは、ヘッダ情報などの各種制御情報を有するが、この各種制御情報の図示を省略している。
ファイルポインタPTR1b〜ファイルポインタPTR9bは、ストレージシステムSTRにおける演算結果ファイルFBのアドレスを示している。
第kのユーザスレッド10kの演算結果データは、ファイルポインタPTR(k)b〜PTR(k+1)bで示される領域に格納される。
例えば、第1のユーザスレッド101の演算結果データは、ファイルポインタPTR1b〜PTR2bで示される領域に格納される。
図6に示したファイルポインタ情報IN3は、ストレージシステムSTRにおける、第kのユーザスレッド10kの演算結果データの記憶位置を示すファイルポインタPTR(k)b〜PTR(k+1)bである。なお、ファイルポインタ情報IN3は、前記した第3のアドレス情報(図6参照)の一例である。前記した第3のアドレス情報は、ストレージシステムSTRにおける、第kのユーザスレッド10kの演算処理の結果を示す演算結果データの記憶位置を示す情報である。
開発者は、ファイルポインタ情報IN3をストレージシステムSTRに記憶する。なお、開発者は、ファイルポインタ情報IN3を、ユーザアプリケーション10の開発時に、ユーザアプリケーション10に予め設定してもよいし、ユーザアプリケーション10の実行開始時に、ユーザアプリケーション10に設定してもよい。
他にも、開発者は、ファイルポインタ情報IN3を、演算結果ファイルFBのヘッダ領域に格納してもよい。
[ストレージシステム-メモリ間のデータ転送]
以下に、本実施の形態におけるストレージシステム-メモリ間のデータ転送について説明する。複数のノードの各々に属する第k(kは1〜8の整数)のコアCk(演算処理装置)は、第kのユーザスレッド10kと、第kのI/Oスレッド23kとを有する。
第kのI/Oスレッド(転送部)23kは、第kのユーザスレッド10kが演算処理を実行する対象データを、ストレージシステムSTRにおける記憶位置を示す第1のアドレス情報(ファイルポインタ情報IN1)に基づいてストレージシステムSTRから読み出す。そして、第kのI/Oスレッド23kは、読み出した対象データを、第kのコアCkが属するノードのメモリ(すなわち、自ノードのメモリ)に書き込む。
次いで、複数のノードの各々に属する第kのコアCkの第kのユーザスレッド10kは、第kのコアCkが属するノードのメモリに書き込まれた演算用データに演算処理を実行する。この演算処理は、例えば並列情報処理である。
そして、第kのコアCkの第kのユーザスレッド10kは、演算結果を示す演算結果データを、第kのコアCkが属するノードのメモリに書き込む。
第kのコアCkの第kのI/Oスレッド23kは、第kのコアCkが属するノードのメモリに書き込まれた演算結果データをストレージシステムSTRに書き込む。この書き込みにおいて、第kのコアCkの第kのI/Oスレッド23kは、第kのコアCkが属するノードのメモリに書き込まれた演算結果データを読み出す。そして、第kのI/Oスレッド23kは、ファイルポインタ情報IN3に基づき、読み出した演算結果データをストレージシステムSTRに書き込む。
図3〜図9を参照して本実施の形態のデータ転送を詳細に説明する。
[並列情報処理の流れ]
図10は、並列情報処理の流れを説明するフロー図である。図10の説明では、図4のカーネル30が例えば、第1のNUMAノードND1の第1のコアC1で動作している。そして、第1のコアC1のカーネル30は、並列情報処理用のプログラム(図6のプログラムPG1参照)を読み出し、例えば、第1のメモリM1に展開する。第1のコアC1は、この展開により、図5に示したように、並列I/O処理初期化部21、並列I/O処理部22、ページリスト取得部24、第1のユーザスレッド101の実行を開始する。
カーネル30が動作している状態において、ログインノード2が、並列情報処理用のジョブの実行を並列情報処理システム1に指示する。以後、ステップS1以下の処理が開始される。なお、以下のフロー図の説明において、"Ss"(小文字sは1以上の整数)は、ステップSsを意味し、このステップという文字を適宜省略する。
(並列I/O初期化)
ステップS1:第1のユーザスレッド101は、並列I/O処理初期化部21に並列I/O初期化を指示する。並列I/O処理初期化部21は、この指示に応答して、図5に示したように、第k(kは1〜8の整数)のI/Oスレッド23kを作成し第kのコアCkで実行させる。なお、並列I/O初期化処理については、図11で詳細に説明する。
(リード用配列、ライト用配列の確保)
ステップS2: 第1のユーザスレッド101は、第j(jは1〜4の整数)のメモリMjにリード用配列Rjの領域、ライト用配列Wjの領域を確保する。この確保は、例えば、カーネル30に対するシステムコールの読み出しにより実行される。
S2の確保を図7を参照して説明する。例えば、第1のユーザスレッド101は、第1のメモリM1にリード用配列R1を確保する。そして、第1のユーザスレッド101は、リード用配列R1内に、第1のI/Oスレッド231に対応する第1の対応領域RS1と、第2のI/Oスレッド232に対応する第2の対応領域RS2とを確保する。そして、第1のユーザスレッド101は、第1のメモリM1にライト用配列W1を確保する。そして、第1のユーザスレッド101は、ライト用配列W1内に、第1のI/Oスレッド231に対応する第1の対応領域WS1と、第2のI/Oスレッド232に対応する第2の対応領域WS2とを確保する。
第1のユーザスレッド101は、第2のメモリM2にリード用配列R2を確保する。そして、第1のユーザスレッド101は、リード用配列R2内に、第3のI/Oスレッド233に対応する第3の対応領域RS3と、第4のI/Oスレッド234に対応する第4の対応領域RS4とを確保する。第1のユーザスレッド101は、第2のメモリM2にライト用配列W2を確保する。そして、第1のユーザスレッド101は、ライト用配列W2内に、第3のI/Oスレッド233に対応する第3の対応領域WS3と、第4のI/Oスレッド234に対応する第4の対応領域WS4とを確保する。
第1のユーザスレッド101は、第3のメモリM3にリード用配列R3を確保する。そして、第1のユーザスレッド101は、リード用配列R3内に、第5のI/Oスレッド235に対応する第5の対応領域RS5と、第6のI/Oスレッド236に対応する第6の対応領域RS6とを確保する。第1のユーザスレッド101は、第3のメモリM3にライト用配列W3を確保する。そして、第1のユーザスレッド101は、ライト用配列W3内に、第5のI/Oスレッド235に対応する第5の対応領域WS5と、第6のI/Oスレッド236に対応する第6の対応領域WS6とを確保する。
第1のユーザスレッド101は、第4のメモリM4にリード用配列R4を確保する。そして、第1のユーザスレッド101は、リード用配列R4内に、第7のI/Oスレッド237に対応する第7の対応領域RS7と、第8のI/Oスレッド238に対応する第8の対応領域RS8とを確保する。第1のユーザスレッド101は、第4のメモリM4にライト用配列W4を確保する。第1のユーザスレッド101は、ライト用配列W4内に、第7のI/Oスレッド237に対応する第7の対応領域WS7と、第8のI/Oスレッド238に対応する第8の対応領域WS8とを確保する。
なお、第1のユーザスレッド101は、第j(jは1〜4の整数)のメモリMjに確保したリード用配列Rj、ライト用配列Wjの仮想アドレスを例えばカーネル30から取得している。
第1のユーザスレッド101は、リード用配列Rj内の対応領域を識別する識別子、ライト用配列Wjの対応領域を識別する識別子を、図11のステップS11で説明する、スレッド識別子に対応付けて第1のメモリM1に記憶してもよい。
(リード処理)
ステップS3:第1のユーザスレッド101は、並列I/O処理部22にリード処理を要求する。並列I/O処理部22は、リード処理の要求に応答して、第1のI/Oスレッド231〜第8のI/Oスレッド238にリード処理の実行を指示する。
第k(kは1〜8の整数)のI/Oスレッド23kは、このリード指示に応答して、ストレージシステムSTRからファイルポインタ情報IN1を読み出す。そして、第kのI/Oスレッド23kは、ファイルポインタ情報IN1に基づき、演算用ファイルFAにおけるファイルポインタPTR(k)a〜PTR(k+1)aで示される領域に格納された演算用データを読み出す。次いで、第kのI/Oスレッド23kは、自スレッドのリード用配列において、第kのユーザスレッド10kに対応して確保されている第kの対応領域RSkに、読み出した演算用データを書き込む。なお、自スレッドのリード用配列とは、自スレッドを実行しているコアが属するノード内のメモリに確保されたリード用配列である。
例えば、第1のI/Oスレッド231は、このリード指示に応答して、ストレージシステムSTRの演算用ファイルFAから、ペアの第1のユーザスレッド101の演算用データを読み出し、自スレッドのリード用配列R1の第1の対応領域RS1に書き込む。
第1のユーザスレッド101の演算用データは、図8で示した、演算用ファイルFAにおけるファイルポインタPTR1a〜PTR2aで示される領域に格納された演算用データである。
第2のI/Oスレッド232は、このリード指示に応答して、ストレージシステムSTRの演算用ファイルFAから、ペアの第2のユーザスレッド102の演算用データを読み出し、自スレッドのリード用配列R1の第2の対応領域RS2に書き込む。
第2のユーザスレッド102の演算用データは、図8で示した、演算用ファイルFAにおけるファイルポインタPTR2a〜PTR3aで示される領域に格納された演算用データである。
第3のI/Oスレッド233〜第8のI/Oスレッド238も、第1のI/Oスレッド231、第2のI/Oスレッド232と同様な、読み出し、書き込み処理を行う。S3の時点では、第2のユーザスレッド102〜第8のユーザスレッド108は、作成されておらず、次のS4で作成される。なお、リード処理については、図13で詳細に説明する。
(ユーザスレッドの作成)
ステップS4: 第1のユーザスレッド101は、ユーザスレッドを作成する。具体的には、第1のユーザスレッド101は、第m(mは2〜8の整数)のコアCmで動作する、第mのユーザスレッド10mを作成する。例えば、第1のユーザスレッド101は、図5で示したように、第2のコアC2〜第8のコアC8でそれぞれ動作する第2のユーザスレッド102〜第8のユーザスレッド108を作成する。第2のユーザスレッド102〜第8のユーザスレッド108は、子スレッドとも呼ばれる。
(親スレッドの処理)
以下、S5〜S8では、親スレッド(マスタースレッドとも呼ばれる)である第1のユーザスレッド101が実行する処理について説明する。
ステップS5:第1のユーザスレッド101は、自身が動作する第1のコアC1に自身をバインドする。このバインドにより、第1のユーザスレッド101は、第1のコアC1以外のコアでの実行が抑止される。
ステップS6: 第1のユーザスレッド101は、自スレッドのリード用配列R1(図6、図7参照)の第1の対応領域RS1に記憶された演算用データを使い、自スレッドに割り当てられた並列情報処理を実行する。
ステップS7: 第1のユーザスレッド101は、並列情報処理が終了すると、自スレッドのライト用配列W1(図6、図7参照)の第1の対応領域WS1に、並列情報処理の結果を示すデータ(演算結果データ)を書き込む。
ステップS8: 第1のユーザスレッド101は、全ての子スレッド(第2のユーザスレッド〜第8のユーザスレッド)のデータ書き込みの終了を待ち合わせる。全ての子スレッドのデータ書き込みが終了すると、S13に移る。
(子スレッド)
以下、S9〜S12では、子スレッドが実行する処理について説明する。
ステップS9: 第m(mは2〜8の整数)のユーザスレッド10mは、自身が動作する第mのコアCmに自身をバインドする。このバインドにより、第mのユーザスレッド10mは、第mのコアCm以外のコアでの実行が抑止される。例えば、第2のユーザスレッド102は、自身が動作する第2のコアC2にバインドする。
ステップS10: 第mのユーザスレッド10mは、自スレッドのリード用配列(図6、図7参照)の対応領域RSmに記憶された演算用データを使い、自スレッドに割り当てられた並列情報処理を実行する。例えば、第2のユーザスレッド102は、自スレッドのリード用配列R1の第2の対応領域RS2に記憶された演算用データを使い並列情報処理を実行する。また、第3のユーザスレッド103、第4のユーザスレッド104は、それぞれ、自スレッドのリード用配列R2の第3、第4の対応領域RS3、RS4に記憶された演算用データを使い並列情報処理を実行する。また、第5のユーザスレッド105、第6のユーザスレッド106は、それぞれ、自スレッドのリード用配列R3の第5、第6の対応領域RS5、RS6に記憶された演算用データを使い並列情報処理を実行する。また、第7のユーザスレッド107、第8のユーザスレッド108は、それぞれ、自スレッドのリード用配列R4の第7、第8の対応領域RS7、RS8に記憶された演算用データを使い並列情報処理を実行する。
ステップS11:第m(mは2〜8の整数)のユーザスレッド10mは、並列情報処理が終了すると、自スレッドのライト用配列の第mの対応領域WSmに、並列情報処理の結果を示すデータ(演算結果データ)を書き込む。
例えば、第2のユーザスレッド102は、並列情報処理が終了すると、自スレッドのライト用配列W1の第2の対応領域WS2に、並列情報処理の演算結果データを書き込む。
また、第3のユーザスレッド103、第4のユーザスレッド104は、並列情報処理が終了すると、それぞれ、自スレッドのライト用配列W2の第3、第4の対応領域WS3、WS4に、並列情報処理の演算結果データを書き込む。
また、第5のユーザスレッド105、第6のユーザスレッド106は、並列情報処理が終了すると、それぞれ、自スレッドのライト用配列W3の第5、第6の対応領域WS5、WS6に、並列情報処理の演算結果データを書き込む。
また、第7のユーザスレッド107、第8のユーザスレッド108は、並列情報処理が終了すると、それぞれ、自スレッドのライト用配列W4の第7、第8の対応領域WS7、WS8に、並列情報処理の演算結果データを書き込む。
ステップS12: 第m(mは2〜8の整数)のユーザスレッド10mは、演算結果データの書き込みが終了すると、その旨を第1のユーザスレッド101に通知する。
(ライト処理)
ステップS13: 第1のユーザスレッド101は、S12の通知を受信すると、並列I/O処理部22にライト処理を要求する。並列I/O処理部22は、ライト処理の要求に応答して、第1のI/Oスレッド231〜第8のI/Oスレッド238にライト処理の実行を指示する。
第k(kは1〜8の整数)のI/Oスレッド23kは、このライト指示に応答して、ストレージシステムSTRからファイルポインタ情報IN3を読み出す。また、第kのI/Oスレッド23kは、自スレッドのライト用配列の対応領域WSkに記憶された演算結果データを読み出す。そして、第kのI/Oスレッド23kは、読み出した演算結果データを、ファイルポインタ情報IN3に基づき、ストレージシステムSTRの演算結果ファイルFBの対応領域に書き込む。演算結果ファイルFBの対応領域は、演算結果ファイルFBにおけるファイルポインタPTR(k)b〜PTR(k+1)bで示される領域である。なお、ライト処理については、図16で詳細に説明する。
図10のS1で説明したように、第kのコアCkは、自ノードに属するメモリ(ローカルメモリ)とストレージシステムSTRとのデータ転送を実行する第k(kは1〜8の整数)のI/Oスレッド23kを同時に実行する。このように、各コアが、自ノードに属するメモリとストレージシステムSTRとのデータ転送を実行するので、転送処理が分散される。この分散により、処理負荷が削減され、さらに、転送開始から転送終了までの時間が短縮される。その結果、データ転送の効率が向上する。
さらに、第k(kは1〜8の整数)のコアCkは、並列情報処理する演算用データを自ノードに属するメモリ(ローカルメモリ)に書き込む(図10のS3)。そして、第kのコアCkは、自ノードに属するメモリにアクセスしてこの演算用データに並列情報処理を実行する(図10のS6、S10)。そのため、第kのコアCkは、他ノードのメモリ(リモートメモリ)にアクセスすることなく並列情報処理を実行できるので、メモリアクセスのレイテンシを抑制することができる。
さらに、第kのコアCkは、並列情報処理の実行により得られた演算結果データを自ノードに属するメモリに書き込む(S7。S11)。そして、第kのコアCkは、自ノードに属するメモリに書き込まれた演算結果データを読み出して、読み出した演算結果データをストレージシステムSTRに書き込む(S13)。このように、第kのコアCkは、他ノードのメモリ(リモートメモリ)から演算結果データを読み出して、読み出した演算結果データをストレージシステムSTRに書き込まない。そのため、前記したレイテンシを抑制することができる。前記したレイテンシを抑制することにより、ノード内のメモリとストレージ装置との間でデータ転送を効率的に行うことができる。
[並列I/O初期化]
図11は、図10のステップS1における並列I/O初期化処理を説明するフロー図である。
ステップS11: 並列I/O処理初期化部21は、並列I/O初期化の指示(図10のS1参照)に応答して、図5に示したように、第k(kは1〜8の整数)のI/Oスレッド23kを作成し第kのコアCkで実行させる。すなわち、第kのコアCkは、第kのI/Oスレッド23kを実行する。具体的には、第1のコアC1〜第8のコアC8は、それぞれ、第1のI/Oスレッド231〜第8のI/Oスレッド238を同時に実行する。
並列I/O処理初期化部21は、第kのI/Oスレッド23kの作成順に、作成したスレッドを識別するスレッド識別子を作成し、第1のメモリM1に記憶し、管理する。
ステップS12:作成された第k(kは1〜8の整数)のI/Oスレッド23kは、自身が動作する第kのコアCkに自身をバインドする。例えば、第1のI/Oスレッド231は、自身が動作する第1のコアC1に自身をバインドする。このバインドにより、第kのI/Oスレッド23kは、第kのコアCk以外のコアでの実行が抑止される。
S12の終了後、図10のリード用配列、ライト用配列の確保処理が実行され(S2)、リード要求処理が行われる(S3)。
[リード処理要求]
次に、リード処理要求(図10のS3)について、図12〜図16を参照して説明する。
(アドレス対応)
図12は、物理メモリのアドレスで示される領域が属するNUMAノードの特定を説明する図である。図12は、対応情報IN2を示す。対応情報IN2は、複数のノードの各々に属するメモリの領域を示す第2の情報の一例である。カーネル30は、対応情報IN2を管理する。以下、物理メモリのアドレスを物理アドレスと適宜記す。
図12の対応情報IN2は、物理アドレスADR(j)〜ADR(j+1)で示される領域(メモリ空間とも呼ぶ)が、第jのNUMAノードNDjに属する第jのメモリMjのある領域に対応することを示している。なお、"(j)"は"1"〜"4"の整数を示し、"(j+1)"は、"j"に、"1"を加算した整数を示す。
例えば、対応情報IN2は、物理アドレスADR1〜ADR2で示される領域が、第1のNUMAノードND1に属する第1のメモリM1のある領域に対応することを示している。また、対応情報IN2は、物理アドレスADR2〜ADR3で示される領域が、第2のNUMAノードND2に属する第2のメモリM2のある領域に対応することを示している。
また、対応情報IN2は、物理アドレスADR3〜ADR4で示される領域が、第3のNUMAノードND3に属する第3のメモリM3のある領域に対応することを示している。また、対応情報IN2は、物理アドレスADR4〜ADR5で示される領域が、第4のNUMAノードND4に属する第4のメモリM4のある領域に対応することを示している。
なお、斜め線のハッチングで示す長方形は、カーネル30がメモリを管理する際の管理単位(ページとも呼ぶ)を模式的に示している。管理単位のバイト数は、例えば、4キロバイトである。管理単位については、後記する。
複数のノードの各々に属する第k(kは1〜8の整数)のコアCkの第kのI/Oスレッド23kは、対応情報IN2に基づき、ストレージシステムSTRから読み出した対象データを第kのコアCkが属するノードのメモリに書き込む。この対象データは、演算処理の対象となる演算用データの一例である。なお、この書き込みについては、図16で説明する。
[リード処理]
図13〜図16は、図10のステップS3におけるリード要求処理を説明するフロー図である。図13は、図10のステップS3におけるリード要求処理の概略を説明するフロー図である。図14は、図13のリード処理用ページリストの作成を説明するフロー図である。図15は、リード処理用ページリストを説明する図である。図16は、図13のリード処理や図17のライト処理を説明するフロー図である。最初に図13のフロー図から説明する。
(ページリストの取得)
図13のステップS31: 並列I/O処理部22は、第1のユーザスレッド101からのリード処理の要求を受け付けると、リード処理用ページリストの作成をページリスト取得部24に指示する。ページリスト取得部24は、この指示に応答して、リード処理用ページリストを作成する。図14、図15を参照して、リード処理用ページリストの作成を説明する。
(リード処理用ページリストの作成)
図14のステップS311:ページリスト取得部24は、第1のメモリM1〜第4のメモリM4のぞれぞれに確保されたリード用配列R1〜R4の領域に対応する仮想アドレスを物理アドレスに変換する。なお、通常、ユーザスレッド、I/Oスレッドは、仮想メモリのアドレスを指定して、カーネルを介して物理メモリにアクセスしている。そのため、ユーザスレッド、I/Oスレッドは、物理メモリのアドレスについての情報を保持していない。そこで、ユーザスレッド、I/Oスレッドが、物理メモリのアドレスの情報を保持するため、S311の変換処理を行う。
この変換のため、ページリスト取得部24は、仮想アドレスと物理アドレスとの対応関係を示したページテーブルをカーネル30から取得する。
ページリスト取得部24は、取得したページテーブルに基づき、第1のメモリM1〜第4のメモリM4のぞれぞれに確保されたリード用配列R1〜R4の仮想アドレスを物理アドレスに変換する。
(NUMAノードの識別子を特定)
ステップS312:ページリスト取得部24は、図12の対応情報IN2に基づき、変換後の物理アドレスで示されるメモリ領域を含むメモリ(物理メモリ)が属するNUMAノードの識別子を特定する。NUMAノードの識別子は、図3で示したNUMAノードを示す符号"ND1"〜"ND4"に対応する。
第j(jは1〜4の整数)のメモリMjに確保されたリード用配列Rj(図7参照)の物理アドレスが、図12のアドレスADR(j)〜ADR(j+1)の範囲内の場合を想定する。この場合、ページリスト取得部24は、この物理アドレスで示されるメモリ領域を含むメモリが属するNUMAノードの識別子は、第jのNUMAノードの"NDj"と特定する。
例えば、第1のメモリM1に確保されたリード用配列R1の物理アドレスが、図12のアドレスADR1〜ADR2の範囲内の場合を想定する。この想定の場合、ページリスト取得部24は、このリード用配列R1の物理アドレスで示されるメモリ領域を含むメモリが属するNUMAノードの識別子は、第1のNUMAノードの"ND1"と特定する。
(ページリスト作成)
ステップS313: ページリスト取得部24は、リード処理用のページリストを作成する。
図12、図15を参照して、ページリストの作成について説明する。まず、ページリスト取得部24は、例えば、第1のメモリM1の領域に、ページリスト記憶用の領域を確保する。
ページリスト取得部24は、図12の対応情報IN2に基づき、第j(jは1〜4の整数)のメモリMjのリード用配列Rjのページ毎のアドレスを格納する第jのNUMAノードNDjのリード処理用ページリストLSTrjを作成する。
例えば、ページリスト取得部24は、リード処理用ページリストLSTr1〜リード処理用ページリストLSTr4を作成する。
リード処理用ページリストLSTr1は、第1のNUMAノードND1に属する第1のメモリM1のリード用配列R1の各ページ(PGr1〜PGrp1)のアドレスを格納する。リード処理用ページリストLSTr2は、第2のNUMAノードND2に属する第2のメモリM2のリード用配列R2の各ページ(PGr2〜PGrp2)のアドレスを格納する。
リード処理用ページリストLSTr3は、第3のNUMAノードND3に属する第3のメモリM3のリード用配列R3の各ページ(PGr3〜PGrp3)のアドレスを格納する。リード処理用ページリストLSTr4は、第4のNUMAノードND4に属する第4のメモリM4のリード用配列R4の各ページ(PGr4〜PGrp4)のアドレスを格納する。ここで、"p1"〜"p4"は、2以上の整数である。
なお、ページリスト取得部24は、作成したリード処理用ページリストを、確保したページリスト記憶用の領域に記憶する。ページリストの作成が終了すると、図13のS32に移る。
(ページリストの分割と割り当て)
図13のステップS32:並列I/O処理部22は、リード処理用ページリストLSTr1〜LSTr4を分割(区切るとも呼ぶ)する。そして、並列I/O処理部22は、各I/OスレッドにリードのI/O要求サブセットとして、区切ったリード処理用ページリストを割り当てる。なお、ページリスト取得部24が、S32の処理を実行してもよい。
まず、この区切りについて図15を参照して説明する。ここで、第j(jは1〜4の整数)のNUMAノードNDjは、2つのユーザスレッドを実行している。例えば、第1のNUMAノードND1は、第1のユーザスレッド101、第2のユーザスレッド102を実行している。そこで、並列I/O処理部22は、1つのリード処理用ページリストを2つに区切る。
例えば、並列I/O処理部22は、第1のNUMAノードND1のリード処理用ページリストLSTr1を、第1のユーザスレッド101用のページリストと、第2のユーザスレッド102用のページリストとに区切る。この区切りを図15の一点鎖線で示す。なお、並列I/O処理部22は、この区切りにおいて、分割されたページリストにおける複数のページで示される総メモリ容量が、ユーザスレッド用の演算用データの容量以上になるようにする。
第1のユーザスレッド101のリード処理用ページリストは、リード用配列R1の第1の対応領域RS1(図7参照)のページのアドレスを格納する。そして、第2のユーザスレッド102のリード処理用ページリストは、リード用配列R1の第2の対応領域RS2(図7参照)のページのアドレスを格納する。
また、並列I/O処理部22は、第2のNUMAノードND2のリード処理用ページリストLSTr2を、第3のユーザスレッド103のリード処理用ページリストと、第4のユーザスレッド104のリード処理用ページリストとに区切る。
第3のユーザスレッド103のリード処理用ページリストは、リード用配列R2の第3の対応領域RS3(図7参照)のページのアドレスを格納する。そして、第4のユーザスレッド104のリード処理用ページリストは、リード用配列R2の第4の対応領域RS4(図7参照)のページのアドレスを格納する。
また、並列I/O処理部22は、第3のNUMAノードND3のリード処理用ページリストLSTr3を、第5のユーザスレッド105のリード処理用ページリストと、第6のユーザスレッド106のリード処理用ページリストとに区切る。
第5のユーザスレッド105のリード処理用ページリストは、リード用配列R3の第5の対応領域RS5(図7参照)のページのアドレスを格納する。そして、第6のユーザスレッド106のリード処理用ページリストは、リード用配列R3の第6の対応領域RS6(図7参照)のページのアドレスを格納する。
また、並列I/O処理部22は、第4のNUMAノードND4のリード処理用ページリストLSTr4を、第7のユーザスレッド107のリード処理用ページリストと、第8のユーザスレッド108のリード処理用ページリストとに区切る。
第7のユーザスレッド107のリード処理用ページリストは、リード用配列R4の第7の対応領域RS7(図7参照)のページのアドレスを格納する。そして、第8のユーザスレッド108のリード処理用ページリストは、リード用配列R4の第8の対応領域RS8(図7参照)のページのアドレスを格納する。
次いで、並列I/O処理部22は、第kのユーザスレッド10kのリード処理用ページリストを、第kのユーザスレッド10kとペアの第kのI/Oスレッド23kに割り当てる。
第kのI/Oスレッド23kに割り当てられたページリストには、第kのI/Oスレッド23kがアクセスする物理メモリの領域(ページ)のアドレスが格納されている。従って、この割り当てにより、第kのI/Oスレッド23kは、アクセスするローカルメモリのページを特定できる。
図13のS31、S32の処理により、ページリスト取得部24は、対応情報INに基づき、第kのI/Oスレッド23kを実行する第kのコアCkが属するノードのメモリにおいて演算用データを書き込む位置(リード用配列の位置)を特定する。そして、ページリスト取得部24は、演算用データを書き込む位置における複数のページのアドレスを格納したリード処理用ページリストを作成する。
そして、図16で説明するように、複数のノードの各々に属する第kのコアCkの第kのI/Oスレッド23kは、特定されたアドレスに基づき、ストレージシステムSTRから読み出した演算用データを第kのコアCkが属するノードのメモリに書き込む。この演算用データは、演算処理が実行される対象データの一例である。
ステップS33: 並列I/O処理部22は、各I/Oスレッドに、リードのI/O要求サブセットの実行指示を行う。具体的には、並列I/O処理部22は、第1のI/Oスレッド231〜第8のI/Oスレッド238に、リードのI/O要求サブセットの実行指示を行う。なお、実行指示を受け付けたI/Oスレッドが実行する処理については、図16で説明する。
ステップS34: 並列I/O処理部22は、実行指示を行った各I/Oスレッドからの完了通知を待ち受ける。
図16を参照して、リードのI/O要求サブセットの実行指示を受け付けたI/Oスレッドが実行するリード処理を説明する。
リードのI/O要求サブセットの実行指示(図13のS33)を受け付けた第k(kは1〜8の整数)のI/Oスレッド23kは、S201〜S206の処理を実行する。
(I/O要求サブセットの受信)
ステップS201:第kのI/Oスレッド23kは、リードまたはライトのI/O要求サブセットの実行指示の受信待ち状態にある。
ステップS202:第kのI/Oスレッド23kは、I/O要求サブセットを受信し、受信したI/O要求サブセットが、リードのI/O要求サブセットか判定する。リードのI/O要求サブセットではない場合(S202/NO)、S207に移る。リードのI/O要求サブセットの場合(S202/YES)、S203に移る。
(テンポラリバッファの領域確保)
ステップS203:第kのI/Oスレッド23kは、自スレッドの物理メモリにテンポラリバッファの領域を確保する。
例えば、第1のI/Oスレッド231は、自スレッドの物理メモリである第1のメモリM1にテンポラリバッファTB1(図6参照)を確保する。
なお、テンポラリバッファの領域が既に確保されている場合は、第kのI/Oスレッド23kは、S203の処理は実行しない。
ここで、各I/Oスレッドは、オンデマンド以外にも様々な方法によりテンポラリバッファの領域を確保できる。例えば、各I/Oスレッドは、自身の使用するキャッシュページを一部プールして、この一部プールしたキャッシュページの領域をテンポラリバッファの領域として確保してもよい。かかる確保により、領域確保の応答性を高めることができる。なお、キャッシュページのプールとしては、I/Oスレッド初期化の段階で特定のキャッシュページを確保しておき、不要になったキャッシュを戻すことで補填できる。
(演算用データの書き込み)
ステップS204: 第k(kは1〜8の整数)のI/Oスレッド23kは、ストレージシステムSTRの演算用ファイルFAから、ペアの第kのユーザスレッド10kの演算用データを読み出す。そして、第kのI/Oスレッド23kは、自スレッドのテンポラリバッファに読み出した演算用データを書き込む。ここで自スレッドのテンポラリバッファとは、自スレッドを実行しているコアが属するノード内のメモリに確保されたテンポラリバッファである。
図6、図8を参照し、S204の処理を説明する。第1のI/Oスレッド231は、演算用ファイルFAのファイルポインタ情報INに基づき、図8の演算用ファイルFAから、ファイルポインタPTR1a〜PTR2aで示す範囲の演算用データを読み出す。そして、第1のI/Oスレッド231は、読み出した演算用データを、第1のメモリM1のテンポラリバッファTB1に書き込む(図6の"リード処理"参照)。第2のI/Oスレッド232〜第8のI/Oスレッド238も、第1のI/Oスレッド231と同様に、演算用ファイルFAから、ペアのユーザスレッドの演算用データを読み出し、自スレッドのテンポラリバッファに読み出した演算用データを書き込む。
以上説明したように、第kのI/Oスレッド23kは、演算用ファイルFAのファイルポインタ情報INにより、第kのユーザスレッド10kが実行する演算処理の対象となる演算用データを図8の演算用ファイルFAから読み出すことができる。
(コピー処理)
ステップS205:第kのI/Oスレッド23kは、自スレッドのテンポラリバッファに書き込んだ演算用データを自スレッドのリード用配列にコピーする。図6〜図8、図15を参照し、S205を説明する。
第kのI/Oスレッド23kは、第kのI/Oスレッド23kとペアの第kのユーザスレッド10kのリード処理用ページリストに格納されたアドレスで示される領域に、自スレッドのテンポラリバッファの演算用データをコピーする。
例えば、第1のI/Oスレッド231は、リード用配列R1の第1の対応領域RS1(図7参照)にテンポラリバッファTB1に書き込んだ第1のユーザスレッド101用の演算用データをコピー(図6の"コピー"参照)する。ここで、リード用配列R1の第1の対応領域RS1は、図15のリード処理用ページリストLSTr1における第1のユーザスレッド101用の複数のページのアドレスで示される領域である。また、テンポラリバッファTB1に書き込んだ第1のユーザスレッド101用の演算用データは、図8で示した、演算用ファイルFAにおけるファイルポインタPTR1a〜PTR2aで示される領域に格納された演算用データである。
また、第2のI/Oスレッド232は、リード用配列R1の第2の対応領域RS2(図7参照)にテンポラリバッファTB1に書き込んだ第2のユーザスレッド102用の演算用データをコピーする。ここで、リード用配列R1の第2の対応領域RS2は、図15のリード処理用ページリストLSTr1における第2のユーザスレッド102用の複数のページのアドレスで示される領域である。また、テンポラリバッファTB1に書き込んだ第2のユーザスレッド102用の演算用データは、図8で示した、演算用ファイルFAにおけるファイルポインタPTR2a〜PTR3aで示される領域に格納された演算用データである。
また、第3のI/Oスレッド233は、リード用配列R2の第3の対応領域RS3(図7参照)にテンポラリバッファTB2に書き込んだ第3のユーザスレッド103用の演算用データをコピーする。ここで、リード用配列R2の第3の対応領域RS3は、図15のリード処理用ページリストLSTr2における第3のユーザスレッド103用の複数のページのアドレスで示される領域である。また、テンポラリバッファTB2に書き込んだ第3のユーザスレッド103用の演算用データは、図8で示した、演算用ファイルFAにおけるファイルポインタPTR3a〜PTR4aで示される領域に格納された演算用データである。
また、第4のI/Oスレッド234は、リード用配列R2の第4の対応領域RS4(図7参照)にテンポラリバッファTB2に書き込んだ第4のユーザスレッド104用の演算用データをコピーする。ここで、リード用配列R2の第4の対応領域RS4は、図15のリード処理用ページリストLSTr2における第4のユーザスレッド104用の複数のページのアドレスで示される領域である。また、テンポラリバッファTB2に書き込んだ第4のユーザスレッド104用の演算用データは、図8で示した、演算用ファイルFAにおけるファイルポインタPTR4a〜PTR5aで示される領域に格納された演算用データである。
また、第5のI/Oスレッド235は、リード用配列R3の第5の対応領域RS5(図7参照)にテンポラリバッファTB3に書き込んだ第5のユーザスレッド105用の演算用データをコピーする。ここで、リード用配列R3の第5の対応領域RS5は、図15のリード処理用ページリストLSTr3における第5のユーザスレッド105用の複数のページのアドレスで示される領域である。また、テンポラリバッファTB3に書き込んだ第5のユーザスレッド105用の演算用データは、図8で示した、演算用ファイルFAにおけるファイルポインタPTR5a〜PTR6aで示される領域に格納された演算用データである。
また、第6のI/Oスレッド236は、リード用配列R3の第6の対応領域RS6(図7参照)にテンポラリバッファTB3に書き込んだ第6のユーザスレッド106用の演算用データをコピーする。ここで、リード用配列R3の第6の対応領域RS6は、図15のリード処理用ページリストLSTr3における第6のユーザスレッド106用の複数のページのアドレスで示される領域である。また、テンポラリバッファTB3に書き込んだ第6のユーザスレッド106用の演算用データは、図8で示した、演算用ファイルFAにおけるファイルポインタPTR6a〜PTR7aで示される領域に格納された演算用データである。
また、第7のI/Oスレッド237は、リード用配列R4の第7の対応領域RS7(図7参照)にテンポラリバッファTB4に書き込んだ第7のユーザスレッド107用の演算用データをコピーする。ここで、リード用配列R4の第7の対応領域RS7は、図15のリード処理用ページリストLSTr4における第7のユーザスレッド107用の複数のページのアドレスで示される領域である。また、テンポラリバッファTB4に書き込んだ第7のユーザスレッド107用の演算用データは、図8で示した、演算用ファイルFAにおけるファイルポインタPTR7a〜PTR8aで示される領域に格納された演算用データである。
また、第8のI/Oスレッド238は、リード用配列R4の第8の対応領域RS8(図7参照)にテンポラリバッファTB4に書き込んだ第8のユーザスレッド108用の演算用データをコピーする。ここで、リード用配列R4の第8の対応領域RS8は、図15のリード処理用ページリストLSTr4における第8のユーザスレッド108用の複数のページのアドレスで示される領域である。また、テンポラリバッファTB4に書き込んだ第8のユーザスレッド108用の演算用データは、図8で示した、演算用ファイルFAにおけるファイルポインタPTR8a〜PTR9aで示される領域に格納された演算用データである。
リード処理用ページリストにより、第kのコアCkの第kのI/Oスレッド23kは、ペアの第kのユーザスレッド10kが実行する演算処理の対象となるデータを、第kのコアCkが属するノードのメモリに書き込むことができる。
(完了通知)
ステップS206:第kのI/Oスレッド23kは、S205のコピー、または、後記するS209の登録が終了すると、I/O完了通知を読み出し元のユーザスレッドに通知する。通知後、第kのI/Oスレッド23kは、実行指示待ち状態(S201)に移る。なお、S207〜S209については、図18の後で説明する。
並列I/O処理部22は、リードのI/O要求サブセットの実行指示(図13のS33)をした全てのI/OスレッドからのI/O完了通知を待ち受ける(図13のS34)。並列I/O処理部22は、全てのI/OスレッドからのI/O完了通知を受信すると、図10のS4に戻る。S4に戻ると、S4〜S12が順次実行され、並列I/O処理部22は、ライト処理の要求に応答して、第1のI/Oスレッド231〜第8のI/Oスレッド238にライト処理の実行を指示する(S13)。
[ライト処理]
図17、図18は、図10のステップS13におけるライト要求処理を説明するフロー図である。図17は、図10のステップS13におけるライト要求処理の概略を説明するフロー図である。図18は、図17のライト処理用ページリストの作成を説明するフロー図である。図19は、ライト処理用ページリストを説明する図である。
(ページリストの取得)
ステップS131: 並列I/O処理部22は、第1のユーザスレッド101からのライト処理の要求を受け付けると、ライト処理用ページリストの作成をページリスト取得部24に指示する。ページリスト取得部24は、この指示に応答して、ライト処理用ページリストを作成する。図18、図19を参照して、ライト処理用ページリストの作成を説明する。
(ライト処理用ページリストの作成)
図18のステップS1311:ページリスト取得部24は、第1のメモリM1〜第4のメモリM4のぞれぞれに確保されたライト用配列W1〜W4の領域に対応する仮想アドレスを物理アドレスに変換する。この変換を行う理由は、図14のS311で説明した理由と同じである。
この変換のため、ページリスト取得部24は、仮想アドレスと物理アドレスとの対応関係を示したページテーブルをカーネル30から取得する。
ページリスト取得部24は、取得したページテーブルに基づき、第1のメモリM1〜第4のメモリM4のぞれぞれに確保されたライト用配列W1〜W4の仮想アドレスを物理アドレスに変換する。
(NUMAノードの識別子を特定)
ステップS1312:ページリスト取得部24は、図12の対応情報IN2に基づき、変換後の物理アドレスで示されるメモリ領域を含むメモリ(物理メモリ)が属するNUMAノードの識別子を特定する。NUMAノードの識別子は、図3で示したNUMAノードを示す符号"ND1"〜"ND4"に対応する。
第j(jは1〜4の整数)のメモリMjに確保されたライト用配列Wj(図7参照)の物理アドレスが、図12のアドレスADR(j)〜ADR(j+1)の範囲内の場合を想定する。この場合、ページリスト取得部24は、この物理アドレスで示されるメモリ領域を含むメモリが属するNUMAノードの識別子は、第jのNUMAノードの"NDj"と特定する。
例えば、第1のメモリM1に確保されたライト用配列W1の物理アドレスが、図12のアドレスADR1〜ADR2の範囲内の場合を想定する。この想定の場合、ページリスト取得部24は、このライト用配列W1の物理アドレスで示されるメモリ領域を含むメモリが属するNUMAノードの識別子は、第1のNUMAノードの"ND1"と特定する。
(ページリスト作成)
ステップS1313: ページリスト取得部24は、ライト処理用のページリストを作成する。
図12、図19を参照して、ページリストの作成について説明する。まず、ページリスト取得部24は、例えば、第1のメモリM1の領域に、ページリスト記憶用の領域を確保する。
ページリスト取得部24は、図12の対応情報IN2に基づき、第j(jは1〜4の整数)のNUMAノードNDjのライト処理用ページリストLSTwjを作成する。第jのNUMAノードNDjのライト処理用ページリストLSTwjは、第jのNUMAノードNDjに属する第jのメモリMjのライト用配列Wjのページ毎のアドレスを格納するリストである。
ページリスト取得部24は、ライト処理用ページリストLSTw1〜ライト処理用ページリストLSTw4を作成する。
ライト処理用ページリストLSTw1は、第1のNUMAノードND1に属する第1のメモリM1のライト用配列W1の各ページ(PGw1〜PGwp1)のアドレスを格納する。ライト処理用ページリストLSTw2は、第2のNUMAノードND2に属する第2のメモリM2のライト用配列W2の各ページ(PGw2〜PGwp2)のアドレスを格納する。
ライト処理用ページリストLSTw3は、第3のNUMAノードND3に属する第3のメモリM3のライト用配列W3の各ページ(PGw3〜PGwp3)のアドレスを格納する。ライト処理用ページリストLSTw4は、第4のNUMAノードND4に属する第4のメモリM4のライト用配列W4の各ページ(PGw4〜PGwp4)のアドレスを格納する。ここで、"p1"〜"p4"は、2以上の整数である。
なお、ページリスト取得部24は、作成したライト処理用ページリストを、確保したページリスト記憶用の領域に記憶する。ページリストの作成が終了すると、図17のS132に移る。
(ページリストの分割と割り当て)
図17のステップS132:並列I/O処理部22は、ライト処理用ページリストLSTw1〜LSTw4を分割(区切るとも呼ぶ)する。そして、並列I/O処理部22は、各I/OスレッドにライトのI/O要求サブセットとして、区切ったライト処理用ページリストを割り当てる。なお、ページリスト取得部24が、S132の処理を実行してもよい。
まず、この区切りについて図19を参照して説明する。ここで、第j(jは1〜4の整数)のNUMAノードNDjは、2つのユーザスレッドを実行している。例えば、第1のNUMAノードND1は、第1のユーザスレッド101、第2のユーザスレッド102を実行している。そこで、並列I/O処理部22は、1つのライト処理用ページリストを2つに区切る。
例えば、並列I/O処理部22は、第1のNUMAノードND1のライト処理用ページリストLSTw1を、第1のユーザスレッド101のライト処理用ページリストと、第2のユーザスレッド102のライト処理用ページリストとに区切る。この区切りを図19の一点鎖線で示す。なお、並列I/O処理部22は、この区切りにおいて、分割されたページリストにおける複数のページで示される総メモリ容量が、ユーザスレッドの演算結果データの容量以上になるようにする。
第1のユーザスレッド101のライト処理用ページリストは、ライト用配列W1の第1の対応領域WS1(図7参照)のページのアドレスを格納する。そして、第2のユーザスレッド102のライト処理用ページリストは、ライト用配列W1の第2の対応領域WS2(図7参照)のページのアドレスを格納する。
また、並列I/O処理部22は、第2のNUMAノードND2のライト処理用ページリストLSTw2を、第3のユーザスレッド103のライト処理用ページリストと、第4のユーザスレッド104のライト処理用ページリストとに区切る。
第3のユーザスレッド103のライト処理用ページリストは、ライト用配列W2の第3の対応領域WS3(図7参照)のページのアドレスを格納する。そして、第4のユーザスレッド104のライト処理用ページリストは、ライト用配列W2の第4の対応領域WS4(図7参照)のページのアドレスを格納する。
また、並列I/O処理部22は、第3のNUMAノードND3のライト処理用ページリストLSTw3を、第5のユーザスレッド105のライト処理用ページリストと、第6のユーザスレッド106のライト処理用ページリストとに区切る。
第5のユーザスレッド105のライト処理用ページリストは、ライト用配列W3の第5の対応領域WS5(図7参照)のページのアドレスを格納する。そして、第6のユーザスレッド106のライト処理用ページリストは、ライト用配列W3の第6の対応領域WS6(図7参照)のページのアドレスを格納する。
また、並列I/O処理部22は、第4のNUMAノードND4のライト処理用ページリストLSTw4を、第7のユーザスレッド107のライト処理用ページリストと、第8のユーザスレッド108のライト処理用ページリストとに区切る。
第7のユーザスレッド107のライト処理用ページリストは、ライト用配列W4の第7の対応領域WS7(図7参照)のページのアドレスを格納する。そして、第8のユーザスレッド108のライト処理用ページリストは、ライト用配列W4の第8の対応領域WS8(図7参照)のページのアドレスを格納する。
次いで、並列I/O処理部22は、第kのユーザスレッド10kのライト処理用ページリストを、第kのユーザスレッド10kとペアの第kのI/Oスレッド23kに割り当てる。第kのI/Oスレッド23kに割り当てられたページリストには、第kのI/Oスレッド23kがアクセスする物理メモリの領域(ページ)のアドレスが格納されている。従って、この割り当てにより、第kのI/Oスレッド23kは、アクセスするローカルメモリのページを特定できる。
図17のS131、S132の処理により、ページリスト取得部24は、対応情報INに基づき、第kのI/Oスレッド23kを実行する第kのコアCkが属するノードのメモリにおいて演算結果データを書き込む領域(ライト用配列の領域)を特定する。そして、ページリスト取得部24は、演算結果データを書き込む領域における複数のページのアドレスを格納したライト処理用ページリストを作成する。
そして、図16で説明するように、複数のノードの各々に属する第kのコアCkの第kのI/Oスレッド23kは、特定されたアドレスに基づき、演算結果データを読み出す。
ステップS133: 並列I/O処理部22は、各I/Oスレッドに、ライトのI/O要求サブセットの実行指示を行う。具体的には、並列I/O処理部22は、第1のI/Oスレッド231〜第8のI/Oスレッド238に、ライトのI/O要求サブセットの実行指示を行う。なお、実行指示を受け付けたI/Oスレッドが実行する処理については、図16で説明する。
ステップS134: 並列I/O処理部22は、実行指示を行った各I/Oスレッドからの完了通知を待ち受ける。
図16を参照して、ライトのI/O要求サブセットの実行指示を受け付けたI/Oスレッドが実行するライト処理を説明する。
ライトのI/O要求サブセットの実行指示(図17のS133)を受け付けた第k(kは1〜8の整数)のI/Oスレッド23kは、S201、S202、S207〜S209、S206の処理を実行する。なお、S201、S202については、既に説明したので、その説明を省略する。
(I/O要求サブセットの受信)
第kのI/Oスレッド23kは、I/O要求サブセットを受信し、受信したI/O要求サブセットが、リードのI/O要求サブセットであるかを判定する(S202)。リードのI/O要求サブセットではない場合、すなわちライトのI/O要求サブセットの場合(S202/NO)、S207に移る。
(テンポラリバッファの領域確保)
ステップS207:第kのI/Oスレッド23kは、自スレッドの物理メモリにテンポラリバッファの領域を確保する。
例えば、第1のI/Oスレッド231は、自スレッドの物理メモリである第1のメモリM1にテンポラリバッファTB1(図6参照)を確保する。
なお、テンポラリバッファの領域が既に確保されている場合は、第kのI/Oスレッド23kは、S203の処理は実行しない。
(コピー)
ステップS208:第k(kは1〜8の整数)のI/Oスレッド23kは、割り当てられたライト処理用ページリストに基づき、自スレッドのライト用配列の第kの対応領域WSkに書き込まれた演算結果データを自スレッドのテンポラリバッファにコピーする。
例えば、第1のI/Oスレッド231は、自スレッドのライト用配列W1の第1の対応領域WS1(図7参照)に書き込まれた演算結果データを自スレッドのテンポラリバッファTB1にコピーする。なお、ライト用配列W1の第1の対応領域WS1は、図19のライト処理用ページリストLSTw1における第1のユーザスレッド101用の複数のページのアドレスで示される領域である。
また、第2のI/Oスレッド232は、自スレッドのライト用配列W1の第2の対応領域WS2(図7参照)に書き込まれた演算結果データを自スレッドのテンポラリバッファTB1にコピーする。
第3のI/Oスレッド233〜第8のI/Oスレッド238も、第1のI/Oスレッド231、第2のI/Oスレッド232と同様なコピーを行う。
(登録)
ステップS209:第kのI/Oスレッド23kは、自スレッドのテンポラリバッファにコピーされた演算結果データをストレージシステムSTRに書き込む処理を、例えばキューに登録する。バッファに記憶されたデータをI/Oスレッドによりファイルに書き込む処理は、非同期に実行されるので、S209の処理を実行する。なお、S209の実行後、第kのI/Oスレッド23kは、I/O完了通知を読み出し元のユーザスレッドに通知する(S206)。
第kのI/Oスレッド23kは、演算結果データの書き込みタイミングに至ると、以下の書き込み処理を実行する。
第kのI/Oスレッド23kは、自スレッドのテンポラリバッファにコピーされた、第kのI/Oスレッド23kとペアの第kのユーザスレッド10kの演算結果データを読み出す。そして、第kのI/Oスレッド23kは、読み出した演算結果データを、図9で示した、演算結果ファイルFBにおけるファイルポインタPTR(k)b〜PTR(k+1)bで示されるストレージシステムSTRの領域に書き込む。図6、図19を参照し、この書き込みを説明する。
第1のI/Oスレッド231は、テンポラリバッファTB1に記憶した、第1のユーザスレッド101の演算結果データを図9で示した、演算結果ファイルFBにおけるファイルポインタPTR1b〜PTR2bで示されるストレージシステムSTRの領域に書き込む。この書き込みについては、図6の"ライト処理"参照。
また、第2のI/Oスレッド232は、テンポラリバッファTB1に記憶した、第2のユーザスレッド102の演算結果データを図9で示した、演算結果ファイルFBにおけるファイルポインタPTR2b〜PTR3bで示されるストレージシステムSTRの領域に書き込む。
第3のI/Oスレッド233〜第8のI/Oスレッド238も、第1のI/Oスレッド231、第2のI/Oスレッド232と同様な書き込み処理を行う。
以後、例えば、ログインノード2は、演算結果が格納された演算結果ファイルFBを読み出し、第1の操作用端末31に送信する。第1の操作用端末31は、演算結果ファイルFBの内容を表示装置などに出力する。
[変形例など]
図10のS1では、ユーザアプリケーション10からの指示を受け付けて、並列I/O処理初期化部21は、第k(kは1〜8の整数)のI/Oスレッド23kを作成し第kのコアCkで実行させた。
他にも、並列I/O処理初期化部21がメモリに展開されて動作状態に移行したタイミングで、並列I/O処理初期化部21は、第kのI/Oスレッド23kを作成し第kのコアCkで実行させてもよい。
また、第1のユーザスレッド101が、並列I/O処理部22にリード処理を要求したタイミングで、並列I/O処理初期化部21が第kのI/Oスレッド23kを作成し第kのコアCkで実行させてもよい。
図10の配列確保(S2)において、第1のユーザスレッド101は、例えば、カーネル30が提供する専用のNUMA操作用のライブラリ機能を利用して、前記した配列の確保を実行してもよい。この確保においては、第1のユーザスレッド101は、NUMA最適化を考慮し、各スレッドによりアクセスされるデータが、各スレッドの動作するコアから近いメモリに配置されるように、リード用配列、ライト用配列毎にメモリの配置を細かく設定する。
第1のユーザスレッド101は、この設定において、カーネル30が提供するメモリ配置指定関数を利用する。
第1のユーザスレッド101は、この設定において、明に物理メモリの割り当てを指定し、仮想メモリ(仮想領域)の割り当てのみならず物理メモリをも割り当てるものとする。この割り当ての理由は、以下の通りである。すなわち、並列情報処理プログラムでは各スレッドでの処理のばらつき(ブレとも呼ぶ)が全体同期の遅延に繋がってしまうため、演算中のメモリアクセス時に物理メモリを割り当てるような動作(デマンドページングと呼ぶ)を避けるためである。
また、カーネルは、一般に提供されている各種カーネルを利用することができる。
以上の実施の形態をまとめると、次の付記のとおりである。
(付記1)
演算処理を実行する演算処理装置とデータを記憶する主記憶装置とをそれぞれ備える複数のノードを有する情報処理装置において、
前記複数のノードの各々に属する演算処理装置は、
演算処理を実行する演算処理部と、
前記演算処理部が演算処理を実行する対象データを、前記主記憶装置以外の主記憶装置における記憶位置を示す第1のアドレス情報に基づいて前記主記憶装置以外の主記憶装置から読み出し、読み出した前記対象データを、前記演算処理装置が属するノードの主記憶装置に書き込む転送部とを有することを特徴とする情報処理装置。
(付記2)
付記1において、
前記演算処理装置の転送部は、前記複数のノードの各々に属する主記憶装置の領域を示す第2のアドレス情報に基づき、前記主記憶装置以外の主記憶装置から読み出した前記対象データを前記主記憶装置に書き込む
ことを特徴とする情報処理装置。
(付記3)
付記2において、
何れかの前記演算処理装置は、さらに、特定部を実行し、
前記特定部は、前記第2のアドレス情報に基づき、前記主記憶装置において前記対象データを書き込む位置を特定し、
前記転送部は、前記主記憶装置以外の主記憶装置から読み出した前記対象データを、特定された前記位置に書き込む
ことを特徴とする情報処理装置。
(付記4)
付記1において、
前記演算処理装置の演算処理部は、演算結果を示す結果データを、当該演算処理装置が属するノードの主記憶装置に書き込み、
前記演算処理装置の転送部は、当該演算処理装置が属するノードの主記憶装置に書き込まれた前記結果データを前記主記憶装置以外の主記憶装置に書き込む
ことを特徴とする情報処理装置。
(付記5)
付記4において、
前記演算処理装置の転送部は、当該演算処理装置が属するノードの主記憶装置に書き込まれた前記結果データを読み出し、前記主記憶装置以外の主記憶装置における当該結果データの記憶位置を示す第3のアドレス情報に基づき、読み出した前記結果データを前記主記憶装置以外の主記憶装置に書き込む
ことを特徴とする情報処理装置。
(付記6)
付記5において、
何れかの前記演算処理装置は、さらに、特定部を実行し、
前記特定部は、前記複数のノードの各々に属する主記憶装置の領域を示す第2のアドレス情報に基づき、前記主記憶装置において前記結果データが書き込まれる領域を特定し、
前記転送部は、特定された前記領域から前記結果データを読み出す
ことを特徴とする情報処理装置。
(付記7)
付記1において、
前記演算処理部は、前記演算処理として並列演算処理を実行する
ことを特徴とする情報処理装置。
(付記8)
演算処理を実行する演算処理装置とデータを記憶する主記憶装置とをそれぞれ備える複数のノードを有する情報処理装置の制御方法において、
前記複数のノードの各々に属する演算処理装置が有する演算処理部が演算処理を実行する対象データを、前記演算処理装置が有する転送部が、前記主記憶装置以外の主記憶装置における記憶位置を示すアドレス情報に基づいて前記主記憶装置以外の主記憶装置から読み出し、
前記転送部が、読み出された前記対象データを、前記演算処理装置が属するノードの主記憶装置に書き込み、
前記演算処理部が、前記主記憶装置に書き込まれた対象データを用いて演算処理を実行することを特徴とする情報処理装置の制御方法。
(付記9)
演算処理を実行する演算処理装置とデータを記憶する主記憶装置とをそれぞれ備える複数のノードを有する情報処理装置の制御プログラムにおいて、
前記複数のノードの各々に属する演算処理装置が有する演算処理部が演算処理を実行する対象データを、前記演算処理装置が有する転送部に、前記主記憶装置以外の主記憶装置における記憶位置を示すアドレス情報に基づいて前記主記憶装置から読み出させ、
前記転送部に、読み出された前記対象データを、前記演算処理装置が属するノードの主記憶装置に書き込ませ、
前記演算処理部に、前記主記憶装置に書き込まれた対象データを用いて演算処理を実行させることを特徴とする情報処理装置の制御プログラム。
(付記10)
演算処理を実行する演算処理装置とデータを記憶する主記憶装置とをそれぞれ備える複数のノードを有するコンピュータで実行され、前記コンピュータによって読み取り可能であり、前記コンピュータにデジタル信号処理を実行させるプログラムを記録した記録媒体であって、
前記デジタル信号処理は、
前記複数のノードの各々に属する演算処理装置が有する演算処理部が演算処理を実行する対象データを、前記演算処理装置が有する転送部に、前記主記憶装置以外の主記憶装置における記憶位置を示すアドレス情報に基づいて前記主記憶装置から読み出させ、
前記転送部に、読み出された前記対象データを、前記演算処理装置が属するノードの主記憶装置に書き込ませ、
前記演算処理部に、前記主記憶装置に書き込まれた対象データを用いて演算処理を実行させる
ことを特徴とする記録媒体。
1…並列情報処理システム(並列情報処理装置)、2…ログインノード、31〜3i…第1の操作用端末〜第iの操作用端末、ND1〜ND4…第1のNUMAノード〜第4のNUMAノード、C1〜C8…第1のコア〜第8のコア、TH1〜TH8…第1のスレッド群〜第8のスレッド群、M1〜M4…第1のメモリ〜第4のメモリ、STR…ストレージシステム、CSC…接続装置、NT1、NT2…ネットワーク、10…ユーザアプリケーション、20…I/Oサブシステム、21…I/O初期化処理部、22…並列I/O処理部、23…I/Oスレッド、30…カーネル、101〜108…第1のユーザスレッド(演算処理部)〜第8のユーザスレッド(演算処理部)、231〜238…第1のI/Oスレッド(転送部)〜第8のI/Oスレッド(転送部)、24…ページリスト取得部(特定部)、301〜308…第1のカーネル〜第8のカーネル、1000…並列情報処理システム、1100、1200…第1、第2のNUMAノード、1110、1120、1210、1220…第1〜第4のコア、UTH1〜UTH4…ユーザスレッド、1130、1230…第1、第2のメモリ、1300…ストレージシステム。

Claims (5)

  1. 演算処理を実行する演算処理装置とデータを記憶する主記憶装置とをそれぞれ備える複数のノードを有する情報処理装置において、
    一のノードに属する演算処理装置は、
    ジョブ実行指示に応じて、並列演算処理における各演算処理装置が分担する並列演算データを、前記主記憶装置以外の主記憶装置から自己の主記憶装置へ転送処理するためのI/Oスレッドを、前記各演算処理装置に作成し、
    前記複数のノードの各演算処理装置は、前記I/Oスレッドを実行して、演算処理装置が分担する並列演算データを、前記主記憶装置以外の主記憶装置から自己の主記憶装置へ転送する処理を分散して行う
    ことを特徴とする情報処理装置。
  2. 請求項1において、
    前記一のノードの演算処理装置に作成されたユーザスレッドを実行することに伴って、他の演算処理装置に、並列演算処理するためのユーザスレッドを作成し、
    前記複数のノードの各演算処理装置が各ユーザスレッドを実行して、前記分担する並列演算データを、前記主記憶装置から読み出し、並列演算処理し、前記主記憶装置に書き込む
    ことを特徴とする情報処理装置。
  3. 請求項2において、
    前記複数のノードの各演算処理装置は、前記ユーザスレッドの実行後、前記I/Oスレッドを実行して、分担した並列演算の結果データを、前記自己の主記憶装置から前記主記憶装置以外の主記憶装置へ転送する処理を分散して行う
    ことを特徴とする情報処理装置。
  4. 演算処理を実行する演算処理装置とデータを記憶する主記憶装置とをそれぞれ備える複数のノードを有する情報処理装置の制御方法において、
    一のノードに属する演算処理装置は、
    ジョブ実行指示に応じて、並列演算処理における各演算処理装置が分担する並列演算データを、前記主記憶装置以外の主記憶装置から自己の主記憶装置へ転送処理するためのI/Oスレッドを、前記各演算処理装置に作成し、
    前記複数のノードの各演算処理装置は、前記I/Oスレッドを実行して、演算処理装置が分担する並列演算データを、前記主記憶装置以外の主記憶装置から自己の主記憶装置へ転送する処理を分散して行う
    ことを特徴とする情報処理装置の制御方法。
  5. 演算処理を実行する演算処理装置とデータを記憶する主記憶装置とをそれぞれ備える複数のノードを有する情報処理装置の制御プログラムであって
    一のノードに属する演算処理装置
    ジョブ実行指示に応じて、並列演算処理における各演算処理装置が分担する並列演算データを、前記主記憶装置以外の主記憶装置から自己の主記憶装置へ転送処理するためのI/Oスレッドを、前記各演算処理装置に作成することをさせ
    前記複数のノードの各演算処理装置、前記I/Oスレッドを実行して、演算処理装置が分担する並列演算データを、前記主記憶装置以外の主記憶装置から自己の主記憶装置へ転送する処理を分散して行うことをさせるための
    報処理装置の制御プログラム。
JP2014147499A 2014-07-18 2014-07-18 情報処理装置、情報処理装置の制御方法および情報処理装置の制御プログラム Active JP6582367B2 (ja)

Priority Applications (3)

Application Number Priority Date Filing Date Title
JP2014147499A JP6582367B2 (ja) 2014-07-18 2014-07-18 情報処理装置、情報処理装置の制御方法および情報処理装置の制御プログラム
US14/712,950 US9697123B2 (en) 2014-07-18 2015-05-15 Information processing device, control method of information processing device and control program of information processing device
EP15167947.9A EP2975520A1 (en) 2014-07-18 2015-05-18 Information processing device, control method of information processing device and control program of information processing device

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
JP2014147499A JP6582367B2 (ja) 2014-07-18 2014-07-18 情報処理装置、情報処理装置の制御方法および情報処理装置の制御プログラム

Publications (2)

Publication Number Publication Date
JP2016024578A JP2016024578A (ja) 2016-02-08
JP6582367B2 true JP6582367B2 (ja) 2019-10-02

Family

ID=53274392

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2014147499A Active JP6582367B2 (ja) 2014-07-18 2014-07-18 情報処理装置、情報処理装置の制御方法および情報処理装置の制御プログラム

Country Status (3)

Country Link
US (1) US9697123B2 (ja)
EP (1) EP2975520A1 (ja)
JP (1) JP6582367B2 (ja)

Families Citing this family (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
WO2017011223A1 (en) * 2015-07-10 2017-01-19 Rambus, Inc. Thread associated memory allocation and memory architecture aware allocation
KR102509988B1 (ko) * 2015-12-15 2023-03-14 삼성전자주식회사 커넥션 기반 로드 밸런싱을 위한 저장 시스템 및 방법
WO2018220855A1 (ja) * 2017-06-02 2018-12-06 富士通コネクテッドテクノロジーズ株式会社 演算処理装置、演算処理制御方法及び演算処理制御プログラム
FR3121289B1 (fr) * 2021-03-26 2023-06-30 Schneider Electric Ind Sas Armoire électrique de raccordement

Family Cites Families (13)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPH07182298A (ja) 1993-12-22 1995-07-21 Canon Inc 情報処理方法及び装置
US6163806A (en) 1997-06-30 2000-12-19 Sun Microsystems, Inc. System and method for transparent, global access to physical devices on a computer cluster
US6167437A (en) 1997-09-02 2000-12-26 Silicon Graphics, Inc. Method, system, and computer program product for page replication in a non-uniform memory access system
US6389513B1 (en) 1998-05-13 2002-05-14 International Business Machines Corporation Disk block cache management for a distributed shared memory computer system
US6701421B1 (en) 2000-08-17 2004-03-02 International Business Machines Corporation Application-level memory affinity control
US6658538B2 (en) 2001-06-21 2003-12-02 International Business Machines Corporation Non-uniform memory access (NUMA) data processing system having a page table including node-specific data storage and coherency control
JP3892829B2 (ja) * 2003-06-27 2007-03-14 株式会社東芝 情報処理システムおよびメモリ管理方法
JP4063256B2 (ja) 2004-06-28 2008-03-19 日本電気株式会社 計算機クラスタシステムとそれにおける管理方法、及びプログラム
JP2006163516A (ja) * 2004-12-02 2006-06-22 Fujitsu Ltd ネットワーク装置、ファイバーチャネルスイッチおよび共用メモリアクセス制御方法
US20090320036A1 (en) * 2008-06-19 2009-12-24 Joan Marie Ries File System Object Node Management
JP5664347B2 (ja) 2011-03-04 2015-02-04 ソニー株式会社 仮想メモリシステム、仮想メモリの制御方法、およびプログラム
JP5707265B2 (ja) * 2011-07-20 2015-04-22 ルネサスエレクトロニクス株式会社 演算制御装置及び演算制御方法並びにプログラム、並列プロセッサ
JP5174941B2 (ja) 2011-07-22 2013-04-03 株式会社日立製作所 仮想計算機の制御方法

Also Published As

Publication number Publication date
US20160019150A1 (en) 2016-01-21
EP2975520A1 (en) 2016-01-20
US9697123B2 (en) 2017-07-04
JP2016024578A (ja) 2016-02-08

Similar Documents

Publication Publication Date Title
US11550627B2 (en) Hardware accelerated dynamic work creation on a graphics processing unit
US9229765B2 (en) Guarantee real time processing of soft real-time operating system by instructing core to enter a waiting period prior to transferring a high priority task
JP6582367B2 (ja) 情報処理装置、情報処理装置の制御方法および情報処理装置の制御プログラム
JP2008204487A (ja) アウトオブオーダdramシーケンサ
TW200925871A (en) Dynamic logical data channel assignment using time-grouped allocations
US10073783B2 (en) Dual mode local data store
US20120185672A1 (en) Local-only synchronizing operations
US10198365B2 (en) Information processing system, method and medium
US10235208B2 (en) Technique for saving and restoring thread group operating state
JP2006085428A (ja) 並列処理システム、インタコネクションネットワーク、ノード及びネットワーク制御プログラム
US11481250B2 (en) Cooperative workgroup scheduling and context prefetching based on predicted modification of signal values
JP5254710B2 (ja) データ転送装置、データ転送方法およびプロセッサ
TWI783401B (zh) 記憶體管理方法和相關產品
JP2006268753A (ja) Dma回路及びコンピュータシステム
JP7225904B2 (ja) ベクトル演算処理装置、ベクトル演算処理装置による配列変数初期化方法、及び、ベクトル演算処理装置による配列変数初期化プログラム
JP5376042B2 (ja) マルチコアプロセッサシステム、スレッド切り替え制御方法、およびスレッド切り替え制御プログラム
JP6364827B2 (ja) 情報処理装置、及び、そのリソースアクセス方法、並びに、リソースアクセスプログラム
JP5847313B2 (ja) 情報処理装置
CN109597770B (zh) 半导体装置和半导体装置中使用的方法
JP7003752B2 (ja) データ転送装置、データ転送方法、プログラム
JP2009015569A (ja) デバイスへのアクセス制御方法および処理装置
JP2023501069A (ja) 選択不可能なスケジューラキューの後のレジスタリネーミング
JP5582241B2 (ja) マルチコアプロセッサシステム、マルチコアプロセッサシステムの制御方法、およびマルチコアプロセッサシステムの制御プログラム
JPS62117056A (ja) マルチタスク処理方式
JP2018120417A (ja) 仮想計算機制御装置、仮想計算機制御方法、および、仮想計算機制御プログラム

Legal Events

Date Code Title Description
A621 Written request for application examination

Free format text: JAPANESE INTERMEDIATE CODE: A621

Effective date: 20170406

A977 Report on retrieval

Free format text: JAPANESE INTERMEDIATE CODE: A971007

Effective date: 20180501

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20180529

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20180726

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20190108

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20190308

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

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20190819

R150 Certificate of patent or registration of utility model

Ref document number: 6582367

Country of ref document: JP

Free format text: JAPANESE INTERMEDIATE CODE: R150