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

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

Info

Publication number
JP2020129297A
JP2020129297A JP2019021949A JP2019021949A JP2020129297A JP 2020129297 A JP2020129297 A JP 2020129297A JP 2019021949 A JP2019021949 A JP 2019021949A JP 2019021949 A JP2019021949 A JP 2019021949A JP 2020129297 A JP2020129297 A JP 2020129297A
Authority
JP
Japan
Prior art keywords
data
processing
time
order
execution
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
JP2019021949A
Other languages
English (en)
Other versions
JP7172687B2 (ja
Inventor
利幸 一場
Toshiyuki Ichiba
利幸 一場
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 JP2019021949A priority Critical patent/JP7172687B2/ja
Priority to US16/711,515 priority patent/US11275611B2/en
Publication of JP2020129297A publication Critical patent/JP2020129297A/ja
Application granted granted Critical
Publication of JP7172687B2 publication Critical patent/JP7172687B2/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/46Multiprogramming arrangements
    • G06F9/48Program initiating; Program switching, e.g. by interrupt
    • G06F9/4806Task transfer initiation or dispatching
    • G06F9/4843Task transfer initiation or dispatching by program, e.g. task dispatcher, supervisor, operating system
    • G06F9/4881Scheduling strategies for dispatcher, e.g. round robin, multi-level priority queues
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F30/00Computer-aided design [CAD]
    • G06F30/30Circuit design
    • G06F30/34Circuit design for reconfigurable circuits, e.g. field programmable gate arrays [FPGA] or programmable logic devices [PLD]
    • G06F30/343Logical level
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F3/00Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
    • G06F3/06Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
    • G06F3/0601Interfaces specially adapted for storage systems
    • G06F3/0602Interfaces specially adapted for storage systems specifically adapted to achieve a particular effect
    • G06F3/0604Improving or facilitating administration, e.g. storage management
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F3/00Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
    • G06F3/06Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
    • G06F3/0601Interfaces specially adapted for storage systems
    • G06F3/0628Interfaces specially adapted for storage systems making use of a particular technique
    • G06F3/0653Monitoring storage devices or systems
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F3/00Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
    • G06F3/06Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
    • G06F3/0601Interfaces specially adapted for storage systems
    • G06F3/0668Interfaces specially adapted for storage systems adopting a particular infrastructure
    • G06F3/0671In-line storage system
    • G06F3/0673Single storage device
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F30/00Computer-aided design [CAD]
    • G06F30/30Circuit design
    • G06F30/32Circuit design at the digital level
    • G06F30/327Logic synthesis; Behaviour synthesis, e.g. mapping logic, HDL to netlist, high-level language to RTL or netlist

Abstract

【課題】実行情報により記述された複数の処理の実行時間を短縮する。【解決手段】記憶部211は、複数のデータに対する第1処理と、第1処理に続いて実行される第2処理とを含む、第1実行情報221を記憶する。変換部212は、第1処理に含まれるデータライトの順序と第2処理に含まれるデータリードの順序とに基づいて、実行順序の制約の下で、第2処理の開始タイミングを第1処理の終了タイミングよりも早めることで、第1実行情報を第2実行情報222に変換する。そして、変換部212は、第2実行情報222を出力する。実行順序の制約は、複数のデータ各々について、第1処理におけるデータライトの後で第2処理におけるデータリードを実行することを示す。【選択図】図2

Description

本発明は、情報処理装置、情報処理方法、及びプログラムに関する。
コンピュータによってFPGA(Field-Programmable Gate Array)等の論理回路を合成する高位合成技術が知られている(例えば、特許文献1を参照)。高位合成技術では、論理回路で処理するアルゴリズムをC言語等のプログラム言語により記述した動作記述が、ハードウェア記述言語(Hardware Description Language,HDL)の回路記述に変換される。
FPGAによって高性能な処理を実現するためには、パイプライン処理を用いることが望ましい。高位合成技術によれば、C言語等を用いてパイプライン処理を記述することで、パイプライン回路を製造することができる。
並列/パイプライン式のコンピュータに関連して、制御依存性とデータ依存性とから成るプログラム依存性グラフを生成して命令をスケジュールする、コンピュータ用大域命令スケジューラが知られている(例えば、特許文献2を参照)。
特開2016−177454号公報 特開平4−263331号公報
論理回路によって実行されるパイプライン処理には複数の処理が含まれており、それらの処理が順番に実行される場合、先行する処理の開始時刻から、その処理の実行時間だけ遅れて、次の処理が開始される。このため、従来の高位合成技術では、パイプライン処理を効率良く実行するパイプライン回路を製造することが困難である。
なお、かかる問題は、ハードウェア回路によって実行されるパイプライン処理に限らず、ソフトウェアによって実行されるパイプライン処理においても生ずるものである。
1つの側面において、本発明は、実行情報により記述された複数の処理の実行時間を短縮することを目的とする。
1つの案では、情報処理装置は、記憶部及び変換部を含む。記憶部は、複数のデータに対する第1処理と、第1処理に続いて実行される第2処理とを含む、第1実行情報を記憶する。
変換部は、第1処理に含まれるデータライトの順序と第2処理に含まれるデータリードの順序とに基づいて、実行順序の制約の下で、第2処理の開始タイミングを第1処理の終了タイミングよりも早めることで、第1実行情報を第2実行情報に変換する。そして、変換部は、第2実行情報を出力する。実行順序の制約は、複数のデータ各々について、第1処理におけるデータライトの後で第2処理におけるデータリードを実行することを示す。
実施形態によれば、実行情報により記述された複数の処理の実行時間を短縮することができる。
論理回路によって実行される処理を示す図である。 情報処理装置の機能的構成図である。 変換処理のフローチャートである。 前処理におけるデータライトの実行順序を示す図である。 メイン処理におけるデータリードの実行順序及びデータ依存性を示す図である。 前処理及びメイン処理に含まれるデータライト及びデータリードの順序を示す図である。 メイン処理に含まれるデータライト及びデータリードの順序を示す図である。 in[1][0]が選択された場合の実行順序変更処理を示す図である。 in[2][0]が選択された場合の実行順序変更処理を示す図である。 実行順序変更処理が終了したときのデータライト及びデータリードの順序を示す図である。 オーバラップさせた前処理及びメイン処理に含まれるデータライト及びデータリードの順序を示す図である。 変換処理の具体例を示すフローチャートである。 実行順序変更処理のフローチャート(その1)である。 実行順序変更処理のフローチャート(その2)である。 開始時刻変更処理のフローチャートである。 実行順序変更処理を省略した場合のデータライト及びデータリードの順序を示す図である。 情報処理装置のハードウェア構成図である。
以下、図面を参照しながら、実施形態を詳細に説明する。
図1は、論理回路によって実行される処理の例を示している。図1(a)は、処理P1、処理P2、及び処理P3を含むパイプライン処理における遅延時間の例を示している。処理P1、処理P2、及び処理P3の各々は、例えば、画像符号化、深層学習(Deep Learning)、科学技術計算等における多次元の配列データに対する処理である。画像符号化の場合、配列データとして、画像ブロックの画素値を格納する2次元の配列データが用いられる。
図1(a)に示すように、従来の高位合成技術では、処理P1、処理P2、及び処理P3を順番に実行する回路記述が生成される。この場合、遅延時間D2Aは、処理P1の開始時刻から処理P2の開始時刻までの時間を表し、遅延時間D3Aは、処理P2の開始時刻から処理P3の開始時刻までの時間を表す。
図1(b)は、連続する2つの処理を時間的にオーバラップさせた場合の遅延時間の例を示している。この場合、処理P1の開始時刻から処理P2の開始時刻までの遅延時間D2Bは、遅延時間D2Aよりも短縮され、処理P2の開始時刻から処理P3の開始時刻までの遅延時間D3Bは、遅延時間D3Aよりも短縮される。したがって、図1(a)のパイプライン処理と比較して、処理P1〜処理P3の総実行時間が大きく短縮される。
しかしながら、先行する処理の処理結果を用いて次の処理が実行される場合、それらの処理をオーバラップさせることは困難である。
図2は、実施形態の情報処理装置(コンピュータ)の機能的構成例を示している。図2の情報処理装置201は、記憶部211及び変換部212を含む。記憶部211は、複数のデータに対する第1処理と、第1処理に続いて実行される第2処理とを含む、第1実行情報221を記憶する。変換部212は、第1実行情報221を第2実行情報222に変換する。
図3は、図2の情報処理装置201が行う変換処理の例を示すフローチャートである。まず、変換部212は、第1実行情報221を解析する(ステップ301)。
次に、変換部212は、第1処理に含まれるデータライトの順序と第2処理に含まれるデータリードの順序とに基づいて、実行順序の制約の下で、第2処理の開始タイミングを第1処理の終了タイミングよりも早める(ステップ302)。これにより、第1実行情報221が第2実行情報222に変換される。実行順序の制約は、複数のデータ各々について、第1処理におけるデータライトの後で第2処理におけるデータリードを実行することを示す。そして、変換部212は、第2実行情報222を出力する(ステップ303)。
図2の情報処理装置201によれば、実行情報により記述された複数の処理の実行時間を短縮することができる。
例えば、図1(a)に示した処理P1〜処理P3の場合、処理P1に含まれるデータライトの順序と処理P2に含まれるデータリードの順序とに基づいて、実行順序の制約の下で、処理P2の開始タイミングが処理P1の終了タイミングよりも早められる。これにより、図1(b)に示したように、遅延時間D2Aを削減することができる。同様に、処理P2に含まれるデータライトの順序と処理P3に含まれるデータリードの順序とに基づいて、実行順序の制約の下で、処理P3の開始タイミングを処理P2の終了タイミングよりも早めることで、遅延時間D3Aを削減することができる。
次に、論理回路の製造に用いられる実行情報の具体例について説明する。この場合、第1実行情報221としては、例えば、C言語等のプログラム言語により記述された動作記述が用いられ、第2実行情報222としては、例えば、HDL等により記述された回路記述が用いられる。パイプライン処理の動作記述が、次のような前処理及びメイン処理を含み、前処理の次にメイン処理が実行される場合を想定する。
(1)前処理
for (x=0; x<5; x++)
for (y=0; y<5; y++)
in[y][x]=・・・
(2)メイン処理
for (x=0; x<5; x++) {
out[0][x]=in[0][x];

for (y=1; y<5; y++) {
for (x=0; x<5; x++) {
a=out[y−1][x];
b=(x<4)? out[y−1][x+1]:0;
out[y][x]=func(a,b,in[y][x]);

前処理及びメイン処理は、第1処理及び第2処理の一例である。前処理は、5×5の2次元配列in[y][x](x,y=0〜4)の各要素にデータを書き込むループ処理であり、25個のデータライトを含む。メイン処理は、in[y][x]から、演算結果を示す5×5の2次元配列out[y][x]を生成する処理であり、out[0][x]を生成するループ処理L1と、out[y][x](y≠0)を生成するループ処理L2とを含む。
ループ処理L1は、in[0][x](x=0〜4)からデータを読み出す5個のデータリードと、読み出したデータをout[0][x]に書き込む5個のデータライトとを含む。一方、ループ処理L2は、以下のような処理を含む。
(A1)in[y][x](x=0〜4,y=1〜4)を読み出す20個のデータリード
(A2)out[y−1][x](x=0〜4,y=1〜4)を読み出す20個のデータリード
(A3)out[y−1][x+1](x=0〜3,y=1〜4)を読み出す16個のデータリード
(A4)読み出されたデータを用いてout[y][x](x=0〜4,y=1〜4)を生成する20個のデータ演算
(A5)生成されたout[y][x](x=0〜4,y=1〜4)を書き込む20個のデータライト
図4は、前処理におけるin[y][x]に対するデータライトの実行順序を示している。in[y][x]は5×5のブロックで表され、横方向はx方向を表し、縦方向はy方向を表す。前処理では、in[y][x]は、in[0][0]、in[1][0]、in[2][0]、・・・の順番にアクセスされる。
図5は、メイン処理におけるデータリードの実行順序及びデータ依存性を示している。図5(a)は、ループ処理L1におけるin[y][x]に対するデータリードの実行順序を示している。ループ処理L1では、in[y][x]は、in[0][0]、in[0][1]、in[0][2]、・・・の順番にアクセスされる。
図5(b)は、ループ処理L2におけるデータ依存性を示している。out[y][x](x=0〜3,y=1〜4)は、その上方の要素out[y−1][x]及び右上の要素out[y−1][x+1]を用いて生成されるため、out[y][x]は、それらの要素に対するデータ依存性を有する。
このように、ループ処理L2にはデータ依存性があるため、添え字yに関するループ処理(外側のループ処理)と、添え字xに関するループ処理(内側のループ処理)とを入れ換えることは難しい。したがって、前処理におけるin[y][x]に対するデータライトの実行順序が予め決められている場合、メイン処理におけるin[y][x]に対するデータリードの実行順序は、前処理とは異なる実行順序になる。
図6は、前処理及びメイン処理に含まれるデータライト及びデータリードの順序の例を示している。図6の表の各列は時刻を表し、各行は、記憶領域内におけるin[y][x]及びout[y][x]のアドレスを表す。時刻は、処理の実行タイミングの一例である。Ainはin[y][x]のアドレスを表し、Aoutはout[y][x]のアドレスを表す。図6のAin及びAoutは、次式により記述される。
Ain=x+y*5 (x=0〜4,y=0〜4) (1)
Aout=x+y*5 (x=0〜4,y=0〜4) (2)
例えば、in[0][0]〜in[0][4]のアドレスAinは、それぞれ、0〜4であり、in[1][0]〜in[1][4]のアドレスAinは、それぞれ、5〜9である。in[2][0]〜in[2][4]のアドレスAinは、それぞれ、10〜14であり、in[3][0]〜in[3][4]のアドレスAinは、それぞれ、15〜19である。in[4][0]〜in[4][4]のアドレスAinは、それぞれ、20〜24である。
out[y][x]のアドレスAoutについても、アドレスAinと同様である。ただし、実際の記憶領域内では、x及びyの値の各組み合わせに対して、アドレスAinとアドレスAoutとが異なる位置に割り当てられる。
図6の表の各セルに記述された“r”は、そのセルの行に対応するアドレスに対するデータリードを表し、そのセルの列に対応する時刻において実行される。一方、各セルに記述された“w”は、そのセルの行に対応するアドレスに対するデータライトを表し、そのセルの列に対応する時刻において実行される。
時刻0〜時刻24の処理は前処理に対応し、時刻25〜時刻49の処理はメイン処理に対応する。各列は、1つのデータを書き込むための1つ以上の処理を含み、これらの処理は、1つの演算単位とみなされる。
例えば、時刻0〜時刻24の各時刻における演算単位は、Ainに対する1個のデータライトを含む。この演算単位を実行することで、データがin[y][x]に書き込まれる。
時刻25〜時刻29の各時刻における演算単位は、Ainに対する1個のデータリードと、Aoutに対する1個のデータライトとを含む。この演算単位を実行することで、in[0][x]から読み出されたデータがout[0][x]に書き込まれる。
時刻30〜時刻33、時刻35〜時刻38、時刻40〜時刻43、及び時刻45〜時刻48の各時刻における演算単位は、Ainに対する1個のデータリードと、Aoutに対する2個のデータリードと、Aoutに対する1個のデータライトとを含む。この演算単位を実行することで、in[y][x]、out[y−1][x]、及びout[y−1][x+1]から読み出されたデータを用いて演算結果が生成され、その演算結果がout[y][x]に書き込まれる。
時刻34、時刻39、時刻44、及び時刻49の各時刻における演算単位は、Ainに対する1個のデータリードと、Aoutに対する1個のデータリードと、Aoutに対する1個のデータライトとを含む。この演算単位を実行することで、in[y][x]及びout[y−1][x]から読み出されたデータを用いて演算結果が生成され、その演算結果がout[y][x]に書き込まれる。
なお、時刻30〜時刻49の各時刻における演算単位には、演算結果を生成する不図示のデータ演算も含まれている。前処理に含まれる25個のデータライトの順序は、図4に示した実行順序に対応しており、メイン処理に含まれる25個の演算単位の順序は、図5(a)に示した実行順序に対応している。
図6のパイプライン処理において、前処理の開始時刻0からメイン処理の開始時刻25までの遅延時間DAは、25である。
変換部212は、前処理におけるin[y][x]に対するデータライトの順序と、メイン処理における演算単位の順序とに基づいて、いずれかの時刻の演算単位を別の時刻に移動させることで、メイン処理に含まれる演算単位の順序を変更する。このとき、変換部212は、out[y][x]の各要素について、データライトの後でデータリードを実行する、実行順序の制約を守りながら、演算単位の順序を変更する。これにより、out[y][x]のデータ依存性が保持される。
次に、変換部212は、前処理におけるin[y][x]に対するデータライトの順序と、メイン処理におけるin[y][x]に対するデータリードの順序とに基づいて、メイン処理の開始時刻を前処理の終了時刻よりも早める。これにより、第1実行情報221が第2実行情報222に変換される。このとき、変換部212は、in[y][x]の各要素について、前処理におけるデータライトの後でメイン処理におけるデータリードを実行する、実行順序の制約を守りながら、メイン処理の開始時刻をなるべく早い時刻に変更する。
メイン処理の開始時刻を前処理の終了時刻よりも早めることで、遅延時間DAを削減して、パイプライン処理の総実行時間を短縮することができる。また、前処理におけるin[y][x]に対するデータライトの順序に基づいて、メイン処理に含まれる演算単位の順序を変更することで、遅延時間DAをさらに削減することが可能になる。
図7は、図6のメイン処理に含まれるデータライト及びデータリードの順序を示している。ただし、図7では、図6の時刻25〜時刻49が時刻0〜時刻24にそれぞれ変更されている。
変換部212は、メイン処理に含まれる演算単位の順序を変更する実行順序変更処理において、前処理におけるin[y][x]に対するデータライトの順序に従って、in[y][x]の要素を順番に選択する。次に、変換部212は、メイン処理に含まれる演算単位の中から、選択されたin[y][x]を読み出すデータリードを含む特定の演算単位を選択する。
上述したように、メイン処理におけるin[y][x]に対するデータリードの実行順序は、前処理におけるin[y][x]に対するデータライトの実行順序とは異なっている。このため、メイン処理の開始時刻と、選択された特定の演算単位の時刻との間に、選択されたin[y][x]よりも後で書き込まれたin[y][x]を読み出すデータリードを含む、演算単位が存在することがある。この場合、変換部212は、特定の演算単位の時刻を早めるように、メイン処理に含まれる演算単位の順序を変更する。
このような実行順序変更処理によれば、メイン処理におけるin[y][x]に対するデータリードの実行順序を、前処理におけるin[y][x]に対するデータライトの実行順序に近づけることができる。したがって、前処理の開始時刻とメイン処理の開始時刻の間隔をできるだけ短縮することが可能になる。
ただし、out[y][x]のデータ依存性を保存するため、out[y][x]の各要素について実行順序の制約が遵守される。例えば、メイン処理における時刻5の演算単位では、Aout=0に対応するout[0][0]と、Aout=1に対応するout[0][1]とが読み出される。一方、out[0][0]は時刻0において書き込まれ、out[0][1]は時刻1において書き込まれる。このため、時刻5の演算単位を時刻0又は時刻1に移動することは禁止される。
前処理におけるin[y][x]に対するデータライトの順序によれば、最初に、時刻0のデータライトによって書き込まれるin[0][0]が選択される。メイン処理において、選択されたin[0][0]を読み出すデータリードを含む演算単位は、時刻0の演算単位である。時刻0はメイン処理の開始時刻であるため、時刻0の演算単位は移動させる必要がない。
次に、前処理における時刻1のデータライトによって書き込まれるin[1][0]が選択される。
図8は、in[1][0]が選択された場合の実行順序変更処理の例を示している。この場合、矢印801が示すように、メイン処理において、選択されたin[1][0]を読み出すデータリードを含む、時刻5の演算単位が選択される。時刻0と時刻5の間には、in[1][0]よりも後で書き込まれたin[0][1]〜in[0][4]を読み出すデータリードを含む、4個の演算単位が存在する。
また、時刻5の演算単位は、矢印802が示すように、out[0][1]を読み出すデータリードを含む。out[0][1]は、矢印803が示すように、メイン処理における時刻1のデータライトによって書き込まれている。したがって、時刻5の演算単位を時刻1に移動することは禁止される。そこで、メイン処理における時刻0及び時刻1の演算単位は変更されず、時刻5の演算単位が時刻2に移動する。
次に、前処理における時刻2のデータライトによって書き込まれるin[2][0]が選択される。
図9は、in[2][0]が選択された場合の実行順序変更処理の例を示している。図9では、図8のメイン処理における時刻5の演算単位が時刻2に移動しており、時刻2〜時刻4の演算単位が時刻3〜時刻5に移動している。
この場合、矢印901が示すように、メイン処理において、選択されたin[2][0]を読み出すデータリードを含む、時刻10の演算単位が選択される。時刻0と時刻10の間には、in[2][0]よりも後で書き込まれたin[0][1]〜in[0][4]及びin[1][1]〜in[1][4]を読み出すデータリードを含む、8個の演算単位が存在する。
また、時刻10の演算単位は、矢印902が示すように、out[1][1]を読み出すデータリードを含む。out[1][1]は、矢印903が示すように、メイン処理における時刻6のデータライトによって書き込まれている。
時刻6の演算単位は、矢印904が示すように、out[0][2]を読み出すデータリードを含む。out[0][2]は、矢印905が示すように、メイン処理における時刻3のデータライトによって書き込まれている。
このように、メイン処理において、データ依存性を有する演算単位の依存先の演算単位が、さらに別の演算単位に対してデータ依存性を有する場合がある。そこで、変換部212は、選択された演算単位によって読み出されるout[y][x]を生成する演算単位を、再帰的に特定する。そして、変換部212は、特定された演算単位が選択された演算単位よりも前に実行されるように、メイン処理に含まれる演算単位の順序を変更する。
これにより、メイン処理におけるout[y][x]のデータ依存性をすべて保持しながら、演算単位の順序を変更することができる。
図9の例では、時刻3の演算単位の次に時刻6の演算単位を実行し、時刻6の演算単位の次に時刻10の演算単位を実行することで、すべてのデータ依存性が保存される。そこで、時刻0〜時刻3の演算単位は変更されず、時刻6の演算単位が時刻4に移動し、時刻10の演算単位が時刻5に移動する。
以降、in[y][x]に対するデータライトの順序に従って同様の操作を繰り返すことで、メイン処理に含まれる演算単位の順序がさらに変更される。
図10は、実行順序変更処理が終了したときのメイン処理に含まれるデータライト及びデータリードの順序の例を示している。
変換部212は、in[y][x]の各要素について実行順序の制約を守りながら、図10のメイン処理の開始時刻を早めることで、前処理とメイン処理をオーバラップさせる。
図6の前処理と図10のメイン処理とを比較すると、in[y][x]の25個の要素のうち、前処理におけるデータライトとメイン処理におけるデータリードとの間隔が最も短いのは、Ain=4に対応するin[0][4]である。そこで、in[0][4]に対するデータライトの直後にin[0][4]に対するデータリードが実行されるように、前処理とメイン処理をオーバラップさせることで、メイン処理の開始時刻を可能な限り早めることができる。
図11は、オーバラップさせた前処理及びメイン処理に含まれるデータライト及びデータリードの順序の例を示している。図11において、in[0][4]に対するデータライトは時刻20で実行されており、in[0][4]に対するデータリードは時刻21で実行されている。前処理の開始時刻0からメイン処理の開始時刻11までの遅延時間DBは、11であり、図6の遅延時間DAよりも14だけ削減されている。したがって、前処理及びメイン処理の総実行時間も、14だけ短縮される。
図12は、変換部212が行う変換処理の具体例を示すフローチャートである。まず、変換部212は、第1実行情報221を用いて実行順序変更処理を行うことで、第2処理に含まれる演算単位の順序を変更する(ステップ1201)。次に、変換部212は、開始時刻変更処理を行うことで、変更後の第2処理の開始時刻を変更する(ステップ1202)。そして、変換部212は、第1処理と変更後の第2処理とを含む第2実行情報222を出力する(ステップ1203)。
出力された第2実行情報222を用いることで、パイプライン処理を効率良く実行するパイプライン回路を製造することができる。
図13A及び図13Bは、図12のステップ1201における実行順序変更処理の例を示すフローチャートである。まず、変換部212は、第1処理及び第2処理から、1つのデータを書き込むための1つ以上の処理を抽出し、抽出された処理を演算単位として、演算単位に含まれるデータライト及びデータリードの順序を示す表を生成する(ステップ1301)。これにより、例えば、図6のような表が生成される。
表の各行には、各データライトによって書き込まれるデータのアドレスが設定され、各列には、各演算単位が実行される時刻が設定される。各演算単位には、データライトのみが含まれることもあり、データリード及びデータライトが含まれることもあり、データリード、データ演算、及びデータライトが含まれることもある。変換部212は、第2処理の表として、図6のメイン処理の表の代わりに、図7のメイン処理の表を生成しても構わない。
次に、変換部212は、第1処理における時刻を示す変数tに、第1処理の開始時刻を設定し、第2処理における時刻を示す変数t_lastに、第2処理の開始時刻を設定する(ステップ1302)。そして、変換部212は、t又はt_lastのいずれかが終了時刻に一致するか否かをチェックする(ステップ1303)。
t又はt_lastのいずれも終了時刻に一致しない場合(ステップ1303,NO)、変換部212は、時刻tにおける第1処理のデータライトによって書き込まれるデータのアドレスaddr_t1wを取得する。そして、変換部212は、第1処理のデータライトによって書き込まれ、かつ、時刻t_lastにおける第2処理のデータリードによって読み出されるデータのアドレスと、addr_t1wとを比較する(ステップ1304)。
addr_t1wと読み出されるデータのアドレスとが一致する場合(ステップ1304,YES)、変換部212は、時刻t_lastを1だけインクリメントし(ステップ1309)、時刻tを1だけインクリメントする(ステップ1310)。そして、変換部212は、ステップ1303以降の処理を繰り返す。
一方、addr_t1wと読み出されるデータのアドレスとが一致しない場合(ステップ1304,NO)、変換部212は、第2処理において、addr_t1wからデータを読み出すデータリードが実行される時刻t_rを探索する(ステップ1305)。そして、変換部212は、t_rとt_lastを比較する(ステップ1306)。t_rがt_lastよりも早い場合(ステップ1306,YES)、変換部212は、ステップ1310以降の処理を行う。
一方、t_rがt_last以降である場合(ステップ1306,NO)、変換部212は、スタック構造のリストInsertListとキュー構造のリストSearchListとを初期化する(ステップ1307)。スタック構造は、LIFO(Last In First Out)の構造であり、キュー構造は、FILO(First In Last Out)の構造である。InsertListは、移動させる演算単位が実行される時刻を格納し、SearchListは、再帰的に探索される時刻を格納する。InsertList及びSearchListを初期化することで、これらのリストが空になる。
次に、変換部212は、InsertListにt_rをプッシュし、SearchListにt_rをエンキューする(ステップ1308)。そして、変換部212は、SearchListが空であるか否かをチェックする(ステップ1311)。
SearchListが空でない場合(ステップ1311,NO)、変換部212は、SearchListからデキューした時刻をt_curに設定する(ステップ1313)。
次に、変換部212は、第2処理のデータライトによって書き込まれ、かつ、時刻t_curのデータリードによって読み出される1つ以上のデータのアドレスを、リストaddrListに設定する(ステップ1314)。そして、変換部212は、addrListが空であるか否かをチェックする(ステップ1315)。
addrListが空でない場合(ステップ1315,NO)、変換部212は、addrListから最も早い時刻(最小値)を取り出して、アドレスaddrに設定する(ステップ1316)。そして、変換部212は、第2処理において、addrにデータを書き込むデータライトが実行される時刻t_depを探索する。
次に、変換部212は、t_depとt_lastを比較する(ステップ1317)。t_depがt_lastよりも早い場合(ステップ1317,NO)、変換部212は、ステップ1315以降の処理を繰り返す。
一方、t_depがt_last以降である場合(ステップ1317,YES)、変換部212は、InsertListにt_depをプッシュし、SearchListにt_depをエンキューする(ステップ1318)。そして、変換部212は、ステップ1315以降の処理を繰り返す。
addrListが空である場合(ステップ1315,YES)、変換部212は、ステップ1311以降の処理を繰り返す。そして、SearchListが空である場合(ステップ1311,YES)、変換部212は、InsertListからポップした時刻において実行される演算単位を、ポップした時刻の順番に、t_last以降の時刻に挿入する(ステップ1312)。
さらに、変換部212は、t_last以降の各時刻のうち、InsertListからポップされなかった時刻の演算単位が、挿入された演算単位よりも後で実行されるように、演算単位の順序を変更する。そして、変換部212は、InsertListからポップされた時刻の個数をt_lastに加算することで、t_lastを更新し、ステップ1310以降の処理を繰り返す。
そして、t又はt_lastのいずれかが終了時刻に一致する場合(ステップ1303,YES)、変換部212は、処理を終了する。
例えば、ステップ1301において、第1処理の表として、図6の前処理の表が生成され、第2処理の表として、図7のメイン処理の表が生成された場合、ステップ1302において、t=t_last=0となる。
このとき、addr_t1wはAin=0を指している。図7において、時刻0のデータリードによって読み出されるデータのアドレスは0であり、addr_t1wと一致する。したがって、t_last及びtが1だけインクリメントされる。
次に、t=t_last=1の場合、addr_t1w=5となる。図7において、時刻1のデータリードによって読み出されるデータのアドレスは1であり、addr_t1wと一致しない。したがって、t_r=5となり、InsertList=[5]、SearchList=[5]となる。
SearchListから時刻5をデキューすると、SearchList=[](空)、t_cur=5となる。図7において、時刻5のデータリードによって読み出されるデータのアドレスAoutは、0及び1である。したがって、addrList=[0,1]となる。
次に、addrListから0が取り出され、addr=0となる。図7において、Aout=0にデータを書き込むデータライトの時刻は0であるため、t_dep=0となる。t_depはt_lastよりも早いため、addrListから1が取り出され、addr=1となる。図7において、Aout=1にデータを書き込むデータライトの時刻は1であるため、t_dep=t_last=1となる。したがって、InsertListに時刻1がプッシュされ、SearchListに時刻1がエンキューされて、InsertList=[1,5]、SearchList=[1]となる。
SearchListから時刻1をデキューすると、SearchList=[]、t_cur=1となる。図7において、時刻1のデータリードによって読み出されるデータのアドレスはAin=1のみであり、Aoutからはデータが読み出されない。したがって、addrList=[]となり、SearchList=[]のままである。
そこで、InsertList=[1,5]から時刻1及び時刻5が順番にポップされ、図9に示したように、それらの時刻の演算単位が時刻1及び時刻2にそれぞれ挿入される。そして、時刻2〜時刻4の演算単位が時刻3〜時刻5にそれぞれ移動し、t_last=3となり、t=2となる。
次に、t=2、t_last=3の場合、addr_t1w=10となる。図9のメイン処理において、時刻3のデータリードによって読み出されるデータのアドレスは2であり、addr_t1wと一致しない。したがって、t_r=10となり、InsertList=[10]、SearchList=[10]となる。
SearchListから時刻10をデキューすると、SearchList=[]、t_cur=10となる。図9のメイン処理において、時刻10のデータリードによって読み出されるデータのアドレスAoutは、5及び6である。したがって、addrList=[5,6]となる。
次に、addrListから5が取り出され、addr=5となる。図9のメイン処理において、Aout=5にデータを書き込むデータライトの時刻は2であるため、t_dep=2となる。t_depはt_lastよりも早いため、addrListから6が取り出され、addr=6となる。図9のメイン処理において、Aout=6にデータを書き込むデータライトの時刻は6であるため、t_dep=6となる。t_depはt_lastよりも遅いため、InsertListに時刻6がプッシュされ、SearchListに時刻6がエンキューされて、InsertList=[6,10]、SearchList=[6]となる。
SearchListから時刻6をデキューすると、SearchList=[]、t_cur=6となる。図9のメイン処理において、時刻6のデータリードによって読み出されるデータのアドレスAoutは、1及び2である。したがって、addrList=[1,2]となる。
次に、addrListから1が取り出され、addr=1となる。図9のメイン処理において、Aout=1にデータを書き込むデータライトの時刻は2であるため、t_dep=2となる。t_depはt_lastよりも早いため、addrListから2が取り出され、addr=2となる。図9のメイン処理において、Aout=2にデータを書き込むデータライトの時刻は3であるため、t_dep=t_last=3となる。したがって、InsertListに時刻3がプッシュされ、SearchListに時刻3がエンキューされて、InsertList=[3,6,10]、SearchList=[3]となる。
SearchListから時刻3をデキューすると、SearchList=[]、t_cur=3となる。図9のメイン処理において、時刻3のデータリードによって読み出されるデータのアドレスはAin=2のみであり、Aoutからはデータが読み出されない。したがって、addrList=[]となり、SearchList=[]のままである。
そこで、InsertList=[3,6,10]から時刻3、時刻6、及び時刻10が順番にポップされ、それらの時刻の演算単位が時刻3、時刻4、及び時刻5にそれぞれ挿入される。そして、時刻4、時刻5、時刻7〜時刻9の演算単位が時刻6以降に移動し、t_last=6となり、t=3となる。
以降、tをインクリメントしながら同様の操作を繰り返すことで、図7の表が図10に示した表に変換される。
図13A及び図13Bの実行順序変更処理によれば、tをインクリメントしながらaddr_t1wを更新することで、第1処理におけるデータライトの順序に従って、第1処理におけるデータが順番に選択される。次に、addr_t1wからデータを読み出すデータリードの時刻t_rを探索することで、第2処理に含まれる演算単位の中から、選択されたデータを読み出すデータリードを含む特定の演算単位が選択される。
そして、t_rがt_last以降である場合にInsertListが生成され、InsertListからポップした時刻の演算単位が、t_last以降の時刻に挿入される。これにより、メイン処理の開始時刻と特定の演算単位の時刻との間に、選択されたデータよりも後で書き込まれたデータを読み出すデータリードを含む、演算単位が存在する場合に、特定の演算単位の時刻を早めるように、演算単位の順序が変更される。
また、addrListの最小値にデータを書き込むデータライトの時刻t_depがInsertListにプッシュされ、InsertListからポップした時刻の順番に、それらの時刻の演算単位がt_last以降の時刻に挿入される。これにより、第2処理における各データについて実行順序の制約が遵守される。
さらに、SearchListにt_depがエンキューされ、SearchListからデキューされた時刻のデータリードによって読み出されるデータのアドレスが、addrListに設定される。これにより、選択された演算単位によって読み出されるデータを生成する演算単位が再帰的に特定され、特定された演算単位が選択された演算単位よりも前に実行されるように、演算単位の順序が変更される。
図14は、図12のステップ1202における開始時刻変更処理の例を示すフローチャートである。まず、変換部212は、第1処理と第2処理をオーバラップさせる時間幅を示す変数twに無効値(例えば、−1)を設定し、データのアドレスを示す変数addr_curに初期値0を設定する(ステップ1401)。そして、変換部212は、addr_curと、第1処理のデータライトによって書き込まれるデータの最終アドレスとを比較する(ステップ1402)。
addr_curがデータの最終アドレスではない場合(ステップ1402,NO)、変換部212は、第1処理においてaddr_curにデータを書き込むデータライトが実行される時刻のうち、最も遅い時刻t_1を求める(ステップ1403)。また、変換部212は、第2処理においてaddr_curからデータを読み出すデータリードが実行される時刻のうち、最も早い時刻t_2を求める。そして、変換部212は、次式により時間幅tempを計算する(ステップ1404)。
temp=t_2−t_1−1 (3)
次に、変換部212は、twの値をチェックする(ステップ1405)。twが無効値であるか、又はtempよりも大きい場合(ステップ1405,YES)、変換部212は、twにtempの値を設定する(ステップ1406)。そして、変換部212は、addr_curを1だけインクリメントして(ステップ1407)、ステップ1402以降の処理を繰り返す。
一方、twが無効値ではなく、かつ、temp以下である場合(ステップ1405,NO)、変換部212は、addr_curを1だけインクリメントして(ステップ1407)、ステップ1402以降の処理を繰り返す。
そして、addr_curがデータの最終アドレスに達した場合(ステップ1402,YES)、変換部212は、第2処理の開始時刻をtwだけ早める(ステップ1408)。これにより、第2処理を第1処理とオーバラップさせることができる。
例えば、図6の前処理と図10のメイン処理をオーバラップさせる場合、変換部212は、図10のメイン処理における時刻0〜時刻24を時刻25〜時刻49に変更してから、開始時刻変更処理を開始する。この場合、第1処理のデータライトによって書き込まれるin[y][x]の最終アドレスはAin=24である。
まず、addr_cur=0のとき、前処理においてaddr_curにデータを書き込むデータライトが実行される時刻は0であるため、t_1=0となる。また、メイン処理においてaddr_curからデータを読み出すデータリードが実行される時刻は25であるため、t_2=25となる。したがって、temp=25−0−1=24となる。twは無効値であるため、tw=temp=24となり、addr_curが1だけインクリメントされる。
次に、addr_cur=1のとき、前処理においてaddr_curにデータを書き込むデータライトが実行される時刻は5であるため、t_1=5となる。また、メイン処理においてaddr_curからデータを読み出すデータリードが実行される時刻は26であるため、t_2=26となる。したがって、temp=26−5−1=20となる。tw>tempであるため、tw=temp=20となり、addr_curが1だけインクリメントされる。
次に、addr_cur=2のとき、前処理においてaddr_curにデータを書き込むデータライトが実行される時刻は10であるため、t_1=10となる。また、メイン処理においてaddr_curからデータを読み出すデータリードが実行される時刻は28であるため、t_2=28となる。したがって、temp=28−10−1=17となる。tw>tempであるため、tw=temp=17となり、addr_curが1だけインクリメントされる。
次に、addr_cur=3のとき、前処理においてaddr_curにデータを書き込むデータライトが実行される時刻は15であるため、t_1=15となる。また、メイン処理においてaddr_curからデータを読み出すデータリードが実行される時刻は31であるため、t_2=31となる。したがって、temp=31−15−1=15となる。tw>tempであるため、tw=temp=15となり、addr_curが1だけインクリメントされる。
次に、addr_cur=4のとき、前処理においてaddr_curにデータを書き込むデータライトが実行される時刻は20であるため、t_1=20となる。また、メイン処理においてaddr_curからデータを読み出すデータリードが実行される時刻は35であるため、t_2=35となる。したがって、temp=35−20−1=14となる。tw>tempであるため、tw=temp=14となり、addr_curが1だけインクリメントされる。
以降、addr_curをインクリメントしながら同様の操作を繰り返しても、tw≦tempとなるため、twは更新されず、addr_cur=24のとき、メイン処理の開始時刻が14だけ早められる。これにより、図11に示したように、メイン処理の開始時刻が時刻25から時刻11に変更され、前処理及びメイン処理の総実行時間が14だけ短縮される。
ところで、変換部212は、図12のステップ1201の実行順序変更処理を省略して、ステップ1202の開始時刻変更処理のみを行ってもよい。例えば、図6の前処理とメイン処理をオーバラップさせる場合、以下の手順で開始時刻変更処理が行われる。
まず、addr_cur=0のとき、前処理においてaddr_curにデータを書き込むデータライトが実行される時刻は0であるため、t_1=0となる。また、メイン処理においてaddr_curからデータを読み出すデータリードが実行される時刻は25であるため、t_2=25となる。したがって、temp=25−0−1=24となる。twは無効値であるため、tw=temp=24となり、addr_curが1だけインクリメントされる。
次に、addr_cur=1のとき、前処理においてaddr_curにデータを書き込むデータライトが実行される時刻は5であるため、t_1=5となる。また、メイン処理においてaddr_curからデータを読み出すデータリードが実行される時刻は26であるため、t_2=26となる。したがって、temp=26−5−1=20となる。tw>tempであるため、tw=temp=20となり、addr_curが1だけインクリメントされる。
次に、addr_cur=2のとき、前処理においてaddr_curにデータを書き込むデータライトが実行される時刻は10であるため、t_1=10となる。また、メイン処理においてaddr_curからデータを読み出すデータリードが実行される時刻は27であるため、t_2=27となる。したがって、temp=27−10−1=16となる。tw>tempであるため、tw=temp=16となり、addr_curが1だけインクリメントされる。
次に、addr_cur=3のとき、前処理においてaddr_curにデータを書き込むデータライトが実行される時刻は15であるため、t_1=15となる。また、メイン処理においてaddr_curからデータを読み出すデータリードが実行される時刻は28であるため、t_2=28となる。したがって、temp=28−15−1=12となる。tw>tempであるため、tw=temp=12となり、addr_curが1だけインクリメントされる。
次に、addr_cur=4のとき、前処理においてaddr_curにデータを書き込むデータライトが実行される時刻は20であるため、t_1=20となる。また、メイン処理においてaddr_curからデータを読み出すデータリードが実行される時刻は29であるため、t_2=29となる。したがって、temp=29−20−1=8となる。tw>tempであるため、tw=temp=8となり、addr_curが1だけインクリメントされる。
以降、addr_curをインクリメントしながら同様の操作を繰り返しても、tw≦tempとなるため、twは更新されず、addr_cur=24のとき、メイン処理の開始時刻が8だけ早められる。これにより、メイン処理の開始時刻が時刻25から時刻17に変更され、前処理及びメイン処理の総実行時間が8だけ短縮される。
図15は、実行順序変更処理を省略して図6の前処理とメイン処理をオーバラップさせた場合のデータライト及びデータリードの順序の例を示している。図15では、メイン処理の開始時刻が時刻25から時刻17に変更され、前処理及びメイン処理の総実行時間が8だけ短縮されている。
なお、変換部212は、図14とは異なる開始時刻変更処理によって、第1処理と第2処理をオーバラップさせることも可能である。例えば、第2処理の開始時刻を1時刻ずつ早めながら、第1処理における各データライトのアドレスについて、第1処理におけるデータライトの時刻と第2処理におけるデータリードの時刻とが隣接しているか否かをチェックする方法を用いてもよい。この場合、いずれかのアドレスに対するデータリードの時刻が、同じアドレスに対するデータライトの時刻と隣接する時刻になった時点で、処理が終了する。
図2の情報処理装置の構成は一例に過ぎず、情報処理装置の用途又は条件に応じて一部の構成要素を省略又は変更してもよい。
図3及び図12〜図14のフローチャートは一例に過ぎず、情報処理装置の構成又は条件に応じて一部の処理を省略又は変更してもよい。例えば、第2処理に含まれる演算単位の順序を変更しない場合は、図12のステップ1201の処理を省略することができる。
図4〜図11及び図15に示した前処理及びメイン処理は一例に過ぎず、第1処理及び第2処理は、データ依存性を有する別の処理であってもよい。第1処理及び第2処理は、ハードウェア回路によって実行される処理に限られず、ソフトウェアによって実行される処理であってもよい。
図16は、図2の情報処理装置のハードウェア構成例を示している。図16の情報処理装置は、CPU(Central Processing Unit)1501、メモリ1502、入力装置1503、出力装置1504、補助記憶装置1505、媒体駆動装置1506、及びネットワーク接続装置1507を含む。これらの構成要素はバス1508により互いに接続されている。
メモリ1502は、例えば、ROM(Read Only Memory)、RAM(Random Access Memory)、フラッシュメモリ等の半導体メモリであり、処理に用いられるプログラム及びデータを格納する。メモリ1502は、図2の記憶部211として用いることができる。
CPU1501(プロセッサ)は、例えば、メモリ1502を利用してプログラムを実行することにより、図2の変換部212として動作する。
入力装置1503は、例えば、キーボード、ポインティングデバイス等であり、オペレータ又はユーザからの指示又は情報の入力に用いられる。出力装置1504は、例えば、表示装置、プリンタ、スピーカ等であり、オペレータ又はユーザへの問い合わせ又は指示、及び処理結果の出力に用いられる。処理結果は、第2実行情報222であってもよい。
補助記憶装置1505は、例えば、磁気ディスク装置、光ディスク装置、光磁気ディスク装置、テープ装置等である。補助記憶装置1505は、ハードディスクドライブ又はフラッシュメモリであってもよい。情報処理装置は、補助記憶装置1505にプログラム及びデータを格納しておき、それらをメモリ1502にロードして使用することができる。補助記憶装置1505は、図2の記憶部211として用いることができる。
媒体駆動装置1506は、可搬型記録媒体1509を駆動し、その記録内容にアクセスする。可搬型記録媒体1509は、メモリデバイス、フレキシブルディスク、光ディスク、光磁気ディスク等である。可搬型記録媒体1509は、CD−ROM(Compact Disk Read Only Memory)、DVD(Digital Versatile Disk)、USB(Universal Serial Bus)メモリ等であってもよい。オペレータ又はユーザは、この可搬型記録媒体1509にプログラム及びデータを格納しておき、それらをメモリ1502にロードして使用することができる。
このように、処理に用いられるプログラム及びデータを格納するコンピュータ読み取り可能な記録媒体は、メモリ1502、補助記憶装置1505、又は可搬型記録媒体1509のような、物理的な(非一時的な)記録媒体である。
ネットワーク接続装置1507は、LAN(Local Area Network)、WAN(Wide Area Network)等の通信ネットワークに接続され、通信に伴うデータ変換を行う通信インタフェース回路である。情報処理装置は、プログラム及びデータを外部の装置からネットワーク接続装置1507を介して受信し、それらをメモリ1502にロードして使用することができる。
なお、情報処理装置が図16のすべての構成要素を含む必要はなく、用途又は条件に応じて一部の構成要素を省略することも可能である。例えば、オペレータ又はユーザとのインタフェースが不要な場合は、入力装置1503及び出力装置1504を省略してもよい。可搬型記録媒体1509又は通信ネットワークを使用しない場合は、媒体駆動装置1506又はネットワーク接続装置1507を省略してもよい。
開示の実施形態とその利点について詳しく説明したが、当業者は、特許請求の範囲に明確に記載した本発明の範囲から逸脱することなく、様々な変更、追加、省略をすることができるであろう。
図1乃至図16を参照しながら説明した実施形態に関し、さらに以下の付記を開示する。
(付記1)
複数のデータに対する第1処理と前記第1処理に続いて実行される第2処理とを含む第1実行情報を記憶する記憶部と、
前記第1処理に含まれるデータライトの順序と前記第2処理に含まれるデータリードの順序とに基づいて、前記複数のデータ各々について前記第1処理におけるデータライトの後で前記第2処理におけるデータリードを実行する実行順序の制約の下で、前記第2処理の開始タイミングを前記第1処理の終了タイミングよりも早めることで、前記第1実行情報を第2実行情報に変換し、前記第2実行情報を出力する変換部と、
を備えることを特徴とする情報処理装置。
(付記2)
前記複数のデータは複数の第1データであり、
前記第1処理は、前記複数の第1データ各々を書き込むデータライトを含み、
前記第2処理は、複数の第2データ各々を生成する演算単位を含み、
前記演算単位は、いずれかの第1データを読み出すデータリードと、いずれかの第2データを読み出すデータリードと、読み出された第1データ及び第2データを用いて、演算結果を示す第2データを生成するデータ演算と、前記演算結果を示す第2データを書き込むデータライトとを含み、
前記変換部は、前記第1処理における前記複数の第1データに対するデータライトの順序と、前記第2処理における前記複数の第2データに対する演算単位の順序とに基づいて、前記複数の第2データ各々についてデータライトの後でデータリードを実行する実行順序の制約の下で、前記第2処理に含まれる演算単位の順序を変更し、変更後の第2処理の開始タイミングを前記第1処理の終了タイミングよりも早めることを特徴とする付記1記載の情報処理装置。
(付記3)
前記変換部は、前記第1処理における前記複数の第1データに対するデータライトの順序に従って第1データを選択し、前記第2処理に含まれる演算単位の中から、選択された第1データを読み出すデータリードを含む演算単位を選択し、前記第1実行情報における前記第2処理の開始タイミングと選択された演算単位の実行タイミングとの間に、前記第1処理において前記選択された第1データよりも後で書き込まれる第1データを読み出すデータリードを含む演算単位が存在する場合、前記選択された演算単位の実行タイミングを早めるように、前記第2処理に含まれる演算単位の順序を変更することを特徴とする付記2記載の情報処理装置。
(付記4)
前記変換部は、前記選択された演算単位によって読み出される第2データを生成する演算単位を再帰的に特定し、前記複数の第2データ各々についてデータライトの後でデータリードを実行する実行順序の制約に従って、特定された演算単位が前記選択された演算単位よりも前に実行されるように、前記第2処理に含まれる演算単位の順序を変更することを特徴とする付記3記載の情報処理装置。
(付記5)
前記第1実行情報は、前記第1処理及び前記第2処理を実行するパイプライン回路におけるデータ演算の実行順序を記述した情報であることを特徴とする付記1乃至4のいずれか1項に記載の情報処理装置。
(付記6)
情報処理装置によって実行される情報処理方法であって、
前記情報処理装置が、
複数のデータに対する第1処理と前記第1処理に続いて実行される第2処理とを含む第1実行情報を解析し、
前記第1処理に含まれるデータライトの順序と前記第2処理に含まれるデータリードの順序とに基づいて、前記複数のデータ各々について前記第1処理におけるデータライトの後で前記第2処理におけるデータリードを実行する実行順序の制約の下で、前記第2処理の開始タイミングを前記第1処理の終了タイミングよりも早めることで、前記第1実行情報を第2実行情報に変換し、
前記第2実行情報を出力する、
ことを特徴とする情報処理方法。
(付記7)
前記複数のデータは複数の第1データであり、
前記第1処理は、前記複数の第1データ各々を書き込むデータライトを含み、
前記第2処理は、複数の第2データ各々を生成する演算単位を含み、
前記演算単位は、いずれかの第1データを読み出すデータリードと、いずれかの第2データを読み出すデータリードと、読み出された第1データ及び第2データを用いて、演算結果を示す第2データを生成するデータ演算と、前記演算結果を示す第2データを書き込むデータライトとを含み、
前記情報処理装置は、前記第1処理における前記複数の第1データに対するデータライトの順序と、前記第2処理における前記複数の第2データに対する演算単位の順序とに基づいて、前記複数の第2データ各々についてデータライトの後でデータリードを実行する実行順序の制約の下で、前記第2処理に含まれる演算単位の順序を変更し、変更後の第2処理の開始タイミングを前記第1処理の終了タイミングよりも早めることを特徴とする付記6記載の情報処理方法。
(付記8)
前記情報処理装置は、前記第1処理における前記複数の第1データに対するデータライトの順序に従って第1データを選択し、前記第2処理に含まれる演算単位の中から、選択された第1データを読み出すデータリードを含む演算単位を選択し、前記第1実行情報における前記第2処理の開始タイミングと選択された演算単位の実行タイミングとの間に、前記第1処理において前記選択された第1データよりも後で書き込まれる第1データを読み出すデータリードを含む演算単位が存在する場合、前記選択された演算単位の実行タイミングを早めるように、前記第2処理に含まれる演算単位の順序を変更することを特徴とする付記7記載の情報処理方法。
(付記9)
前記情報処理装置は、前記選択された演算単位によって読み出される第2データを生成する演算単位を再帰的に特定し、前記複数の第2データ各々についてデータライトの後でデータリードを実行する実行順序の制約に従って、特定された演算単位が前記選択された演算単位よりも前に実行されるように、前記第2処理に含まれる演算単位の順序を変更することを特徴とする付記8記載の情報処理方法。
(付記10)
前記第1実行情報は、前記第1処理及び前記第2処理を実行するパイプライン回路におけるデータ演算の実行順序を記述した情報であることを特徴とする付記6乃至9のいずれか1項に記載の情報処理方法。
(付記11)
複数のデータに対する第1処理と前記第1処理に続いて実行される第2処理とを含む第1実行情報を解析し、
前記第1処理に含まれるデータライトの順序と前記第2処理に含まれるデータリードの順序とに基づいて、前記複数のデータ各々について前記第1処理におけるデータライトの後で前記第2処理におけるデータリードを実行する実行順序の制約の下で、前記第2処理の開始タイミングを前記第1処理の終了タイミングよりも早めることで、前記第1実行情報を第2実行情報に変換し、
前記第2実行情報を出力する、
処理をコンピュータに実行させるためのプログラム。
(付記12)
前記複数のデータは複数の第1データであり、
前記第1処理は、前記複数の第1データ各々を書き込むデータライトを含み、
前記第2処理は、複数の第2データ各々を生成する演算単位を含み、
前記演算単位は、いずれかの第1データを読み出すデータリードと、いずれかの第2データを読み出すデータリードと、読み出された第1データ及び第2データを用いて、演算結果を示す第2データを生成するデータ演算と、前記演算結果を示す第2データを書き込むデータライトとを含み、
前記コンピュータは、前記第1処理における前記複数の第1データに対するデータライトの順序と、前記第2処理における前記複数の第2データに対する演算単位の順序とに基づいて、前記複数の第2データ各々についてデータライトの後でデータリードを実行する実行順序の制約の下で、前記第2処理に含まれる演算単位の順序を変更し、変更後の第2処理の開始タイミングを前記第1処理の終了タイミングよりも早めることを特徴とする付記11記載のプログラム。
(付記13)
前記コンピュータは、前記第1処理における前記複数の第1データに対するデータライトの順序に従って第1データを選択し、前記第2処理に含まれる演算単位の中から、選択された第1データを読み出すデータリードを含む演算単位を選択し、前記第1実行情報における前記第2処理の開始タイミングと選択された演算単位の実行タイミングとの間に、前記第1処理において前記選択された第1データよりも後で書き込まれる第1データを読み出すデータリードを含む演算単位が存在する場合、前記選択された演算単位の実行タイミングを早めるように、前記第2処理に含まれる演算単位の順序を変更することを特徴とする付記12記載のプログラム。
(付記14)
前記コンピュータは、前記選択された演算単位によって読み出される第2データを生成する演算単位を再帰的に特定し、前記複数の第2データ各々についてデータライトの後でデータリードを実行する実行順序の制約に従って、特定された演算単位が前記選択された演算単位よりも前に実行されるように、前記第2処理に含まれる演算単位の順序を変更することを特徴とする付記13記載のプログラム。
(付記15)
前記第1実行情報は、前記第1処理及び前記第2処理を実行するパイプライン回路におけるデータ演算の実行順序を記述した情報であることを特徴とする付記11乃至14のいずれか1項に記載のプログラム。
201 情報処理装置
211 記憶部
212 変換部
221 第1実行情報
222 第2実行情報
801〜803、901〜905 矢印
1501 CPU
1502 メモリ
1503 入力装置
1504 出力装置
1505 補助記憶装置
1506 媒体駆動装置
1507 ネットワーク接続装置
1508 バス
1509 可搬型記録媒体

Claims (6)

  1. 複数のデータに対する第1処理と前記第1処理に続いて実行される第2処理とを含む第1実行情報を記憶する記憶部と、
    前記第1処理に含まれるデータライトの順序と前記第2処理に含まれるデータリードの順序とに基づいて、前記複数のデータ各々について前記第1処理におけるデータライトの後で前記第2処理におけるデータリードを実行する実行順序の制約の下で、前記第2処理の開始タイミングを前記第1処理の終了タイミングよりも早めることで、前記第1実行情報を第2実行情報に変換し、前記第2実行情報を出力する変換部と、
    を備えることを特徴とする情報処理装置。
  2. 前記複数のデータは複数の第1データであり、
    前記第1処理は、前記複数の第1データ各々を書き込むデータライトを含み、
    前記第2処理は、複数の第2データ各々を生成する演算単位を含み、
    前記演算単位は、いずれかの第1データを読み出すデータリードと、いずれかの第2データを読み出すデータリードと、読み出された第1データ及び第2データを用いて、演算結果を示す第2データを生成するデータ演算と、前記演算結果を示す第2データを書き込むデータライトとを含み、
    前記変換部は、前記第1処理における前記複数の第1データに対するデータライトの順序と、前記第2処理における前記複数の第2データに対する演算単位の順序とに基づいて、前記複数の第2データ各々についてデータライトの後でデータリードを実行する実行順序の制約の下で、前記第2処理に含まれる演算単位の順序を変更し、変更後の第2処理の開始タイミングを前記第1処理の終了タイミングよりも早めることを特徴とする請求項1記載の情報処理装置。
  3. 前記変換部は、前記第1処理における前記複数の第1データに対するデータライトの順序に従って第1データを選択し、前記第2処理に含まれる演算単位の中から、選択された第1データを読み出すデータリードを含む演算単位を選択し、前記第1実行情報における前記第2処理の開始タイミングと選択された演算単位の実行タイミングとの間に、前記第1処理において前記選択された第1データよりも後で書き込まれる第1データを読み出すデータリードを含む演算単位が存在する場合、前記選択された演算単位の実行タイミングを早めるように、前記第2処理に含まれる演算単位の順序を変更することを特徴とする請求項2記載の情報処理装置。
  4. 前記変換部は、前記選択された演算単位によって読み出される第2データを生成する演算単位を再帰的に特定し、前記複数の第2データ各々についてデータライトの後でデータリードを実行する実行順序の制約に従って、特定された演算単位が前記選択された演算単位よりも前に実行されるように、前記第2処理に含まれる演算単位の順序を変更することを特徴とする請求項3記載の情報処理装置。
  5. 情報処理装置によって実行される情報処理方法であって、
    前記情報処理装置が、
    複数のデータに対する第1処理と前記第1処理に続いて実行される第2処理とを含む第1実行情報を解析し、
    前記第1処理に含まれるデータライトの順序と前記第2処理に含まれるデータリードの順序とに基づいて、前記複数のデータ各々について前記第1処理におけるデータライトの後で前記第2処理におけるデータリードを実行する実行順序の制約の下で、前記第2処理の開始タイミングを前記第1処理の終了タイミングよりも早めることで、前記第1実行情報を第2実行情報に変換し、
    前記第2実行情報を出力する、
    ことを特徴とする情報処理方法。
  6. 複数のデータに対する第1処理と前記第1処理に続いて実行される第2処理とを含む第1実行情報を解析し、
    前記第1処理に含まれるデータライトの順序と前記第2処理に含まれるデータリードの順序とに基づいて、前記複数のデータ各々について前記第1処理におけるデータライトの後で前記第2処理におけるデータリードを実行する実行順序の制約の下で、前記第2処理の開始タイミングを前記第1処理の終了タイミングよりも早めることで、前記第1実行情報を第2実行情報に変換し、
    前記第2実行情報を出力する、
    処理をコンピュータに実行させるためのプログラム。
JP2019021949A 2019-02-08 2019-02-08 情報処理装置、情報処理方法、及びプログラム Active JP7172687B2 (ja)

Priority Applications (2)

Application Number Priority Date Filing Date Title
JP2019021949A JP7172687B2 (ja) 2019-02-08 2019-02-08 情報処理装置、情報処理方法、及びプログラム
US16/711,515 US11275611B2 (en) 2019-02-08 2019-12-12 Information processing device, information processing method, and computer-readable recording medium recording program

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
JP2019021949A JP7172687B2 (ja) 2019-02-08 2019-02-08 情報処理装置、情報処理方法、及びプログラム

Publications (2)

Publication Number Publication Date
JP2020129297A true JP2020129297A (ja) 2020-08-27
JP7172687B2 JP7172687B2 (ja) 2022-11-16

Family

ID=71944584

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2019021949A Active JP7172687B2 (ja) 2019-02-08 2019-02-08 情報処理装置、情報処理方法、及びプログラム

Country Status (2)

Country Link
US (1) US11275611B2 (ja)
JP (1) JP7172687B2 (ja)

Families Citing this family (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US11893250B1 (en) * 2021-08-09 2024-02-06 T-Mobile Innovations Llc Offset-based memory management for integrated circuits and programmable network devices

Citations (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPH0844773A (ja) * 1994-07-26 1996-02-16 Mitsubishi Electric Corp 自動高位合成方法
JP2013235475A (ja) * 2012-05-10 2013-11-21 Mitsubishi Electric Corp 回路設計支援装置及び回路設計支援方法及びプログラム

Family Cites Families (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
IL95996A0 (en) 1990-10-15 1991-07-18 Ibm Israel Global instruction scheduler for a computer
JP2016177454A (ja) 2015-03-19 2016-10-06 富士通株式会社 動作合成方法、動作合成プログラムおよび動作合成装置

Patent Citations (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPH0844773A (ja) * 1994-07-26 1996-02-16 Mitsubishi Electric Corp 自動高位合成方法
JP2013235475A (ja) * 2012-05-10 2013-11-21 Mitsubishi Electric Corp 回路設計支援装置及び回路設計支援方法及びプログラム

Also Published As

Publication number Publication date
US11275611B2 (en) 2022-03-15
JP7172687B2 (ja) 2022-11-16
US20200257557A1 (en) 2020-08-13

Similar Documents

Publication Publication Date Title
US20210110258A1 (en) Method and apparatus with model training and/or sequence recognition
JP4956334B2 (ja) オートマトンの決定化方法、有限状態トランスデューサの決定化方法、オートマトン決定化装置及び決定化プログラム
KR102227939B1 (ko) 단어의 문맥 정보와 형태론적 정보를 고려한 단어 임베딩 방법 및 장치
CN110245359B (zh) 使用自回归机器学习模型进行并行解码
CN109522550A (zh) 文本信息纠错方法、装置、计算机设备和存储介质
CN116822422B (zh) 数字逻辑电路的分析优化方法及相关设备
CN111723550A (zh) 语句改写方法、装置、电子设备以及计算机存储介质
CN113703768A (zh) 张量程序优化方法及装置
JP7172687B2 (ja) 情報処理装置、情報処理方法、及びプログラム
KR20130111170A (ko) 압축 및 신장 시스템, 압축 장치, 신장 장치, 압축 및 신장 방법, 압축 프로그램을 기록한 컴퓨터 판독 가능한 기록 매체, 및 신장 프로그램을 기록한 컴퓨터 판독 가능한 기록 매체
JPWO2008081932A1 (ja) 文字列照合用有限オートマトン生成システム、その生成方法、及び生成プログラム
Ion et al. The stable limit DAHA and the double Dyck path Algebra
CN110060196B (zh) 图像处理方法及装置
US8127259B2 (en) Synthesis constraint creating device, behavioral synthesis device, synthesis constraint creating method and recording medium
US11385870B2 (en) Non-transitory computer-readable recording medium, data transformation device, and data transformation method
JP6633556B2 (ja) 音響モデル学習装置、音声認識装置、音響モデル学習方法、音声認識方法、およびプログラム
CN111194448A (zh) 伪数据生成装置及其方法和程序
CN114518841A (zh) 存储器中处理器和使用存储器中处理器输出指令的方法
CN115101032A (zh) 用于生成文本的配乐的方法、装置、电子设备和介质
WO2009147794A1 (ja) 有限オートマトン生成システム
Polyakova et al. On a continuous method for minimizing of nonsmooth functions
JP4347086B2 (ja) パターンマッチング装置および方法ならびにプログラム
US20220405204A1 (en) Computer-readable recording medium storing data placement program, processor, and data placement method
US20230185876A1 (en) Multidimensional data generation device, method, and computer-readable recording medium
US20230289375A1 (en) Storage medium, search device, and search method

Legal Events

Date Code Title Description
A621 Written request for application examination

Free format text: JAPANESE INTERMEDIATE CODE: A621

Effective date: 20211109

A977 Report on retrieval

Free format text: JAPANESE INTERMEDIATE CODE: A971007

Effective date: 20220928

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

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20221017

R150 Certificate of patent or registration of utility model

Ref document number: 7172687

Country of ref document: JP

Free format text: JAPANESE INTERMEDIATE CODE: R150