(57)【要約】      （修正有）【課題】メモリアクセス命令のベクトル化は、メモリのバンド幅を増やすことを目的として、２つ又はそれ以上のメモリアクセス命令を１つのシングルメモリアクセス命令に結合し、長いメモリアクセス待ち時間を持つコンピュータデバイスの性能を高める。【解決手段】最小データアクセス単位（ＭＤＡＵ）より小さい読み出し又は書き込みの複数のメモリアクセス命令を、複数の最小データアクセス単位を読み出す又は書き込む複数のメモリアクセス命令に変換する段階１０２と、複数のメモリアクセス命令をベースアドレスにオフセットを加算する形式に変換する段階１０４と、変換された複数のメモリアクセス命令の複数のサブセットを複数のパーティションにグループ化する段階１０６と、複数の命令パターンとマッチする複数のサブセット内の複数の変換されたメモリアクセス命令をベクトル化する段階１０８とを備える。【選択図】図２
2011118909.tif 000002
【特許請求の範囲】
【請求項１】
ソースコード内の複数のメモリアクセス命令を、標準フォーマットに変換する段階と、
フォーマットされた複数のメモリアクセス命令を有する複数のパーティションを生成する段階と、
複数の命令パターンと、前記複数のパーティション内の前記複数のフォーマット化されたメモリアクセス命令との、複数のマッチを有するマッチセットを生成する段階と、
前記複数のマッチを複数のベクトルメモリアクセス命令に変形する段階と
を備える方法。
【請求項２】
変換する段階が、最小データアクセス単位（ＭＤＡＵ）より小さい読み出し又は書き込みの複数のメモリアクセス命令を、複数の最小データアクセス単位を読み出す又は書き込む複数のメモリアクセス命令に変換する段階を有する請求項１に記載の方法。
【請求項３】
変換する段階が、前記複数の最小データアクセス単位を読み出す又は書き込む前記複数のメモリアクセス命令を、ベースアドレスにオフセットを加算する形式に変形する段階をさらに有する請求項２に記載の方法。
【請求項４】
複数のパーティションを生成する段階が、
前記複数のメモリアクセス命令を含む複数の基本ブロックを有するデータフローグラフを生成する段階と、
各基本ブロックにルール群を適用する段階と
を有する請求項１に記載の方法。
【請求項５】
適用する段階が、１つのパーティション内の１つのサブノードを、１種類の特定メモリバンクを対象にする複数のメモリアクセス命令に制限する段階を含む請求項４に記載の方法。
【請求項６】
適用する段階が、１つのパーティション内の前記１つのサブノードを、１つのメモリ読み出し又はメモリ書き込みに制限する段階をさらに含む請求項５に記載の方法。
【請求項７】
前記メモリバンクが、静的ランダムアクセスメモリ（ＳＲＡＭ）である請求項５に記載の方法。
【請求項８】
前記メモリバンクが、動的ランダムアクセスメモリ（ＤＲＡＭ）である請求項５に記載の方法。
【請求項９】
前記メモリバンクが、スクラッチパッドメモリである請求項５に記載の方法。
【請求項１０】
前記メモリバンクが、ＥＥＰＲＯＭである請求項５に記載の方法。
【請求項１１】
前記メモリバンクが、フラッシュメモリである請求項５に記載の方法。
【請求項１２】
前記メモリバンクが、ＮＶＲＡＭである請求項５に記載の方法。
【請求項１３】
前記複数の命令パターンが、命令セマンティクスを記述するパターンを有する請求項１に記載の方法。
【請求項１４】
前記複数のベクトルメモリアクセス命令が、ある種のメモリへの複数のメモリアクセスを表す、複数のシングルメモリアクセス命令を有する請求項１に記載の方法。
【請求項１５】
コンパイル方法であって、
最小データアクセス単位（ＭＤＡＵ）より小さい読み出し又は書き込みの複数のメモリアクセス命令を、複数の最小データアクセス単位を読み出す又は書き込む複数のメモリアクセス命令に変換する段階と、
前記複数のメモリアクセス命令を、ベースアドレスにオフセットを加算する形式に変換する段階と、
前記複数の変換されたメモリアクセス命令の複数のサブセットを、複数のパーティションにグループ化する段階と、
複数の命令パターンとマッチする、前記複数のサブセット内の前記複数の変換されたメモリアクセス命令を、ベクトル化する段階と
を備えるコンパイル方法。
【請求項１６】
前記コンパイル方法であって、
グループ化する段階が、複数のメモリアクセス命令を含む複数の基本ブロックを有するデータフローグラフを生成する段階と、
複数のパーティション内の、１つのメモリバンクを対象とし且つ同じ操作を実行する複数のメモリアクセス命令を有する、複数のサブノードを生成する段階と
を有する請求項１５に記載のコンパイル方法。
【請求項１７】
前記操作が、読み出しである請求項１６に記載のコンパイル方法。
【請求項１８】
前記操作が、書き込みである請求項１６に記載のコンパイル方法。
【請求項１９】
前記メモリバンクが、静的ランダムアクセスメモリ（SRAM）である請求項１６に記載のコンパイル方法。
【請求項２０】
前記メモリバンクが、動的ランダムアクセスメモリ（DRAM）である請求項１６に記載のコンパイル方法。
【請求項２１】
前記メモリバンクが、スクラッチパッドメモリである請求項１６に記載のコンパイル方法。
【請求項２２】
前記メモリバンクが、ＥＥＰＲＯＭである請求項１６に記載のコンパイル方法。
【請求項２３】
前記メモリバンクが、フラッシュメモリである請求項１６に記載のコンパイル方法。
【請求項２４】
前記メモリバンクが、ＮＶＲＡＭである請求項１６に記載のコンパイル方法。
【請求項２５】
前記複数の命令パターンが、命令セマンティクスを有する請求項１５に記載のコンパイル方法。
【請求項２６】
前記命令セマンティクスが、複数のセグメントを含む請求項２５に記載のコンパイル方法。
【請求項２７】
情報媒体内で明白に具現化され、複数のメモリアクセス命令をベクトル化するコンピュータプログラム製品であって、データ処理装置に、
ソースコードに存在する複数のメモリアクセス命令を標準形式に変換する手順と、
複数のフォーマットされたメモリアクセス命令を有する複数のパーティションを生成する手順と、
複数の命令パターンと、前記複数のサブセット内の前記複数のフォーマット化されたメモリアクセス命令との、複数のマッチを有するマッチセットを生成する手順と、
前記複数のマッチを複数のベクトルメモリアクセス命令に変形する手順
を実行させるコンピュータプログラム製品。
【請求項２８】
変換する手順が、最小データアクセス単位より小さい読み出し又は書き込みの複数のメモリアクセス命令を、複数の最小データアクセス単位を読み出す又は書き込む複数のメモリアクセス命令に変換する手順を有する請求項２７に記載の製品。
【請求項２９】
変換する手順が、前記複数の最小データアクセス単位を読み出す又は書き込む前記複数のメモリアクセス命令を、ベースアドレスにオフセットを加算する形式に変形する手順をさらに有する請求項２８に記載の製品。
【請求項３０】
複数のパーティションを生成する手順が、
複数のメモリアクセスを含む複数の基本ブロックを有するデータフローを生成する手順と、
複数のパーティション内の、１つのメモリバンクを対象とし且つ同じ操作を実行する複数のメモリアクセス命令を含む、複数サブノードを生成する手順と
を有する請求項２７に記載の製品。
【発明の詳細な説明】
【技術分野】
【０００１】
本明細書は、メモリアクセス命令のベクトル化に関する。
【背景技術】
【０００２】
メモリアクセス命令のベクトル化は、通常、プログラムソースコードがオブジェクトコード、又はアセンブリコードにコンパイルされる場合に用いられる。ベクトル化は、アセンブラのオプティマイザにも使用される。コンパイルの間、メモリアクセス命令のベクトル化は、メモリのバンド幅を増やすことを目的として、２つ又はそれ以上のメモリアクセス命令を１つのシングルメモリアクセス命令に結合する。結果として、プログラムの実行中、より少ないメモリアクセスが要求され、これにより、長いメモリアクセス待ち時間を持つコンピュータデバイスの性能を高める。
【図面の簡単な説明】
【０００３】
【図１】図１はブロック図である。
【図２】図２はフロー図である。
【図３】図３はメモリ図である。
【図４】図４はソースコードリストである。
【図５】図５はブロック図である。
【図６】図６は命令パターンである。
【発明を実施するための最良の形態】
【０００４】
図１に示されるように、一実施例によるシステム１０は、プロセッサ１２及びメモリ１４を備える。メモリ１４は、オペレーティングシステム１６、コンパイラ１８、ソースコード２０、及びオブジェクトコード２２を有する。幾つかの実施例では、コンパイルと実行とは、１つのシステム内に統合されない。そのような実施例では、ソースコードは、第一システム内の（複数の）オブジェクトファイルにコンパイルされ、連結された（複数の）オブジェクトファイルの実行は第二システム内で生じる。一例を挙げると、コンパイラ１８は、ハードディスクなどの記憶デバイス上のソースコードファイルの中のソースコードを読み出す。システム１０は、入力／出力デバイス２４及び記憶デバイス２６を備えてよい。
【０００５】
プロセッサ１２は、オブジェクトコード２２に含まれる複数の命令を実行する。複数の命令は、メモリ１４からの読み出し及びメモリ１４への書き込みなどの複数の命令を含んでよい。幾つかのコンピュータアーキテクチャでは、メモリアクセス命令は、選択可能なバイト数へのアクセス機能を持つ。メモリ１４は、一般的に理路整然と構成され、ここでは、メモリ上のデータが記憶されている位置はアドレスと呼ばれる数値で表現される。メモリ１４は、複数の収納箱の配列と考えられ、各収納箱は、１バイトの長さである。各箱は、それぞれに割り当てられたアドレス(固有値)を持つ。メモリアドレスを指定することにより、プログラマは、データの特定バイトにアクセスできる。
【０００６】
メモリ１４は、異なるタイプ又はバンクであってもよい。例えば、メモリ１４は、静的ランダムアクセスメモリ（ＳＲＡＭ）バンク、動的ランダムアクセスメモリ（ＤＲＡＭ）バンク、及びスクラッチパッドメモリバンクを含んでよい。メモリ１４は、また、電気的プログラマブルリードオンリーメモリ（ＥＥＰＲＯＭ）バンク、不揮発性ランダムアクセスメモリ（ＮＶＲＡＭ）バンク、及びフラッシュメモリバンクを含んでもよい。異なる複数のメモリバンクへのアクセスは、互いに独立しているので、複数のメモリアクセスのベクトル化は、特定のメモリバンクを対象とする複数のメモリアクセス命令に対して、独立に実行される。
【０００７】
各メモリアクセス命令は、命令フォーマットに従う。命令フォーマットは、メモリアクセスのタイプ(例えば、読み出し又は書き込み)、情報を読み出す又は書き込むメモリバンク、アクセスが開始する開始アドレス、及び処理すべきバイト数を含む。処理されるバイト数は、メモリのタイプ（例えば、ＳＲＡＭ、ＤＲＡＭ、スクラッチパッド等）及び実行される処理(例えば、読み出し又は書き込み)に伴い変化し得る。メモリアクセス命令が読み出し及び書き込みのために使用する最小のバイト数は、最小データアクセスユニット（ＭＤＡＵ）と呼ばれる。
【０００８】
一旦メモリアクセスが開始すると、プロセッサ１２は、アクセスが完了されるのを待つ。コンパイラ１８は、ソースコード２０に含まれる２つ又はそれ以上メモリアクセス命令を１つの等価なベクトル化されたメモリアクセス命令に結合することで、プロセッサ１２の待ち時間を短縮する。
【０００９】
図２に示されるように、コンパイラ１８は、ソースコードを介して複数のパスを作成し、命令パターンマッチングを使用して複数のメモリアクセスをベクトル化する。フォーマットパス（１０２）では、コンパイラ１８は、ＭＤＡＵバイトより少ない読み出しを規定する各メモリアクセス読み出し命令を、ＭＤＡＵバイトアクセスする読み出し命令にフォーマットする。例えば、ＭＤＡＵを４バイト、遭遇したメモリ読み出し命令が、２バイトを読み出す場合、遭遇したメモリ読み出し命令は、４バイトの読み出しにフォーマットされる。同様に、ＭＤＡＵバイトよりも少ない書き込みのメモリアクセス書き込み命令は、コンパイラ１８によってフォーマットされ、ＭＤＡＵバイトの部分的書き込み命令になる。
【００１０】
次のパスでは、コンパイラ１８は、可能なだけ多くのフォーマットされたメモリアクセス命令を標準フォーマットに変形（１０４）する。ここで、メモリアドレス参照は、ベースアドレスにオフセットを加えた形式であり、ベースアドレスは、他の複数のアドレスのための参照点として機能するアドレスである。例えば、ベースアドレスは、プログラムの開始を指し示してよい。プログラム中のすべての命令のアドレスは、ベースアドレスにオフセットを足して特定される。メモリアクセス命令をベースアドレスにオフセットを加算する形式に変形することは、幾つかのメモリアクセスを纏めて結合することを容易にすることで、メモリアクセスのベクトル化を容易にする。
【００１１】
複数のメモリアクセス命令の変形パスの後、コンパイラ１８は、データフローグラフに基づいて、各メモリ読み出し又はメモリ書き込みの組に対して、複数のメモリアクセスパーティションを、特定のメモリバンクに生成（１０６）する。メモリアクセスパーティションは、１つの基本ブロック内にある複数のメモリアクセス命令の複数のグループを含む。グループ（又はメモリアクセスパーティションのサブノードと呼ばれる）中のすべてのメモリアクセス命令は、同じメモリバンクへの同じメモリアクセス（書き込み又は読み出し）を実行する。コンパイラ１８は、各メモリアクセスパーティション内の各グループ（サブノード）に対して実行される命令パターンマッチングに基づき、複数のメモリアクセス命令をベクトル化（１０８）する。
【００１２】
図３に示されるように、一組のルールが、メモリアクセスパーティション２００、２０２、２０４などの複数のメモリアクセスパーティションを生成（１０６）するために使用される。データフローグラフ２０６が、生成される。この例では、データフローグラフ２０６は、３つの基本ブロック２０８、２１０、２１２を備える。各基本ブロック、２０８、２１０、及び２１２は、複数のメモリアクセス命令を有する。
【００１３】
データフローグラフ２０６内の各基本ブロック２０８、２１０、及び２１２に対し、それぞれ対応するメモリアクセスパーティション２００、２０２、及び２０４を生成することを目的として、以下の原則が、適用される。パーティションの各サブノードは、特定のメモリバンクへの複数のメモリアクセス操作のみを有する。例えば、サブノード２１４は、ＳＲＡＭメモリバンクからの複数の読み出しを含む。サブノード２１６はＤＲＡＭメモリバンクからの読み出しを含む。
【００１４】
パーティションが、どのメモリアクセス操作も含まない場合、パーティションは空パーティションであり、次の命令パターンマッチングでは無視される。
【００１５】
各サブノードは、複数のメモリ読み出しのみ又は複数のメモリ書き込みのみを含むが、複数のメモリ読み出し及び複数のメモリ書き込みの両方を含むことはない。例えば、パーティション２００内のサブノード２１４は、複数のメモリ読み出しのみを含む。パーティション２０２のサブノード２１８は、複数のメモリ書き込みのみを含む。２つメモリアクセス命令の間で依存性が存在する場合、これらは、同じサブノードには配置されない。
【００１６】
データフローグラフ２０６の１つの基本ブロックが、１つのメモリアクセスパーティションに対応するのに対し、各メモリアクセスパーティションは、１つ又はそれ以上のサブノードを含むことができる。例えば、基本ブロック２０８は、サブノード２１４及び２１６を含むメモリアクセスパーティション２００に対応する。
【００１７】
４バイトのＭＤＡＵを用いるコンパイラ１８について説明するが、他のＭＤＡＵ値を使用してもよい。
【００１８】
図４に示されるように、メモリ図１５０は、２つのＳＲＡＭ読み出しを１つのＳＲＡＭ読み出しに結合するベクトル化を、説明するために使用される。メモリ図１５０は、Ａｄｄｒ＋０からＡｄｄｒ＋１３により表現される、１４個のＳＲＡＭメモリ配置を含む。この例では、Ａｄｄｒ＋０が、ベースアドレス１５２であるとみなされる。最初のＳＲＡＭ読み出し命令１５４は、解析され、バイトＡｄｄｒ＋０から始まる４バイト、つまり、バイトＡｄｄｒ＋０、Ａｄｄｒ＋１、Ａｄｄｒ＋２、及びＡｄｄｒ＋３に含まれるデータが読み込まれる。２番目のＳＲＡＭ読み出し命令１５６は、解析され、バイトＡｄｄｒ＋４から始まる４バイト、つまり、バイトＡｄｄｒ＋４、Ａｄｄｒ＋５、Ａｄｄｒ＋６、及びＡｄｄｒ＋７に含まれるデータが読み込まれる。これら２つのＳＲＡＭ読み出し命令をベクトル化することは、１つのベクトル化されたＳＲＡＭ読み出し命令１５８を生成して、ＳＲＡＭ読み出し命令１５８が解析され、バイトＡｄｄｒ＋０から始まる８バイト、つまり、バイトＡｄｄｒ＋０、Ａｄｄｒ＋１、Ａｄｄｒ＋２、Ａｄｄｒ＋３、Ａｄｄｒ＋４、Ａｄｄｒ＋５、Ａｄｄｒ＋６、及びＡｄｄｒ＋７に含まれるデータを読み出す。
【００１９】
２つ又はそれ以上のメモリ読み出し（又は、２つ又はそれ以上のメモリ書き込み）をベクトル化することは、読み出し（又は書き込み）アドレスが連続であることを要求しない。例えば、バイトＡｄｄｒ＋０から始まる４バイトを読み出す最初のＳＲＡＭ読み出し命令１５４と、バイトＡｄｄｒ＋８から始まる４バイトを読み出す２番目のＳＲＡＭ読み出し命令１６０は、バイトＡｄｄｒ＋０から始まりバイトＡｄｄｒ＋１１を含む１２バイト読み出す１つのベクトル化されたＳＲＡＭ読み出し命令１６２にベクトル化される。４バイト、Ａｄｄｒ＋４、Ａｄｄｒ＋５、Ａｄｄｒ＋６、及びＡｄｄｒ＋７は、使用されないが、４バイトごとをフェッチする２回の読み出しではなく、１２バイトをフェッチする１回のメモリ読み出しを実行することで、時間を節約する。４つの未使用バイトＡｄｄｒ＋４、Ａｄｄｒ＋５、Ａｄｄｒ＋６、及びＡｄｄｒ＋７へのメモリ読み出しは、インスタンス化可能メモリ読み出しと呼ばれる。
【００２０】
パーティション２００、２０２、及び２０４などの複数のメモリアクセスパーティションとともに、命令パターンマッチングを用いて、ベクトル化を実行することは、便利である。各メモリアクセス命令、及びソースコード言語の定義で許容される命令変化に対して、命令パターンが、命令セマンティクスを記述するために生成されることができる。コンパイラ１８は、全ての命令パターンの記憶を含む。例えば、図５に示されるように、命令パターン３００は、２次のベクトル次数、すなわち、ＳＲＡＭから２＊ＭＤＡＵバイト読み出すＳＲＡＭメモリ読み出しを記述する。
【００２１】
命令パターン３００は、２つのＳＲＡＭ読み出しが、２次のベクトル次数で、１つのベクトル化されたＳＲＡＭ読み出し命令を構成できることを示す。命令パターン３００は、２つのセグメントと呼ばれるセマンティック節３０２及び３０４を含む。
【００２２】
命令パターン３００が、入力プログラムに現れる２つのＳＲＡＭ読み出しとマッチする場合、すなわち、ソースコード内の２つの連続する命令が、２つのセグメントにより要求されるセマンティクスに従う場合、パターンマッチングは成功である。成功したパターンマッチの結果として、対象となる２フラグメントのシンボリックレジスター、Ｒｅｇ１及びＲｅｇ２が、同じレジスタークラスの複数のレジスターに割り付けられ、物理レジスター値が連続になることが要求される。これは、命令パターン３００の条件部３０６に指定されている。
【００２３】
成功する命令パターンマッチングは、必ずしも全てのセグメントのマッチを要求しない。命令パターン３００にとって、１つのセグメントがマッチする場合、残りのセグメントはインスタンス化可能なので、マッチングは成功である。時折、この様なセグメントのインスタンス化は、有効である。例えば、パーティション２００内のサブノード２１４に現れる２つのＳＲＡＭ読み出しにとって、１フラグメントパターンとそれぞれマッチングさせる代わりに、３フラグメントパターンとマッチした"ＳＲＡＭ＿ｒｅａｄ  Ｒｅｇ１＋０"及び"ＳＲＡＭ＿ｒｅａｄ  Ｒｅｇ１＋８"の組み合わせを得ることは、有益である。"ＳＲＡＭ＿ｒｅａｄ  Ｒｅｇ１＋４"のインスタンス化は要求されるが、１回のメモリアクセスは、２回のメモリアクセスよりも、常により安価である。複数のメモリ書き込みの複数のセグメントは、インスタンス化されることが出来ないことは注目すべきである。
【００２４】
命令パターンマッチングは、コンパイラ１８により、各パーティションの各サブノードに対して記憶上の全ての命令パターンに照らし合わせて実行される。各サブノードは、読み出し又は書き込みのどちらかであり、サブノードの命令パターンマッチングは、複数の読み出しパターンのみ又は複数の書き込みパターンのみのどちらかを用いて、実行される。パターンマッチングの記述を容易にすることを目的として、下記の特徴を持つ命令パターンを"リーガルパターン候補"と呼ぶ。
１−同じメモリバンクにサブノードとしてアクセスする
２−同じメモリ操作（読み出し又は書き込み）をサブノードのメモリ操作特性として記述する
【００２５】
特定のサブノードに対する、全てのリーガルパターン候補とのパターンマッチングは、サブノード内の異なるメモリ操作の全組み合わせに対して実施される。
【００２６】
全ての成功したマッチは記録され、最適化された複数のマッチは、複数のパターンマッチの最終マッチセットを生成するために選択される。下記の原則が、最適化された複数のマッチを選択するために選択される。
（１）最終マッチセットは、ノード内の全てのメモリ操作を補う最小数のマッチを含む。
（２）ノードに現れる、各メモリ操作は、最終マッチセットに属する、１つのマッチにのみ現れることが出来る。
（３）２つのパターンマッチが同じ数のマッチしたフラグメントを含む場合、より少ないインスタンス化されたフラグメントを持つマッチが選択される。
最終マッチセットの全てのマッチが１フラグメントのマッチの場合、メモリベクトル化の機会は、識別されない。
【００２７】
メモリアクセスパターン設計では、全ての１フラグメントパターン及び部分的書き込みパターンが含まれ、これは、ファイナルマッチが常に形成されることを保証する。
【００２８】
最終マッチセットとともに、コンパイルされたプログラムは、ベクトル化された複数のメモリアクセスを形成するために変形される。
【００２９】
幾つかの命令パターンは、複数の部分的書き込みをベクトル化することを目的として、特別に設計される。部分的書き込みを含むサブノードに対して、サブノード内の全ての部分的書き込みのためのパターンマッチングが、ＭＤＡＵバイトの書き込みを形成することを目的として、幾つかの部分的書き込みの結合を試みながら最初に実施される。部分的書き込みのベクトル化が成功した場合、サブノードは、これらのマッチした部分的書き込みからＭＤＡＵバイトの書き込みを形成するために更新される。部分的書き込みのベクトル化は、後のメモリアクセスのベクトル化の機会を増大させる。
【００３０】
図３のパーティション２００、２０２、及び２０４のベクトル化の結果４００が、図６に示されている。
【００３１】
他の複数の実施例は、請求項の範囲内にある。
【図１】
2011118909.tif 000003
【図２】
2011118909.tif 000004
【図３】
2011118909.tif 000005
【図４】
2011118909.tif 000006
【図５】
2011118909.tif 000007
【図６】
2011118909.tif 000008
【手続補正書】
【提出日】平成23年1月6日(2011.1.6)
【手続補正１】
【補正対象書類名】特許請求の範囲
【補正対象項目名】全文
【補正方法】変更
【補正の内容】
【特許請求の範囲】
【請求項１】
データ処理装置上でプログラムを実行することにより実現され、記憶デバイスに格納された対象ソースコードにおける、２つ又はそれ以上のメモリアクセス命令を１つのシングルメモリアクセス命令に結合させる方法であって、
前記データ処理装置のプロセッサの動作により、当該ソースコード内の複数のメモリアクセス命令を、フォーマットパスにおいて、最小データアクセス単位（ＭＤＡＵ）より少ない読み出し又は書き込みを規定する各メモリ命令を、最小データアクセス単位を読み出し又は書き込みするメモリアクセス命令に変換し、次のパスにおいて、最小データアクセス単位を読み出し又は書き込みするメモリアクセス命令を標準フォーマットメモリアクセス命令に対応する、ベースアドレスにオフセットを加えた形式を含むフォーマットに変換する段階と、
前記データ処理装置のプロセッサの動作により、特定のメモリバンクへ対応する標準フォーマットメモリアクセス命令の組を有する複数のメモリアクセスパーティションを生成する段階と、
前記データ処理装置のプロセッサの動作により、予め定義された複数の命令パターンと、前記複数のメモリアクセスパーティション内の複数の標準フォーマットメモリアクセス命令とを比較し、複数のマッチを有するマッチセットを生成する段階と、
前記データ処理装置のプロセッサの動作により、前記マッチセットを複数のメモリアクセス命令を結合したベクトルメモリアクセス命令に変形する段階と
を備える方法。
【請求項２】
前記複数のメモリアクセスパーティションを生成する段階が、
前記データ処理装置のプロセッサの動作により、前記複数のメモリアクセス命令を含む複数の基本ブロックを有するデータフローグラフを生成する段階と、
前記データ処理装置のプロセッサの動作により、各基本ブロックにルール群を適用する段階と
を有する請求項１に記載の方法。
【請求項３】
前記適用する段階が、前記データ処理装置のプロセッサの動作により、１つのメモリアクセスパーティション内の１つのサブノードを、１種類の特定メモリバンクを対象にする複数のメモリアクセス命令に制限する段階を含む請求項２に記載の方法。
【請求項４】
前記適用する段階が、前記データ処理装置のプロセッサの動作により、１つのメモリアクセスパーティション内の前記１つのサブノードを、１つのメモリ読み出し又はメモリ書き込みに制限する段階をさらに含む請求項３に記載の方法。
【請求項５】
前記メモリバンクが、静的ランダムアクセスメモリ（ＳＲＡＭ）である請求項３または４に記載の方法。
【請求項６】
前記メモリバンクが、動的ランダムアクセスメモリ（ＤＲＡＭ）である請求項３または４に記載の方法。
【請求項７】
前記メモリバンクが、スクラッチパッドメモリである請求項３または４に記載の方法。
【請求項８】
前記メモリバンクが、ＥＥＰＲＯＭ（登録商標）である請求項３または４に記載の方法。
【請求項９】
前記メモリバンクが、フラッシュメモリである請求項３または４に記載の方法。
【請求項１０】
前記メモリバンクが、ＮＶＲＡＭである請求項３または４に記載の方法。
【請求項１１】
前記複数の命令パターンが、命令セマンティクスを記述するパターンを有する請求項１から１０のいずれか一項に記載の方法。
【請求項１２】
前記ベクトルメモリアクセス命令が、ある種のメモリへの複数のメモリアクセスを表す、シングルメモリアクセス命令である請求項１から１１のいずれか一項に記載の方法。
【請求項１３】
前記ベクトルメモリアクセス命令に変形する段階は、特定のメモリバンクを対象とするメモリアクセス命令に対して、前記マッチセットを独立にベクトルメモリアクセス命令に変換する、請求項１から１２のいずれか一項に記載の方法。
【請求項１４】
データ処理装置上でコンパイラプログラムを実行することにより実現され、記憶デバイスに格納された対象ソースコードにおける、２つ又はそれ以上のメモリアクセス命令を１つのシングルメモリアクセス命令に結合させるコンパイル方法であって、
前記データ処理装置のプロセッサの動作により、前記コンパイラプログラムのフォーマットパスにおいて、最小データアクセス単位（ＭＤＡＵ）より小さい読み出し又は書き込みの複数のメモリアクセス命令を、最小データアクセス単位を読み出す又は書き込む複数のメモリアクセス命令に変換する段階と、
前記データ処理装置のプロセッサの動作により、前記コンパイラプログラムの次のパスにおいて、前記複数のメモリアクセス命令を、ベースアドレスにオフセットを加算する形式に変換する段階と、
前記データ処理装置のプロセッサの動作により、前記変換されたメモリアクセス命令の複数のサブセットを、複数のパーティションにグループ化する段階と、
前記データ処理装置のプロセッサの動作により、予め定義された複数の命令パターンと、前記複数のサブセット内の前記変換されたメモリアクセス命令とを比較し、複数のマッチを有するマッチセットを生成する段階と、
前記データ処理装置のプロセッサの動作により、前記マッチセットを複数のメモリアクセス命令を結合したベクトルメモリアクセス命令に変形しベクトル化する段階と
を備えるコンパイル方法。
【請求項１５】
前記グループ化する段階が、前記データ処理装置のプロセッサの動作により、複数のメモリアクセス命令を含む複数の基本ブロックを有するデータフローグラフを生成する段階と、
前記データ処理装置のプロセッサの動作により、複数のパーティション内の、１つのメモリバンクを対象とし且つ同じ操作を実行する複数のメモリアクセス命令を有する、複数のサブノードを生成する段階と
を有する請求項１４に記載のコンパイル方法。
【請求項１６】
前記操作が、読み出しである請求項１５に記載のコンパイル方法。
【請求項１７】
前記操作が、書き込みである請求項１５に記載のコンパイル方法。
【請求項１８】
前記メモリバンクが、静的ランダムアクセスメモリ（ＳＲＡＭ）である請求項１５から１７のいずれか一項に記載のコンパイル方法。
【請求項１９】
前記メモリバンクが、動的ランダムアクセスメモリ（ＤＲＡＭ）である請求項１５から１７のいずれか一項に記載のコンパイル方法。
【請求項２０】
前記メモリバンクが、スクラッチパッドメモリである請求項１５から１７のいずれか一項に記載のコンパイル方法。
【請求項２１】
前記メモリバンクが、ＥＥＰＲＯＭ（登録商標）である請求項１５から１７のいずれか一項に記載のコンパイル方法。
【請求項２２】
前記メモリバンクが、フラッシュメモリである請求項１５から１７のいずれか一項に記載のコンパイル方法。
【請求項２３】
前記メモリバンクが、ＮＶＲＡＭである請求項１５から１７のいずれか一項に記載のコンパイル方法。
【請求項２４】
前記複数の命令パターンが、命令セマンティクスを有する請求項１４から２３のいずれか一項に記載のコンパイル方法。
【請求項２５】
前記命令セマンティクスが、複数のセグメントを含む請求項２４に記載のコンパイル方法。
【請求項２６】
前記データ処理装置に、請求項１から２５のいずれか一項に記載の方法を実行させるためのプログラム。
【外国語明細書】
2011118909000001.pdf