(57)【要約】【課題】ＳＩＭＤ型演算を行う情報処理装置について、並列度が異なる機械語プログラムを実行可能にする【解決手段】ＳＩＭＤ演算器（１４）を有する情報処理装置（１０）に、機械語プログラムからＳＩＭＤ命令を入力し、これを所定回数繰り返し出力するＳＩＭＤ処理分割手段（１２）と、ＳＩＭＤ処理分割手段（１１）から出力されるメモリアクセスに係るＳＩＭＤ命令について、当該ＳＩＭＤ命令の繰り返し回数に応じて当該ＳＩＭＤ命令に係るメモリアドレスを変換してＳＩＭＤ演算器（１４）に与えるメモリアドレス変換手段（１２）と、複数のＳＩＭＤ演算器用レジスタ群（１４４）を有し、ＳＩＭＤ処理分割手段（１１）によるＳＩＭＤ命令の繰り返し回数に応じて、ＳＩＭＤ演算器（１４）によって使用されるレジスタ群を切り換えるレジスタ切換手段（１４３）とを設ける。【選択図】  図１
2004362086.tif 000002
【特許請求の範囲】
【請求項１】
ＳＩＭＤ演算器を有し、ＳＩＭＤ命令を含む機械語プログラムに従ってＳＩＭＤ型演算を行う情報処理装置であって、
前記機械語プログラムから一または連続する複数のＳＩＭＤ命令を入力し、当該一または連続する複数のＳＩＭＤ命令を、処理分割数に相当する回数繰り返し出力するＳＩＭＤ処理分割手段を備え、
前記ＳＩＭＤ処理分割手段から出力されたＳＩＭＤ命令を、前記ＳＩＭＤ演算器によって実行する
ことを特徴とする情報処理装置。
【請求項２】
請求項１に記載の情報処理装置において、
前記ＳＩＭＤ処理分割手段から出力されたＳＩＭＤ命令のうちメモリアクセスに係るものについて、当該ＳＩＭＤ命令の繰り返し出力に係る順序数に応じて、当該ＳＩＭＤ命令に係る原メモリアドレスを新メモリアドレスに変換するメモリアドレス変換手段を備えた
ことを特徴とする情報処理装置。
【請求項３】
請求項１に記載の情報処理装置において、
前記処理分割数に相当する個数の、前記ＳＩＭＤ演算器用のレジスタ群を有し、前記ＳＩＭＤ処理分割手段によるＳＩＭＤ命令の繰り返し出力に係る順序数に応じて、前記ＳＩＭＤ演算器によって使用される前記レジスタ群を切り換えるレジスタ切換手段を備えた
ことを特徴とする情報処理装置。
【請求項４】
請求項１に記載の情報処理装置において、
前記ＳＩＭＤ演算器の並列度情報および前記機械語プログラム中に示された前記機械語プログラムの並列度情報に基づいて、前記処理分割数を算出するＳＩＭＤ処理分割数算出手段を備えた
ことを特徴とする情報処理装置。
【請求項５】
ＳＩＭＤ命令を含む原機械語プログラムを入力し、当該原機械語プログラムに含まれる命令列全体を処理分割数に相当する回数繰り返したものに相当する中間機械語プログラムを生成するＳＩＭＤ処理分割手段と、
前記ＳＩＭＤ処理分割手段によって生成された中間機械語プログラムに含まれるＳＩＭＤ命令のうちメモリアクセスに係るものについて、当該ＳＩＭＤ命令に係る原メモリアドレスを新メモリアドレスに変換するメモリアドレス変換手段とを備え、
前記メモリアドレス変換手段によってメモリアドレス変換処理が施された後の前記中間機械語プログラムを、新機械語プログラムとして出力する
ことを特徴とする機械語プログラム変換装置。
【請求項６】
請求項５に記載の機械語プログラム変換装置において、
前記中間機械語プログラムは、前記原機械語プログラムに含まれる命令列全体が前記処理分割数に相当する回数だけ繰り返し出力された命令列からなるものであり、
前記メモリアドレス変換手段は、前記中間機械語プログラムに含まれるメモリアクセスに係るＳＩＭＤ命令について、当該ＳＩＭＤ命令の繰り返し出力に係る順序数に応じて、当該ＳＩＭＤ命令に係る原メモリアドレスを新メモリアドレスに変換する
ことを特徴とする機械語プログラム変換装置。
【請求項７】
請求項５に記載の機械語プログラム変換装置において、
前記中間機械語プログラムは、前記原機械語プログラムに含まれる命令列全体をサブルーチンとして、当該サブルーチンを前記処理分割数に相当する回数だけ呼び出すループ命令列からなるものであり、
前記メモリアドレス変換手段は、前記原メモリアドレスに係るアドレスオフセットを、前記ループ命令列が実行される際のループ回数を示す変数に書き換えることを特徴とする機械語プログラム変換装置。
【発明の詳細な説明】
【０００１】
【発明の属する技術分野】
本発明は、ＳＩＭＤ（Ｓｉｎｇｌｅ  Ｉｎｓｔｒｕｃｔｉｏｎ  ｓｔｒｅａｍ／Ｍｕｌｔｉｐｌｅ  Ｄａｔａ  ｓｔｒｅａｍ）命令を含む機械語プログラムの処理技術に関し、特に、機械語プログラムの並列度が情報処理装置におけるプロセッサ数に非対応の場合であっても当該機械語プログラムを実行可能にする技術、および並列度を変更した新たな機械語プログラムを生成する技術に属する。
【０００２】
【従来の技術】
画像処理などのメディア処理を行う場合、複数のデータに対して同一の演算を行うことがよくある。このような場合、複数データに対して同一演算を行うハードウェアを構成することにより、高速にメディア処理を行うことが可能となる。このようなアーキテクチャを「ＳＩＭＤ型アーキテクチャ」と呼ぶ。ＳＩＭＤ型アーキテクチャの例としては、大型計算機でよく用いられるベクトル型計算機や、複数のプロセッサを同一の命令で制御するＳＩＭＤ型マルチプロセッサ、単一プロセッサの一の命令で複数のデータ処理を行うＳＩＭＤ命令などがある。
【０００３】
メディア処理を行うプロセッサは、その目的により要求される特性が変化する。たとえば、高速処理が必要な場合は、一度に処理できるデータ量を多くする必要がある。逆に、扱うデータがそれほど大きくなく、ハードウェアを小さくすることにより消費電力を削減することを優先したい場合には、一度に処理できるデータを少なくすればよい。ここで、一度に処理できるデータ量のことを「並列度」と呼ぶ。メディア処理を行うプロセッサは、並列度を増減させることにより、性能とハード量のバランスを取ることができる。
【０００４】
ところで、メディア処理で行う演算には特殊なものが多く含まれている。このため、メディア処理を行うプロセッサでは、このような特殊な演算を高速に処理するための専用命令を備えていることが多い。しかし、メディア処理のプログラミングにおいて高級言語記述を用いる場合、このような特殊な演算を有効に活用することができず、性能を発揮できないことがある。そこで、特殊な演算を多く含むプログラムを記述したい場合は、性能を重視するために、機械語プログラムで演算を記述することが多い。
【０００５】
ＳＩＭＤ型アーキテクチャの機械語プログラミングについては、並列度を変化させることによってさまざまな問題が発生する。たとえば、ＳＩＭＤ型マルチプロセッサにおいては、各命令はプロセッサ数に比例した並列処理となるが、並列度が変化、すなわちプロセッサ数が変化すると、並列処理の動作が異なってしまう。特に、メモリアクセスに係る命令については、プロセッサ数の変化に応じて適切にアドレスオフセットを変更しないと、誤ったメモリアドレスのデータをアクセスしてしまうことになる。
【０００６】
したがって、ＳＩＭＤ型アーキテクチャの並列度を変化させる場合には、それに合わせて機械語プログラムを変更する必要がある。従来、これを実現するために、高級言語による逐次プログラミングをＳＩＭＤ処理に変換（ベクトル化）することによって新たな機械語プログラムを生成している（非特許文献１参照）。
【０００７】
【非特許文献１】
Ｈａｎｓ  Ｚｉｍａ／Ｂａｒｂａｒａ  Ｃｈａｐｍａｎ共著、村岡  洋一  訳、“スーパーコンパイラ”、第１版、日本、オーム社、平成７年４月２５日、ｐ．１９５〜２７２
【０００８】
【発明が解決しようとする課題】
上記の手法は、高級言語記述による逐次プログラミングには対応しているが、メディア処理などで行われるＳＩＭＤ型アーキテクチャの機械語プログラミングには対応していない。このため、ＳＩＭＤ型アーキテクチャの機械語プログラミングにおいて並列度が変化した場合には、多くの場合人手によって、機械語プログラム記述を変更する必要があった。
【０００９】
また、さまざまな並列度の機械語プログラムをあらかじめ用意しておくことで、その都度機械語プログラム記述を変更することなく、さまざまな並列度のＳＩＭＤ型アーキテクチャに対応可能となるが、たとえば、並列度を動的に変更可能なハードウェアなどでは、複数の並列度に対応した複数の機械語プログラムを保持しなければならなくなる。このため、より多くのメモリ空間が必要となり、装置の小型化・低コスト化の要求に逆行するものとなる。
【００１０】
上記問題に鑑み、本発明は、ＳＩＭＤ命令を含む機械語プログラムに従ってＳＩＭＤ型演算を行う情報処理装置について、当該機械語プログラムの並列度が当該情報処理装置に係るＳＩＭＤ型アーキテクチャの並列度に対応していない場合であっても、当該機械語プログラムの実行を可能にすることを課題とする。また、原機械語プログラムに係る並列度を変更して、新機械語プログラムを生成するプログラム変換装置の提供を課題とする。
【００１１】
【課題を解決するための手段】
上記課題を解決するために本発明が講じた手段は、ＳＩＭＤ演算器を有し、ＳＩＭＤ命令を含む機械語プログラムに従ってＳＩＭＤ型演算を行う情報処理装置として、前記機械語プログラムから一または連続する複数のＳＩＭＤ命令を入力し、当該一または連続する複数のＳＩＭＤ命令を、処理分割数に相当する回数繰り返し出力するＳＩＭＤ処理分割手段を備え、前記ＳＩＭＤ処理分割手段から出力されたＳＩＭＤ命令を、前記ＳＩＭＤ演算器によって実行するものとする。
【００１２】
これによると、ＳＩＭＤ処理分割手段によって、機械語プログラムから一または連続する複数のＳＩＭＤ命令が入力され、当該一または連続する複数のＳＩＭＤ命令が処理分割数に相当する回数繰り返し出力される。そして、繰り返し出力されたＳＩＭＤ命令はＳＩＭＤ演算器によって実行される。このように、同一のＳＩＭＤ命令を複数繰り返し実行することによって、高並列度のＳＩＭＤ命令を、低並列度のＳＩＭＤ演算器において、複数の実行クロックに分けて実行することが可能となる。すなわち、本発明に係る情報処理装置は、入力とする機械語プログラムの並列度がＳＩＭＤ演算器の並列度に対応していない場合であっても、当該機械語プログラムを実行することができる。
【００１３】
上記情報処理装置は、前記ＳＩＭＤ処理分割手段から出力されたＳＩＭＤ命令のうちメモリアクセスに係るものについて、当該ＳＩＭＤ命令の繰り返し出力に係る順序数に応じて、当該ＳＩＭＤ命令に係る原メモリアドレスを新メモリアドレスに変換するメモリアドレス変換手段を備えていることが好ましい。
【００１４】
これによると、メモリアドレス変換手段によって、ＳＩＭＤ処理分割手段から繰り返し出力されるＳＩＭＤ命令に係る原メモリアドレスが、当該ＳＩＭＤ命令の繰り返し出力に係る順序数に応じた新メモリアドレスに変換される。このように、原メモリアドレスを新メモリアドレスに変換することによって、ＳＩＭＤ命令を分割して実行する場合に、正しいメモリアドレスにアクセスすることができる。
【００１５】
また、上記情報処理装置は、前記処理分割数に相当する個数の、前記ＳＩＭＤ演算器用のレジスタ群を有し、前記ＳＩＭＤ処理分割手段によるＳＩＭＤ命令の繰り返し出力に係る順序数に応じて、前記ＳＩＭＤ演算器によって使用される前記レジスタ群を切り換えるレジスタ切換手段を備えていることが好ましい。
【００１６】
これによると、レジスタ切換手段によって、ＳＩＭＤ演算器が使用するレジスタ群が、当該ＳＩＭＤ命令の繰り返し出力に係る順序数に応じて切り換えられるため、他のＳＩＭＤ命令の実行結果が誤って上書きされることを回避することができる。
【００１７】
また、好ましくは、上記情報処理装置は、前記ＳＩＭＤ演算器の並列度情報および前記機械語プログラム中に示された前記機械語プログラムの並列度情報に基づいて、前記処理分割数を算出するＳＩＭＤ処理分割数算出手段を備えているものとする。
【００１８】
一方、上記課題を解決するために本発明が講じた手段は、機械語プログラム変換装置として、ＳＩＭＤ命令を含む原機械語プログラムを入力し、当該原機械語プログラムに含まれる命令列全体を処理分割数に相当する回数繰り返したものに相当する中間機械語プログラムを生成するＳＩＭＤ処理分割手段と、前記ＳＩＭＤ処理分割手段によって生成された中間機械語プログラムに含まれるＳＩＭＤ命令のうちメモリアクセスに係るものについて、当該ＳＩＭＤ命令に係る原メモリアドレスを新メモリアドレスに変換するメモリアドレス変換手段とを備え、前記メモリアドレス変換手段によってメモリアドレス変換処理が施された後の前記中間機械語プログラムを、新機械語プログラムとして出力するものとする。
【００１９】
これによると、ＳＩＭＤ処理分割手段によって、原機械語プログラムに含まれる命令列全体を処理分割数に相当する回数繰り返したものに相当する中間機械語プログラムが生成され、そのうちメモリアクセスに係るものについては、メモリアドレス変換手段によってその原メモリアドレスが新メモリアドレスに変換され、新機械語プログラムとして出力される。このように、原機械語プログラムが繰り返し実行されるようにすることによって、高並列度のＳＩＭＤ命令を、低並列度のＳＩＭＤ演算器において、複数の実行クロックに分けて実行することが可能となる。そして、メモリアクセスに係るＳＩＭＤ命令については、その原メモリアドレスを新メモリアドレスに変換することによって、ＳＩＭＤ命令が分割して実行される場合に、正しいメモリアドレスにアクセスすることができるようになる。以上のようにして、本発明に係る機械語プログラム変換装置は、原機械語プログラムの並列度を変更して、新機械語プログラムを自動生成することができる。
【００２０】
具体的には、前記中間機械語プログラムは、前記原機械語プログラムに含まれる命令列全体が前記処理分割数に相当する回数だけ繰り返し出力された命令列からなるものとする。そして、前記メモリアドレス変換手段は、前記中間機械語プログラムに含まれるメモリアクセスに係るＳＩＭＤ命令について、当該ＳＩＭＤ命令の繰り返し出力に係る順序数に応じて、当該ＳＩＭＤ命令に係る原メモリアドレスを新メモリアドレスに変換するものとする。
【００２１】
また、具体的には、前記中間機械語プログラムは、前記原機械語プログラムに含まれる命令列全体をサブルーチンとして、当該サブルーチンを前記処理分割数に相当する回数だけ呼び出すループ命令列からなるものとする。そして、前記メモリアドレス変換手段は、前記原メモリアドレスに係るアドレスオフセットを、前記ループ命令列が実行される際のループ回数を示す変数に書き換えるものとする。
【００２２】
【発明の実施の形態】
以下、本発明の実施の形態について、図面を参照しながら説明する。
【００２３】
（第１の実施形態）
図１は、本発明の第１の実施形態に係る情報処理装置の構成を示す。本実施形態に係る情報処理装置１０は、ＳＩＭＤ処理分割数算出手段１１（以下、省略して「算出手段１１」と称する場合がある）と、ＳＩＭＤ処理分割手段１２（以下、省略して「分割手段１２」と称する場合がある）と、メモリアドレス変換手段１３（以下、省略して「変換手段１３」と称する場合がある）と、ＳＩＭＤ演算器１４とを備え、機械語プログラムＤ１０を実行する。情報処理装置１０は、たとえば、ＭＰＥＧ（Ｍｏｖｉｎｇ  Ｐｉｃｔｕｒｅ  Ｅｘｐｅｒｔｓ  Ｇｒｏｕｐ）のコーデックとして用いられるものである。なお、算出手段１１、分割手段１２および変換手段１３は、ハードウェアによる構成およびプログラム処理のいずれでも実現可能である。
【００２４】
情報処理装置１０が入力とする機械語プログラムＤ１０は、機械語プログラムＤ１０に係るＳＩＭＤ処理の並列度を表したプログラム並列度情報Ｄ１１（以下、「情報Ｄ１１」と称する）と、ＳＩＭＤ演算器１４によって実行されるＳＩＭＤ命令を少なくとも一つ含むＳＩＭＤ命令列Ｄ１２とを含んでいる。プログラマは情報Ｄ１１を適宜指定することができる。すなわち、ＳＩＭＤ演算器の並列度の大小に関わらず、同一の命令動作記述が可能となっている。なお、情報Ｄ１１を指定する方法としては、後述する専用命令を用いる方法や、指定されたレジスタやメモリアドレスに情報Ｄ１１を格納する方法などがある。
【００２５】
以下、情報処理装置１０の各構成要素の概要について順に説明する。
【００２６】
ＳＩＭＤ処理分割数算出手段１１は、機械語プログラムＤ１０における情報Ｄ１１およびＳＩＭＤ演算器１４の並列度を表したＳＩＭＤ演算器並列度情報Ｄ２０（以下、「情報Ｄ２０」と称する）から、ＳＩＭＤ処理を何回に分割して実行するかを示すＳＩＭＤ処理分割数Ｄ２１（以下、「分割数Ｄ２１」と称する）を算出する。ここで、情報Ｄ２０によって表されるＳＩＭＤ演算器１４の並列度とは、具体的には、ＳＩＭＤ演算器１４におけるプロセッサエレメント１４１の個数を指す。たとえば、図２（ａ）に示したＳＩＭＤ演算器１４の場合、４個のプロセッサエレメント１４１が、また、同図（ｂ）に示したＳＩＭＤ演算器１４の場合、８個のプロセッサエレメント１４１が、それぞれ独立してデータメモリ１４２にアクセス可能となっている。したがって、同図（ａ）（ｂ）のＳＩＭＤ演算器１４の並列度はそれぞれ“４”および“８”ということになる。なお、情報Ｄ２０を取得する方法としては、専用命令を用いる方法や、所定のレジスタやメモリアドレスから取得する方法などがある。
【００２７】
情報Ｄ１１は、機械語プログラムＤ１０において具体的な数値として記述されている。たとえば、図３に示した機械語プログラムＤ１０の例では、プログラム先頭のＶＥＣＴＯＲ命令において情報Ｄ１１が記述されている。ＶＥＣＴＯＲ命令は、機械語プログラムＤ１０の先頭に位置し、情報処理装置１０にプログラム並列度を指定する専用命令である。この場合、情報Ｄ１１として“８”が指定されている。
【００２８】
分割数Ｄ２１は、情報Ｄ１１の値を情報Ｄ２０の値で除算することによって算出することができる。具体的には、図２（ａ）に示したＳＩＭＤ演算器１４で図３に示した機械語プログラムＤ１０を処理する場合、分割数Ｄ２１は“２”（８／４＝２）ということなる。分割数Ｄ２１は、機械語プログラムＤ１０の実行中は変化することがないため、プログラム実行開始時に一度だけ算出すればよい。なお、通常は、上記除算結果が整数値になるようにＳＩＭＤ演算器１４のアーキテクチャを設計する。除算結果が整数にならない場合であっても本発明は適用可能である。たとえば、８並列の機械語プログラムを５並列のＳＩＭＤ演算器で実行する場合、当該ＳＩＭＤ演算器のプロセッサエレメントのいずれか一つをスリープさせて４並列にすればよい。しかし、このような方法によると処理効率が悪くなるため、通常はそのようなアーキテクチャは採用しない。以降では、除算結果は整数である場合のみ扱う。
【００２９】
図１に戻り、ＳＩＭＤ処理分割手段１２は、ＳＩＭＤ命令列Ｄ１２に含まれる各ＳＩＭＤ命令を入力し、算出手段１１によって算出された分割数Ｄ２１に示された回数だけ、入力した各ＳＩＭＤ命令を繰り返し出力する。このとき、当該繰り返し出力に係る順序数を命令生成回数Ｄ２２（以下、「回数Ｄ２２」と称する）としてカウントする。ＳＩＭＤ処理分割手段１２の動作の具体例は図４に示したとおりである。すなわち、ＳＩＭＤ処理分割手段１２は、ＳＩＭＤ命令（図中では「命令１」として示している）を入力すると、実行クロックごとに同一のＳＩＭＤ命令（命令１）を一つずつ、分割数Ｄ２１に示された回数である２回だけ繰り返し出力する。回数Ｄ２２は、ＳＩＭＤ命令（命令１）の１回目の出力の際には“１”となり、２回目の出力の際には“２”となる。
【００３０】
メモリアドレス変換手段１３は、図５に示したように、分割数Ｄ２１および回数Ｄ２２に基づいて、分割手段１２から出力されるＳＩＭＤ命令（メモリアクセスに係るもの）に係る原メモリアドレスを、実際のデータの参照先である新メモリアドレスに変換して、ＳＩＭＤ演算器１４に逐次出力する。このメモリアドレス変換の具体例については後述する。
【００３１】
図１に戻り、ＳＩＭＤ演算器１４は、複数のプロセッサエレメント１４１と、各プロセッサエレメント１４１が独立してデータアクセス可能なデータメモリ１４２と、レジスタ切換手段１４３とを備えており、メモリアドレス変換手段１３から出力されるＳＩＭＤ命令を実行する。このうち、レジスタ切換手段１４３は、ＳＩＭＤ演算器１４用の複数のレジスタ群１４４を有している。レジスタ切換手段１４３は、回数Ｄ２２に応じてレジスタ群１４４を切り換える。ＳＩＭＤ演算器１４は、切り換えられたレジスタ群１４４を使用してＳＩＭＤ演算を行う。このように、ＳＩＭＤ命令の実行時にＳＩＭＤ演算器１４が使用するレジスタ群を適宜切り換えることによって、ＳＩＭＤ処理分割によるレジスタの上書きが回避される。なお、レジスタ切換手段１４３は、少なくとも分割数Ｄ２１よりも多くの個数のレジスタ群１４４を備えているものとする。
【００３２】
次に、メモリアドレス変換手段１３による具体的なメモリアドレス変換方法について、並列度が“８”のＳＩＭＤ命令を並列度が“４”のＳＩＭＤ演算器１４で実行する場合を例に説明する。
【００３３】
図６は、メモリアドレス変換の第１の例を示す。本例では、ＳＩＭＤ演算器１４におけるデータメモリ１４２が、単位アドレスに付き４つの並列データを格納できるものとする。機械語プログラムＤ１０におけるＳＩＭＤ命令（図中では「命令１」として示している）は、原メモリアドレス“ＡＤＲ”によって指定される８並列のデータ（図中において「１」から「８」までの番号を付して参照している）についてＳＩＭＤ処理を指示するものである。この原メモリアドレスＡＤＲによって指定される８並列のデータは、当該ＳＩＭＤ演算器１４におけるデータメモリ１４２において、２個の４並列データとして、連続する２個のメモリアドレスに格納されることとなる。この分割格納されたデータを正しく参照すべく、ＳＩＭＤ処理分割手段１２によって生成される２個のＳＩＭＤ命令のうち一つについて、そのメモリアドレスを“ＡＤＲ”から“ＡＤＲ＋１”に変換する。
【００３４】
本例の場合、新メモリアドレスＡＤＲｎｅｗは、原メモリアドレスをＡＤＲｏｒｇ、回数Ｄ２２をｎとして、
ＡＤＲｎｅｗ  ＝  ＡＤＲｏｒｇ  ＋  ｎ  −  １
として得ることができる。また、分割数Ｄ２１をＤＩＶとして、
ＡＤＲｎｅｗ  ＝  ＡＤＲｏｒｇ  ＋  ＤＩＶ  −  ｎ
としてもよい。
【００３５】
図７は、メモリアドレス変換の第２の例を示す。本例では、ＳＩＭＤ演算器１４におけるデータメモリ１４２が、単位アドレスに付き一つのデータを格納するものとする。機械語プログラムＤ１０におけるＳＩＭＤ命令（図中では「命令１」として示している）は、原メモリアドレス“ＡＤＲ”によって指定される８並列のデータ（図中において「１」から「８」までの番号を付して参照している）についてＳＩＭＤ処理を指示するものである。この原メモリアドレスＡＤＲによって指定される８並列のデータは、当該ＳＩＭＤ演算器１４におけるデータメモリ１４２において、連続する８個のメモリアドレスに格納されることとなる。この分割格納されたデータを正しく参照すべく、ＳＩＭＤ処理分割手段１２によって生成される２個のＳＩＭＤ命令のうち一つについて、そのメモリアドレスを“ＡＤＲ”から“ＡＤＲ＋４”に変換する。
【００３６】
本例の場合、新メモリアドレスＡＤＲｎｅｗは、原メモリアドレスをＡＤＲｏｒｇ、回数Ｄ２２をｎ、およびデータメモリ１４２の並列度をＳＰＮＵＭとして、
ＡＤＲｎｅｗ  ＝  ＡＤＲｏｒｇ  ＋  （ｎ  −  １）  ＊  ＳＰＮＵＭ
として得ることができる。また、分割数Ｄ２１をＤＩＶとして、
ＡＤＲｎｅｗ  ＝  ＡＤＲｏｒｇ  ＋  （ＤＩＶ  −  ｎ）  ＊  ＳＰＮＵＭ
としてもよい。なお、ここで言うデータメモリ１４２の並列度ＳＰＮＵＭとは、ＳＩＭＤ演算器１４において有効に動作するプロセッサエレメント１４１の個数を、データメモリ１４２において単位アドレスに付き格納可能なデータ数で除した数値を指す。
【００３７】
一方、メモリアドレス変換手段１３によるメモリアドレス変換に伴うアドレスオフセットの書き換えは、具体的に次のようにして行う。ＳＩＭＤ命令において、メモリアドレスの記述は、“［Ａ，  Ｂ］”として与えられる。ここで、Ａは、プログラマが記述するプログラムメモリアドレスであり、一般に、“レジスタ＋定数”の形で記述される。また、Ｂは、アドレスオフセットであり、通常、プログラマによって定数“０”が書き込まれる。なお、Ｂに関しては、プログラマは明示的に値を記述しないようにすることもできる。以上の仕様に従うと、たとえば、メモリアクセス命令は“ＬＤ  ［ｂ０＋１，  ０］，  Ｒ０”といった記述となる。ここで、メモリアドレス変換手段１３は、必要に応じて、上記のＢに相当する部分の書き換えを行う。上記第２の例の場合、メモリアドレス変換が施されたメモリアクセス命令は、“ＬＤ  ［ｂ０＋１，  ４］，  Ｒ０”といった記述となる。
【００３８】
以上、本実施形態によると、機械語プログラムＤ１０の並列度に関わらず、所定の並列度のＳＩＭＤ演算器１４によって機械語プログラムＤ１０を実質的に実行することができる。これにより、機械語プログラムＤ１０の書き換えが不要となる。また、並列度を動的に変更可能な、たとえば、省電力モードで動作するときには半数のプロセッサエレメントを休止させるような情報処理装置において、変更可能な並列度に対応した複数個の機械語プログラムを格納する必要がなくなる。
【００３９】
なお、図４では、ＳＩＭＤ処理分割手段１２はＳＩＭＤ命令を一つずつ入力するように表示しているが、本発明はこれに限定されるものではない。すなわち、ＳＩＭＤ処理分割手段１２は、連続する複数のＳＩＭＤ命令列を入力し、当該命令列を所定回数繰り返し出力するようにしてもよい。
【００４０】
また、ＳＩＭＤ処理分割数Ｄ２１として定数を与えることで、ＳＩＭＤ処理分割数算出手段１１を省略することができる。この場合、たとえば、分割数Ｄ２１を定数“２”とすることによって、情報処理装置１０は、入力とする機械語プログラムＤ１０の並列度を、常に半分にして実行するものとなる。
【００４１】
また、機械語プログラムＤ１０においてメモリアクセスに係るＳＩＭＤ命令が含まれないような場合には、メモリアドレス変換処理を施す必要がないため、メモリアドレス変換手段１３を省略してもよい。
【００４２】
また、レジスタ切換手段１４３とは別の方法により、レジスタの上書きを回避するようにしてもよい。この場合であっても、本発明により、上記の効果を得ることができる。
【００４３】
（第２の実施形態）
図８は、本発明の第２の実施形態に係る機械語プログラム変換装置の構成を示す。本実施形態に係る機械語プログラム変換装置２０は、ＳＩＭＤ処理分割数指定手段２１（以下、省略して「指定手段２１」と称する場合がある）と、ＳＩＭＤ処理分割手段２２（以下、省略して「分割手段２２」と称する場合がある）と、メモリアドレス変換手段２３（以下、省略して「変換手段２３」と称する場合がある）とを備え、ＳＩＭＤ命令を含む原機械語プログラムＤ３０を入力とし、当該原機械語プログラムＤ３０の並列度を低減し、新機械語プログラムＤ４０として出力する。なお、指定手段２１、分割手段２２および変換手段２３については、ハードウェアによる構成およびプログラム処理のいずれでも実現可能である。
【００４４】
以下、機械語プログラム変換装置２０の各構成要素の概要について順に説明する。
【００４５】
ＳＩＭＤ処理分割数指定手段２１は、プログラマによって指定されるＳＩＭＤ処理の分割数を取得し、ＳＩＭＤ処理分割数Ｄ３１（以下、「分割数Ｄ３１」と称する）を設定する。ＳＩＭＤ処理の分割数の指定は、機械語プログラム変換装置２０の起動時のオプションとして、定数で指定する方法などで実現可能である。
【００４６】
ＳＩＭＤ処理分割手段２２は、原機械語プログラムＤ３０に含まれる命令列全体を分割数Ｄ３１によって示された処理分割数に相当する回数だけ繰り返し、中間機械語プログラムＤ３２として出力する。図９は、ＳＩＭＤ処理分割手段２２の動作の具体例を示す。同図の例では、原機械語プログラムＤ３０における命令列全体が、分割数Ｄ３１によって示された回数である２回だけ繰り返し出力されている。
【００４７】
図８に戻り、メモリアドレス変換手段２３は、中間機械語プログラムＤ３２に含まれるＳＩＭＤ命令のうちメモリアクセスに係るものについて、当該ＳＩＭＤ命令の繰り返し出力に係る順序数に応じて、当該ＳＩＭＤ命令に係る原メモリアドレスを新メモリアドレスに変換し、新機械語プログラムＤ４０を出力する。図１０は、メモリアドレス変換手段２３の動作の具体例を示す。同図の例では、中間機械語プログラムＤ３２に含まれるメモリアクセス命令（同図では「命令２」として示している）に係るアドレスオフセットを、当該メモリアクセス命令の繰り返し出力に係る順序数（繰り替えし回数）に応じて書き換えている。なお、原メモリアドレスから新メモリアドレスへの変換は、第１の実施形態において説明した方法と同様にして行うことができる。
【００４８】
以上のようにして生成される新機械語プログラムＤ４０は、一般的なＳＩＭＤ演算器で実行することができる。すなわち、新機械語プログラムＤ４０を実行するＳＩＭＤ演算器については、第１の実施形態に係るＳＩＭＤ演算器が有するレジスタ切換手段を特に有する必要がない。
【００４９】
以上、本実施形態によると、原機械語プログラムＤ３０のプログラム並列度を変換して新機械語プログラムＤ４０を自動生成することができる。また、新機械語プログラムＤ４０は、原機械語プログラムＤ３０に含まれる命令列全体が所定回数連続して記述されたものであるため、当該新機械語プログラムＤ４０を実行するＳＩＭＤ演算器によっては、その連続箇所前後における複数の命令を並列処理することが可能である。したがって、新機械語プログラムＤ４０は、原機械語プログラムＤ３０を単純に所定回数繰り返し実行するのに係る時間よりも少ない時間で実行され得る。
【００５０】
なお、ＳＩＭＤ処理分割手段２２は、原機械語プログラムＤ３０に含まれる命令列全体ではなく、その一部の命令列を単位として、当該命令列を繰り返し出力するようにすることも可能である。ただし、この場合、生成された新機械語プログラムＤ４０を実行するＳＩＭＤ演算器は、たとえば、第１の実施形態で説明したようなレジスタ切換手段を有している必要があり、また、ＳＩＭＤ処理分割手段２２は、レジスタの切り換えを制御するための命令を出力する必要がある。
【００５１】
（第３の実施形態）
本発明の第３の実施形態に係る機械語プログラム変換装置は、図８に示した第２の実施形態に係る機械語プログラム変換装置２０と同様の構成をしている。ただし、ＳＩＭＤ処理分割手段２２およびメモリアドレス変換手段２３の動作が、第２の実施形態とは異なっている。以下、本実施形態に係る機械語プログラム変換装置２０におけるＳＩＭＤ処理分割手段２２およびメモリアドレス変換手段２３の動作について説明する。
【００５２】
ＳＩＭＤ処理分割手段２２は、原機械語プログラムＤ３０に含まれる命令列全体をサブルーチン化し、このサブルーチンを分割数Ｄ３１によって示された処理分割数に相当する回数だけ繰り返すループ命令列を生成し、中間機械語プログラムＤ３２として出力する。図１１は、ＳＩＭＤ処理分割手段２２の動作の具体例を示す。同図の例では、原機械語プログラムＤ３０における命令列全体をサブルーチンｓｕｂとし、分割数Ｄ３１によって示された回数である２回だけサブルーチンｓｕｂを呼び出す関数ｍａｉｎが、中間機械語プログラムＤ３２として生成されている。
【００５３】
メモリアドレス変換手段２３は、中間機械語プログラムＤ３２に含まれるＳＩＭＤ命令のうちメモリアクセスに係るものについて、当該ＳＩＭＤ命令のアドレスオフセットを、ループ命令列が実行される際のループ回数を示す変数に書き換え、新機械語プログラムＤ４０を出力する。図１２は、メモリアドレス変換手段２３の動作の具体例を示す。同図の例では、中間機械語プログラムＤ３２に含まれるメモリアクセス命令（同図では「命令２」として示している）に係るアドレスオフセットを、ループカウンタを格納する専用のレジスタｌｃに書き換えている。なお、本例では、新機械語プログラムＤ４０を実行するＳＩＭＤ演算器が専用レジスタｌｃを有していることを想定して、アドレスオフセットの書き換えを行っているが、この専用レジスタｌｃに代えて、汎用レジスタを用いた記述にすることも可能である。
【００５４】
以上、本実施形態によると、第２の実施形態よりも小さなサイズの新機械語プログラムＤ４０を生成することができる。したがって、ユーザは、プログラムサイズを重視する場合には本実施形態による新機械語プログラムＤ４０を、処理パフォーマンスを重視する場合には第２の実施形態による新機械語プログラムＤ４０を、それぞれ選択すればよい。
【００５５】
なお、ＳＩＭＤ処理分割手段２２は、原機械語プログラムＤ３０に含まれる命令列全体ではなく、その一部の命令列をサブルーチン化することも可能である。ただし、この場合、上述したように、生成された新機械語プログラムＤ４０を実行するＳＩＭＤ演算器はレジスタ切換手段を有している必要があり、また、ＳＩＭＤ処理分割手段２２は、レジスタの切り換えを制御するための命令を出力する必要がある。
【００５６】
また、第２および第３に係る機械語プログラム変換装置２０と、当該機械語プログラム変換装置２０によって生成される新機械語プログラムＤ４０を実行するためのＳＩＭＤ演算器とを組み合わせて、第１の実施形態のような情報処理装置を構成することが可能である。この場合の情報処理装置は、第１の実施形態とは異なり、入力とする機械語プログラム全体を変換した後に変換後の機械語プログラムを実行することとなる。
【００５７】
【発明の効果】
以上説明したように、本発明によると、ＳＩＭＤ命令を含む機械語プログラム入力に対して、処理分割数に相当する回数の繰り返し処理に変換するＳＩＭＤ処理分割手段を備えることにより、ある並列度のＳＩＭＤ演算器に適応する機械語プログラムの内容を変更することなく、並列度のみを縮小した別のＳＩＭＤ演算器で実行させることができる。また、ＳＩＭＤ命令のうち、メモリアクセス命令に係るものについて、繰り返し回数に係る順序数に応じて、当該ＳＩＭＤ命令の原メモリアドレスを新メモリアドレスに変換するメモリアクセス変換手段を備えることにより、並列度のみを縮小した別のＳＩＭＤ演算器で当該機械語プログラムを実行させる場合に、ＳＩＭＤ演算器のメモリ構成に応じて、当該ＳＩＭＤ命令が正しくメモリアクセスを行うことが可能となる。
【図面の簡単な説明】
【図１】本発明の第１の実施形態に係る情報処理装置の構成図である。
【図２】ＳＩＭＤ演算器のいくつかの構成例を示す図である。
【図３】機械語プログラムの例を示す図である。
【図４】図１におけるＳＩＭＤ処理分割手段の動作を説明するための図である。
【図５】図１におけるメモリアドレス変換手段の動作を説明するための図である。
【図６】メモリアドレス変換の第１の例を示す図である。
【図７】メモリアドレス変換の第２の例を示す図である。
【図８】本発明の第２および第３の実施形態に係る機械語プログラム変換装置の構成図である。
【図９】第２の実施形態に係るＳＩＭＤ処理分割手段の動作を説明するための図である。
【図１０】第２の実施形態に係るメモリアドレス変換手段の動作を説明するための図である。
【図１１】第３の実施形態に係るＳＩＭＤ処理分割手段の動作を説明するための図である。
【図１２】第３の実施形態に係るメモリアドレス変換手段の動作を説明するための図である。
【符号の説明】
１０  情報処理装置
１１  ＳＩＭＤ処理分割数算出手段
１２  ＳＩＭＤ処理分割手段
１３  メモリアドレス変換手段
１４  ＳＩＭＤ演算器
１４１  プロセッサエレメント
１４２  データメモリ
１４３  レジスタ切換手段
１４４  レジスタ群
Ｄ１０  機械語プログラム
２０  機械語プログラム変換装置
２２  ＳＩＭＤ処理分割手段
２３  メモリアドレス変換手段
Ｄ３０  原機械語プログラム
Ｄ３２  中間機械語プログラム
Ｄ４０  新機械語プログラム
【図１】
2004362086.tif 000003
【図２】
2004362086.tif 000004
【図３】
2004362086.tif 000005
【図４】
2004362086.tif 000006
【図５】
2004362086.tif 000007
【図６】
2004362086.tif 000008
【図７】
2004362086.tif 000009
【図８】
2004362086.tif 000010
【図９】
2004362086.tif 000011
【図１０】
2004362086.tif 000012
【図１１】
2004362086.tif 000013
【図１２】
2004362086.tif 000014