JP2014197338A - プログラムの疎行列演算化装置 - Google Patents
プログラムの疎行列演算化装置 Download PDFInfo
- Publication number
- JP2014197338A JP2014197338A JP2013073084A JP2013073084A JP2014197338A JP 2014197338 A JP2014197338 A JP 2014197338A JP 2013073084 A JP2013073084 A JP 2013073084A JP 2013073084 A JP2013073084 A JP 2013073084A JP 2014197338 A JP2014197338 A JP 2014197338A
- Authority
- JP
- Japan
- Prior art keywords
- program
- sparse matrix
- sparse
- matrix
- conversion
- 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.)
- Pending
Links
Images
Landscapes
- Devices For Executing Special Programs (AREA)
Abstract
【課題】ノイマン型プログラムの変換に関して、変換前のプログラムに制約が少なく、性能が高くしかもプログラムの改変が容易な、プログラム行列演算化装置を提供すること。
【解決手段】一例のプログラム疎行列演算化装置は、ノイマン型プログラムを一群の疎行列プログラムに変換するノイマン型プログラムの疎行列演算化装置であって、変換前プログラムの並列ロジック化を行う並列ロジック化部と、この並列ロジック化部により得られた中間プログラムから疎行列を作成する疎行列作成部と、この疎行列作成部により得られた疎行列を保持する変換後プログラム保持部と、を備え、疎行列の演算を得意とするハードウェアにより高速に並列実行が可能な疎行列プログラムを作成することを特徴とする。
【選択図】図1
【解決手段】一例のプログラム疎行列演算化装置は、ノイマン型プログラムを一群の疎行列プログラムに変換するノイマン型プログラムの疎行列演算化装置であって、変換前プログラムの並列ロジック化を行う並列ロジック化部と、この並列ロジック化部により得られた中間プログラムから疎行列を作成する疎行列作成部と、この疎行列作成部により得られた疎行列を保持する変換後プログラム保持部と、を備え、疎行列の演算を得意とするハードウェアにより高速に並列実行が可能な疎行列プログラムを作成することを特徴とする。
【選択図】図1
Description
本発明の実施形態は、プログラム疎行列演算化装置に関する。
ノイマン型プログラムは一般的には、直列的に演算処理を行うので、複雑な演算処理を行う場合には、時間がかかる。そこで行列式を用いて複数のプログラムに変換し、複数のCPUを用いて並列的に処理することが考えられた。
例えば、画像処理用のGPUを汎用プログラムに用いるためには特定の規則に従って、微少加工やヘッダの追加を行う。この発明の実施形態は、並列演算が容易に考えられる計算対象に関するものであり、対象を特定しないプログラムに対するものではない。
従来のこの種の並列演算化装置は、プログラム言語以外に記述ルールがありまたプログラム言語の一部の機能が含まれていてはならない等、変換前のプログラムに大きな制約があり、変換後のプログラムの性能があまり高くないなどの問題がある。
本発明の課題は、ノイマン型プログラムの変換に関して、変換前のプログラムに制約が少なく、性能が高くしかもプログラムの改変が容易な、プログラム疎行列演算化装置を提供することである。
一実施形態のプログラム疎行列演算化装置は、ノイマン型プログラムを一群の疎行列プログラムに変換するノイマン型プログラムの疎行列演算化装置であって、変換前プログラムの並列ロジック化を行う並列ロジック化部と、この並列ロジック化部により得られた中間プログラムから疎行列を作成する疎行列作成部と、この疎行列作成部により得られた疎行列を保持する変換後プログラム保持部と、を備え、疎行列の演算を得意とするハードウェアにより高速に並列実行が可能な疎行列プログラムを作成することを特徴とするプログラム疎行列演算化装置である。
実施形態について図面を用いて以下に説明する。図1に一実施形態の構成例を示す。
このプログラム疎行列演算化装置11は、疎行列化演算処理を行う前の変換前プログラムを保持する変換前プログラム保持部12と、どのように並列ロジックを行うかを決定する並列ロジック化部13と、この並列ロジック化部13のロジックにより上記変換前プログラム保持部に保持されていたプログラムから並列ロジック疎行列化プログラムを得る疎行列作成部14と、このロジック化プログラム取得部14において得た疎行列を保持する変換後プログラム保持部16と、を有する。
並列ロジック化部13では、変換前プログラム保持部12から入力された変換前のプログラムがどのような構造になっているかを分析し並列に演算できるプログラムを検出する。この並列化されたプログラムは疎行列作成部14に入力され、出力される疎行列を変換後プログラム保持部16において保持される。
ここで、例を挙げて具体的に説明する。
(疎行列プログラムの作成例)
次に数の少ない簡易なSIMD(Single Instruction Multiple Data)型演算によりノイマン型プログラムを並列に実行する疎行列の作成手法について、一例を具体的に説明する。
次に数の少ない簡易なSIMD(Single Instruction Multiple Data)型演算によりノイマン型プログラムを並列に実行する疎行列の作成手法について、一例を具体的に説明する。
まず第1ステップとしてノイマン型プログラムを、種類の少ない演算、かつ行列演算に適用したときに単位行列を有し、かつその単位行列が疎行列となるものに変換する。第2ステップとして変換されたものを疎行列に構成する。
ここで、*は演算子である。
すると、積和(・)は次式のようになる。
o1=i1×c 11+・・・+im×cm1
・・・・・・・・・・・・・・
on=i1×c1n+・・・+im×cmn ・・・(2)
また、乗積(×)は次式のようになる。
・・・・・・・・・・・・・・
on=i1×c1n+・・・+im×cmn ・・・(2)
また、乗積(×)は次式のようになる。
o1=i1 c11×・・・×im cm1
・・・・・・・・・・・・・・・
on=i1 c1n×・・・×im cmm ・・・(3)
但し、o0=1とする。
・・・・・・・・・・・・・・・
on=i1 c1n×・・・×im cmm ・・・(3)
但し、o0=1とする。
更に、正判(?)は、次式のようになる。
但し、i=0のときf(i,c)=0、i0=1とする。
今、変換前のプログラムが次のようであるとする。
void prog(a, b, c, d, &x, &y){
if (a>b && c>d){
x=d;
}
if (a+b>c*d){
y=a*b;
} else {
y=x;
}
return
} ・・・・(5)
並列ロジック化部13において、上記(5)式のプログラムがまずif-elseの変形がなされ、次に示す変換1の(6)式となる。
if (a>b && c>d){
x=d;
}
if (a+b>c*d){
y=a*b;
} else {
y=x;
}
return
} ・・・・(5)
並列ロジック化部13において、上記(5)式のプログラムがまずif-elseの変形がなされ、次に示す変換1の(6)式となる。
void prog(a, b, c, d, &x, &y){
x= (a-b>0 && c-d>0? d:0;
y=a+b -c*d>0)? a*b:x;
return
} ・・・・・・(6)
次に、上記(6)式を行列演算で用いられる演算に変形して、次の変換2である(7)式が得られる。
x= (a-b>0 && c-d>0? d:0;
y=a+b -c*d>0)? a*b:x;
return
} ・・・・・・(6)
次に、上記(6)式を行列演算で用いられる演算に変形して、次の変換2である(7)式が得られる。
void prog(a, b, c, d, &x, &y){
r1=a-b; r2=c-d;
r3= (r1>0 && r2>0)? 1:0;
r4= r3*(-1)+1;
r5= d*r3;
r6= 0*r4;
x=r5+r6;
r7= a+ b; r8=c*d;
r9=r7-r8
r10= (r9>0)?1:0;
r11= r10*(-1)+1;
r12= a*b;
r13= r12*r10
r14= x*r11;
y= r13+r14;
return;
} ・・・・・・・(7)
更に、上記(7)式のプログラムの自明の削除を変換3として行うと、次の(8)式が得られる。
r1=a-b; r2=c-d;
r3= (r1>0 && r2>0)? 1:0;
r4= r3*(-1)+1;
r5= d*r3;
r6= 0*r4;
x=r5+r6;
r7= a+ b; r8=c*d;
r9=r7-r8
r10= (r9>0)?1:0;
r11= r10*(-1)+1;
r12= a*b;
r13= r12*r10
r14= x*r11;
y= r13+r14;
return;
} ・・・・・・・(7)
更に、上記(7)式のプログラムの自明の削除を変換3として行うと、次の(8)式が得られる。
void prog(a, b, c, d, &x, &y){
r1=a-b; r2=c-d;
r3= (r1>0 && r2>0)? 1:0;
x= d*r3;
r7= a+ b; r8=c*d;
r9=r7-r8
r10= (r9>0)?1:0;
r11= r10*(-1)+1;
r12= a*b;
r13= r12*r10
r14= x*r11;
y= r13+r14
return;
} ・・・・・・・(8)
次にこの(8)式のプログラムを疎行列に変換する。そのために各要素の依存関係を調べる。この過程を図2に基づいて説明する。(8)式の下の方から辿ると、y(・)は、r13(x)とr14(x)に依存しており、r14(x)は、x(x)とr11(・)に依存している。r13(x)はr12(x)とr10(?)に依存しており、r12(x)はaとbに依存している。
r1=a-b; r2=c-d;
r3= (r1>0 && r2>0)? 1:0;
x= d*r3;
r7= a+ b; r8=c*d;
r9=r7-r8
r10= (r9>0)?1:0;
r11= r10*(-1)+1;
r12= a*b;
r13= r12*r10
r14= x*r11;
y= r13+r14
return;
} ・・・・・・・(8)
次にこの(8)式のプログラムを疎行列に変換する。そのために各要素の依存関係を調べる。この過程を図2に基づいて説明する。(8)式の下の方から辿ると、y(・)は、r13(x)とr14(x)に依存しており、r14(x)は、x(x)とr11(・)に依存している。r13(x)はr12(x)とr10(?)に依存しており、r12(x)はaとbに依存している。
r11(・)はr10(?)に依存し、r10(?)はr9(・)に依存する。r9(・)はr7(・)とr8(x)に依存し、r7(・)はaとbに依存し、r8(x)はcとdに依存する。
また、x(x)はdとr3(?)に依存し、r3(?)はr1(・)と、r2(・)に依存する。r1(・)はaとbに依存し、r2(・)はcとdに依存する。
次にスケジューリングを行う。今の場合、演算を積和(・)、乗積(×)、正判(?)の順序に行うとすると、上記依存関係なら、図3に示す4つのサイクルが導かれる。
そして、疎行列作成部14において、これらの関係を積和(・)、乗積(×)、正判(?)の行列で表す。積和(・)の行列を図4に示し、乗積(×)の行列を図5に示し、正判(?)の行列を図6に示す。例えば、積和の行列において、r7=a+bであり、r9=r7−r8である。
このようにして、積和の行列(プログラム)が得られる。図4から、0以外が遍在する3つの疎行列(0は空白で表示している)が得られたことがわかる。
これらの図4乃至図6から、各演算毎の疎行列が構成されたことが理解される。
以上述べたように、疎行列群を作成し、これらを並列に演算していくことにより演算処理の速度を向上させることができる。この疎行列の作成は、例えば図1では、並列ロジック化部13、疎行列作成部14で行われる。
本発明の実施形態によれば、プログラミング言語以外の記述ルールや、その言語に含まれる一部の機能は、VHDLやVerilogHDLと同等にすることができる。
また、本発明の実施形態によれば、GPGPUメーカが提供する疎行列演算ライブラリを利用することができ、ハードウェア(FPGA)による並列実行と同様になり、相当の性能が出せる。変換後のプログラムを改変せず変換前のプログラムを改変することにより機能の改変を行うことができ、実質的に変換後のプログラムを改変できる。また上記実施形態によれば変換前のプログラムはVHDLやVerilogHDLと同様に改変が容易である。
本発明で、「疎行列の演算を得意とするハードウェア」とは例えばGPGPUである。
(その他変形例)
本発明のいくつかの実施形態を説明したがこれらの実施形態は、例として提示したものであり、発明の範囲を限定することは意図していない。これら新規な実施形態は、その他の様々な形態で実施されることが可能であり、発明の要旨を逸脱しない範囲で、種々の省略、置き換え、変更を行うことができる。これら実施形態やその変形は、発明の範囲や要旨に含まれるとともに、特許請求の範囲に記載された発明とその均等の範囲に含まれる。
本発明のいくつかの実施形態を説明したがこれらの実施形態は、例として提示したものであり、発明の範囲を限定することは意図していない。これら新規な実施形態は、その他の様々な形態で実施されることが可能であり、発明の要旨を逸脱しない範囲で、種々の省略、置き換え、変更を行うことができる。これら実施形態やその変形は、発明の範囲や要旨に含まれるとともに、特許請求の範囲に記載された発明とその均等の範囲に含まれる。
11・・・・プログラム行列演算化装置
12・・・・変換前プログラム保持部
13・・・・並列ロジック化部
14・・・・疎行列作成部
16・・・・変換後プログラム保持部
12・・・・変換前プログラム保持部
13・・・・並列ロジック化部
14・・・・疎行列作成部
16・・・・変換後プログラム保持部
Claims (1)
- ノイマン型プログラムを一群の疎行列プログラムに変換するノイマン型プログラムの疎行列演算化装置であって、
変換前プログラムの並列ロジック化を行う並列ロジック化部と、
この並列ロジック化部により得られた中間プログラムから疎行列を作成する疎行列作成部と、
この疎行列作成部により得られた疎行列を保持する変換後プログラム保持部と、を備え、
疎行列の演算を得意とするハードウェアにより高速に並列実行が可能な疎行列プログラムを作成することを特徴とするプログラム疎行列演算化装置。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
JP2013073084A JP2014197338A (ja) | 2013-03-29 | 2013-03-29 | プログラムの疎行列演算化装置 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
JP2013073084A JP2014197338A (ja) | 2013-03-29 | 2013-03-29 | プログラムの疎行列演算化装置 |
Publications (1)
Publication Number | Publication Date |
---|---|
JP2014197338A true JP2014197338A (ja) | 2014-10-16 |
Family
ID=52358063
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
JP2013073084A Pending JP2014197338A (ja) | 2013-03-29 | 2013-03-29 | プログラムの疎行列演算化装置 |
Country Status (1)
Country | Link |
---|---|
JP (1) | JP2014197338A (ja) |
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN108334190A (zh) * | 2016-12-27 | 2018-07-27 | 意美森公司 | 使用视场的触觉反馈 |
-
2013
- 2013-03-29 JP JP2013073084A patent/JP2014197338A/ja active Pending
Cited By (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN108334190A (zh) * | 2016-12-27 | 2018-07-27 | 意美森公司 | 使用视场的触觉反馈 |
CN108334190B (zh) * | 2016-12-27 | 2022-08-26 | 意美森公司 | 使用视场的触觉反馈 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN107450972B (zh) | 一种调度方法、装置以及电子设备 | |
Date et al. | GPU-accelerated Hungarian algorithms for the linear assignment problem | |
US11106437B2 (en) | Lookup table optimization for programming languages that target synchronous digital circuits | |
JP4931978B2 (ja) | 並列化処理方法、システム、及びプログラム | |
US10810343B2 (en) | Mapping software constructs to synchronous digital circuits that do not deadlock | |
CN102541612B (zh) | 数据平行代码中的映射变换 | |
EP3912074B1 (en) | Generating a synchronous digital circuit from a source code construct defining a function call | |
US9575869B2 (en) | Service implementation based debugger for service oriented architecture projects | |
EP3113020A1 (en) | Data processing device and method for processing serial tasks | |
US20200226051A1 (en) | Generating a debugging network for a synchronous digital circuit during compilation of program source code | |
Huchette et al. | Parallel algebraic modeling for stochastic optimization | |
Govindarajulu et al. | On quantified modal theorem proving for modeling ethics | |
US10387126B2 (en) | Data marshalling optimization via intermediate representation of workflows | |
US8584080B2 (en) | Modeling and generating computer software product line variants | |
CN105204837A (zh) | 一种逻辑编程的实现方法和装置 | |
US10176086B2 (en) | Event-driven software test sequence determination | |
WO2020075532A1 (ja) | システム移行支援装置、システム移行支援方法及びプログラム | |
Huang | Enhancing the Performance Portability of Heterogeneous Circuit Analysis Programs | |
US11789775B2 (en) | Progress visualization of computational job | |
JP2014197338A (ja) | プログラムの疎行列演算化装置 | |
Ling et al. | Mrbayes tgmc3: a tight gpu implementation of mrbayes | |
CN106557312B (zh) | 程序开发支援装置以及程序开发支援软件 | |
WO2020211074A1 (zh) | 一种多方安全计算数据处理方法、装置及系统 | |
Humphrey et al. | Systematic debugging methods for large-scale hpc computational frameworks | |
JP5966801B2 (ja) | 言語変換装置、プログラム |