JP2014164667A - リストベクトル処理装置、リストベクトル処理方法、プログラム、コンパイラ、及び、情報処理装置 - Google Patents

リストベクトル処理装置、リストベクトル処理方法、プログラム、コンパイラ、及び、情報処理装置 Download PDF

Info

Publication number
JP2014164667A
JP2014164667A JP2013037233A JP2013037233A JP2014164667A JP 2014164667 A JP2014164667 A JP 2014164667A JP 2013037233 A JP2013037233 A JP 2013037233A JP 2013037233 A JP2013037233 A JP 2013037233A JP 2014164667 A JP2014164667 A JP 2014164667A
Authority
JP
Japan
Prior art keywords
access information
information
list vector
processing apparatus
value
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
JP2013037233A
Other languages
English (en)
Other versions
JP5522283B1 (ja
Inventor
Satoshi Tagaya
聡 多賀谷
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.)
NEC Corp
Original Assignee
NEC Corp
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 NEC Corp filed Critical NEC Corp
Priority to JP2013037233A priority Critical patent/JP5522283B1/ja
Priority to US14/188,563 priority patent/US9424032B2/en
Application granted granted Critical
Publication of JP5522283B1 publication Critical patent/JP5522283B1/ja
Publication of JP2014164667A publication Critical patent/JP2014164667A/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/30036Instructions to perform operations on packed data, e.g. vector, tile or matrix operations
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F17/00Digital computing or data processing equipment or methods, specially adapted for specific functions
    • G06F17/10Complex mathematical operations
    • G06F17/16Matrix or vector computation, e.g. matrix-matrix or matrix-vector multiplication, matrix factorization
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30003Arrangements for executing specific machine instructions
    • G06F9/30007Arrangements for executing specific machine instructions to perform operations on data operands
    • G06F9/30032Movement instructions, e.g. MOVE, SHIFT, ROTATE, SHUFFLE
    • 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/3004Arrangements for executing specific machine instructions to perform operations on memory
    • G06F9/30043LOAD or STORE instructions; Clear instruction
    • 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/44Arrangements for executing specific programs
    • G06F9/448Execution paradigms, e.g. implementations of programming paradigms

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • Software Systems (AREA)
  • General Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • Mathematical Physics (AREA)
  • Data Mining & Analysis (AREA)
  • Computational Mathematics (AREA)
  • Mathematical Analysis (AREA)
  • Mathematical Optimization (AREA)
  • Pure & Applied Mathematics (AREA)
  • Computing Systems (AREA)
  • Algebra (AREA)
  • Databases & Information Systems (AREA)
  • Complex Calculations (AREA)

Abstract

【課題】リストベクトル処理において、間接参照処理を高速に実施する。
【解決手段】リストベクトル処理装置101は、記憶装置から読み取る記憶領域を指し示すアドレスを記憶するリストベクトルに従い、複数の情報処理装置のうち、自情報処理装置のみがアクセスする記憶領域における値をレジスタに読み取る処理と、前記自情報処理装置と他情報処理装置とがともにアクセスする記憶領域であるか否かを表す参照アクセス情報を作成する処理とを指示する第1ギャザ命令109を処理するギャザ処理部102と、関連情報を通信する通信部103と、情報処理装置がアクセスする領域を算出するアクセス情報演算部104と、レジスタが記憶する値を、前記記憶装置における前記リストベクトルが指し示す記憶領域のうち、前記自情報処理装置のみがアクセスする記憶領域に保存する命令である第1スキャタ命令110を処理するスキャタ処理部105とを備える。
【選択図】図1

Description

本発明は、リストベクトルを高速に処理するリストベクトル処理装置等に関する。
1台のプロセッサ(情報処理装置)あたりの処理性能は、年々向上しているが、その性能向上は鈍化している。マルチコア(メニーコア、multi−core、many−core)技術は、さらに高い性能向上を達成する1つの技術であり、複数のコアが並列に所望の処理を行う技術である。マルチコア技術において、処理性能をより向上させるためには、並列効率を高くすることが重要である。
数値シミュレーションは、ユーザがプロセッサに対して高い処理性能を要求する分野の1つである。例えば、構造解析において、ユーザは、シミュレーションする対象(例えば、建物)を、偏微分方程式を用いて表現することにより、該対象をシミュレーションする。ユーザは、情報処理装置上でシミュレーションするために、該偏微分方程式を離散化する。例えば、有限要素法などを適用することにより、偏微分方程式は、大規模疎行列を係数行列として有する連立一次方程式に変換される。
その場合、該係数行列には、非ゼロ要素がランダムに出現する。ゼロ要素と変数との掛け算は、理論的に無駄な演算である。そのため、非ゼロ要素だけをアクセスすることにより無駄な演算を減らす手法として、リストベクトルを用いて演算する手法が知られている。該リストベクトルは、該係数行列における非ゼロ要素のみを記憶する配列である。
例えば、リストベクトルを処理するプログラムは、プログラム1である。
Do i=1,K×N S(A(i))=S(A(i))+X(i)(ただし、K、Nは、正の整数、Sは配列、Aはリストベクトル、Xは変数を表す。)・・・(プログラム1)、
プログラム1において、配列Sは、M個の要素を有するとする。その場合、1≦A(j)≦M(ただし、1≦i≦K×N)である。
プログラム1は、配列Sの要素のうち、リストベクトルAの第1乃至N要素が指し示す要素の値を更新及び参照する処理である。
情報処理装置は、リストベクトルAが指し示す値に従い、配列Sの値を主記憶装置からレジスタへ読み込むとともに、レジスタが記憶する値を主記憶装置へ書き込む。リストベクトルAが指し示す値に従い、レジスタが記憶する値を主記憶装置へ書き込む命令は、スキャタ(scatter)命令と呼ばれる。また、リストベクトルAが指し示す値に従い、配列Sの値を主記憶装置からレジスタへ読み込む命令は、ギャザ(gather)命令と呼ばれる。
すなわち、ギャザ命令は、主記憶装置が記憶する配列Sにおける第A(i)(ただし、1≦i≦K×N)要素の値をレジスタに読み取る命令である(プログラム1の右辺におけるS(A(i))に関する処理)。一方、スキャタ命令は、レジスタから、主記憶装置上の配列Sにおける第A(i)(ただし、1≦i≦K×N)要素に値を保存する命令である(プログラム1の左辺におけるS(A(i))に関する処理)。
プログラム1が表すプログラムを並列に処理する場合、例えば、第k(ただし、1≦k≦K)コアは、それぞれ、配列Aの第N×(k−1)+1乃至N×k要素に関する処理を実施する。各コアは、上記のように、分割されたスキャタ命令、及び、分割されたギャザ命令を処理する。
特許文献1乃至特許文献3は、プログラムを並列に処理する技術を開示する。
特許文献1が開示するコンパイラは、分散メモリプロセッサシステムにおいて、リストベクトルを含むソースプログラムを、並列化されたオブジェクトプログラムに変換する。該コンパイラは、各プロセッサが参照するリストベクトルに関する情報を収集するための前処理命令を、オブジェクトプログラムに挿入する。該コンパイラは、さらに、該前処理命令が収集する情報に基づいて、並列化に必要な通信を実施するオブジェクトプログラムを挿入する。
特許文献2は、LU分解処理などの反復処理を並列計算機でより短時間に実行可能にする実行方法を開示する。LU分解処理は、疎行列とは異なる密行列を係数行列として有する連立一次方程式を求解する方法である。
特許文献3が開示するコンパイラは、ユーザが指示する分割方法に応じて、リストベクトルを処理するソースプログラムを、並列化されたオブジェクトプログラムに変換する。
特開平11−203256号公報 特開平08−227405号公報 特開平07−044508号公報
例えば、複数の情報処理装置がプログラム1に示すプログラムを並列に処理する場合に、各情報処理装置は、1つの変数を参照及び更新する。1つの変数を参照し合うプログラムを並列化するために、コンパイラは、各情報処理装置における処理をスケジューリングする必要がある。しかしながら、コンパイラは、リストベクトルにおいて参照する要素を解析する機能を有さないため、ユーザを介することなくスケジューリングすることができない。その結果、コンパイラは、該プログラムを逐次的に処理するオブジェクトプログラムに変換する。
特許文献1が開示するコンパイラは、入力されたプログラムを、上述した前処理命令を逐次的に処理するオブジェクトプログラムに変換する。その結果、十分な並列化効率を達成することができない。
特許文献2が開示する方法は、リストベクトルを処理する方式に適用することができない。
特許文献3が開示するコンパイラにおいて、ユーザは、リストベクトルが参照する配列の要素ごとに、所望の処理を割り当てる情報処理装置を決める必要がある。そのため、ユーザが該分割を算出する処理に時間を要する。
そこで、本発明の主たる目的は、例えば、リストベクトル等の間接参照処理を、高速に実施するリストベクトル処理装置等を提供することである。
前述の目的を達成するために、本発明に係るリストベクトル処理装置は、以下の構成を備えることを特徴とする。
即ち、本発明に係るリストベクトル処理装置は、
記憶装置から読み取る記憶領域を指し示すアドレスを記憶するリストベクトルに従い、複数の情報処理装置のうち、自情報処理装置のみがアクセスする記憶領域における値をレジスタに読み取る処理と、前記自情報処理装置と他情報処理装置とがともにアクセスする記憶領域であるか否かを表す参照アクセス情報を作成する処理とを指示する第1ギャザ命令に応じて、前記リストベクトルに従いアクセスする記憶領域を所定の分割方法に従って、論理的に複数の小領域に分割し、分割したそれぞれの前記小領域にアクセスするか否かを表すアクセス情報を作成するとともに、前記自情報処理装置が前記リストベクトルに従いアクセスする複数のアドレスから、前記所定の分割方法に応じた所定の対応情報に基づいて、特定の小領域を算出し、前記アクセス情報において、前記特定の小領域に関連付けされた値を、アクセスすることを表す値に更新するとともに、前記記憶装置において前記リストベクトルが指し示す記憶領域のうち、前記自情報処理装置のみがアクセスする記憶領域における値をレジスタに読み取るギャザ処理部と、
前記自情報処理装置が更新した前記アクセス情報を自アクセス情報として前記他情報処理装置に送信し、前記他情報処理装置が送信した前記アクセス情報を、他アクセス情報として受信する通信部と、
前記自アクセス情報と、前記他アクセス情報とに基づいて、所定の算出方法に従い、前記自情報処理装置と前記他情報処理装置とがともにアクセスする前記小領域を算出するとともに、該算出した小領域を参照小領域とし、前記複数の小領域が前記参照小領域であるか否かを表す前記アクセス情報を算出し、該算出した前記アクセス情報を参照アクセス情報とするアクセス情報演算部と、
レジスタが記憶する値を、前記記憶装置における前記リストベクトルが指し示す記憶領域のうち、前記自情報処理装置のみがアクセスする記憶領域に保存する命令である第1スキャタ命令に応じて、前記レジスタが記憶する値を、前記参照アクセス情報に基づき、前記リストベクトルが指し示す記憶領域のうち、前記参照小領域ではない記憶領域に保存するスキャタ処理部と
を備えることを特徴とする。
また、本発明の他の見地として、本発明に係るリストベクトル処理方法は、
記憶装置から読み取る記憶領域を指し示すアドレスを記憶するリストベクトルに従い、複数の情報処理装置のうち、自情報処理装置のみがアクセスする記憶領域における値をレジスタに読み取る処理と、前記自情報処理装置と他情報処理装置とがともにアクセスする記憶領域であるか否かを表す参照アクセス情報を作成する処理とを指示する第1ギャザ命令に応じて、前記リストベクトルに従いアクセスする記憶領域を所定の分割方法に従って、論理的に複数の小領域に分割し、分割したそれぞれの前記小領域にアクセスするか否かを表すアクセス情報を作成するとともに、前記自情報処理装置が前記リストベクトルに従いアクセスする複数のアドレスから、前記所定の分割方法に応じた所定の対応情報に基づいて、特定の小領域を算出し、前記アクセス情報において、前記特定の小領域に関連付けされた値を、アクセスすることを表す値に更新するとともに、前記記憶装置において前記リストベクトルが指し示す記憶領域のうち、前記自情報処理装置のみがアクセスする記憶領域における値をレジスタに読み取り、前記自情報処理装置が更新した前記アクセス情報を自アクセス情報として前記他情報処理装置に送信し、前記他情報処理装置が送信した前記アクセス情報を、他アクセス情報として受信し、前記自アクセス情報と、前記他アクセス情報とに基づいて、所定の算出方法に従い、前記自情報処理装置と前記他情報処理装置とがともにアクセスする前記小領域を算出するとともに、該算出した小領域を参照小領域とし、前記複数の小領域が前記参照小領域であるか否かを表す前記アクセス情報を算出し、該算出した前記アクセス情報を参照アクセス情報とし、レジスタが記憶する値を、前記記憶装置における前記リストベクトルが指し示す記憶領域のうち、前記自情報処理装置のみがアクセスする記憶領域に保存する命令である第1スキャタ命令に応じて、前記レジスタが記憶する値を、前記参照アクセス情報に基づき、前記リストベクトルが指し示す記憶領域のうち、前記参照小領域ではない記憶領域に保存する
ことを特徴とする。
本発明に係るリストベクトル処理装置等によれば、例えば、リストベクトル等の間接参照処理を高速に実施することができる。
第1の実施形態に係るリストベクトル処理装置が有する構成を示すブロック図である。 第1の実施形態に係るギャザ処理部における処理の流れを示すフローチャートである。 第1の実施形態に係る通信部における処理の流れを示すフローチャートである。 第1の実施形態に係るアクセス情報を概念的に表す図である。 本発明の第2の実施形態に係るリストベクトル処理装置が有する構成を示すブロック図である。 本発明の第2の実施形態に係る第2ギャザ処理部における処理の流れを示すフローチャートである。 本発明の第2の実施形態に係る第2スキャタ処理部における処理の流れを示すフローチャートである。 本発明の第3の実施形態に係るアクセス情報演算部が有する構成を示すブロック図である。 本発明の第3の実施形態に係るアクセス制御部における処理の流れを示すフローチャートである。 本発明の第3の実施形態に係る論理和演算部における処理の流れを示すフローチャートである。 本発明の第3の実施形態に係る論理積演算部における処理の流れを示すフローチャートである。 本実施形態に係るリストベクトル処理装置が行う処理のタイミングを表すシーケンス図である。 コンパイラがプログラム3に対して出力するオブジェクトプログラムの一例を概念的に表す図である。 VR0が記憶する値の一例を概念的に表す図である。 VR1が記憶するアドレスの一例を概念的に表す図である。 アクセス情報を算出する過程を模式的に表す図である。
次に、発明を実施するための最良の形態について図面を参照して詳細に説明する。
<第1の実施形態>
本発明の第1の実施形態に係るリストベクトル処理装置101が有する構成と、リストベクトル処理装置101が行う処理とについて、図1乃至図3を参照しながら、プログラム1を例として説明する。図1は、第1の実施形態に係るリストベクトル処理装置101が有する構成を示すブロック図である。図2は、第1の実施形態に係るギャザ処理部102における処理の流れを示すフローチャートである。図3は、第1の実施形態に係る通信部103における処理の流れを示すフローチャートである。
プロセッサ108は、スレッド(thread)を実行する複数のコア106が通信ネットワーク107を介して情報をやり取りする構成を有する。コア106は、本実施形態に係るリストベクトル処理装置101を有する。リストベクトル処理装置101は、ギャザ処理部102と、通信部103と、アクセス情報演算部104と、スキャタ処理部105とを有する。
以下の説明においては、プログラム1が並列化されており、第k(ただし、1≦k≦K)コア106は、それぞれ、配列Aの第N×(k−1)+1乃至N×k要素に関する更新処理を実施するとする。第kコアが行う処理を、第kリストベクトル処理と表し、第kコアが有するリストベクトル処理装置101を、第kリストベクトル処理装置と表す。
その場合、第kリストベクトル処理は、プログラム2のように表すことができる。
Do i=N×(k−1)+1,N×k S(A(i))=S(A(i))+X(i)・・・(プログラム2)、
プログラム2は、配列Sの要素のうち、リストベクトルAの第(N×(k−1)+1)乃至(N×k)要素が指し示す要素の値を更新及び参照する処理である。
ただし、第k(ただし、1≦k≦K)コア106が処理する範囲は、必ずしも、上述した例のように連続である必要はなく、不連続であっても良い。また、各コア106が、必ずしも、均等な要素数を処理する必要はない。並列化する手法は、既に様々な方法が知られている。そのため、本発明の各実施形態においては説明を省略する。
さらに、Kの値は、必ずしも、プロセッサ108が有するコア106の個数と一致していなくとも良い。
すなわち、本実施形態に係るリストベクトル処理装置101が行う処理は、上述した例に限定されない。以下の各実施形態においても同様である。
配列Sは、所定の分割方法に従って、M(ただし、Mは正の整数)個の小領域に分割されているとする。本実施形態に係るアクセス情報は、配列Sにおける各小領域が参照されるか否かを1と0とに関連付けて表す情報である。その場合、アクセス情報の第mビットの値が1であることは、配列Sにおける第m小領域が参照される状態を表す。また、アクセス情報の第mビットの値が0であることは、配列Sにおける第m小領域が参照されない状態を表す。
図4を参照しながら、上記のアクセス情報について具体的に説明する。図4は、第1の実施形態に係るアクセス情報を概念的に表す図である。
配列Sは、アドレスが0x100000000乃至0x1000FFFFF(ただし「0x」は16進数であることを表す)における512メガバイト(「MB」と表す)に記憶されており、相互に等しい大きさを有する512個の小領域に分割されているとする。その場合、各小領域の大きさは、1MBである。
上述した例の場合、例えば、リストベクトルが記憶する「0x100000008」は、第1小領域における1つのアドレスである。従って、第1小領域が参照されるため、アクセス情報の第1ビットの値は1である。同様に、「0x100200008」が第3小領域における1つのアドレスであるため、アクセス情報の第3ビットの値は1である。さらに、同様に、「0x100000800」が第1小領域における1つのアドレスであるため、アクセス情報の第1ビットの値は1である。以下、同様である。
上述した例においては、アクセス情報を第mビットの値に関連付けしたが、アクセス情報を配列として第m要素に関連付けしても良い。アクセス情報を、配列を用いて表す場合、必ずしも、参照されるか否かに関する情報を0と1とに関連付ける必要はなく、他の値に関連付けてもよい。すなわち、アクセス情報に関する態様は、上述した例に限定されない。以下の各実施形態においても同様である。
所定の分割方法には、例えば、ある大きさで配列Sを分割する方法や、配列SをK等分する方法等がある。所定の分割方法は、上述した方法に限定されない。以下の各実施形態においても同様である。
一方、所定の分割方法に応じて、配列Sの第j(ただし、1≦j≦M)要素から、アクセス情報の第p要素への対応関係が決まる。所定の分割方法に応じて決まる対応関係を表す情報を、所定の対応情報と表す。例えば、所定の対応情報は、配列に保存しても良い。また、所定の分割方法が、配列SをK等分する方法であれば、所定の対応情報は、(i―1)÷K+1(ただし、1≦j≦M、(i―1)÷Kの値は小数以下を切り捨てた値とする)として算出してもよい。
所定の分割方法と同様に、所定の対応情報は、上述した例に限定されない。
次に、第kリストベクトル処理装置101が行う処理について説明する。
第kリストベクトル処理装置101は、一般的なギャザ命令とは異なる第1ギャザ命令109、及び、一般的なスキャタ命令とは異なる第1スキャタ命令110に応じて処理を開始する。第1ギャザ命令109は、記憶装置から読み取る記憶領域を指し示すアドレスを記憶するリストベクトルに従い、複数のコアのうち、自コアのみがアクセスする記憶領域における値をレジスタに読み取る処理と、自コアと他コアとがともにアクセスする記憶領域であるか否かを表す参照アクセス情報を作成する処理とを指示する命令である。一方、第1スキャタ命令110は、レジスタが記憶する値を、記憶装置におけるリストベクトルが指し示す記憶領域のうち、前記自情報処理装置のみがアクセスする記憶領域に保存する命令である。
まず、第k(ただし、1≦k≦K)リストベクトル処理装置101におけるギャザ処理部102は、第1ギャザ命令109を受信する処理に応じて、アクセス情報における値を0に初期化する(ステップS201)。次に、ギャザ処理部102は、リストベクトルA(i)(ただし、N×(k−1)+1≦i≦N×k)の値を記憶するレジスタから該値を読み取る(ステップS202)。次に、ギャザ処理部102は、所定の対応情報に応じて、A(i)の値に関連付けされた小領域の番号を決める(ステップS204)。例えば、該小領域の番号が、pであるとする。次に、ギャザ処理部102は、アクセス情報における第pビットの値を1に設定する(ステップS205)。
ギャザ処理部102は、リストベクトルAの第N×(k−1)+1乃至N×k要素について、ステップS204及びステップS205における処理を繰り返す(ステップS203)。
ギャザ処理部102は、上述したステップS204及びステップS205における処理とともに、主記憶装置から配列Sの第A(i)(ただし、N×(k−1)+1≦i≦N×k)要素を、レジスタに読み取る(ステップS206)。
次に、第kリストベクトル処理装置101における通信部103は、通信部103が処理を行うか否かを表す指示情報111を読み取る(ステップS301)。指示情報111が通信部103における処理を指示する場合(ステップS302にてYESと判定)、第kリストベクトル処理装置101における通信部103は、記憶装置(不図示)にギャザ処理部102が作成するアクセス情報を保存する(ステップS303)とともに、通信ネットワーク107を介して第q(ただし、1≦q≦Kかつq≠k)リストベクトル処理装置101に該アクセス情報を送信する(ステップS304)。
次に、第kリストベクトル処理装置101における通信部103は、第q(ただし、1≦q≦Kかつq≠k)リストベクトル処理装置101が送信するアクセス情報を受信し(ステップS305)、受信したアクセス情報を記憶装置(不図示)に該アクセス情報を保存する(ステップS306)。
指示情報111が通信部103における処理を指示しない場合(ステップS302にてNOと判定)、第kリストベクトル処理装置101における通信部103は、上述した処理を行わない。
以下の説明においては、第kリストベクトル処理装置101におけるギャザ処理部102が作成するアクセス情報を自アクセス情報と表す。さらに、第q(ただし、1≦q≦Kかつq≠k)リストベクトル処理装置101から受信するアクセス情報を他アクセス情報と表す。
次に、本実施形態に係るアクセス情報演算部104が行う処理について説明する。
アクセス情報演算部104は、自アクセス情報と他アクセス情報とに基づいて、所定のマスク生成方法に従い、自コア106及び他コア106がアクセスする参照小領域を算出する。スキャタ処理部105は、複数の小領域における各小領域が、参照小領域であるか否かを表す参照アクセス情報を作成し、作成した参照アクセス情報を記憶装置(不図示)に記憶させても良い。
また、アクセス情報演算部104は、参照小領域に基づいて、自コア106のみがアクセスする小領域を算出し、算出した小領域を独立小領域としてもよい。さらに、スキャタ処理部105は、複数の小領域における各小領域が、独立小領域であるか否かを表す独立アクセス情報を作成し、作成した独立アクセス情報を記憶装置(不図示)に記憶させても良い。
所定のマスク生成方法としては、例えば、複数の他アクセス情報をビットごとに論理和演算を実施し、算出したアクセス情報と自アクセス情報とをビットごとに論理積演算を実施する方法がある。その場合、複数の他アクセス情報間において論理和演算を適用することにより、他コア106がアクセスするアクセス情報を算出することができる。
さらに、算出したアクセス情報と自アクセス情報との間において論理積演算を適用することにより、上述した自コア106及び他コア106がともにアクセスするアクセス情報を算出することができる。すなわち、算出したアクセス情報は、上述した参照小領域であるか否かを表す。
また、所定のマスク生成方法は、自アクセス情報と他アクセス情報とにおいて、自コア106及び他コア106が参照するビットを探すプログラムに従って処理しても良い。すなわち、所定のマスク生成方法は、上述した例に限定されない。
また、例えば、独立小領域は、他アクセス情報のビットごとの否定を算出し、算出した値と自アクセス情報との論理和演算を実施することにより算出することができる。
次に、スキャタ処理部105は、第1スキャタ命令110を受信する処理に応じて、参照アクセス情報に基づき、自コア106が処理する配列Sのうち、自コア106のみがアクセスする要素を、レジスタが記憶する値を主記憶装置に保存する。
特許文献3が開示するコンパイラにおいて、ユーザは、リストベクトルが参照する配列の要素ごとに分割を決定し、該分割をコンパイラに指示する必要がある。該要素ごとに分割を決定する処理が多大な計算時間を必要とするため、該コンパイラは、リストベクトルを効率的に処理することができない。
本実施形態に係るリストベクトル処理装置101は、リストベクトルが参照する配列を小領域に分割し、分割した小領域に関する参照関係を調べる構成を有する。小領域の数が上述した要素数に比べ少ないため、分割を算出する時間は、上述したような一般的な並列化方法より短縮される。
一方、コンパイラは、リストベクトルを処理するプログラムに対し、本実施形態に係る第1スキャタ命令110及び第1ギャザ命令109を含むオブジェクトプログラムを出力する。第1スキャタ命令110及び第1ギャザ命令109は、算出する自コア106のみが参照する小領域を算出する処理をプロセッサ108に指示する。自コア106のみが参照する小領域におけるデータは、相互に参照関係を有していないため、各コア106は、並列に処理することができる。並列に処理することにより、更に、処理時間は短縮する。
すなわち、本実施形態に係るリストベクトル処理装置101によれば、リストベクトル等の間接参照処理を高速に実施することができる。
尚、ギャザ処理部102、通信部103、アクセス情報演算部104、及び、スキャタ処理部105が、異なる処理部であるとして記載したが、制御部が、ギャザ処理部102、通信部103、アクセス情報演算部104、及び、スキャタ処理部105における処理を行っても良い。また、各コア106は、同一の構成を有すると仮定したが、必ずしも、同一の構成を有する必要はない。以下の各実施形態についても同様である。
<第2の実施形態>
次に、上述した第1の実施形態を基本とする第2の実施形態について説明する。
以下の説明においては、本実施形態に係る特徴的な部分を中心に説明すると共に、上述した第1の実施形態と同様な構成については、同一の参照番号を付すことにより、重複する説明を省略する。
図5乃至図7を参照しながら、本発明の第2の実施形態に係るリストベクトル処理装置503が有する構成と、リストベクトル処理装置503が行う処理とについて説明する。図5は、本発明の第2の実施形態に係るリストベクトル処理装置503が有する構成を示すブロック図である。図6は、本発明の第2の実施形態に係る第2ギャザ処理部501における処理の流れを示すフローチャートである。図7は、本発明の第2の実施形態に係る第2スキャタ処理部502における処理の流れを示すフローチャートである。
図5を参照すると、プロセッサ505における各コア504は、リストベクトル処理装置503を有する。更に、リストベクトル処理装置503は、ギャザ処理部102と、通信部103と、スキャタ処理部105と、第2ギャザ処理部501と、第2スキャタ処理部502とを有する。
第2ギャザ命令506及び第2スキャタ命令507は、リストベクトル処理装置503が第1スキャタ命令を処理した後に、起動する命令である。
第2ギャザ命令506は、リストベクトルが指し示す記憶領域のうち、スキャタ処理部105が第1スキャタ命令に応じて参照小領域における値をレジスタに保存する命令である。
第2スキャタ命令507は、レジスタが記憶する値を、リストベクトルが指し示す記憶領域のうち、スキャタ処理部105が第1スキャタ命令に応じて、参照小領域に保存する命令である。
第2ギャザ処理部501は、第2ギャザ命令506を受信する処理に応じて処理を開始する。まず、第2ギャザ処理部501は、所定の分割方法に基づいて、リストベクトルAにおけるA(i)の値に関連付けされた小領域の番号を決める(ステップS601)。次に、第2ギャザ処理部501は、例えば、記憶装置(不図示)における参照アクセス情報を参照することにより、算出した小領域の番号が、参照小領域であるか否かを判定する(ステップS602)。スキャタ処理部105が独立アクセス情報を作成している場合には、第2ギャザ処理部501は、記憶装置(不図示)における独立アクセス情報を参照することにより、該判定を行っても良い。
第2ギャザ処理部501は、算出した小領域が参照小領域である場合に(ステップS602にてYESと判定)、リストベクトルに基づいて主記憶装置からレジスタに値を読み取る(ステップS603)。
第2ギャザ処理部501は、算出した小領域が独立小領域である場合に(ステップS602にてNOと判定)、上述した処理を行わない。
一方、第2スキャタ処理部502は、第2スキャタ命令507を受信するのに応じて処理を開始する。
まず、第2スキャタ処理部502は、レジスタからリストベクトルの値(すなわち、アドレス)を読み取り、所定の対応情報に基づいて、該アドレスを含む小領域を特定する(ステップS701)。例えば、図に示す例において、リストベクトルの値が「0x100000008」である場合、第2スキャタ処理部502は、第1小領域であることを特定する。
次に、第2スキャタ処理部502は、参照アクセス情報を参照することにより、該特定した小領域が参照小領域であるか否かを判定する(ステップS702)。例えば、上述した例において、第2スキャタ処理部502は、参照アクセス情報の第1ビットの値が1である場合に、該特定した小領域が参照小領域であると判定する。
特定した小領域が参照小領域である場合に(ステップS702にてYESと判定)、第2スキャタ処理部502は、レジスタが記憶する値を、リストベクトルに基づいて記憶装置に保存する(ステップS703)。特定した小領域が参照小領域である場合に(ステップS702にてNOと判定)、第2スキャタ処理部502は、上述した処理を行わない。
本発明の第2の実施形態は、本発明の第1の実施形態と同様の構成を有するため、リストベクトル等の間接参照処理を高速に実施することができる。その理由は、上述した理由と同様である。
さらに、本実施形態は、第2ギャザ命令506及び第2スキャタ命令507を処理可能である。第2ギャザ命令506及び第2スキャタ命令507が、参照小領域における処理を可能にする命令であるため、ユーザは、リストベクトル処理装置503が有する構成を意識する必要がなくなる。その結果、ユーザは、容易に高速なプログラムを作成することができる。
<第3の実施形態>
次に、上述した第1の実施形態を基本とする第3の実施形態について説明する。
以下の説明においては、本実施形態に係る特徴的な部分を中心に説明すると共に、上述した第1の実施形態と同様な構成については、同一の参照番号を付すことにより、重複する説明を省略する。
図8乃至図11を参照しながら、本発明の第3の実施形態に係るリストベクトル処理装置が有する構成と、リストベクトル処理装置が行う処理とについて説明する。図8は、本発明の第3の実施形態に係るアクセス情報演算部801が有する構成を示すブロック図である。図9は、本発明の第3の実施形態に係るアクセス制御部804における処理の流れを示すフローチャートである。図10は、本発明の第3の実施形態に係る論理和演算部802における処理の流れを示すフローチャートである。図11は、本発明の第3の実施形態に係る論理積演算部803における処理の流れを示すフローチャートである。
アクセス情報演算部801は、ビットごとに論理和演算を実施する論理和演算部802と、ビットごとに論理積演算を実施する論理積演算部803と、アクセス制御部804とを有する。
記憶部(不図示)は、アクセス情報を記憶可能なアクセス情報キューと、アクセス情報を記憶可能なアクセス情報レジスタと、同期情報を記憶可能な同期カウンタと、スレッドのスレッド番号を記憶可能なスレッド格納レジスタとを有する。
図9乃至図12を参照しながら、通信部(不図示、例えば、図1)及びアクセス情報演算部801おける処理について説明する。図12は、本実施形態に係るリストベクトル処理装置が行う処理のタイミングを表すシーケンス図である。図12は、左から右に行くに従い、時刻が進むことを表す。
各コアにおける通信部は、それぞれ、第1ギャザ部(不図示、例えば、図1)が作成したアクセス情報と、自コアが処理するスレッドのスレッド番号とを、他コアに送信する(ステップS901)。第2スレッドを処理するコアにおける通信部が、第0スレッド、第1スレッドの順に、アクセス情報が読み出す(図12における「スレッド番号」欄)例を用いて説明する。
以下の例において、スレッドは、該スレッドを起動する順序に関連するスレッド番号に関連付けされているとする。また、スレッド番号が小さいスレッドは、より大きいスレッド番号を有するスレッドよりも優先して処理されるものとする。
通信部は、他コアにおける通信部が送信する「スレッドを識別するスレッド番号」と、アクセス情報と、通信ネットワークを経由して受信する(ステップS902)。次に、通信部は、受信したスレッド番号をスレッド格納レジスタに保存する(ステップS903)とともに、受信したアクセス情報をアクセス情報キューに保存する(ステップS904)。本実施形態において、アクセス情報キューは、例えば、アクセス情報を受信可能なエントリを2つ有する。
通信部は、自アクセス情報をアクセス情報レジスタに保存するとともに(図12における「自コアからbitmapレジスタ」欄)、自スレッドのスレッド番号(図12における「自コアからスレッド番号」欄)をスレッド格納レジスタに保存する(図12における「自スレッド番号格納レジスタ」欄)。さらに、通信部は、自分のスレッド番号を同期カウンタに保存する(図12における「同期カウンタ117」欄)。
その後、アクセス情報演算部801は、アクセス情報キューが記憶するスレッド番号を読み出す(ステップS906)。
アクセス制御部804は、スレッド格納レジスタから読み出すスレッド番号と自分のスレッド番号とを比較する(図12における「比較器113」欄、ステップS907)。次に、アクセス制御部804は、読み出したスレッド番号が自スレッド番号よりも小さい場合(自スレッドよりも読み出したスレッド番号に対応するスレッドの方が前に起動されている。ステップS907にてYESと判定)に、有効信号を論理和演算部802(図12における「OR114出力」欄)と同期カウンタとに送信する(図12における「同期カウンタ117」欄。ステップS908)。アクセス制御部804は、アクセス情報に関連付けされたスレッド番号が自スレッド番号よりも大きい場合(ステップS907にてNOと判定)に、該有効信号を送信しない。
アクセス制御部804は、スレッド格納レジスタが記憶するスレッド番号について上述した処理を完了する(ステップS905にてYESと判定)のに応じて、論理積演算部803に演算信号を送る(ステップS909)。
図16を参照しながら、論理和演算部802及び論理積演算部803における処理について説明する。図16は、アクセス情報を算出する過程を模式的に表す図である。
論理和演算部802は、アクセス制御部804からの有効信号に応じて、アクセス情報レジスタからアクセス情報に関する値(ステップS1001)、及び、アクセス情報キューから他アクセス情報を読み出す(ステップS1002)。例えば、論理和演算部802は、ステップS1001において、図16の第1列に示す情報を読み出し、ステップS1002において、図16の第2列及び第3列に示す情報を読み出す。
次に、論理和演算部802は、アクセス情報レジスタから読み出した値と他アクセス情報との論理和を算出し(図12における「OR114出力」欄、ステップS1003)、算出した値をアクセス情報レジスタに保存する(図12における「レジスタ115」欄、ステップS1004)。上述した例において、論理和演算部802は、図16の第2列及び第3列に示す情報の論理和を算出し、図16の第4列に示す情報を算出する。
アクセス制御部804は、有効信号を送信する処理に応じて、同期カウンタから値を読み出し1を減算する(図12における「同期カウンタ117」欄)。アクセス制御部804は、減算した結果を同期カウンタに保存する。アクセス制御部804は、同期カウンタが記憶する値に応じて、演算信号を送信する。
上述した例の場合、同期カウンタが保存する値は、他アクセス情報を参照する回数を表す。該値が1の場合には、論理和演算部802が参照する必要がある他アクセス情報を全て参照した状態を表す。
論理積演算部803は、アクセス制御部804からの演算信号に応じて、アクセス情報レジスタから値を読み出し(ステップS1101)、読み出した値と自アクセス情報との論理積演算をビットごとに実施する(図12における「論理積演算部803」欄、ステップS1102)。
例えば、論理積演算部803は、図16の第4列に示す情報と、図16の第5列に示す情報との論理積演算をビットごとに実施し、該演算した結果(図16の第6列に示す情報)を算出する。
その後、論理積演算部803は、算出した値をアクセス情報レジスタに送信する。その後、アクセス制御部804は、同期終了信号を同期制御部(不図示)に送信する。
同期制御部(不図示)は、同期制御命令及び同期終了信号を受信する場合に、該同期命令に後続する命令を実行する。同期制御部(不図示)は、同期制御命令または同期終了信号を受信しない場合に、上述した処理を行わない。
さらに、より具体的に、プログラム3を例として、本実施形態に係るリストベクトル処理装置の処理について説明する。
Do i=1,768 S(A(i))=S(A(i))+X・・・(プログラム3)、
プログラム3は、ループカウンタiに応じて変化するA(i)の値をリストベクトルとして、S(A(i))の値をメモリから読み出し、S(A(i))の値に1を加えた後、元のS(A(i))のメモリアドレスに書き戻す動作を、768回繰り返す処理を指示する。
配列Sにおける1つの要素は、8バイト長の大きさを有するとする。さらに、主記憶装置は、「アドレス0x100000000」から512MB分の領域に、配列S記憶しているとする。また、各コアが処理するスレッドは、該スレッドが起動された順序に関連するスレッド番号に関連付けされているとする。
3つのスレッドが、プログラム3を並列に実行する一例について説明する。図13は、コンパイラがプログラム3に対して出力するオブジェクトプログラムの一例を概念的に表す図である。3つのスレッドは、それぞれ、図13に示すオブジェクトプログラムを実行する。
まず、該オブジェクトプログラムについて説明する。
各スレッドは、該オブジェクトプログラムを実行する前に、スカラレジスタ(scalar register、以降「SR」と表す)10に、自スレッドが処理する要素番号のうち最小の番号をそれぞれ保存する。
例えば、第1スレッドは、リストベクトルAの第1乃至256要素に関する処理、第2スレッドは、リストベクトルAの第257乃至512要素に関する処理、第3スレッドは、リストベクトルAの第513乃至768要素に関する処理を行うとする。
この場合、第1スレッドは、処理を開始する先頭要素として、SR10に1を保存する。同様に、第1スレッドは、先頭要素として、SR10に257を保存する。さらに、第2スレッドは、SR10に513を保存する。
図13が示すプログラムは、命令1において、スレッドに、リストベクトルAを主記憶装置からレジスタにベクトルロード(以降、「VLD」)させる命令を指示する。各スレッドは、該ベクトルロード命令に応じて、リストベクトルAの中から、SR10が記憶する先頭要素からの256個分の要素を主記憶装置から、ベクトルレジスタ(以降、「VR」と略記する)0へ読み出す。
この段階において、VR0は、それぞれ、リストベクトルAの256個の要素を記憶する。すなわち、第1スレッドは、リストベクトルAの第1乃至256要素を、第2スレッドは、リストベクトルAの第257乃至512要素を、そして、第3スレッドは、リストベクトルAの第513乃至768要素を、それぞれ、VR0に保存する。
例えば、第1スレッドは、VR0に、図14に示すようなリストベクトルを保存する。図14は、VR0が記憶する値の一例を概念的に表す図である。
次に、図13における命令2に示すベクトル加算(「VAD」)命令は、VR0が記憶する値をそれぞれ8倍し、その後、配列Sを指し示す先頭アドレスである値0x100000000をそれぞれ加え、算出した値(例えば、図15)をVR1に格納させる命令である。各スレッドは、命令2に従い、配列Sを指し示すアドレスを生成する。図15は、VR1が記憶するアドレスの一例を概念的に表す図である。
図13における命令3に示す第1ギャザ(「VGT−HB」)命令は、上述したような処理を指示する命令である。ギャザ処理部は、第1ギャザ命令を受信する処理に応じて、主記憶装置において、VR1が記憶する値が指し示す記憶領域から値を読み出し、読み出した値をVR2に保存する。それとともに、ギャザ処理部は、オペランドにおける先頭アドレスである0x100000000と、配列のサイズを指定する値(すなわち、この例では、29=29桁のビット=512MB)とを用いて、アクセス情報を更新する。
通信部は、ギャザ処理部が自アクセス情報を更新する処理に応じて、更新した自アクセス情報を記憶装置に保存する。それとともに、通信部は、該更新した自アクセス情報と、自コアが処理するスレッド番号とを、通信ネットワークを介して、他コアに送信(ブロードキャスト)する。
通信部(不図示)は、他コア内の通信部が送信したアクセス情報とスレッド番号とを受信し、受信したアクセス情報とスレッド番号とをアクセス情報演算部801に送信する。さらに、通信部(不図示)は、受信したアクセス情報とスレッド番号とを、アクセス情報キューに保存する。
命令4(図13)におけるベクトル乗算命令(「VFAD」)は、VR2が記憶する値に、Xを加算し、算出した結果をVR3に書き込む命令である。
命令5(図13)における同期命令(「BSAND」)は、アクセス情報演算部801が独立小領域を算出するまで、後続の処理を停止する同期命令である。同期命令を処理する同期制御部(不図示)は、アクセス制御部804が送信する同期終了信号に応じて、後続の処理を停止するか否かを判定する。すなわち、同期制御部(不図示)は、アクセス制御部804から該同期終了信号を受信した場合には、後続の処理を実施する信号を送信する。同期制御部は、アクセス制御部804から該同期終了信号を受信しない場合には、後続の処理を実施しない信号を送信する。
命令6(図13)における第1スキャタ(「VSC−HM」)命令は、レジスタが記憶する値を、主記憶装置(不図示)において、リストベクトルが指し示す記憶領域のうち独立小領域に保存する命令である。
スキャタ処理部(不図示)は、リストベクトルから算出したアドレスの上位ビットを、例えば、比較レジスタに格納する。上述した例の場合、この処理は、アドレスが指し示す小領域を算出する処理である。次に、スキャタ処理部(不図示)は、比較レジスタが記憶する値と、算出したアドレス情報とを比較する。該2つの値が一致する場合、該アドレスは、参照小領域にあるデータを指し示す。スキャタ処理部(不図示)は、該2つの値が一致しない場合、該アドレスが指し示す領域に、レジスタが記憶する値を保存する。一方、スキャタ処理部(不図示)は、該2つの値が一致する場合、レジスタの値を、主記憶装置(不図示)に保存しない。
例えば、上述した処理は、シフト演算を用いることにより実現することができる。上述した例の場合、「VGT−HB」命令におけるオペランドが29であるため、配列Sのサイズは、512MB(512MB=29桁のビット)である。ギャザ処理部(不図示)は、配列Sのサイズ29から9を引くことにより、アクセス情報の大きさを算出する。次に、ギャザ処理部(不図示)は、算出した値20を、ビットを上位ビット側にシフトするシフタに送ることにより、2進値「111111111b」を20だけ上位ビット側にシフトする。その後、ギャザ処理部(不図示)は、シフトしたビットに相当する下位ビットに0を書き込む。上述した処理により、ギャザ処理部は、領域を512分割した単位において、算出したアドレスが参照小領域を指し示すか否かを判定する。
本発明の第3の実施形態は、本発明の第1の実施形態と同様の構成を有するため、リストベクトル等の間接参照処理を高速に実施することができる。その理由は、上述した理由と同様である。
さらに、本実施形態は、論理和演算部802及び論理積演算部803等を備える。従って、本実施形態によれば、参照アクセス情報を、論理和演算及び論理積演算により少ない演算回数で算出する。その結果、本実施形態によれば、リストベクトル等の間接参照処理をさらに高速に実施することができる。
尚、プログラム3を例として本実施形態の動作を説明したが、第1配列が第2配列における要素を指し示すリストベクトルに関する処理にも適用できる。本実施形態は、上述した例に限定されない。
さらに、上述した例においては、全てのコアが上述した処理を実施するとしたが、プロセッサにおける一部のコアのみが上述した処理を実施しても良い。
なお、本発明は上述した実施形態に限定されるものではなく、その実施に際して様々な変形が可能である。
例えば、上述した各実施形態の一部又は全部は、以下の付記のようにも記載されうるが、以下の付記に限定されるものではない。
(付記1)
記憶装置から読み取る記憶領域を指し示すアドレスを記憶するリストベクトルに従い、複数の情報処理装置のうち、自情報処理装置のみがアクセスする記憶領域における値をレジスタに読み取る処理と、前記自情報処理装置と他情報処理装置とがともにアクセスする記憶領域であるか否かを表す参照アクセス情報を作成する処理とを指示する第1ギャザ命令に応じて、前記リストベクトルに従いアクセスする記憶領域を所定の分割方法に従って、論理的に複数の小領域に分割し、分割したそれぞれの前記小領域にアクセスするか否かを表すアクセス情報を作成するとともに、前記自情報処理装置が前記リストベクトルに従いアクセスする複数のアドレスから、前記所定の分割方法に応じた所定の対応情報に基づいて、特定の小領域を算出し、前記アクセス情報において、前記特定の小領域に関連付けされた値を、アクセスすることを表す値に更新するとともに、前記記憶装置において前記リストベクトルが指し示す記憶領域のうち、前記自情報処理装置のみがアクセスする記憶領域における値をレジスタに読み取るギャザ処理部と、
前記自情報処理装置が更新した前記アクセス情報を自アクセス情報として前記他情報処理装置に送信し、前記他情報処理装置が送信した前記アクセス情報を、他アクセス情報として受信する通信部と、
前記自アクセス情報と、前記他アクセス情報とに基づいて、所定の算出方法に従い、前記自情報処理装置と前記他情報処理装置とがともにアクセスする前記小領域を算出するとともに、該算出した小領域を参照小領域とし、前記複数の小領域が前記参照小領域であるか否かを表す前記アクセス情報を算出し、該算出した前記アクセス情報を参照アクセス情報とするアクセス情報演算部と、
レジスタが記憶する値を、前記記憶装置における前記リストベクトルが指し示す記憶領域のうち、前記自情報処理装置のみがアクセスする記憶領域に保存する命令である第1スキャタ命令に応じて、前記レジスタが記憶する値を、前記参照アクセス情報に基づき、前記リストベクトルが指し示す記憶領域のうち、前記参照小領域ではない記憶領域に保存するスキャタ処理部と
を備えるリストベクトル処理装置。
(付記2)
前記記憶装置において、前記リストベクトルが指し示す記憶領域のうち、前記参照小領域における値を前記レジスタに読み取る第2ギャザ命令に応じて、前記参照アクセス情報に基づき、前記記憶装置において前記リストベクトルが指し示す記憶領域のうち、前記参照小領域における値を、前記レジスタに保存する第2ギャザ処理部と、
前記レジスタが記憶する値を、前記リストベクトルが指し示す記憶領域のうち、前記参照小領域に保存する命令である第2スキャタ命令に応じて、前記参照アクセス情報に基づき、前記レジスタが記憶する値を、前記リストベクトルが指し示す記憶領域のうち前記参照小領域に保存する第2スキャタ処理部と
を更に備える
付記1に記載のリストベクトル処理装置。
(付記3)
前記アクセス情報演算部は、
ビットごとに論理和を算出する論理和演算部と、ビットごとに論理積を算出する論理積演算部と、アクセス制御部と
を備え、
スレッドは、該スレッドを起動する順序に関連するスレッド番号に関連付けされており、
前記通信部は、前記自アクセス情報とともに、前記自情報処理装置が処理する前記スレッドの前記スレッド番号を、前記他情報処理装置に送信し、さらに、前記他アクセス情報及び前記スレッド番号を受信し、受信した前記他アクセス情報をアクセス情報キューに保存するとともに、受信した前記スレッド番号をスレッド格納レジスタに保存し、
前記アクセス制御部は、前記スレッド格納レジスタが記憶する前記スレッド番号と、前記自情報処理装置が処理する前記スレッドの前記スレッド番号とを順次比較し、前記自情報処理装置が処理する前記スレッドの前記スレッド番号が、前記スレッド格納レジスタが記憶する前記スレッド番号よりも小さい場合に、前記論理和演算部に有効信号を送信し、
前記論理和演算部は、前記アクセス制御部が送信する前記有効信号に応じて、アクセス情報レジスタが記憶する値、及び、前記アクセス情報キューから前記他アクセス情報を読み出し、読み出した前記値と、読み出した前記他アクセス情報との論理和をビットごとに算出し、該算出した値を前記アクセス情報レジスタに保存し、
前記アクセス制御部は、前記スレッド格納レジスタが記憶する前記スレッド番号に関する処理が終了するに応じて、前記論理積演算部に演算信号を送信し、
前記論理積演算部は、前記アクセス制御部が送信する前記演算信号に応じて、前記アクセス情報レジスタから値を読み出し、読み出した該値と、前記自アクセス情報との論理積をビットごとに算出し、該算出した値に基づいて、前記参照アクセス情報を算出する
付記1または付記2に記載のリストベクトル処理装置。
(付記4)
前記アクセス制御部は、前記論理積演算部が前記参照小領域を算出する処理に応じて、前記参照小領域を算出する処理が完了したことを表す同期信号を送信する
付記3に記載のリストベクトル処理装置
(付記5)
前記アクセス情報演算部は、前記参照アクセス情報に基づいて、さらに、前記記憶装置において、前記自情報処理装置のみがアクセスする前記小領域を独立小領域として算出し、前記複数の小領域が前記独立小領域であるか否かを表す独立アクセス情報を生成し、
前記スキャタ処理部は、前記独立アクセス情報に基づいて、前記レジスタが記憶する値を、前記リストベクトルが指し示す記憶領域のうち、前記独立小領域に保存する
付記2乃至付記4のいずれかに記載のリストベクトル処理装置。
(付記6)
前記所定の分割方法は、前記リストベクトルが指し示す記憶領域を、所定の単位にて分割する方法である
付記1乃至付記5のいずれかに記載のリストベクトル処理装置。
(付記7)
前記所定の単位は、前記リストベクトルが指し示す記憶領域の大きさを、前記情報処理装置の数で割った値とする
付記7に記載のリストベクトル処理装置。
(付記8)
記憶装置から読み取る記憶領域を指し示すアドレスを記憶するリストベクトルに従い、複数の情報処理装置のうち、自情報処理装置のみがアクセスする記憶領域における値をレジスタに読み取る処理と、前記自情報処理装置と他情報処理装置とがともにアクセスする記憶領域であるか否かを表す参照アクセス情報を作成する処理とを指示する第1ギャザ命令に応じて、前記リストベクトルに従いアクセスする記憶領域を所定の分割方法に従って、論理的に複数の小領域に分割し、分割したそれぞれの前記小領域にアクセスするか否かを表すアクセス情報を作成するとともに、前記自情報処理装置が前記リストベクトルに従いアクセスする複数のアドレスから、前記所定の分割方法に応じた所定の対応情報に基づいて、特定の小領域を算出し、前記アクセス情報において、前記特定の小領域に関連付けされた値を、アクセスすることを表す値に更新するとともに、前記記憶装置において前記リストベクトルが指し示す記憶領域のうち、前記自情報処理装置のみがアクセスする記憶領域における値をレジスタに読み取り、前記自情報処理装置が更新した前記アクセス情報を自アクセス情報として前記他情報処理装置に送信し、前記他情報処理装置が送信した前記アクセス情報を、他アクセス情報として受信し、前記自アクセス情報と、前記他アクセス情報とに基づいて、所定の算出方法に従い、前記自情報処理装置と前記他情報処理装置とがともにアクセスする前記小領域を算出するとともに、該算出した小領域を参照小領域とし、前記複数の小領域が前記参照小領域であるか否かを表す前記アクセス情報を算出し、該算出した前記アクセス情報を参照アクセス情報とし、レジスタが記憶する値を、前記記憶装置における前記リストベクトルが指し示す記憶領域のうち、前記自情報処理装置のみがアクセスする記憶領域に保存する命令である第1スキャタ命令に応じて、前記レジスタが記憶する値を、前記参照アクセス情報に基づき、前記リストベクトルが指し示す記憶領域のうち、前記参照小領域ではない記憶領域に保存する
リストベクトル処理方法。
(付記9)
前記第1スキャタ命令を指示するプログラム。
(付記10)
前記第1ギャザ命令を指示するプログラム。
(付記11)
前記第2スキャタ命令を指示するプログラム。
(付記12)
前記第2ギャザ命令を指示するプログラム。
(付記13)
前記第1スキャタ命令を含むオブジェクトプログラムを出力するコンパイラ。
(付記14)
前記第1ギャザ命令を含むオブジェクトプログラムを出力するコンパイラ。
(付記15)
前記第2スキャタ命令を含むオブジェクトプログラムを出力するコンパイラ。
(付記16)
前記第2ギャザ命令を含むオブジェクトプログラムを出力するコンパイラ。
(付記17)
前記第1スキャタ命令を含むオブジェクトプログラムを実行する情報処理装置。
(付記18)
前記第1ギャザ命令を含むオブジェクトプログラムを実行する情報処理装置。
(付記19)
前記第2スキャタ命令を含むオブジェクトプログラムを実行する情報処理装置。
(付記20)
前記第2ギャザ命令を含むオブジェクトプログラムを実行する情報処理装置。
101 リストベクトル処理装置
102 ギャザ処理部
103 通信部
104 アクセス情報演算部
105 スキャタ処理部
106 コア
107 通信ネットワーク
108 プロセッサ
109 第1ギャザ命令
110 第1スキャタ命令
111 指示情報
501 第2ギャザ処理部
502 第2スキャタ処理部
503 リストベクトル処理装置
504 コア
505 プロセッサ
506 第2ギャザ命令
507 第2スキャタ命令
801 アクセス情報演算部
802 論理和演算部
803 論理積演算部
804 アクセス制御部

Claims (10)

  1. 記憶装置から読み取る記憶領域を指し示すアドレスを記憶するリストベクトルに従い、複数の情報処理装置のうち、自情報処理装置のみがアクセスする記憶領域における値をレジスタに読み取る処理と、前記自情報処理装置と他情報処理装置とがともにアクセスする記憶領域であるか否かを表す参照アクセス情報を作成する処理とを指示する第1ギャザ命令に応じて、前記リストベクトルに従いアクセスする記憶領域を所定の分割方法に従って、論理的に複数の小領域に分割し、分割したそれぞれの前記小領域にアクセスするか否かを表すアクセス情報を作成するとともに、前記自情報処理装置が前記リストベクトルに従いアクセスする複数のアドレスから、前記所定の分割方法に応じた所定の対応情報に基づいて、特定の小領域を算出し、前記アクセス情報において、前記特定の小領域に関連付けされた値を、アクセスすることを表す値に更新するとともに、前記記憶装置において前記リストベクトルが指し示す記憶領域のうち、前記自情報処理装置のみがアクセスする記憶領域における値をレジスタに読み取るギャザ処理部と、
    前記自情報処理装置が更新した前記アクセス情報を自アクセス情報として前記他情報処理装置に送信し、前記他情報処理装置が送信した前記アクセス情報を、他アクセス情報として受信する通信部と、
    前記自アクセス情報と、前記他アクセス情報とに基づいて、所定の算出方法に従い、前記自情報処理装置と前記他情報処理装置とがともにアクセスする前記小領域を算出するとともに、該算出した小領域を参照小領域とし、前記複数の小領域が前記参照小領域であるか否かを表す前記アクセス情報を算出し、該算出した前記アクセス情報を参照アクセス情報とするアクセス情報演算部と、
    レジスタが記憶する値を、前記記憶装置における前記リストベクトルが指し示す記憶領域のうち、前記自情報処理装置のみがアクセスする記憶領域に保存する命令である第1スキャタ命令に応じて、前記レジスタが記憶する値を、前記参照アクセス情報に基づき、前記リストベクトルが指し示す記憶領域のうち、前記参照小領域ではない記憶領域に保存するスキャタ処理部と
    を備えるリストベクトル処理装置。
  2. 前記記憶装置において、前記リストベクトルが指し示す記憶領域のうち、前記参照小領域における値を前記レジスタに読み取る第2ギャザ命令に応じて、前記参照アクセス情報に基づき、前記記憶装置において前記リストベクトルが指し示す記憶領域のうち、前記参照小領域における値を、前記レジスタに保存する第2ギャザ処理部と、
    前記レジスタが記憶する値を、前記リストベクトルが指し示す記憶領域のうち、前記参照小領域に保存する命令である第2スキャタ命令に応じて、前記参照アクセス情報に基づき、前記レジスタが記憶する値を、前記リストベクトルが指し示す記憶領域のうち前記参照小領域に保存する第2スキャタ処理部と
    を更に備える
    請求項1に記載のリストベクトル処理装置。
  3. 前記アクセス情報演算部は、
    ビットごとに論理和を算出する論理和演算部と、ビットごとに論理積を算出する論理積演算部と、アクセス制御部と
    を備え、
    スレッドは、該スレッドを起動する順序に関連するスレッド番号に関連付けされており、
    前記通信部は、前記自アクセス情報とともに、前記自情報処理装置が処理する前記スレッドの前記スレッド番号を、前記他情報処理装置に送信し、さらに、前記他アクセス情報及び前記スレッド番号を受信し、受信した前記他アクセス情報をアクセス情報キューに保存するとともに、受信した前記スレッド番号をスレッド格納レジスタに保存し、
    前記アクセス制御部は、前記スレッド格納レジスタが記憶する前記スレッド番号と、前記自情報処理装置が処理する前記スレッドの前記スレッド番号とを順次比較し、前記自情報処理装置が処理する前記スレッドの前記スレッド番号が、前記スレッド格納レジスタが記憶する前記スレッド番号よりも小さい場合に、前記論理和演算部に有効信号を送信し、
    前記論理和演算部は、前記アクセス制御部が送信する前記有効信号に応じて、アクセス情報レジスタが記憶する値、及び、前記アクセス情報キューから前記他アクセス情報を読み出し、読み出した前記値と、読み出した前記他アクセス情報との論理和をビットごとに算出し、該算出した値を前記アクセス情報レジスタに保存し、
    前記アクセス制御部は、前記スレッド格納レジスタが記憶する前記スレッド番号に関する処理が終了するに応じて、前記論理積演算部に演算信号を送信し、
    前記論理積演算部は、前記アクセス制御部が送信する前記演算信号に応じて、前記アクセス情報レジスタから値を読み出し、読み出した該値と、前記自アクセス情報との論理積をビットごとに算出し、該算出した値に基づいて、前記参照アクセス情報を算出する
    請求項1または請求項2に記載のリストベクトル処理装置。
  4. 前記アクセス制御部は、前記論理積演算部が前記参照小領域を算出する処理に応じて、前記参照小領域を算出する処理が完了したことを表す同期信号を送信する
    請求項3に記載のリストベクトル処理装置
  5. 前記アクセス情報演算部は、前記参照アクセス情報に基づいて、さらに、前記記憶装置において、前記自情報処理装置のみがアクセスする前記小領域を独立小領域として算出し、前記複数の小領域が前記独立小領域であるか否かを表す独立アクセス情報を生成し、
    前記スキャタ処理部は、前記独立アクセス情報に基づいて、前記レジスタが記憶する値を、前記リストベクトルが指し示す記憶領域のうち、前記独立小領域に保存する
    請求項2乃至請求項4のいずれかに記載のリストベクトル処理装置。
  6. 前記所定の分割方法は、前記リストベクトルが指し示す記憶領域を、所定の単位にて分割する方法である
    請求項1乃至請求項5のいずれかに記載のリストベクトル処理装置。
  7. 前記所定の単位は、前記リストベクトルが指し示す記憶領域の大きさを、前記情報処理装置の数で割った値とする
    請求項7に記載のリストベクトル処理装置。
  8. 記憶装置から読み取る記憶領域を指し示すアドレスを記憶するリストベクトルに従い、複数の情報処理装置のうち、自情報処理装置のみがアクセスする記憶領域における値をレジスタに読み取る処理と、前記自情報処理装置と他情報処理装置とがともにアクセスする記憶領域であるか否かを表す参照アクセス情報を作成する処理とを指示する第1ギャザ命令に応じて、前記リストベクトルに従いアクセスする記憶領域を所定の分割方法に従って、論理的に複数の小領域に分割し、分割したそれぞれの前記小領域にアクセスするか否かを表すアクセス情報を作成するとともに、前記自情報処理装置が前記リストベクトルに従いアクセスする複数のアドレスから、前記所定の分割方法に応じた所定の対応情報に基づいて、特定の小領域を算出し、前記アクセス情報において、前記特定の小領域に関連付けされた値を、アクセスすることを表す値に更新するとともに、前記記憶装置において前記リストベクトルが指し示す記憶領域のうち、前記自情報処理装置のみがアクセスする記憶領域における値をレジスタに読み取り、前記自情報処理装置が更新した前記アクセス情報を自アクセス情報として前記他情報処理装置に送信し、前記他情報処理装置が送信した前記アクセス情報を、他アクセス情報として受信し、前記自アクセス情報と、前記他アクセス情報とに基づいて、所定の算出方法に従い、前記自情報処理装置と前記他情報処理装置とがともにアクセスする前記小領域を算出するとともに、該算出した小領域を参照小領域とし、前記複数の小領域が前記参照小領域であるか否かを表す前記アクセス情報を算出し、該算出した前記アクセス情報を参照アクセス情報とし、レジスタが記憶する値を、前記記憶装置における前記リストベクトルが指し示す記憶領域のうち、前記自情報処理装置のみがアクセスする記憶領域に保存する命令である第1スキャタ命令に応じて、前記レジスタが記憶する値を、前記参照アクセス情報に基づき、前記リストベクトルが指し示す記憶領域のうち、前記参照小領域ではない記憶領域に保存する
    リストベクトル処理方法。
  9. 前記第1スキャタ命令を指示するプログラム。
  10. 前記第1スキャタ命令を含むオブジェクトプログラムを実行する情報処理装置。
JP2013037233A 2013-02-27 2013-02-27 リストベクトル処理装置、リストベクトル処理方法、プログラム、コンパイラ、及び、情報処理装置 Active JP5522283B1 (ja)

Priority Applications (2)

Application Number Priority Date Filing Date Title
JP2013037233A JP5522283B1 (ja) 2013-02-27 2013-02-27 リストベクトル処理装置、リストベクトル処理方法、プログラム、コンパイラ、及び、情報処理装置
US14/188,563 US9424032B2 (en) 2013-02-27 2014-02-24 List vector processing apparatus, list vector processing method, storage medium, compiler, and information processing apparatus

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
JP2013037233A JP5522283B1 (ja) 2013-02-27 2013-02-27 リストベクトル処理装置、リストベクトル処理方法、プログラム、コンパイラ、及び、情報処理装置

Publications (2)

Publication Number Publication Date
JP5522283B1 JP5522283B1 (ja) 2014-06-18
JP2014164667A true JP2014164667A (ja) 2014-09-08

Family

ID=51175631

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2013037233A Active JP5522283B1 (ja) 2013-02-27 2013-02-27 リストベクトル処理装置、リストベクトル処理方法、プログラム、コンパイラ、及び、情報処理装置

Country Status (2)

Country Link
US (1) US9424032B2 (ja)
JP (1) JP5522283B1 (ja)

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2014182807A (ja) * 2013-03-15 2014-09-29 Intel Corp 限定範囲ベクトルメモリアクセス命令、プロセッサ、方法、及びシステム

Families Citing this family (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20170039093A1 (en) * 2015-08-04 2017-02-09 Futurewei Technologies, Inc. Core load knowledge for elastic load balancing of threads
CN108572920B (zh) * 2017-03-09 2022-04-12 上海宝存信息科技有限公司 避免读取扰动的数据搬移方法以及使用该方法的装置
CN108572786B (zh) 2017-03-09 2021-06-29 上海宝存信息科技有限公司 避免读取扰动的数据搬移方法以及使用该方法的装置
US11169809B2 (en) * 2017-03-31 2021-11-09 Intel Corporation Method and apparatus for converting scatter control elements to gather control elements used to sort vector data elements
GB2560059B (en) 2017-06-16 2019-03-06 Imagination Tech Ltd Scheduling tasks

Family Cites Families (8)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPH0744508A (ja) 1993-08-03 1995-02-14 Hitachi Ltd プログラム分割方法
JPH08227405A (ja) 1995-02-21 1996-09-03 Hitachi Ltd 反復処理の並列実行方法
JPH11203256A (ja) 1998-01-12 1999-07-30 Hitachi Ltd 並列化コンパイル方法および装置
US7984273B2 (en) * 2007-12-31 2011-07-19 Intel Corporation System and method for using a mask register to track progress of gathering elements from memory
JP5573134B2 (ja) * 2009-12-04 2014-08-20 日本電気株式会社 ベクトル型計算機及びベクトル型計算機の命令制御方法
JP2011165298A (ja) * 2010-01-18 2011-08-25 Elpida Memory Inc 半導体記憶装置及びこれを備えた情報処理システム
JP5630281B2 (ja) * 2011-01-19 2014-11-26 日本電気株式会社 ベクトル命令制御回路及びリストベクトルの追い越し制御方法
US9842046B2 (en) * 2012-09-28 2017-12-12 Intel Corporation Processing memory access instructions that have duplicate memory indices

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2014182807A (ja) * 2013-03-15 2014-09-29 Intel Corp 限定範囲ベクトルメモリアクセス命令、プロセッサ、方法、及びシステム

Also Published As

Publication number Publication date
JP5522283B1 (ja) 2014-06-18
US20140244969A1 (en) 2014-08-28
US9424032B2 (en) 2016-08-23

Similar Documents

Publication Publication Date Title
KR102258414B1 (ko) 처리 장치 및 처리 방법
CN109522254B (zh) 运算装置及方法
JP5522283B1 (ja) リストベクトル処理装置、リストベクトル処理方法、プログラム、コンパイラ、及び、情報処理装置
KR102123633B1 (ko) 행렬 연산 장치 및 방법
US8595280B2 (en) Apparatus and method for performing multiply-accumulate operations
CN105453071B (zh) 用来提供向量族群计数功能的方法、设备、指令和逻辑
US20220012575A1 (en) Methods and apparatus for localized processing within multicore neural networks
WO2021057746A1 (zh) 神经网络处理方法、装置、计算机设备及存储介质
Ma et al. Optimizing sparse tensor times matrix on GPUs
CN105359129B (zh) 用于提供用于基因组测序和比对的族群计数功能的方法、装置、指令以及逻辑
CN117724763A (zh) 用于矩阵操作加速器的指令的装置、方法和系统
CN112381220B (zh) 一种神经网络张量处理器
Zhang et al. The PetscSF scalable communication layer
JP5885481B2 (ja) 情報処理装置、情報処理方法、及びプログラム
Liu Parallel and scalable sparse basic linear algebra subprograms
D'Amore et al. Towards a parallel component in a GPU–CUDA environment: a case study with the L-BFGS Harwell routine
Maroosi et al. Parallel and distributed computing models on a graphics processing unit to accelerate simulation of membrane systems
CN110377874B (zh) 卷积运算方法及系统
CN115860066A (zh) 一种基于批处理的神经网络推理流水线复用的方法
Zhang et al. MPMoE: Memory Efficient MoE for Pre-trained Models with Adaptive Pipeline Parallelism
Kim et al. Introduction to parallel programming and pMatlab v2. 0
Kabir et al. On the design, development, and analysis of optimized matrix-vector multiplication routines for coprocessors
CN111522776B (zh) 一种计算架构
KR102471553B1 (ko) 컴퓨팅 기기에 의해 수행되는 방법, 장치, 기기 및 컴퓨터 판독가능 저장 매체
CN114117896A (zh) 面向超长simd管线的二值规约优化实现方法及系统

Legal Events

Date Code Title Description
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: 20140311

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20140324

R150 Certificate of patent or registration of utility model

Ref document number: 5522283

Country of ref document: JP

Free format text: JAPANESE INTERMEDIATE CODE: R150