JPH0786836B2 - 多次元配列のメモリ割付け方式 - Google Patents

多次元配列のメモリ割付け方式

Info

Publication number
JPH0786836B2
JPH0786836B2 JP61274428A JP27442886A JPH0786836B2 JP H0786836 B2 JPH0786836 B2 JP H0786836B2 JP 61274428 A JP61274428 A JP 61274428A JP 27442886 A JP27442886 A JP 27442886A JP H0786836 B2 JPH0786836 B2 JP H0786836B2
Authority
JP
Japan
Prior art keywords
array
dimension
memory
elements
buffer
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.)
Expired - Lifetime
Application number
JP61274428A
Other languages
English (en)
Other versions
JPS63127340A (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.)
Hitachi Ltd
Original Assignee
Hitachi 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 Hitachi Ltd filed Critical Hitachi Ltd
Priority to JP61274428A priority Critical patent/JPH0786836B2/ja
Publication of JPS63127340A publication Critical patent/JPS63127340A/ja
Publication of JPH0786836B2 publication Critical patent/JPH0786836B2/ja
Anticipated expiration legal-status Critical
Expired - Lifetime legal-status Critical Current

Links

Landscapes

  • Devices For Executing Special Programs (AREA)

Description

【発明の詳細な説明】 〔産業上の利用分野〕 本発明は原始プログラムから目的プログラムを生成する
コンパイラに係わり、特に多次元配列を静的にメモリに
割付けるときデータアクセス性能が低下しないように割
付け可能な、多次元配列のメモリ割付け方式に関する。
〔従来の技術〕 FORTRANNT等のコンパイラにおける配列のメモリへの割
付けは、配列毎に作られる配列記述テーブルに従って行
われる。このテーブルには、配列の次元の数や、配列
長,要素数,各次元の寸法等の値を設定するが、従来の
コンパイラは、例えば、小田一博著「コンパイラ入門
文法から設計・製作まで」(日本評論社(1971),pp218
〜223)に記載されている如く、利用者がプログラムで
宣言した通りの大きさを前記配列記述テーブルに設定し
ており、それがバンクコンフリクトやバッファの頻繁な
書換えを起こし易い大きさであるか否かは考慮していな
かった。
〔発明が解決しようとする問題点〕
データのアクセスを高速に行うため、メモリはいくつか
のバンクに分割されている。それぞれのバンクは並列に
アクセス可能なので、データが並列アクセスできるよう
にメモリ上に配置されていれば高速処理できるが、アク
セスが一つのバンクに集中すると、一つの要素に対する
アクセスが終るまで次の要素に対するアクセスはできな
いので処理スピードが極端に低下する。これをバンクコ
ンフリクトという。
上記バンクコンフリクトは、配列要素を等間隔でアスセ
スする場合に発生し易い。FRORTRANについて言えば、配
列は列方向にメモリに割付けられるので、例えば、1バ
ンクで1要素を読出せる電子計算機において、2次元配
列の行数、すなわち、一列当りの要素数を、バンク数の
整数倍にして配列を行方向に処理すると、アクセスは一
つのバンクに集中してしまう。
ところが、FORTRANプログラムの配列処理は配列を行方
向あるいは列方向等、ある次元に沿って行うことが多
い。コンパイラは配列のメモリ割付けを配列記述テーブ
ルに従って行うが、このテーブルは原始プログラムで配
列した通りの値を使って作成されるので、利用者はバン
クコンフリクトを避けるために配列を行方向に参照しな
いようにアルゴリズムを変更するか、あるいは、バンク
数を意識して次元の寸法がバンク数の整数倍にならない
ように配列宣言する等、プログラム作成上の工夫をしな
ければならなかった。
また、バッファを持つ電子計算機においても同様の問題
がある。すなわち、上記バッファはいくつかのブロック
に分割され、ブロックとは行と列とに並べられている。
メモリも同じ大きさのブロックに分割されており、デー
タをアクセスすると、まず、当該データの含まれるブロ
ックがメモリからバッファに転送され、次に、必要なデ
ータのみがバッファから演算処理装置へ転送される。
メモリ上のブロックは、それぞれバッファのどの行に転
送されるかが予め決まっているため、同じ行に転送され
るデータばかりアクセスすると、バッファの列数が限ら
れているため、バッファの書換えが頻繁に発生し処理ス
ピードが低下する。これも、前記バンクコンフリクトと
同様に、配列要素を等間隔でアクセスする場合に起こり
易い問題である。
本発明は上記事情に鑑みてなされたもので、その目的と
するところは、従来の多次元配列のメモリ割付け方式に
おける上述の如き問題を解消し、配列をある次元に沿っ
て処理する場合に起こるバンクコンフリクトやバッファ
の頻繁な書換えを、コンパイラ側で回避し、利用者に意
識させることなく多次元配列のメモリ割付けを行うこと
が可能な、多次元配列のメモリ割付け方式を提供するこ
とにある。
〔問題点を解決するための手段〕
本発明の上記目的は、複数のバンクから構成されるメモ
リに多次元配列の要素を順次静的に割付けるコンパイラ
において、各バンクへの割付け方向に沿った要素の数が
バンク数の整数倍である場合に、前記方向の要素に対し
て仮想的要素を追加し、その方向と直交する方向に沿っ
た要素を複数のバンクに分散して割付けることを特徴と
する多次元配列のメモリ割付け方式によって達成され
る。
〔作用〕
本発明においては、コンパイラが配列記述テーブルを作
成するときに、次元の寸法がバンクコンクリフトやバッ
ファの頻繁な書換えを起こし易いか否かを判定し、も
し、そうであれば、寸法を適当に増やし、それに基づい
て配列長,要素数等を計算し、配列記述テーブルに設定
するようにしている。この配列記述テーブルに従って配
列を割付けることにより、特別なハードウェアを設ける
ことなく、コンパイラ側で柔軟にバンクコンフリクトを
回避しバッファの頻繁な書換えを防止することができ
る。
より具体的には、配列の次元の寸法がバンクコンクリフ
トを起こし易い大きさのとき、例えば、バンク数の整数
倍のとき、配列のある行の要素はすべて一つのバンクに
存在する。このとき、配列の寸法を1増やしてメモリに
割付ければ、要素の存在するバンクが1つずつずれ、行
方向にアクセスしてもバンクコンフリクトが発生しなく
なる。
バッファについても、同様に、配列の行方向のアクセス
がある行のブロックに集中するときは、配列の寸法を増
やしてメモリに割付けることにより、その行の要素の存
在するブロックをずらすことができるので、バッファの
書換えを減らすことができる。
〔実施例〕
以下、本発明の実施例を図面に基づいて詳細に説明す
る。
第2図は本発明が適用されるコンパイラの一構成例を示
すものである。本コンパイラ2は、原始プログラム1を
入力して、目的プログラム3を生成する機能を有するも
のである。
上記コンパイラ2は、原始プログラム1を入力して中間
語を生成し、中間語ファイル4に出力する原始プログラ
ム解析部5,上記中間語に対して実行効率が良くなるよう
最適化を行う中間語最適化部6,目的プログラムの実行に
必要な領域の割付けを行うメモリ割付け部7,上記中間語
の命令列に対してレジスタの割当てを行うレジスタ割当
て部8,上記中間語を機械語に変換して出力する目的プロ
グラム出力部9から構成されている。更に、上記原始プ
ログラム解析部5は、字句解析部10,構文解析部11,意味
解析部12,辞書作成部13および中間語作成部14から構成
されている。
本発明は、原始プログラム解析部5中の辞書作成部13、
および、該辞書作成部13が作成した配列記述テーブルに
基づき、配列にメモリを割付けるメモリ割付け部7に適
用されるものである。
まず、第一の実施例として、1バンクで4バイトを読出
せるバンク数16のメモリを持つ電子計算機システムにお
いて、第3図に示す如きFORTRANの原始プログラムが与
えられたときに辞書作成部13が作成する、前記配列記述
テーブルを含むテーブル類について第4図を用いて説明
する。
前記辞書作成部13に入る前に字句解析部10,構文解析部1
1,意味解析部12を経て、第3図の原始プログラムはAの
属性を宣言する文で、具体的には実数型4バイトの2次
元配列で、その寸法は16×16であることがわかってい
る。
辞書作成部13は、記号情報テーブル15,記号名テーブル1
6,配列記述テーブル17を作成する。記号情報テーブル15
には、記号名アドレス15a,記号の型15b,その記号が「配
列」であることを示すフラグ15c,該フラグがONのとき配
列記述テーブルアドレス15dが入る。本実施例では、記
号の型15bは実数型4バイト、フラグ15cはONである。記
号名アドレス15aでポイントされた記号名テーブル16に
は記号名が入り、本実施例では「A」である。
配列記述テーブルアドレス15dでポイントされた配列記
述テーブル17には、その配列の次元の数17a,配列長17b,
要素数17c,第1次元の寸法17d,第1次元のマルチプライ
ヤ17e,第2次元の寸法17f,第2次元のマルチプライヤ17
gが入る。次元の寸法とマルチプライヤは、次元の数だ
け繰り返し配列記述テーブル17に入れられる。ここで、
マルチプライヤとは、その次元の添字を1増やしたと
き、メモリ上で物理的に何要素離れているかを示す値で
ある。
配列記述テーブル17には、まず、配列宣言文の解析結果
から直に分かる次元の数17a,第1次元の寸法17d,第2次
元の寸法17fを設定し、次に配列情報計算により、配列
長17d,要素数17c,各マルチプライヤ17e,17gを計算して
配列記述テーブル17を完成させる。なお、第4図の各欄
のコロン(:)の後は、実施例での具体的な値を示して
おり、*は配列情報計算後に設定された値を示してい
る。
上記配列情報計算を第1図(a)のフローチャートを用
いて説明する。ここで、メモリのバンク数は、例えば、
コンパイラオプションで指定された電子計算機の構成に
関する情報から既に分かっているものとする。
まず、ステップ21で次元の寸法がバンク数の整数倍か否
かを判定し、整数倍であればステップ22に進み、(次元
の寸法+1)の値で配列記述テーブルの次元の寸法のフ
ィールドを書換え、ステップ23に進む。なお、次元の寸
法がバンク数の整数倍でなければ、何もしないでステッ
プ23に進む。
ステップ23では、マルチプライヤを計算し、配列記述テ
ーブルの該当するフィールドに値を設定する。上記ステ
ップ21〜23を、(次元数の−1)回繰り返した後、ステ
ップ24で配列長,要素数,最終次元のマルチプライヤを
計算し、配列記述テーブルに値を設定してテーブルを完
成させる。
本実施例について具体的に説明すれば、まず、ステップ
21で第1次元の寸法について判定を行うが、これが16,
メモリのバンク数も16なので、ステップ22の処理を行
い、配列記述テーブル17の第1次元の寸法17bを「17」
に書換える。次に、ステップ23で、マルチプライヤを計
算し、エリア17eに「1」を設定する。次元の数が2な
ので、繰り返しはなく、ステップ24の処置を行う。要素
数は、(第1次元の寸法×第2次元の寸法)で計算され
るので、17×16=272を17cに設定する。
配列長は(要素数×1要素のバイト数)で計算されるの
で、272×4=1088を17bに設定する。
第2次元のマルチプライヤは第1次元の寸法と等しいの
で、17を17gに設定する。これで、配列テーブル17が完
成する。
第5図は第4図の配列記述テーブル17に従って前述の配
列「A」をメモリ18に割付けた状態を示している。ここ
で、ai,jをAの第i行第j列の要素とすれば、第次元の
寸法(1列当りの要素数)が17なので、Aの第2列の先
頭要素a1,2は、メモリ上ではバンク2の2番目に位置
付けられる。
行方向の処理についてAの第1行を例として調べてみれ
ば、アクセスする要素a1,1、a1,2、a1,3、‥‥、a
1,16(○で囲まれている)の存在するバンクは、それぞ
れ、バンク1,バンク2,バンク3,‥‥,バンク16とすべて
異なるため、並列アクセスが可能である。従ってAを行
方向に処置しても、バンクコンフリクトは発生しない。
また第5図のように、要素ai,jがメモリの1ワードを
占有し、各列ベクトルの最後に仮想的要素を1個追加す
る場合、要素ai,jのメモリアドレス(ワード)は、
(i−1)×(第1次元のマルチプライヤ)+(j−
1)×(第2次元のマルチプライヤ)によって求められ
る。この場合、(i−1)×1+(j−1)×17によっ
て計算できる。勿論、一般の要素ai,jに対しても同じ
計算式によってアドレス計算ができる。
第6図は、従来技術において、バンク数を考慮せずに、
与えられた原始プログラムの通りに配列Aをメモリ18に
割付けた状態を示す図である。この場合には、Aの第1
行の要素a1,1、a1,2、a1,3、‥‥、a1,16(○で囲
まれている)は、すべてバンク1に存在するため、Aを
行方向に処理しようとするとバンクコンクフリクトが発
生する。
第7図は上記実施例のメモリ割付け処理の説明図であ
る。第7図(a)は当初の1×16の配列Aを示してお
り、第7図(b)はこれを行方向に1伸ばした状態、す
なわち、配列情報計算後の状態を示している。第7図
(b)中の*印の仮想的要素が、第5図に*印で示した
位置に配置されていると考えて良い。
上記実施例においては、ステップ21において、「次元の
寸法がバンク数の整数倍か否か」のみを判定している
が、これは、逆にバンク数が次元の寸法の整数倍になる
か否かをも含めて判定するようにしても良い。
次に、第二の実施例として、バッファを持つ電子計算機
において、バッファの頻繁な書換えによる処理スピード
の低下を防ぐ例を、第8図を用いて説明する。バッファ
19は16個のブロック20に分割されており、ブロックは8
行2列に配列されている。1ブロックは16バイトで、4
バイトの要素なら4個入る。メモリ18も同じ大きさのブ
ロックに分割されている。
第3図の原始プログラムが与えられた場合、前述の実施
例と同じ手順で原始プログラムを解析した後、第1図
(b)に示すフローチャートに従って配列情報を計算す
る。
まず、ステップ31でバッファの1列に入る要素数が配列
の1列当りの要素数の整数倍、または、逆に、配列の1
列当りの要素数がバッファの1列に入る要素数の整数倍
になっているか否かを判定する。どちらかの条件を満た
せば、ステップ32に進み(次元の寸法+1ブロックに入
る要素数)で配列記述テーブルの寸法を書換え、ステッ
プ33に進む。なお、どちらの条件も満たさなければ、直
接ステップ33に進み、マルチプライヤを計算して配列記
述テーブルに値を設定する。
これを(次元の数−1)回繰り返し、最後にステップ34
で配列長,要素数,最終次元のマルチプライヤを計算
し、配列記述テーブルに値を設定する。なお、バッファ
の1列に入る要素数は、コンパイラオプション等で既に
分かっているものとする。
本実施例では、バッファの1列に入る要素数が32,配列
の1列当りの要素数が32なので、上記ステップ31の条件
を満たし、ステップ32に進んで1ブロックに入る要素数
が4なので配列記述テーブルの配列の寸法を20に書換え
る。最終的に作成された配列記述テーブルは第9図のよ
うになる。
前にも使用した第8図は、第9図の配列記述テーブルに
従って配列Aを割付けした状態と、配列Aの第1行をバ
ッファ19に転送した状態とを示している。Aの第1行の
要素a1,1、a1,2、a1,3、‥‥、a1,16(○で囲まれ
ている)を含むブロックは、バッファ19の同一行には2
個ずつしか対応しないので、バッファの書換えを行わな
いで16個のブロックをバッファ19に転送することが可能
である。
これに対して、第10図は従来の方法で配列Aをメモリ18
に割付けた状態と、バッファ19とを示す図である。この
場合には、Aの第1行の要素を含むブロックは、バッフ
ァ19の第1行に8個、第5行に8個対応しているため、
最初の2個ずつを転送した後はバッファを書換えながら
転送しなければならず、処理性能が低下する。
上記二つの実施例によれば、利用者が配列を処理するプ
ログラムを作成する際、バンクコンフリクトやバッファ
の頻繁な書換えを避けるためにアルゴリズを工夫した
り、メモリのバンク数やバッファの1列に入る要素数を
意識して配列宣言したりする必要がなくなり、この種の
プログラム作成上の煩雑な配慮をしなくても、安定した
配列アクセス性能を得ることができる。
上記実施例では、バッファの1ブロックに入る要素数だ
け配列の寸法を増やしたが、メモリの増加が気になる場
合は増やす量を1ブロックに入る要素数より少なくして
も、何要素が後にはブロックがずれてくるため、効果が
得られる。
なお、上記二つの実施例では、配列の寸法の宣言が定数
の場合を示したが、本発明はこれに限定されるべきもの
ではなく、宣言が変数でプログラムのどこかでその値が
明示的に与えられる場合,宣言が演算式の場合にも適用
可能なものである。
また、二つの実施例はFORTRAN言語による例を示した
が、本発明は、配列をメモリに静的に割付けるプログラ
ミング言語全般に広く適用可能であることは言うまでも
ない。
さらに、二つの実施例では、配列の要素を列方向に順次
割付ける場合を取り上げたが、勿論、配列の要素を行方
向に順次割付ける場合についても同様にして、割付け方
向と直交する方向に沿う要素が一つのバンクに集中しな
いように分散して割付けることができる。
〔発明の効果〕
以上述べた如く、本発明によれば、多次元配列を静的に
メモリに割付けるコンパイラおいて、配列の次元の寸法
がバンクコンフリクトやバッファの頻繁な書換えを起こ
し易い大きさである場合に、前記次元の寸法を増やして
前記バンクコンフリクトやバッファの頻繁な書換えが発
生し難い大きさにして、割付け情報を設定するようにし
たので、配列をある次元に沿って処置する場合に起こる
バンクコフリクトやバッファの頻繁な書換えを、コンパ
イラ側で柔軟に回避し、利用者に意識させることなく多
次元配列のメモリ割付けを行うことが可能な、多次元配
列のメモリ割付け方式を実現できるという顕著な効果を
奏するものである。
【図面の簡単な説明】
第1図(a)および(b)は配列情報計算の処理の流れ
を説明するフローチャート、第2図は本発明が適用され
るコンパイラの一構成例を示す図、第3図は辞書作成部
の動作を説明するための原始プログラムの例を示す図、
第4図および第9図は辞書作成部が作成するテーブルの
説明図、第5図および第8図は本発明の実施例によるメ
モリ割付け例を示す図、第6図および第10図は従来の方
法によるメモリ割付け例を示す図、第7図は実施例の動
作原理の説明図である。 1:原始プログラム、2:コンパイラ、3:目的プログラム、
4:中間語ファイル、5:原始プログラム解析部、6:中間語
最適化部、7:メモリ割付け部、8:レジスタ割当て部、9:
目的プログラム出力部、10:字句解析部、11:構文解析
部、12:意味解析部、13:辞書作成部、14:中間語作成
部、15:記号情報テーブル、16……記号名テーブル、17:
配列記述テーブル、18:メモリ、19:バッファ、20:ブロ
ック。

Claims (1)

    【特許請求の範囲】
  1. 【請求項1】複数のバンクから構成されるメモリに多次
    元配列の要素を順次静的に割付けるコンパイラにおい
    て、各該バンクへの割付け方向に沿った要素の数がバン
    ク数の整数倍である場合に、該方向の要素に対して仮想
    的要素を追加し、該方向と直交する方向に沿った要素を
    複数のバンクに分散して割付けることを特徴とする多次
    元配列のメモリ割付け方式。
JP61274428A 1986-11-18 1986-11-18 多次元配列のメモリ割付け方式 Expired - Lifetime JPH0786836B2 (ja)

Priority Applications (1)

Application Number Priority Date Filing Date Title
JP61274428A JPH0786836B2 (ja) 1986-11-18 1986-11-18 多次元配列のメモリ割付け方式

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
JP61274428A JPH0786836B2 (ja) 1986-11-18 1986-11-18 多次元配列のメモリ割付け方式

Publications (2)

Publication Number Publication Date
JPS63127340A JPS63127340A (ja) 1988-05-31
JPH0786836B2 true JPH0786836B2 (ja) 1995-09-20

Family

ID=17541534

Family Applications (1)

Application Number Title Priority Date Filing Date
JP61274428A Expired - Lifetime JPH0786836B2 (ja) 1986-11-18 1986-11-18 多次元配列のメモリ割付け方式

Country Status (1)

Country Link
JP (1) JPH0786836B2 (ja)

Families Citing this family (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP5206091B2 (ja) * 2008-04-25 2013-06-12 株式会社明電舎 プログラマブルコントローラのデータアクセス方式

Family Cites Families (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPS5279737A (en) * 1975-12-26 1977-07-05 Hitachi Ltd Memory system

Also Published As

Publication number Publication date
JPS63127340A (ja) 1988-05-31

Similar Documents

Publication Publication Date Title
JP4640683B2 (ja) プログラムコード変換方法
US5551039A (en) Compiling a source code vector instruction by generating a subgrid loop for iteratively processing array elements by plural processing elements
US4463423A (en) Method of transforming high level language statements into multiple lower level language instruction sets
JP5118745B2 (ja) メモリアクセス命令のベクトル化
US4484272A (en) Digital computer for executing multiple instruction sets in a simultaneous-interleaved fashion
US6571387B1 (en) Method and computer program product for global minimization of sign-extension and zero-extension operations
JPH0786836B2 (ja) 多次元配列のメモリ割付け方式
US20210373859A1 (en) Instruction translation support method and information processing apparatus
US6460176B1 (en) Method of, apparatus for, and recording medium storing a program for, parallelizing a program containing an array designated to undergo indirect and irregular division
Davidson Simplifying code generation through peephole optimization
Myllykoski et al. On solving separable block tridiagonal linear systems using a GPU implementation of radix-4 PSCR method
JPS61110240A (ja) 最適化コンパイラ
JP2556148B2 (ja) ベクトルレジスタ割付け方式
JPS6234240A (ja) デ−タ割付け方式
JPH0644270B2 (ja) ベクトルプロセッサの制御処理方式
JP2809073B2 (ja) 配列のメモリ割り付け方式
JP2721377B2 (ja) Basicプログラム圧縮方法
Ondris Fast algorithm for assembling blocks of global equations in FE programs
JPH06103462B2 (ja) ベクトル・レングス制御範囲分割処理方式
JPH05197565A (ja) 定数領域割り付け処理方法
Wilkes Associative tabular data structures
Hopkins et al. A microprogrammed implementation of an architecture simulation language
JPH03257579A (ja) コンパイラの並列化方式
JPH08328871A (ja) 並列処理プログラム生成方法及びその実行方法並びにそれらの実施装置
Colvin ViC*: Running Out-Of-Core Instead Of Running Out Of Core