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

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

Info

Publication number
JP6666554B2
JP6666554B2 JP2016102291A JP2016102291A JP6666554B2 JP 6666554 B2 JP6666554 B2 JP 6666554B2 JP 2016102291 A JP2016102291 A JP 2016102291A JP 2016102291 A JP2016102291 A JP 2016102291A JP 6666554 B2 JP6666554 B2 JP 6666554B2
Authority
JP
Japan
Prior art keywords
array
mask
program
elements
calculation
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
JP2016102291A
Other languages
English (en)
Other versions
JP2017211695A (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 JP2016102291A priority Critical patent/JP6666554B2/ja
Priority to US15/470,975 priority patent/US10496408B2/en
Publication of JP2017211695A publication Critical patent/JP2017211695A/ja
Application granted granted Critical
Publication of JP6666554B2 publication Critical patent/JP6666554B2/ja
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/40Transformation of program code
    • G06F8/41Compilation
    • G06F8/45Exploiting coarse grain parallelism in compilation, i.e. parallelism between groups of instructions
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30181Instruction operation extension or modification
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/40Transformation of program code
    • G06F8/41Compilation
    • 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/30018Bit or string instructions
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30003Arrangements for executing specific machine instructions
    • G06F9/30007Arrangements for executing specific machine instructions to perform operations on data operands
    • G06F9/30021Compare instructions, e.g. Greater-Than, Equal-To, MINMAX
    • 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/30029Logical and Boolean instructions, e.g. XOR, NOT
    • 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
    • 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
    • G06F9/30038Instructions to perform operations on packed data, e.g. vector, tile or matrix operations using a mask
    • 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/30072Arrangements for executing specific machine instructions to perform conditional operations, e.g. using predicates or guards
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/38Concurrent instruction execution, e.g. pipeline or look ahead
    • G06F9/3885Concurrent instruction execution, e.g. pipeline or look ahead using a plurality of independent parallel functional units
    • G06F9/3887Concurrent instruction execution, e.g. pipeline or look ahead using a plurality of independent parallel functional units controlled by a single instruction for multiple data lanes [SIMD]
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/38Concurrent instruction execution, e.g. pipeline or look ahead
    • G06F9/3885Concurrent instruction execution, e.g. pipeline or look ahead using a plurality of independent parallel functional units
    • G06F9/3887Concurrent instruction execution, e.g. pipeline or look ahead using a plurality of independent parallel functional units controlled by a single instruction for multiple data lanes [SIMD]
    • G06F9/38873Iterative single instructions for multiple data lanes [SIMD]

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Software Systems (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Mathematical Physics (AREA)
  • Devices For Executing Special Programs (AREA)
  • Complex Calculations (AREA)

Description

本発明は、情報処理装置、変換プログラム、及び変換方法に関する。
HPC(High Performance Computing)分野においては、計算機のノード数、およびCPU(Central Processing Unit)コア数の増加に伴い、ハードウェア性能を引き出すための高並列化が求められている。特に、共有メモリシステムにおけるマルチスレッド環境においては、CPUコア数と同数のスレッドを生成し、各スレッドをCPUコアと1対1にバインドすることによってハードウェア性能を引き出すことができる。
一般に、共有メモリシステムにおいて多重ループを並列化する場合、最も外側のループ(以降、最外ループと呼ぶ)で並列化すると並列化コストが小さくなり効率が良い。ただし、最外ループの繰り返し数がCPUコア数に満たない場合がある。この場合、最外ループで並列化するとCPUコアを使い切れず、ハードウェア性能を十分に引き出すことができない。このような場合、多重ループを一重化し、ループの繰り返し空間を大きくして並列化する手法が取られる。
多重ループ内の多次元配列のアクセスがメモリ上で連続している場合がある。この場合は、一重化後のループ制御変数を用いた計算式を多次元配列の添字として、多次元配列を一次元配列であるかのようにアクセスすることで、処理をSIMD(Single Instruction/Multiple Data)化することが可能である。多次元配列の添字とは、多次元配列における要素の順番を示す数値である。以下、添字を算出する計算式を、添字式と呼ぶ。SIMD化とは、1つの命令を複数のデータに同時に適用して、並列に処理を実行する命令(SIMD命令)を生成することである。プログラムのコンパイル時に命令をSIMD化することで、処理の効率化が図れる。
多次元配列のアクセスがメモリ上で連続にならない場合でも、マスクを利用して計算する部分と計算しない部分を切り分けるマスク付きSIMD命令により、SIMD化が可能である。アクセス対象の要素ごとのマスクの値(真または偽)は、マスク配列によって表される。
ループを一重化させる技術としては、例えばコンパイル時のループ一重化やループ融合化にともなうマスクデ−タ付きのベクトル演算処理の高速化を図るコンパイル方法が考えられている。また演算対象ループ内で異なる次元や大きさを持つ配列が含まれていても少ないループ数にして配列の高速演算を実現する技術も考えられている。
特開平11−242598号公報 特開平11−203273号公報
マスク付きSIMD命令を利用する場合、アクセス対象の全要素に1対1で対応するマスクを用意すると、アクセス対象のデータ量が大きいほどマスクのデータ量も大きくなる。マスクのデータ量が過大となると、マスクの記憶のためにメモリ容量が圧迫され、システムの処理効率の低下要因となる。
そこで、マスクのデータ量を削減することが考えられる。例えば、計算する要素と計算しない要素とが、一定パターンで繰り返している場合、繰り返しパターン1回分に対応する小さいサイズのマスクパターンを用意し、そのマスクを繰り返し利用することが考えられる。小さいサイズのマスクパターンを繰り返し利用できれば、マスクのデータ量を削減できる。しかし、小さいサイズのマスクパターンを繰り返し利用する場合、複雑な式で使用するマスクを指定することになる。複雑な式は、マスク付きSIMD命令におけるマスク指定として適用することができない。
このように、多次元配列のアクセスがメモリ上で連続にならない場合において、SIMD化の際のマスクのデータ量を削減しようとすると、マスク配列の添字式が複雑になり、マスク付きSIMD命令の使用が妨げられてしまう。
1つの側面では、本発明は、マスク付きSIMD命令において使用するマスク数を削減することを目的とする。
1つの案では、記憶手段、配列設定手段、マスク配列設定手段、および命令列設定手段を有する情報処理装置が提供される。
記憶手段は、第1の配列に設定された複数の要素それぞれが計算の実行対象か否かを示す複数のマスクを指定する第1のマスク配列を用い、計算実行対象の要素の計算を指示する第1の命令列を含む第1のプログラムを記憶する。配列設定手段は、第1のマスク配列に示される計算の実行対象か否かの発生パターンが、所定の要素数ごとの第1のパターンの繰り返しの場合、計算の実行対象か否かの発生パターンが所定の要素数以上の2のべき乗個の要素数ごとの第2のパターンの繰り返しとなるように第1の配列に要素を追加した第2の配列を、第2のプログラムに設定する。マスク配列設定手段は、計算の実行対象ではないことを示すマスクが第1のマスク配列に追加された第2のマスク配列であり、第2のパターンに含まれる要素数と同数のマスクを含む第2のマスク配列を、第2のプログラムに設定する。命令列設定手段は、第2の配列内での要素の順番を示す数値を用いたビットごとの論理積により、第2のマスク配列のうちの該要素に適用するマスクを指定し、第2の配列に設定された複数の要素のうち、計算の実行対象であることが示されているマスクを適用する要素の計算を指示する第2の命令列を、第2のプログラムに設定する。
1態様によれば、マスク付きSIMD命令において使用するマスク数を削減することができる。
第1の実施の形態に係る情報処理装置の機能構成例を示す図である。 第2の実施の形態のシステム構成例を示す図である。 第2の実施の形態に用いるプログラム開発装置のハードウェアの一構成例を示す図である。 プログラム開発装置の機能を示すブロック図である。 ステンシル計算プログラムの一例を示す図である。 ステンシル計算のメモリ領域の一例を示す図である。 マスク生成処理を含むステンシル計算プログラムの一例を示す図である。 ステンシル計算のメモリ領域のうちのアクセス対象範囲の一例を示す図である。 ループの回転範囲を制限したステンシル計算プログラムの一例を示す図である。 ループの回転範囲を制限したときのアクセス対象範囲に対応するマスクの配列の例を示す図である。 繰り返し単位のマスクパターンを利用するステンシル計算プログラムの一例を示す図である。 マスクパターンの拡張例を示す図である。 拡張したマスクパターンとアクセス対象範囲との関係を示す図である。 拡張したマスクパターンを利用するステンシル計算プログラムの例を示す図である。 コンパイラの機能を示すブロック図である。 マスク利用ループ処理プログラムの生成例を示す図である。 判定処理の手順を示すフローチャートである。 拡張処理の手順の一例を示すフローチャートである。 拡張処理の一例を示す図である。 ソースプログラムの修正例を示す図である。
以下、本実施の形態について図面を参照して説明する。なお各実施の形態は、矛盾のない範囲で複数の実施の形態を組み合わせて実施することができる。
〔第1の実施の形態〕
図1は、第1の実施の形態に係る情報処理装置の機能構成例を示す図である。情報処理装置10は、記憶手段11、配列設定手段12、マスク配列設定手段13、および命令列設定手段14を有する。
記憶手段11は、第1の配列に設定された複数の要素それぞれが計算の実行対象か否かを示す複数のマスクを指定する第1のマスク配列を用い、計算実行対象の要素の計算を指示する第1の命令列を含む第1のプログラム1を記憶する。第1のプログラム1は、例えば、多重ループ処理を含むプログラムにおける多重ループ処理の一重化を実施した後のプログラムである。多重ループ処理を一重化したプログラムであれば、多数のプロセッサコアによる並列処理が可能となる。
配列設定手段12は、第1のマスク配列に示される計算の実行対象か否かの発生パターンが、所定の要素数ごとの第1のパターンの繰り返しの場合、第1のプログラム1に示された第1の配列を拡張した第2の配列を、第2のプログラム2に設定する。第2の配列は、計算の実行対象か否かの発生パターンが所定の要素数以上の2のべき乗個の要素数ごとの第2のパターンの繰り返しとなるように第1の配列に要素を追加したものである。例えば配列設定手段12は、第1の配列が、所定の要素数を含む第1次元を有する多次元配列の場合、第1の配列の第1次元の要素数を、第2のパターンの要素数に増やし、要素数を増加させた後の多次元配列を第2の配列とする。また第2のパターン内の要素数は、例えば、第1のパターンに含まれる要素数以上の2のべき乗のうち、最も小さい値である。
マスク配列設定手段13は、計算の実行対象ではないことを示すマスクが第1のマスク配列に追加された第2のマスク配列であり、第2のパターンに含まれる要素数と同数のマスクを含む第2のマスク配列を、第2のプログラム2に設定する。
命令列設定手段14は、第2の配列に設定された複数の要素のうち、計算の実行対象であることが示されているマスクを適用する要素の計算を指示する第2の命令列を、第2のプログラム2に設定する。第2のマスク配列のうちの第2の配列内の各要素の適用するマスクは、第2の配列内での要素の順番を示す数値を用いたビットごとの論理積により指定される。例えば命令列設定手段14は、計算対象の要素の順番を示す数値から1を減算した値と、第2のパターンに含まれる要素数から1を減算した値とのビットごとの論理積に、1を加算した値を、第2のマスク配列の添字とすることで、要素に適用するマスクを特定する。なお、第2のプログラム2において実行される要素の計算は、第1のプログラム1において実行される要素の計算と同じである。
このような情報処理装置10によれば、第2のプログラムでは、ビットごとの論理積をマスク配列の添字式として、各要素に適用するマスクが指定されている。ビットごとの論理積の添字式であれば、マスク付きSIMD命令におけるマスクの指定に使用できる。また第2のプログラム2に設定された第2のマスク配列は、第1の配列のすべての要素に1対1で対応するマスクを用意する場合に比べ、少ないマスク数で済む。すなわち、情報処理装置10を用いれば、マスク付きSIMD命令において使用するマスク数を削減することができる。
なお、情報処理装置10に、第2のプログラム2を生成するか否かを判定する判定手段(図示せず)をさらに設けてもよい。判定手段は、例えば第1のマスク配列のデータ量と第2のマスク配列とのデータ量の差を示す第1の差分値と、第1の配列のデータ量と第2の配列のデータ量との差を示す第2の差分値との大きさを比較する。そして判定手段は、比較結果に基づいて、第2のプログラム2を生成するか否かを判定する。例えば、判定手段は、第1の差分値が第2の差分値よりも大きいときに、第2のプログラム2を生成すると判定する。これにより、マスクのデータ量の削減により、全体で使用するデータ量が確実に削減する場合にのみ第2のプログラムを生成することができる。
なお、図1に示す配列設定手段12、マスク配列設定手段13、命令列設定手段14、および図示していない判定手段は、例えば情報処理装置10が有するプロセッサにより実現することができる。また、記憶手段11は、例えば情報処理装置10が有するメモリまたはストレージ装置により実現することができる。
また、図1に示した各要素間を接続する線は通信経路の一部を示すものであり、図示した通信経路以外の通信経路も設定可能である。
〔第2の実施の形態〕
次に、第2の実施の形態について説明する。第2の実施の形態は、HPCシステムで並列実行させるプログラムの開発時に、マスク配列の添字式をビット単位の論理積に単純化することで、SIMD命令を有効に利用した効率的なプログラムを生成するものである。また、第2の実施の形態では、SIMD命令を利用できることによる処理効率が確実に向上する場合にのみ、SIMD命令を利用したプログラムを生成するようにする。これにより、SIMD命令を利用できることにしたことにより、却って処理効率が低下してしまうことを抑止できる。
図2は、第2の実施の形態のシステム構成例を示す図である。図2に示すシステムでは、複数の計算ノード31,32,・・・が、ネットワーク20を介して管理ノード30に接続されている。計算ノード31,32,・・・は、管理ノード30からの指示に従って、ジョブを実行する。実行するジョブには、複数のプロセッサまたはコアが並列で処理を実行する並列ジョブも含まれる。管理ノード30は、並列ジョブに対しては、計算ノード31,32,・・・内の複数のプロセッサまたはコアを割当て、割り当てたプロセッサまたはコアに並列で処理を実行させる。
計算ノード31,32,・・・内のプロセッサは、SIMD演算器を有している。SIMD演算器は、SIMD命令を解釈して処理するための回路である。SIMD演算器は、マスク付きSIMD命令を解釈できる。使用するマスクは、マスク配列の添字式で指定できる。ただし、SIMD演算器では、マスク配列の添字式として、単純な計算の式しか利用できない。例えばコンピュータの演算処理として、ビット単位の論理和や論理積回路は単純な回路で済むが、除算回路は複雑となる。プロセッサ内の限られた領域にSIMD演算器を実装しようとすると、マスク配列の添字式の解釈のために除算回路まで組み込むのは難しい。そのため、計算ノード31,32,・・・内のプロセッサは、マスク付きSIMD命令のマスクを指定するマスク配列の添字式として、ビット単位の論理積を利用することはできるが、除算を用いることはできない。
ネットワーク20には、さらにプログラム開発装置100と端末装置40が接続されている。プログラム開発装置100は、計算ノード31,32,・・・に実行させるジョブの処理を記述したプログラムを開発するコンピュータである。端末装置40は、プログラム開発装置100を用いてプログラムを開発するユーザが使用するコンピュータである。ユーザは、端末装置40を用いて、高級言語でソースプログラムを作成し、そのソースプログラムをプログラム開発装置100に送信する。
プログラム開発装置100はコンパイラを有している。プログラム開発装置100は、コンパイラを用いて、端末装置40から受け取ったソースプログラムをコンパイルし、計算ノード31,32,・・・のプロセッサが実行できる形式の実行プログラムを出力する。プログラム開発装置100は、実行プログラムを管理ノード30に送信し、実行を指示する。すると管理ノード30により、その実行プログラムに基づく処理を実行するジョブが生成され、ジョブが計算ノード31,32,・・・で実行される。
図3は、第2の実施の形態に用いるプログラム開発装置のハードウェアの一構成例を示す図である。プログラム開発装置100は、プロセッサ101によって装置全体が制御されている。プロセッサ101には、バス109を介してメモリ102と複数の周辺機器が接続されている。プロセッサ101は、マルチプロセッサであってもよい。プロセッサ101は、例えばCPU、MPU(Micro Processing Unit)、またはDSP(Digital Signal Processor)である。プロセッサ101がプログラムを実行することで実現する機能の少なくとも一部を、ASIC(Application Specific Integrated Circuit)、PLD(Programmable Logic Device)などの電子回路で実現してもよい。
メモリ102は、プログラム開発装置100の主記憶装置として使用される。メモリ102には、プロセッサ101に実行させるOS(Operating System)のプログラムやアプリケーションプログラムの少なくとも一部が一時的に格納される。また、メモリ102には、プロセッサ101による処理に必要な各種データが格納される。メモリ102としては、例えばRAM(Random Access Memory)などの揮発性の半導体記憶装置が使用される。
バス109に接続されている周辺機器としては、ストレージ装置103、グラフィック処理装置104、入力インタフェース105、光学ドライブ装置106、機器接続インタフェース107およびネットワークインタフェース108がある。
ストレージ装置103は、内蔵した記憶媒体に対して、電気的または磁気的にデータの書き込みおよび読み出しを行う。ストレージ装置103は、コンピュータの補助記憶装置として使用される。ストレージ装置103には、OSのプログラム、アプリケーションプログラム、および各種データが格納される。なお、ストレージ装置103としては、例えばHDD(Hard Disk Drive)やSSD(Solid State Drive)を使用することができる。
グラフィック処理装置104には、モニタ21が接続されている。グラフィック処理装置104は、プロセッサ101からの命令に従って、画像をモニタ21の画面に表示させる。モニタ21としては、CRT(Cathode Ray Tube)を用いた表示装置や液晶表示装置などがある。
入力インタフェース105には、キーボード22とマウス23とが接続されている。入力インタフェース105は、キーボード22やマウス23から送られてくる信号をプロセッサ101に送信する。なお、マウス23は、ポインティングデバイスの一例であり、他のポインティングデバイスを使用することもできる。他のポインティングデバイスとしては、タッチパネル、タブレット、タッチパッド、トラックボールなどがある。
光学ドライブ装置106は、レーザ光などを利用して、光ディスク24に記録されたデータの読み取りを行う。光ディスク24は、光の反射によって読み取り可能なようにデータが記録された可搬型の記録媒体である。光ディスク24には、DVD(Digital Versatile Disc)、DVD−RAM、CD−ROM(Compact Disc Read Only Memory)、CD−R(Recordable)/RW(ReWritable)などがある。
機器接続インタフェース107は、プログラム開発装置100に周辺機器を接続するための通信インタフェースである。例えば機器接続インタフェース107には、メモリ装置25やメモリリーダライタ26を接続することができる。メモリ装置25は、機器接続インタフェース107との通信機能を搭載した記録媒体である。メモリリーダライタ26は、メモリカード27へのデータの書き込み、またはメモリカード27からのデータの読み出しを行う装置である。メモリカード27は、カード型の記録媒体である。
ネットワークインタフェース108は、ネットワーク20に接続されている。ネットワークインタフェース108は、ネットワーク20を介して、他のコンピュータまたは通信機器との間でデータの送受信を行う。
以上のようなハードウェア構成によって、第2の実施の形態の処理機能を実現することができる。なお、第1の実施の形態に示した装置も、図3に示したプログラム開発装置100と同様のハードウェアにより実現することができる。
プログラム開発装置100は、例えばコンピュータ読み取り可能な記録媒体に記録されたプログラムを実行することにより、第2の実施の形態の処理機能を実現する。プログラム開発装置100に実行させる処理内容を記述したプログラムは、様々な記録媒体に記録しておくことができる。例えば、プログラム開発装置100に実行させるプログラムをストレージ装置103に格納しておくことができる。プロセッサ101は、ストレージ装置103内のプログラムの少なくとも一部をメモリ102にロードし、プログラムを実行する。またプログラム開発装置100に実行させるプログラムを、光ディスク24、メモリ装置25、メモリカード27などの可搬型記録媒体に記録しておくこともできる。可搬型記録媒体に格納されたプログラムは、例えばプロセッサ101からの制御により、ストレージ装置103にインストールされた後、実行可能となる。またプロセッサ101が、可搬型記録媒体から直接プログラムを読み出して実行することもできる。
図4は、プログラム開発装置の機能を示すブロック図である。プログラム開発装置100は、記憶部110とコンパイラ120とを有する。
記憶部110は、ソースプログラム111や実行プログラム112を記憶する。記憶部110は、例えばメモリ102またはストレージ装置103の記憶領域の一部である。なお、記憶部110は、図1に示した記憶手段11の一例である。
コンパイラ120は、高級言語で記述されたソースプログラム111をマシン語に翻訳し、プロセッサ101が直接実行できる実行プログラム112を生成する。コンパイラ120は、例えばコンパイル用のプログラムモジュールをプロセッサ101に実行させることで実現することができる。
コンパイラ120は、実行プログラム112を実行する際に使用する予定のコア数に応じて、並列化できるようにソースプログラム111をコンパイルする。コンパイラ120は、ソースプログラムに多重ループがあり、最外ループの繰り返し回数がコア数に満たない場合、多重ループを一重化する。
なお、多重ループを一重化した場合において、多重ループ内の多次元配列のアクセスがメモリ上で連続にならない場合がある。コンパイラ120は、マスク付きSIMD命令によるSIMD化を行う。メモリアクセスが連続にならない例として、ステンシル計算がある。ステンシル計算とは、多次元配列のある要素の値をこれに隣接する周囲の配列の値を用いて多重ループで求める計算である。
図5は、ステンシル計算プログラムの一例を示す図である。ステンシル計算プログラム51では、ループ処理が2重となっている。このステンシル計算プログラム51のループに対して、メモリの連続性を利用した添字計算の単純な一重化を行うためには、ループの回転範囲を配列の宣言範囲に合わせた上で、配列内の要素にマスクをかける。これによって、計算する要素と計算しない要素とを切り分けることができる。
なお、メモリの連続性とは、メモリ上でa(30,1)とa(1,2)が連続していることである。このような連続性が存在することで、a(1,2)に対して、a(31,1)としてアクセスできる。
図6は、ステンシル計算のメモリ領域の一例を示す図である。図6にはステンシル計算プログラム51で定義された配列の宣言範囲41内の要素のうち、計算対象の要素(白抜きの部分)と計算対象外の要素(網掛けの部分)とを分けて示している。
ステンシル計算プログラム51を一重化する場合、マスクを利用して計算対象外の要素の計算を抑止することで、メモリへのアクセスを、連続する領域に対して行わせることができる。マスクを利用する場合、プログラム中にマスク生成処理が挿入される。
図7は、マスク生成処理を含むステンシル計算プログラムの一例を示す図である。図7に示すステンシル計算プログラム52には、マスク生成処理の記述が含まれている。このマスク生成処理では、マスク配列におけるアクセス対象の要素に対応する添字の値として、その要素の計算を実行するか否か(「true」または「false」)を示すマスクが設定される。このようなマスク生成処理を行うと、計算対象の要素数(30×20=600個)と同数のマスクが生成される。
何の対策もせずにマスクを生成すると、マスクのデータ量が大きくなりすぎ、メモリ容量を圧迫する場合がある。そこで、マスクのデータ量を削減することが考えられる。例えば図6に示したメモリ領域のうち、左右両端の各一列分の要素は、ループ処理の先頭と最後尾の部分となり、ループ処理から除外することができる。
図8は、ステンシル計算のメモリ領域のうちのアクセス対象範囲の一例を示す図である。図8に示すように、左右両端の各一列分の要素は、ループの回転範囲から除いても、メモリを連続アクセスすることができる。この場合、計算領域42は太線で囲んだ部分になる。図8に示すように、計算領域42には、計算対象の要素(白抜きの部分)と計算対象外の要素(網掛けの部分)とが含まれる。ループの回転範囲は、計算範囲を一次元アクセスしたときの31要素目から570要素までになる。
図9は、ループの回転範囲を制限したステンシル計算プログラムの一例を示す図である。図9に示したステンシル計算プログラム53では、計算のループ回転範囲が図8に示した計算領域42となっている。この場合、マスクについても計算領域42に対応するものを生成すればよい。
図10は、ループの回転範囲を制限したときのアクセス対象範囲に対応するマスクの配列の例を示す図である。ループの回転範囲を制限したときの計算領域42に対応するマスクを一次元で表すと、図10の左側のマスクパターン61となる。図10の例では、"false"に設定したマスクを網掛けで示している。このマスクパターン61は、先頭と最後尾の要素のマスクのみを"false"設定したマスクパターン62を、繰り返し配置したものになっている。
マスクパターン61内の各マスクの要素番号から1を引いた値を30で割り、その余りに1を加えた値を、マスクパターン62の要素番号に対応させることができる。例えば、マスクパターン61の61番目の要素は、mod((61−1),30)+1=1によって、マスクパターン62の1番目の要素に対応する。なお「mod(x,y)」は、xをyで除算したときの剰余の算出命令である(x,yは、整数)。そこで、マスクパターン62を利用できるようにステンシル計算プログラムを変形すれば、マスクのデータ量を削減できる。
図11は、繰り返し単位のマスクパターンを利用するステンシル計算プログラムの一例を示す図である。図11に示すステンシル計算プログラム54では、繰り返し単位のマスクパターン62に対応するマスクを設定している。そして「mask(mod(ij−1,30)+1)」という添字式により、ループ内でのマスク配列内の要素が指定されている。
このようにして、マスクのデータ量が削減される。例えば図7に示したステンシル計算プログラム52では、使用するマスク数が600個である。それに対して、図11に示したステンシル計算プログラム54のようにプログラムを変形すると、使用するマスク数は30個に削減される。
しかし、ステンシル計算プログラム54では、マスクの使用数を30個へと大幅に削減できるものの、マスク配列の添字式が「mask(mod(ij−1,30)+1)」のように割り算を含む式になっている。そのためステンシル計算プログラム54をコンパイルしたとき、マスク付のSIMD命令が使用できない。すなわち、マスクの使用数を削減しようとすると、マスク配列の添字式が複雑になって、マスク付きSIMD命令の使用が妨げられてしまう。
そこで、第2の実施の形態におけるコンパイラ120は、ステンシル計算プログラム54をさらに変形し、マスク付きSIMD命令の使用を妨げることなく、マスクの使用数を削減できるようにする。具体的には、コンパイラ120は、ステンシル計算プログラム54におけるマスク配列の添字式が複雑にならないようにするために、以下のような工夫を施す。
ステンシル計算プログラム54では、マスク配列の要素番号n(nは1以上の整数)を、マスクパターンの大きさa(aは1以上の整数)で割ったときの余りr(rは1以上の整数)が、マスク配列の添字に現われる。整数nを整数で割った時の余りに関しては、以下の関係が成り立つ。
整数nを10のべき乗10k(kは1以上の整数)で割った余りは、nを10進数で表現した時の下k桁である。同様にして、nを2のべき乗2kで割った余りは、nを2進数で表現した時の下k桁となる。この下k桁は、nをビット列で表したときの下位kビットである。
また、nを2進数で表現したときの下位kビットは、nと2k−1とのビットの論理積によって求めることができる。つまり、割り算を用いることなく、nを2のべき乗2kで割った余りを求めることができる。
このように、マスクパターンの大きさaが2のべき乗であれば、ビットの論理積演算で、マスク配列の要素番号nをマスクパターンの大きさaで割った時の余りrを求めることができる。ビットの論理積のような単純な計算であれば、マスク付きSIMD命令においてマスクを指定する添字式として利用可能である。コンパイラ120は、このことを利用するために、マスクパターンの大きさaが2のべき乗でなかった場合に、aよりも大きい2のべき乗数のうちの最小の数まで、マスクパターンの大きさを拡張する。
図12は、マスクパターンの拡張例を示す図である。マスクパターン62の要素数は「30」である。「30」は2のべき乗ではないため、マスクパターンの拡張が行われる。「30」よりも大きい2のべき乗のうちの最小の数は「32(25)」である。そこで、要素数が「32」となるようなマスクパターン63に拡張される。拡張したマスクパターン63の31番目と32番目の要素は、計算しない部分に対応する。すなわち、マスクの値が"false"に設定される。
拡張したマスクパターン63を繰り返し使用することで、マスクのデータ量が削減される。
図13は、拡張したマスクパターンとアクセス対象範囲との関係を示す図である。拡張したマスクパターン63を適用するために、ループ処理で使用する配列の宣言範囲43も拡張される。そして、拡張された配列の宣言範囲43の計算領域44に対して、マスクパターン63を繰り返し適用することで、ループ処理において計算領域44内で連続した要素をアクセス対象とすることができる。また、2のべき乗個の要素分のマスクパターン62を使用することで、マスク配列の添字式としてビットの論理積を用いることができ、SIMD化が可能となる。
図14は、拡張したマスクパターンを利用するステンシル計算プログラムの例を示す図である。図14に示すステンシル計算プログラム55では、配列の宣言範囲が「aa(32,20),bb(32,20)」に拡張されている。そして、32個のマスクの値が設定され、ループ処理内では、「mask(iand(ij−1,31)+1)」によって、ビットの論理積によって適用するマスクが指定されている。ここで、iand(x,y)は整数x,yが対応するビットの論理積を求めるFortranの組込み関数である。
ステンシル計算プログラム55では、マスクパターン63の大きさを2のべき乗に拡張することで、マスク配列の添字式を単純化されている。コンパイラ120が、このようなステンシル計算プログラム55を生成することで、マスク付きSIMD命令の使用を妨げずに、マスク配列の使用数が削減できる。
次に、コンパイラ120の機能について詳細に説明する。
図15は、コンパイラの機能を示すブロック図である。図15には、コンパイラ120が有する機能のうち、多重ループの一重化やSIMD化を用いたプログラムの最適化機能が示されている。
コンパイラ120は、ソースプログラム解析部121、判定部122、拡張部123、および実行プログラム生成部124を有する。ソースプログラム解析部121は、ソースプログラムを解析する。ソースプログラム解析部121は、ソースプログラム内に多重ループがある場合、マスクを用いて多重ループを一重化した、中間表現のプログラム(マスク利用ループ処理プログラム71)を生成する。生成されたマスク利用ループ処理プログラム71は、一時的に、記憶部110に格納される。
判定部122は、要素格納用のメモリ領域およびマスクパターンを拡張するかどうかを判定する。例えば判定部122は、要素格納用のメモリ領域およびマスクパターンを拡張することが、処理効率の向上に有効である場合に、拡張を実施すると判定する。具体的には、判定部122は、メモリ領域の拡張によって増加するメモリ量とマスク配列の削減によって減少するメモリ量を比較する。マスク配列の削減で減少するメモリ量が、メモリ領域の拡張で増加するメモリ量を上回る場合に、拡張すると判定する。
拡張部123は、要素格納用のメモリ領域およびマスクパターンを拡張すると判定された場合、拡張したマスクパターンを利用する、中間表現のプログラム(拡張マスク利用ループ処理プログラム72)を生成する。生成された拡張マスク利用ループ処理プログラム72は、一時的に記憶部110に格納される。なお、拡張部123は、図1に示した配列設定手段12、マスク配列設定手段13、および命令列設定手段14を包含する機能の一例である。
実行プログラム生成部124は、マスク利用ループ処理プログラム71または拡張マスク利用ループ処理プログラム72に基づいて、マシン語の実行プログラムを生成する。例えば実行プログラム生成部124は、要素格納用のメモリ領域およびマスクパターンを拡張すると判定された場合、拡張マスク利用ループ処理プログラム72に基づいて、マシン語の実行プログラムを生成する。また実行プログラム生成部124は、要素格納用のメモリ領域およびマスクパターンを拡張しないと判定された場合、マスク利用ループ処理プログラム71に基づいて、マシン語の実行プログラムを生成する。
このような構成のコンパイラ120により、まず、多重ループを含むソースプログラムから、中間表現であるマスク利用ループ処理プログラム71が生成される。
図16は、マスク利用ループ処理プログラムの生成例を示す図である。図16に示すソースプログラム73は、図5に示したステンシル計算プログラム51を一般化したものである。ソースプログラム解析部121は、ソースプログラム73を解析して、マスク利用ループ処理プログラム71を生成する。マスク利用ループ処理プログラム71は、ソースプログラム73と同じ処理を表している。
このマスク利用ループ処理プログラム71に基づいて、判定部122が、要素格納用のメモリ領域およびマスクパターンを拡張するかどうかを判定する。
図17は、判定処理の手順を示すフローチャートである。以下、図17に示す処理をステップ番号に沿って説明する。
[ステップS101]判定部122は、計算領域の大きさ(各次元方向の要素数)を示す値「M×N」(M,Nは1以上の整数)を取得する。
[ステップS102]判定部122は、配列の種類数を示す値「2」を取得する。
[ステップS103]判定部122は、計算対象の配列1要素あたりのメモリサイズを示す値「4」を取得する。
[ステップS104]判定部122は、マスクパターンの大きさ(要素数)を示す値「M」を取得する。
[ステップS105]判定部122は、マスク1要素のメモリサイズを示す値「4」を取得する。
[ステップS106]判定部122は、M以上の2のべき乗のうち最小の値「X」(Xは1以上の整数)取得する。
[ステップS107]判定部122は、マスクパターンの大きさをMからXに拡張した場合の計算対象配列の要素数の増加量を、式「(X−M)×N」により計算する。
[ステップS108]判定部122は、マスクパターンの大きさをMからXに拡張した場合のマスク配列の要素数の減少量を、式「M×N−X」により計算する。
[ステップS109]判定部122は、増加する計算対象配列のメモリ量を、式「(X−M)×N×4」により計算する。
[ステップS110]判定部122は、減少する計算対象の配列のメモリ量を、式「(M×N−X)×4」により計算する。
[ステップS111]判定部122は、増加する計算対象の配列のメモリ量「(X−M)×N×4」が、減少するマスク配列のメモリ量「(M×N−X)×4」より少ないか否かを判断する。増加する計算対象の配列のメモリ量の方が少なければ、処理がステップS112に進められる。そうでなければ、処理がステップS113に進められる。
[ステップS112]判定部122は、領域を拡張すると判定し、判定処理を終了する。
[ステップS113]判定部122は、領域を拡張しないと判定し、判定処理を終了する。
このように、判定部122により、計算領域およびマスクパターンを拡張するかどうかが判定される。判定は、領域拡張によって増加するメモリ量とマスク配列の削減によって減少するメモリ量の比較によって行われ、後者が前者を上回る場合に、領域を拡張すると判定される。
領域を拡張すると判定された場合、拡張部123により、マスク利用ループ処理プログラム71の要素格納用のメモリ領域およびマスクパターンが拡張され、拡張マスク利用ループ処理プログラム72が生成される。
図18は、拡張処理の手順の一例を示すフローチャートである。以下、図18に示す処理をステップ番号に沿って説明する。
[ステップS121]拡張部123は、マスク利用ループ処理プログラム71内の配列の宣言範囲述を「X×N」に拡張されるように修正した記述を、拡張マスク利用ループ処理プログラム72に追加する。
[ステップS122]拡張部123は、マスク利用ループ処理プログラム71内のマスクパターンの記述を、拡張したマスクパターンとなるように変更した記述を、拡張マスク利用ループ処理プログラム72に追加する。変更後のマスクパターンの要素数は「X」となる。
[ステップS123]拡張部123は、マスク利用ループ処理プログラム71内のループ回数の記述を、配列の拡張に合わせて修正し、修正した記述を、拡張マスク利用ループ処理プログラム72に追加する。
[ステップS124]拡張部123は、マスク利用ループ処理プログラム71内のループ処理内の計算命令を、修正して拡張マスク利用ループ処理プログラム72に追加する。修正した計算命令では、マスク配列の添字式をビット単位の論理積で表すことで、各要素の適用するマスクが指定される。
このような拡張処理により、マスク利用ループ処理プログラム71が拡張マスク利用ループ処理プログラム72に変更される。
図19は、拡張処理の一例を示す図である。マスク利用ループ処理プログラム71における「real:配列:a(M,N),b(M,N)」の記述は、拡張マスク利用ループ処理プログラム72において「real:配列:a(X,N),b(X,N)」に変更されている。これにより、計算領域が拡張される。
マスク利用ループ処理プログラム71における「logical:mask(M,N)」の記述は、拡張マスク利用ループ処理プログラム72において「logical:mask(X)」に変更されている。これにより、マスク配列が、2のべき乗個(X)のマスクを含むように拡張される。
マスク利用ループ処理プログラム71におけるマスクの値を設定する記述は、拡張マスク利用ループ処理プログラム72において「mask=偽」、「loop:i:始値=2:終値=M−1」、「mask(i)=真」に変更されている。これにより、繰り返し使用されるマスクパターンの各マスクの値が設定される。拡張により追加したマスクの値は「偽」となる。
マスク利用ループ処理プログラム71における「loop:ij:始値=1+M:終値=M*N−M」の記述は、拡張マスク利用ループ処理プログラム72において「loop:ij:始値=1+X:終値=X*N−X」に変更されている。これにより、配列の拡張に応じて、ループ下位数が変更されている。
マスク利用ループ処理プログラム71では、計算命令は「if:mask(ij,1)==真:a(ij,1)=(b(ij−1−M,1)+b(ij+1−M,1)+b(ij−1+M,1)+b(ij+1+M,1))/4」と記述されている。この計算命令は、拡張マスク利用ループ処理プログラム72では「if:mask(iand(ij−1,X−1)+1)==真:a(ij,1)=(b(ij−1−X,1)+b(ij+1−X,1)+b(ij−1+X,1)+b(ij+1+X,1))/4」と変更されている。この計算命令のうち、「mask(iand(ij−1,X−1)+1)」が、マスク配列におけるマスクの指定であり、「iand(ij−1,X−1)+1」が、マスク配列の添字式である。
添字式は、要素番号「ij」から1を減算した値と、Xから1を減算した値とのビットごとの論理積の結果に1を加算する計算を表している。Xが「32」であれば、Xから1を減算した値は「31」となる。「31」(25−1)を2進数(ビットごとの「0/1」で表すと「11111」(5個の値「1」のビット列)となる。そのため要素番号「ij」から1を減算した値とXから1を減算した値との論理積により、要素番号「ij」から1を減算した値の下位5ビットが得られる。この5ビットの値は、要素番号「ij」から1を減算した値を「32」で除算したときの余りである。「32」で除算した余りは、「0」〜「31」の範囲のいずれかの数値となる。この余りに「1」を加算することで、図12に示すマスクパターン63の「1」〜「32」のいずれかのマスクを示す番号が得られる。
このように、第2の実施の形態では、計算領域の大きさを2のべき乗単位に拡張することによって、マスク配列の添字式が単純化される。これにより、マスク配列の使用数の削減とマスク付きSIMD命令の使用を両立させることができる。
しかも拡張処理を行うことが、メモリの使用効率を向上させる場合にのみ拡張処理を行うため、拡張処理を行ったために却ってメモリの使用効率が低下するようなことを回避することができる。
[その他の実施の形態]
第2の実施の形態では、中間表現のプログラムを修正することで、マスク配列の使用数の削減とマスク付きSIMD命令の使用を両立させているが、ソースプログラムの段階で修正することも可能である。
図20は、ソースプログラムの修正例を示す図である。図20に示すように、ソースプログラム73を修正し、ビット単位の論理和でマスク配列の添字式を表現したソースプログラム74に修正することもできる。このようなソースプログラム74のコンパイルを実施すれば、マスク配列の使用数の削減とマスク付きSIMD命令の使用を両立させた実行プログラムが生成される。
以上、実施の形態を例示したが、実施の形態で示した各部の構成は同様の機能を有する他のものに置換することができる。また、他の任意の構成物や工程が付加されてもよい。さらに、前述した実施の形態のうちの任意の2以上の構成(特徴)を組み合わせたものであってもよい。
1 第1のプログラム
2 第2のプログラム
10 情報処理装置
11 記憶手段
12 配列設定手段
13 マスク配列設定手段
14 命令列設定手段

Claims (7)

  1. 第1の配列に設定された複数の要素それぞれが計算の実行対象か否かを示す複数のマスクを指定する第1のマスク配列を用い、計算実行対象の要素の計算を指示する第1の命令列を含む第1のプログラムを記憶する記憶手段と、
    前記第1のマスク配列に示される計算の実行対象か否かの発生パターンが、所定の要素数ごとの第1のパターンの繰り返しの場合、計算の実行対象か否かの発生パターンが前記所定の要素数以上の2のべき乗個の要素数ごとの第2のパターンの繰り返しとなるように前記第1の配列に要素を追加した第2の配列を、第2のプログラムに設定する配列設定手段と、
    計算の実行対象ではないことを示すマスクが前記第1のマスク配列に追加された第2のマスク配列であり、前記第2のパターンに含まれる要素数と同数のマスクを含む前記第2のマスク配列を、前記第2のプログラムに設定するマスク配列設定手段と、
    前記第2の配列内での要素の順番を示す数値を用いたビットごとの論理積により、前記第2のマスク配列のうちの該要素に適用するマスクを指定し、前記第2の配列に設定された複数の要素のうち、計算の実行対象であることが示されているマスクを適用する要素の計算を指示する第2の命令列を、前記第2のプログラムに設定する命令列設定手段と、
    を有する情報処理装置。
  2. 前記配列設定手段は、前記第1の配列が、前記所定の要素数を含む第1次元を有する多次元配列の場合、前記第1の配列の前記第1次元の要素数を、前記第2のパターンの要素数に増やし、要素数を増加させた後の多次元配列を前記第2の配列とする、
    請求項1記載の情報処理装置。
  3. 前記マスク配列設定手段は、前記第2の命令列において、計算対象の要素の順番を示す数値から1を減算した値と、前記第2のパターンに含まれる要素数から1を減算した値とのビットごとの論理積に、1を加算した値を、前記第2のマスク配列の添字とする、
    請求項1または2記載の情報処理装置。
  4. 前記配列設定手段は、前記第1のパターンに含まれる要素数以上の2のべき乗のうち、最も小さい値を前記第2のパターン内の要素数とする、
    請求項1乃至3のいずれかに記載の情報処理装置。
  5. 前記第1のマスク配列のデータ量と前記第2のマスク配列とのデータ量の差を示す第1の差分値と、前記第1の配列のデータ量と前記第2の配列のデータ量との差を示す第2の差分値との大きさを比較して、前記第2のプログラムを生成するか否かを判定する判定手段をさらに有し、
    前記配列設定手段、前記マスク配列設定手段、および前記命令列設定手段は、前記第2のプログラムを生成する場合に処理を実行する、
    請求項1乃至4のいずれかに記載の情報処理装置。
  6. コンピュータに、
    第1の配列に設定された複数の要素それぞれが計算の実行対象か否かを示す複数のマスクを指定する第1のマスク配列を用い、計算実行対象の要素の計算を指示する第1の命令列を含む第1のプログラムを参照し、前記第1のマスク配列に示される計算の実行対象か否かの発生パターンが、所定の要素数ごとの第1のパターンの繰り返しの場合、計算の実行対象か否かの発生パターンが前記所定の要素数以上の2のべき乗個の要素数ごとの第2のパターンの繰り返しとなるように前記第1の配列に要素を追加した第2の配列を、第2のプログラムに設定し、
    計算の実行対象ではないことを示すマスクが前記第1のマスク配列に追加された第2のマスク配列であり、前記第2のパターンに含まれる要素数と同数のマスクを含む前記第2のマスク配列を、前記第2のプログラムに設定し、
    前記第2の配列内での要素の順番を示す数値を用いたビットごとの論理積により、前記第2のマスク配列のうちの該要素に適用するマスクを指定し、前記第2の配列に設定された複数の要素のうち、計算の実行対象であることが示されているマスクを適用する要素の計算を指示する第2の命令列を、前記第2のプログラムに設定する、
    処理を実行させる変換プログラム。
  7. コンピュータが、
    第1の配列に設定された複数の要素それぞれが計算の実行対象か否かを示す複数のマスクを指定する第1のマスク配列を用い、計算実行対象の要素の計算を指示する第1の命令列を含む第1のプログラムを参照し、前記第1のマスク配列に示される計算の実行対象か否かの発生パターンが、所定の要素数ごとの第1のパターンの繰り返しの場合、計算の実行対象か否かの発生パターンが前記所定の要素数以上の2のべき乗個の要素数ごとの第2のパターンの繰り返しとなるように前記第1の配列に要素を追加した第2の配列を、第2のプログラムに設定し、
    計算の実行対象ではないことを示すマスクが前記第1のマスク配列に追加された第2のマスク配列であり、前記第2のパターンに含まれる要素数と同数のマスクを含む前記第2のマスク配列を、前記第2のプログラムに設定し、
    前記第2の配列内での要素の順番を示す数値を用いたビットごとの論理積により、前記第2のマスク配列のうちの該要素に適用するマスクを指定し、前記第2の配列に設定された複数の要素のうち、計算の実行対象であることが示されているマスクを適用する要素の計算を指示する第2の命令列を、前記第2のプログラムに設定する、
    変換方法。
JP2016102291A 2016-05-23 2016-05-23 情報処理装置、変換プログラム、及び変換方法 Active JP6666554B2 (ja)

Priority Applications (2)

Application Number Priority Date Filing Date Title
JP2016102291A JP6666554B2 (ja) 2016-05-23 2016-05-23 情報処理装置、変換プログラム、及び変換方法
US15/470,975 US10496408B2 (en) 2016-05-23 2017-03-28 Information processing apparatus and conversion method

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
JP2016102291A JP6666554B2 (ja) 2016-05-23 2016-05-23 情報処理装置、変換プログラム、及び変換方法

Publications (2)

Publication Number Publication Date
JP2017211695A JP2017211695A (ja) 2017-11-30
JP6666554B2 true JP6666554B2 (ja) 2020-03-18

Family

ID=60330089

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2016102291A Active JP6666554B2 (ja) 2016-05-23 2016-05-23 情報処理装置、変換プログラム、及び変換方法

Country Status (2)

Country Link
US (1) US10496408B2 (ja)
JP (1) JP6666554B2 (ja)

Families Citing this family (6)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
EP3944260B1 (en) * 2014-05-22 2024-05-08 Australian Nuclear Science And Technology Organisation Proton, neutron, electron or electromagnetic radiation imaging
JP7163697B2 (ja) * 2018-09-28 2022-11-01 富士通株式会社 生成プログラム,情報処理装置及び生成方法
CN110673877B (zh) * 2019-08-22 2020-09-01 成都信息工程大学 一种基于手动向量化的并行计算方法
CN113391842B (zh) * 2020-03-13 2024-09-17 华为技术有限公司 一种单指令多数据simd指令的生成、处理方法以及相关设备
US11635947B2 (en) * 2020-05-22 2023-04-25 Fujitsu Limited Instruction translation support method and information processing apparatus
WO2024181090A1 (ja) * 2023-02-27 2024-09-06 日本電気株式会社 多重ループ変換装置、情報処理方法および情報処理プログラム

Family Cites Families (11)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5696922A (en) * 1993-12-10 1997-12-09 Cray Research, Inc. Recursive address centrifuge for distributed memory massively parallel processing systems
US5802375A (en) * 1994-11-23 1998-09-01 Cray Research, Inc. Outer loop vectorization
US6128639A (en) * 1996-06-28 2000-10-03 Cray Research, Inc. Array address and loop alignment calculations
JP3657414B2 (ja) 1998-01-20 2005-06-08 富士通株式会社 多重ループのベクトル化装置および記録媒体
JP3887097B2 (ja) * 1998-02-24 2007-02-28 富士通株式会社 コンパイル方法,コンパイル装置および、コンパイル用プログラムを記憶したコンピュータ読み取り可能な記憶媒体
ATE463788T1 (de) * 2007-06-26 2010-04-15 Ericsson Telefon Ab L M Datenverarbeitungseinheit für anweisungen in geschachtelten schleifen
US7945768B2 (en) * 2008-06-05 2011-05-17 Motorola Mobility, Inc. Method and apparatus for nested instruction looping using implicit predicates
US8418154B2 (en) * 2009-02-10 2013-04-09 International Business Machines Corporation Fast vector masking algorithm for conditional data selection in SIMD architectures
US9519617B2 (en) * 2011-07-14 2016-12-13 Texas Instruments Incorporated Processor with instruction variable data distribution
US8972697B2 (en) * 2012-06-02 2015-03-03 Intel Corporation Gather using index array and finite state machine
US9501276B2 (en) * 2012-12-31 2016-11-22 Intel Corporation Instructions and logic to vectorize conditional loops

Also Published As

Publication number Publication date
US20170337060A1 (en) 2017-11-23
US10496408B2 (en) 2019-12-03
JP2017211695A (ja) 2017-11-30

Similar Documents

Publication Publication Date Title
JP6666554B2 (ja) 情報処理装置、変換プログラム、及び変換方法
JP5966509B2 (ja) プログラム、コード生成方法および情報処理装置
JP2022518209A (ja) スレッドの実行順序を維持する同期デジタル回路を生成する言語およびコンパイラ
CN107003885A (zh) 用于低级别可组合高性能计算库的技术
US20230004365A1 (en) Multistage compiler architecture
Kashi et al. Batched sparse iterative solvers on GPU for the collision operator for fusion plasma simulations
US20180217845A1 (en) Code generation apparatus and code generation method
US11635947B2 (en) Instruction translation support method and information processing apparatus
JP5644432B2 (ja) 動作合成システム、動作合成方法、動作合成用プログラム及び半導体装置
JP2007172546A (ja) 動作合成システム、動作合成方法およびプログラム
JP2004206314A (ja) 並列プログラム生成装置,並列プログラム生成方法および並列プログラム生成プログラム
JP7115563B2 (ja) コンパイル装置、コンパイル方法、及び制御プログラム
US20230176851A1 (en) Computer-readable recording medium storing conversion program and conversion method
CN110879744B (zh) 利用多线程执行计算图的方法和系统
JP7168731B1 (ja) メモリアクセス制御装置、メモリアクセス制御方法、及び、メモリアクセス制御プログラム
WO2023112874A1 (ja) ソフトウェア開発装置およびソフトウェア開発プログラム
US20220236969A1 (en) Non-transitory computer-readable medium and class generation method
JP2018206175A (ja) コンパイラ、情報処理装置及びコンパイル方法
JP7243742B2 (ja) 最適化装置、最適化方法、及びプログラム
JP2017151903A (ja) コンパイル装置、コンパイル方法およびコンパイルプログラム
Yu et al. MLIR-to-CGRA: A Versatile MLIR-Based Compiler Framework for CGRAs
KR101737785B1 (ko) 프로그램 컴파일 장치 및 프로그램 컴파일 방법
JP2021093012A (ja) コンパイルプログラム、および情報処理装置
JP2023117606A (ja) コンパイル装置、コンパイル方法、及びプログラム
JP2020135464A (ja) プログラム変換装置、プログラム変換方法、及び、プログラム変換のプログラム

Legal Events

Date Code Title Description
A621 Written request for application examination

Free format text: JAPANESE INTERMEDIATE CODE: A621

Effective date: 20190212

A977 Report on retrieval

Free format text: JAPANESE INTERMEDIATE CODE: A971007

Effective date: 20191223

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

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20200203

R150 Certificate of patent or registration of utility model

Ref document number: 6666554

Country of ref document: JP

Free format text: JAPANESE INTERMEDIATE CODE: R150