JP2004362086A - 情報処理装置および機械語プログラム変換装置 - Google Patents
情報処理装置および機械語プログラム変換装置 Download PDFInfo
- Publication number
- JP2004362086A JP2004362086A JP2003157487A JP2003157487A JP2004362086A JP 2004362086 A JP2004362086 A JP 2004362086A JP 2003157487 A JP2003157487 A JP 2003157487A JP 2003157487 A JP2003157487 A JP 2003157487A JP 2004362086 A JP2004362086 A JP 2004362086A
- Authority
- JP
- Japan
- Prior art keywords
- simd
- machine language
- language program
- instruction
- memory address
- 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
- 230000010365 information processing Effects 0.000 title claims abstract description 29
- 238000006243 chemical reaction Methods 0.000 claims abstract description 35
- 238000000034 method Methods 0.000 claims description 16
- 230000003252 repetitive effect Effects 0.000 claims 2
- 238000010586 diagram Methods 0.000 abstract description 13
- 230000000694 effects Effects 0.000 description 2
- 230000003247 decreasing effect Effects 0.000 description 1
- 230000006870 function Effects 0.000 description 1
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements 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/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/38—Concurrent instruction execution, e.g. pipeline or look ahead
- G06F9/3885—Concurrent instruction execution, e.g. pipeline or look ahead using a plurality of independent parallel functional units
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements 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/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/30003—Arrangements for executing specific machine instructions
- G06F9/30007—Arrangements for executing specific machine instructions to perform operations on data operands
- G06F9/30036—Instructions to perform operations on packed data, e.g. vector, tile or matrix operations
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements 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/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/30098—Register arrangements
- G06F9/3012—Organisation of register space, e.g. banked or distributed register file
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements 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/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/3017—Runtime instruction translation, e.g. macros
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements 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/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/32—Address formation of the next instruction, e.g. by incrementing the instruction counter
- G06F9/322—Address formation of the next instruction, e.g. by incrementing the instruction counter for non-sequential address
- G06F9/325—Address formation of the next instruction, e.g. by incrementing the instruction counter for non-sequential address for loops, e.g. loop detection or loop counter
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements 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/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/34—Addressing or accessing the instruction operand or the result ; Formation of operand address; Addressing modes
- G06F9/345—Addressing or accessing the instruction operand or the result ; Formation of operand address; Addressing modes of multiple operands or results
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements 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/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/38—Concurrent instruction execution, e.g. pipeline or look ahead
- G06F9/3836—Instruction issuing, e.g. dynamic instruction scheduling or out of order instruction execution
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements 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/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/38—Concurrent instruction execution, e.g. pipeline or look ahead
- G06F9/3885—Concurrent instruction execution, e.g. pipeline or look ahead using a plurality of independent parallel functional units
- G06F9/3887—Concurrent instruction execution, e.g. pipeline or look ahead using a plurality of independent parallel functional units controlled by a single instruction for multiple data lanes [SIMD]
Landscapes
- Engineering & Computer Science (AREA)
- Software Systems (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Mathematical Physics (AREA)
- Devices For Executing Special Programs (AREA)
- Advance Control (AREA)
- Multi Processors (AREA)
Abstract
【課題】SIMD型演算を行う情報処理装置について、並列度が異なる機械語プログラムを実行可能にする
【解決手段】SIMD演算器(14)を有する情報処理装置(10)に、機械語プログラムからSIMD命令を入力し、これを所定回数繰り返し出力するSIMD処理分割手段(12)と、SIMD処理分割手段(11)から出力されるメモリアクセスに係るSIMD命令について、当該SIMD命令の繰り返し回数に応じて当該SIMD命令に係るメモリアドレスを変換してSIMD演算器(14)に与えるメモリアドレス変換手段(12)と、複数のSIMD演算器用レジスタ群(144)を有し、SIMD処理分割手段(11)によるSIMD命令の繰り返し回数に応じて、SIMD演算器(14)によって使用されるレジスタ群を切り換えるレジスタ切換手段(143)とを設ける。
【選択図】 図1
【解決手段】SIMD演算器(14)を有する情報処理装置(10)に、機械語プログラムからSIMD命令を入力し、これを所定回数繰り返し出力するSIMD処理分割手段(12)と、SIMD処理分割手段(11)から出力されるメモリアクセスに係るSIMD命令について、当該SIMD命令の繰り返し回数に応じて当該SIMD命令に係るメモリアドレスを変換してSIMD演算器(14)に与えるメモリアドレス変換手段(12)と、複数のSIMD演算器用レジスタ群(144)を有し、SIMD処理分割手段(11)によるSIMD命令の繰り返し回数に応じて、SIMD演算器(14)によって使用されるレジスタ群を切り換えるレジスタ切換手段(143)とを設ける。
【選択図】 図1
Description
【0001】
【発明の属する技術分野】
本発明は、SIMD(Single Instruction stream/Multiple Data stream)命令を含む機械語プログラムの処理技術に関し、特に、機械語プログラムの並列度が情報処理装置におけるプロセッサ数に非対応の場合であっても当該機械語プログラムを実行可能にする技術、および並列度を変更した新たな機械語プログラムを生成する技術に属する。
【0002】
【従来の技術】
画像処理などのメディア処理を行う場合、複数のデータに対して同一の演算を行うことがよくある。このような場合、複数データに対して同一演算を行うハードウェアを構成することにより、高速にメディア処理を行うことが可能となる。このようなアーキテクチャを「SIMD型アーキテクチャ」と呼ぶ。SIMD型アーキテクチャの例としては、大型計算機でよく用いられるベクトル型計算機や、複数のプロセッサを同一の命令で制御するSIMD型マルチプロセッサ、単一プロセッサの一の命令で複数のデータ処理を行うSIMD命令などがある。
【0003】
メディア処理を行うプロセッサは、その目的により要求される特性が変化する。たとえば、高速処理が必要な場合は、一度に処理できるデータ量を多くする必要がある。逆に、扱うデータがそれほど大きくなく、ハードウェアを小さくすることにより消費電力を削減することを優先したい場合には、一度に処理できるデータを少なくすればよい。ここで、一度に処理できるデータ量のことを「並列度」と呼ぶ。メディア処理を行うプロセッサは、並列度を増減させることにより、性能とハード量のバランスを取ることができる。
【0004】
ところで、メディア処理で行う演算には特殊なものが多く含まれている。このため、メディア処理を行うプロセッサでは、このような特殊な演算を高速に処理するための専用命令を備えていることが多い。しかし、メディア処理のプログラミングにおいて高級言語記述を用いる場合、このような特殊な演算を有効に活用することができず、性能を発揮できないことがある。そこで、特殊な演算を多く含むプログラムを記述したい場合は、性能を重視するために、機械語プログラムで演算を記述することが多い。
【0005】
SIMD型アーキテクチャの機械語プログラミングについては、並列度を変化させることによってさまざまな問題が発生する。たとえば、SIMD型マルチプロセッサにおいては、各命令はプロセッサ数に比例した並列処理となるが、並列度が変化、すなわちプロセッサ数が変化すると、並列処理の動作が異なってしまう。特に、メモリアクセスに係る命令については、プロセッサ数の変化に応じて適切にアドレスオフセットを変更しないと、誤ったメモリアドレスのデータをアクセスしてしまうことになる。
【0006】
したがって、SIMD型アーキテクチャの並列度を変化させる場合には、それに合わせて機械語プログラムを変更する必要がある。従来、これを実現するために、高級言語による逐次プログラミングをSIMD処理に変換(ベクトル化)することによって新たな機械語プログラムを生成している(非特許文献1参照)。
【0007】
【非特許文献1】
Hans Zima/Barbara Chapman共著、村岡 洋一 訳、“スーパーコンパイラ”、第1版、日本、オーム社、平成7年4月25日、p.195〜272
【0008】
【発明が解決しようとする課題】
上記の手法は、高級言語記述による逐次プログラミングには対応しているが、メディア処理などで行われるSIMD型アーキテクチャの機械語プログラミングには対応していない。このため、SIMD型アーキテクチャの機械語プログラミングにおいて並列度が変化した場合には、多くの場合人手によって、機械語プログラム記述を変更する必要があった。
【0009】
また、さまざまな並列度の機械語プログラムをあらかじめ用意しておくことで、その都度機械語プログラム記述を変更することなく、さまざまな並列度のSIMD型アーキテクチャに対応可能となるが、たとえば、並列度を動的に変更可能なハードウェアなどでは、複数の並列度に対応した複数の機械語プログラムを保持しなければならなくなる。このため、より多くのメモリ空間が必要となり、装置の小型化・低コスト化の要求に逆行するものとなる。
【0010】
上記問題に鑑み、本発明は、SIMD命令を含む機械語プログラムに従ってSIMD型演算を行う情報処理装置について、当該機械語プログラムの並列度が当該情報処理装置に係るSIMD型アーキテクチャの並列度に対応していない場合であっても、当該機械語プログラムの実行を可能にすることを課題とする。また、原機械語プログラムに係る並列度を変更して、新機械語プログラムを生成するプログラム変換装置の提供を課題とする。
【0011】
【課題を解決するための手段】
上記課題を解決するために本発明が講じた手段は、SIMD演算器を有し、SIMD命令を含む機械語プログラムに従ってSIMD型演算を行う情報処理装置として、前記機械語プログラムから一または連続する複数のSIMD命令を入力し、当該一または連続する複数のSIMD命令を、処理分割数に相当する回数繰り返し出力するSIMD処理分割手段を備え、前記SIMD処理分割手段から出力されたSIMD命令を、前記SIMD演算器によって実行するものとする。
【0012】
これによると、SIMD処理分割手段によって、機械語プログラムから一または連続する複数のSIMD命令が入力され、当該一または連続する複数のSIMD命令が処理分割数に相当する回数繰り返し出力される。そして、繰り返し出力されたSIMD命令はSIMD演算器によって実行される。このように、同一のSIMD命令を複数繰り返し実行することによって、高並列度のSIMD命令を、低並列度のSIMD演算器において、複数の実行クロックに分けて実行することが可能となる。すなわち、本発明に係る情報処理装置は、入力とする機械語プログラムの並列度がSIMD演算器の並列度に対応していない場合であっても、当該機械語プログラムを実行することができる。
【0013】
上記情報処理装置は、前記SIMD処理分割手段から出力されたSIMD命令のうちメモリアクセスに係るものについて、当該SIMD命令の繰り返し出力に係る順序数に応じて、当該SIMD命令に係る原メモリアドレスを新メモリアドレスに変換するメモリアドレス変換手段を備えていることが好ましい。
【0014】
これによると、メモリアドレス変換手段によって、SIMD処理分割手段から繰り返し出力されるSIMD命令に係る原メモリアドレスが、当該SIMD命令の繰り返し出力に係る順序数に応じた新メモリアドレスに変換される。このように、原メモリアドレスを新メモリアドレスに変換することによって、SIMD命令を分割して実行する場合に、正しいメモリアドレスにアクセスすることができる。
【0015】
また、上記情報処理装置は、前記処理分割数に相当する個数の、前記SIMD演算器用のレジスタ群を有し、前記SIMD処理分割手段によるSIMD命令の繰り返し出力に係る順序数に応じて、前記SIMD演算器によって使用される前記レジスタ群を切り換えるレジスタ切換手段を備えていることが好ましい。
【0016】
これによると、レジスタ切換手段によって、SIMD演算器が使用するレジスタ群が、当該SIMD命令の繰り返し出力に係る順序数に応じて切り換えられるため、他のSIMD命令の実行結果が誤って上書きされることを回避することができる。
【0017】
また、好ましくは、上記情報処理装置は、前記SIMD演算器の並列度情報および前記機械語プログラム中に示された前記機械語プログラムの並列度情報に基づいて、前記処理分割数を算出するSIMD処理分割数算出手段を備えているものとする。
【0018】
一方、上記課題を解決するために本発明が講じた手段は、機械語プログラム変換装置として、SIMD命令を含む原機械語プログラムを入力し、当該原機械語プログラムに含まれる命令列全体を処理分割数に相当する回数繰り返したものに相当する中間機械語プログラムを生成するSIMD処理分割手段と、前記SIMD処理分割手段によって生成された中間機械語プログラムに含まれるSIMD命令のうちメモリアクセスに係るものについて、当該SIMD命令に係る原メモリアドレスを新メモリアドレスに変換するメモリアドレス変換手段とを備え、前記メモリアドレス変換手段によってメモリアドレス変換処理が施された後の前記中間機械語プログラムを、新機械語プログラムとして出力するものとする。
【0019】
これによると、SIMD処理分割手段によって、原機械語プログラムに含まれる命令列全体を処理分割数に相当する回数繰り返したものに相当する中間機械語プログラムが生成され、そのうちメモリアクセスに係るものについては、メモリアドレス変換手段によってその原メモリアドレスが新メモリアドレスに変換され、新機械語プログラムとして出力される。このように、原機械語プログラムが繰り返し実行されるようにすることによって、高並列度のSIMD命令を、低並列度のSIMD演算器において、複数の実行クロックに分けて実行することが可能となる。そして、メモリアクセスに係るSIMD命令については、その原メモリアドレスを新メモリアドレスに変換することによって、SIMD命令が分割して実行される場合に、正しいメモリアドレスにアクセスすることができるようになる。以上のようにして、本発明に係る機械語プログラム変換装置は、原機械語プログラムの並列度を変更して、新機械語プログラムを自動生成することができる。
【0020】
具体的には、前記中間機械語プログラムは、前記原機械語プログラムに含まれる命令列全体が前記処理分割数に相当する回数だけ繰り返し出力された命令列からなるものとする。そして、前記メモリアドレス変換手段は、前記中間機械語プログラムに含まれるメモリアクセスに係るSIMD命令について、当該SIMD命令の繰り返し出力に係る順序数に応じて、当該SIMD命令に係る原メモリアドレスを新メモリアドレスに変換するものとする。
【0021】
また、具体的には、前記中間機械語プログラムは、前記原機械語プログラムに含まれる命令列全体をサブルーチンとして、当該サブルーチンを前記処理分割数に相当する回数だけ呼び出すループ命令列からなるものとする。そして、前記メモリアドレス変換手段は、前記原メモリアドレスに係るアドレスオフセットを、前記ループ命令列が実行される際のループ回数を示す変数に書き換えるものとする。
【0022】
【発明の実施の形態】
以下、本発明の実施の形態について、図面を参照しながら説明する。
【0023】
(第1の実施形態)
図1は、本発明の第1の実施形態に係る情報処理装置の構成を示す。本実施形態に係る情報処理装置10は、SIMD処理分割数算出手段11(以下、省略して「算出手段11」と称する場合がある)と、SIMD処理分割手段12(以下、省略して「分割手段12」と称する場合がある)と、メモリアドレス変換手段13(以下、省略して「変換手段13」と称する場合がある)と、SIMD演算器14とを備え、機械語プログラムD10を実行する。情報処理装置10は、たとえば、MPEG(Moving Picture Experts Group)のコーデックとして用いられるものである。なお、算出手段11、分割手段12および変換手段13は、ハードウェアによる構成およびプログラム処理のいずれでも実現可能である。
【0024】
情報処理装置10が入力とする機械語プログラムD10は、機械語プログラムD10に係るSIMD処理の並列度を表したプログラム並列度情報D11(以下、「情報D11」と称する)と、SIMD演算器14によって実行されるSIMD命令を少なくとも一つ含むSIMD命令列D12とを含んでいる。プログラマは情報D11を適宜指定することができる。すなわち、SIMD演算器の並列度の大小に関わらず、同一の命令動作記述が可能となっている。なお、情報D11を指定する方法としては、後述する専用命令を用いる方法や、指定されたレジスタやメモリアドレスに情報D11を格納する方法などがある。
【0025】
以下、情報処理装置10の各構成要素の概要について順に説明する。
【0026】
SIMD処理分割数算出手段11は、機械語プログラムD10における情報D11およびSIMD演算器14の並列度を表したSIMD演算器並列度情報D20(以下、「情報D20」と称する)から、SIMD処理を何回に分割して実行するかを示すSIMD処理分割数D21(以下、「分割数D21」と称する)を算出する。ここで、情報D20によって表されるSIMD演算器14の並列度とは、具体的には、SIMD演算器14におけるプロセッサエレメント141の個数を指す。たとえば、図2(a)に示したSIMD演算器14の場合、4個のプロセッサエレメント141が、また、同図(b)に示したSIMD演算器14の場合、8個のプロセッサエレメント141が、それぞれ独立してデータメモリ142にアクセス可能となっている。したがって、同図(a)(b)のSIMD演算器14の並列度はそれぞれ“4”および“8”ということになる。なお、情報D20を取得する方法としては、専用命令を用いる方法や、所定のレジスタやメモリアドレスから取得する方法などがある。
【0027】
情報D11は、機械語プログラムD10において具体的な数値として記述されている。たとえば、図3に示した機械語プログラムD10の例では、プログラム先頭のVECTOR命令において情報D11が記述されている。VECTOR命令は、機械語プログラムD10の先頭に位置し、情報処理装置10にプログラム並列度を指定する専用命令である。この場合、情報D11として“8”が指定されている。
【0028】
分割数D21は、情報D11の値を情報D20の値で除算することによって算出することができる。具体的には、図2(a)に示したSIMD演算器14で図3に示した機械語プログラムD10を処理する場合、分割数D21は“2”(8/4=2)ということなる。分割数D21は、機械語プログラムD10の実行中は変化することがないため、プログラム実行開始時に一度だけ算出すればよい。なお、通常は、上記除算結果が整数値になるようにSIMD演算器14のアーキテクチャを設計する。除算結果が整数にならない場合であっても本発明は適用可能である。たとえば、8並列の機械語プログラムを5並列のSIMD演算器で実行する場合、当該SIMD演算器のプロセッサエレメントのいずれか一つをスリープさせて4並列にすればよい。しかし、このような方法によると処理効率が悪くなるため、通常はそのようなアーキテクチャは採用しない。以降では、除算結果は整数である場合のみ扱う。
【0029】
図1に戻り、SIMD処理分割手段12は、SIMD命令列D12に含まれる各SIMD命令を入力し、算出手段11によって算出された分割数D21に示された回数だけ、入力した各SIMD命令を繰り返し出力する。このとき、当該繰り返し出力に係る順序数を命令生成回数D22(以下、「回数D22」と称する)としてカウントする。SIMD処理分割手段12の動作の具体例は図4に示したとおりである。すなわち、SIMD処理分割手段12は、SIMD命令(図中では「命令1」として示している)を入力すると、実行クロックごとに同一のSIMD命令(命令1)を一つずつ、分割数D21に示された回数である2回だけ繰り返し出力する。回数D22は、SIMD命令(命令1)の1回目の出力の際には“1”となり、2回目の出力の際には“2”となる。
【0030】
メモリアドレス変換手段13は、図5に示したように、分割数D21および回数D22に基づいて、分割手段12から出力されるSIMD命令(メモリアクセスに係るもの)に係る原メモリアドレスを、実際のデータの参照先である新メモリアドレスに変換して、SIMD演算器14に逐次出力する。このメモリアドレス変換の具体例については後述する。
【0031】
図1に戻り、SIMD演算器14は、複数のプロセッサエレメント141と、各プロセッサエレメント141が独立してデータアクセス可能なデータメモリ142と、レジスタ切換手段143とを備えており、メモリアドレス変換手段13から出力されるSIMD命令を実行する。このうち、レジスタ切換手段143は、SIMD演算器14用の複数のレジスタ群144を有している。レジスタ切換手段143は、回数D22に応じてレジスタ群144を切り換える。SIMD演算器14は、切り換えられたレジスタ群144を使用してSIMD演算を行う。このように、SIMD命令の実行時にSIMD演算器14が使用するレジスタ群を適宜切り換えることによって、SIMD処理分割によるレジスタの上書きが回避される。なお、レジスタ切換手段143は、少なくとも分割数D21よりも多くの個数のレジスタ群144を備えているものとする。
【0032】
次に、メモリアドレス変換手段13による具体的なメモリアドレス変換方法について、並列度が“8”のSIMD命令を並列度が“4”のSIMD演算器14で実行する場合を例に説明する。
【0033】
図6は、メモリアドレス変換の第1の例を示す。本例では、SIMD演算器14におけるデータメモリ142が、単位アドレスに付き4つの並列データを格納できるものとする。機械語プログラムD10におけるSIMD命令(図中では「命令1」として示している)は、原メモリアドレス“ADR”によって指定される8並列のデータ(図中において「1」から「8」までの番号を付して参照している)についてSIMD処理を指示するものである。この原メモリアドレスADRによって指定される8並列のデータは、当該SIMD演算器14におけるデータメモリ142において、2個の4並列データとして、連続する2個のメモリアドレスに格納されることとなる。この分割格納されたデータを正しく参照すべく、SIMD処理分割手段12によって生成される2個のSIMD命令のうち一つについて、そのメモリアドレスを“ADR”から“ADR+1”に変換する。
【0034】
本例の場合、新メモリアドレスADRnewは、原メモリアドレスをADRorg、回数D22をnとして、
ADRnew = ADRorg + n − 1
として得ることができる。また、分割数D21をDIVとして、
ADRnew = ADRorg + DIV − n
としてもよい。
【0035】
図7は、メモリアドレス変換の第2の例を示す。本例では、SIMD演算器14におけるデータメモリ142が、単位アドレスに付き一つのデータを格納するものとする。機械語プログラムD10におけるSIMD命令(図中では「命令1」として示している)は、原メモリアドレス“ADR”によって指定される8並列のデータ(図中において「1」から「8」までの番号を付して参照している)についてSIMD処理を指示するものである。この原メモリアドレスADRによって指定される8並列のデータは、当該SIMD演算器14におけるデータメモリ142において、連続する8個のメモリアドレスに格納されることとなる。この分割格納されたデータを正しく参照すべく、SIMD処理分割手段12によって生成される2個のSIMD命令のうち一つについて、そのメモリアドレスを“ADR”から“ADR+4”に変換する。
【0036】
本例の場合、新メモリアドレスADRnewは、原メモリアドレスをADRorg、回数D22をn、およびデータメモリ142の並列度をSPNUMとして、
ADRnew = ADRorg + (n − 1) * SPNUM
として得ることができる。また、分割数D21をDIVとして、
ADRnew = ADRorg + (DIV − n) * SPNUM
としてもよい。なお、ここで言うデータメモリ142の並列度SPNUMとは、SIMD演算器14において有効に動作するプロセッサエレメント141の個数を、データメモリ142において単位アドレスに付き格納可能なデータ数で除した数値を指す。
【0037】
一方、メモリアドレス変換手段13によるメモリアドレス変換に伴うアドレスオフセットの書き換えは、具体的に次のようにして行う。SIMD命令において、メモリアドレスの記述は、“[A, B]”として与えられる。ここで、Aは、プログラマが記述するプログラムメモリアドレスであり、一般に、“レジスタ+定数”の形で記述される。また、Bは、アドレスオフセットであり、通常、プログラマによって定数“0”が書き込まれる。なお、Bに関しては、プログラマは明示的に値を記述しないようにすることもできる。以上の仕様に従うと、たとえば、メモリアクセス命令は“LD [b0+1, 0], R0”といった記述となる。ここで、メモリアドレス変換手段13は、必要に応じて、上記のBに相当する部分の書き換えを行う。上記第2の例の場合、メモリアドレス変換が施されたメモリアクセス命令は、“LD [b0+1, 4], R0”といった記述となる。
【0038】
以上、本実施形態によると、機械語プログラムD10の並列度に関わらず、所定の並列度のSIMD演算器14によって機械語プログラムD10を実質的に実行することができる。これにより、機械語プログラムD10の書き換えが不要となる。また、並列度を動的に変更可能な、たとえば、省電力モードで動作するときには半数のプロセッサエレメントを休止させるような情報処理装置において、変更可能な並列度に対応した複数個の機械語プログラムを格納する必要がなくなる。
【0039】
なお、図4では、SIMD処理分割手段12はSIMD命令を一つずつ入力するように表示しているが、本発明はこれに限定されるものではない。すなわち、SIMD処理分割手段12は、連続する複数のSIMD命令列を入力し、当該命令列を所定回数繰り返し出力するようにしてもよい。
【0040】
また、SIMD処理分割数D21として定数を与えることで、SIMD処理分割数算出手段11を省略することができる。この場合、たとえば、分割数D21を定数“2”とすることによって、情報処理装置10は、入力とする機械語プログラムD10の並列度を、常に半分にして実行するものとなる。
【0041】
また、機械語プログラムD10においてメモリアクセスに係るSIMD命令が含まれないような場合には、メモリアドレス変換処理を施す必要がないため、メモリアドレス変換手段13を省略してもよい。
【0042】
また、レジスタ切換手段143とは別の方法により、レジスタの上書きを回避するようにしてもよい。この場合であっても、本発明により、上記の効果を得ることができる。
【0043】
(第2の実施形態)
図8は、本発明の第2の実施形態に係る機械語プログラム変換装置の構成を示す。本実施形態に係る機械語プログラム変換装置20は、SIMD処理分割数指定手段21(以下、省略して「指定手段21」と称する場合がある)と、SIMD処理分割手段22(以下、省略して「分割手段22」と称する場合がある)と、メモリアドレス変換手段23(以下、省略して「変換手段23」と称する場合がある)とを備え、SIMD命令を含む原機械語プログラムD30を入力とし、当該原機械語プログラムD30の並列度を低減し、新機械語プログラムD40として出力する。なお、指定手段21、分割手段22および変換手段23については、ハードウェアによる構成およびプログラム処理のいずれでも実現可能である。
【0044】
以下、機械語プログラム変換装置20の各構成要素の概要について順に説明する。
【0045】
SIMD処理分割数指定手段21は、プログラマによって指定されるSIMD処理の分割数を取得し、SIMD処理分割数D31(以下、「分割数D31」と称する)を設定する。SIMD処理の分割数の指定は、機械語プログラム変換装置20の起動時のオプションとして、定数で指定する方法などで実現可能である。
【0046】
SIMD処理分割手段22は、原機械語プログラムD30に含まれる命令列全体を分割数D31によって示された処理分割数に相当する回数だけ繰り返し、中間機械語プログラムD32として出力する。図9は、SIMD処理分割手段22の動作の具体例を示す。同図の例では、原機械語プログラムD30における命令列全体が、分割数D31によって示された回数である2回だけ繰り返し出力されている。
【0047】
図8に戻り、メモリアドレス変換手段23は、中間機械語プログラムD32に含まれるSIMD命令のうちメモリアクセスに係るものについて、当該SIMD命令の繰り返し出力に係る順序数に応じて、当該SIMD命令に係る原メモリアドレスを新メモリアドレスに変換し、新機械語プログラムD40を出力する。図10は、メモリアドレス変換手段23の動作の具体例を示す。同図の例では、中間機械語プログラムD32に含まれるメモリアクセス命令(同図では「命令2」として示している)に係るアドレスオフセットを、当該メモリアクセス命令の繰り返し出力に係る順序数(繰り替えし回数)に応じて書き換えている。なお、原メモリアドレスから新メモリアドレスへの変換は、第1の実施形態において説明した方法と同様にして行うことができる。
【0048】
以上のようにして生成される新機械語プログラムD40は、一般的なSIMD演算器で実行することができる。すなわち、新機械語プログラムD40を実行するSIMD演算器については、第1の実施形態に係るSIMD演算器が有するレジスタ切換手段を特に有する必要がない。
【0049】
以上、本実施形態によると、原機械語プログラムD30のプログラム並列度を変換して新機械語プログラムD40を自動生成することができる。また、新機械語プログラムD40は、原機械語プログラムD30に含まれる命令列全体が所定回数連続して記述されたものであるため、当該新機械語プログラムD40を実行するSIMD演算器によっては、その連続箇所前後における複数の命令を並列処理することが可能である。したがって、新機械語プログラムD40は、原機械語プログラムD30を単純に所定回数繰り返し実行するのに係る時間よりも少ない時間で実行され得る。
【0050】
なお、SIMD処理分割手段22は、原機械語プログラムD30に含まれる命令列全体ではなく、その一部の命令列を単位として、当該命令列を繰り返し出力するようにすることも可能である。ただし、この場合、生成された新機械語プログラムD40を実行するSIMD演算器は、たとえば、第1の実施形態で説明したようなレジスタ切換手段を有している必要があり、また、SIMD処理分割手段22は、レジスタの切り換えを制御するための命令を出力する必要がある。
【0051】
(第3の実施形態)
本発明の第3の実施形態に係る機械語プログラム変換装置は、図8に示した第2の実施形態に係る機械語プログラム変換装置20と同様の構成をしている。ただし、SIMD処理分割手段22およびメモリアドレス変換手段23の動作が、第2の実施形態とは異なっている。以下、本実施形態に係る機械語プログラム変換装置20におけるSIMD処理分割手段22およびメモリアドレス変換手段23の動作について説明する。
【0052】
SIMD処理分割手段22は、原機械語プログラムD30に含まれる命令列全体をサブルーチン化し、このサブルーチンを分割数D31によって示された処理分割数に相当する回数だけ繰り返すループ命令列を生成し、中間機械語プログラムD32として出力する。図11は、SIMD処理分割手段22の動作の具体例を示す。同図の例では、原機械語プログラムD30における命令列全体をサブルーチンsubとし、分割数D31によって示された回数である2回だけサブルーチンsubを呼び出す関数mainが、中間機械語プログラムD32として生成されている。
【0053】
メモリアドレス変換手段23は、中間機械語プログラムD32に含まれるSIMD命令のうちメモリアクセスに係るものについて、当該SIMD命令のアドレスオフセットを、ループ命令列が実行される際のループ回数を示す変数に書き換え、新機械語プログラムD40を出力する。図12は、メモリアドレス変換手段23の動作の具体例を示す。同図の例では、中間機械語プログラムD32に含まれるメモリアクセス命令(同図では「命令2」として示している)に係るアドレスオフセットを、ループカウンタを格納する専用のレジスタlcに書き換えている。なお、本例では、新機械語プログラムD40を実行するSIMD演算器が専用レジスタlcを有していることを想定して、アドレスオフセットの書き換えを行っているが、この専用レジスタlcに代えて、汎用レジスタを用いた記述にすることも可能である。
【0054】
以上、本実施形態によると、第2の実施形態よりも小さなサイズの新機械語プログラムD40を生成することができる。したがって、ユーザは、プログラムサイズを重視する場合には本実施形態による新機械語プログラムD40を、処理パフォーマンスを重視する場合には第2の実施形態による新機械語プログラムD40を、それぞれ選択すればよい。
【0055】
なお、SIMD処理分割手段22は、原機械語プログラムD30に含まれる命令列全体ではなく、その一部の命令列をサブルーチン化することも可能である。ただし、この場合、上述したように、生成された新機械語プログラムD40を実行するSIMD演算器はレジスタ切換手段を有している必要があり、また、SIMD処理分割手段22は、レジスタの切り換えを制御するための命令を出力する必要がある。
【0056】
また、第2および第3に係る機械語プログラム変換装置20と、当該機械語プログラム変換装置20によって生成される新機械語プログラムD40を実行するためのSIMD演算器とを組み合わせて、第1の実施形態のような情報処理装置を構成することが可能である。この場合の情報処理装置は、第1の実施形態とは異なり、入力とする機械語プログラム全体を変換した後に変換後の機械語プログラムを実行することとなる。
【0057】
【発明の効果】
以上説明したように、本発明によると、SIMD命令を含む機械語プログラム入力に対して、処理分割数に相当する回数の繰り返し処理に変換するSIMD処理分割手段を備えることにより、ある並列度のSIMD演算器に適応する機械語プログラムの内容を変更することなく、並列度のみを縮小した別のSIMD演算器で実行させることができる。また、SIMD命令のうち、メモリアクセス命令に係るものについて、繰り返し回数に係る順序数に応じて、当該SIMD命令の原メモリアドレスを新メモリアドレスに変換するメモリアクセス変換手段を備えることにより、並列度のみを縮小した別のSIMD演算器で当該機械語プログラムを実行させる場合に、SIMD演算器のメモリ構成に応じて、当該SIMD命令が正しくメモリアクセスを行うことが可能となる。
【図面の簡単な説明】
【図1】本発明の第1の実施形態に係る情報処理装置の構成図である。
【図2】SIMD演算器のいくつかの構成例を示す図である。
【図3】機械語プログラムの例を示す図である。
【図4】図1におけるSIMD処理分割手段の動作を説明するための図である。
【図5】図1におけるメモリアドレス変換手段の動作を説明するための図である。
【図6】メモリアドレス変換の第1の例を示す図である。
【図7】メモリアドレス変換の第2の例を示す図である。
【図8】本発明の第2および第3の実施形態に係る機械語プログラム変換装置の構成図である。
【図9】第2の実施形態に係るSIMD処理分割手段の動作を説明するための図である。
【図10】第2の実施形態に係るメモリアドレス変換手段の動作を説明するための図である。
【図11】第3の実施形態に係るSIMD処理分割手段の動作を説明するための図である。
【図12】第3の実施形態に係るメモリアドレス変換手段の動作を説明するための図である。
【符号の説明】
10 情報処理装置
11 SIMD処理分割数算出手段
12 SIMD処理分割手段
13 メモリアドレス変換手段
14 SIMD演算器
141 プロセッサエレメント
142 データメモリ
143 レジスタ切換手段
144 レジスタ群
D10 機械語プログラム
20 機械語プログラム変換装置
22 SIMD処理分割手段
23 メモリアドレス変換手段
D30 原機械語プログラム
D32 中間機械語プログラム
D40 新機械語プログラム
【発明の属する技術分野】
本発明は、SIMD(Single Instruction stream/Multiple Data stream)命令を含む機械語プログラムの処理技術に関し、特に、機械語プログラムの並列度が情報処理装置におけるプロセッサ数に非対応の場合であっても当該機械語プログラムを実行可能にする技術、および並列度を変更した新たな機械語プログラムを生成する技術に属する。
【0002】
【従来の技術】
画像処理などのメディア処理を行う場合、複数のデータに対して同一の演算を行うことがよくある。このような場合、複数データに対して同一演算を行うハードウェアを構成することにより、高速にメディア処理を行うことが可能となる。このようなアーキテクチャを「SIMD型アーキテクチャ」と呼ぶ。SIMD型アーキテクチャの例としては、大型計算機でよく用いられるベクトル型計算機や、複数のプロセッサを同一の命令で制御するSIMD型マルチプロセッサ、単一プロセッサの一の命令で複数のデータ処理を行うSIMD命令などがある。
【0003】
メディア処理を行うプロセッサは、その目的により要求される特性が変化する。たとえば、高速処理が必要な場合は、一度に処理できるデータ量を多くする必要がある。逆に、扱うデータがそれほど大きくなく、ハードウェアを小さくすることにより消費電力を削減することを優先したい場合には、一度に処理できるデータを少なくすればよい。ここで、一度に処理できるデータ量のことを「並列度」と呼ぶ。メディア処理を行うプロセッサは、並列度を増減させることにより、性能とハード量のバランスを取ることができる。
【0004】
ところで、メディア処理で行う演算には特殊なものが多く含まれている。このため、メディア処理を行うプロセッサでは、このような特殊な演算を高速に処理するための専用命令を備えていることが多い。しかし、メディア処理のプログラミングにおいて高級言語記述を用いる場合、このような特殊な演算を有効に活用することができず、性能を発揮できないことがある。そこで、特殊な演算を多く含むプログラムを記述したい場合は、性能を重視するために、機械語プログラムで演算を記述することが多い。
【0005】
SIMD型アーキテクチャの機械語プログラミングについては、並列度を変化させることによってさまざまな問題が発生する。たとえば、SIMD型マルチプロセッサにおいては、各命令はプロセッサ数に比例した並列処理となるが、並列度が変化、すなわちプロセッサ数が変化すると、並列処理の動作が異なってしまう。特に、メモリアクセスに係る命令については、プロセッサ数の変化に応じて適切にアドレスオフセットを変更しないと、誤ったメモリアドレスのデータをアクセスしてしまうことになる。
【0006】
したがって、SIMD型アーキテクチャの並列度を変化させる場合には、それに合わせて機械語プログラムを変更する必要がある。従来、これを実現するために、高級言語による逐次プログラミングをSIMD処理に変換(ベクトル化)することによって新たな機械語プログラムを生成している(非特許文献1参照)。
【0007】
【非特許文献1】
Hans Zima/Barbara Chapman共著、村岡 洋一 訳、“スーパーコンパイラ”、第1版、日本、オーム社、平成7年4月25日、p.195〜272
【0008】
【発明が解決しようとする課題】
上記の手法は、高級言語記述による逐次プログラミングには対応しているが、メディア処理などで行われるSIMD型アーキテクチャの機械語プログラミングには対応していない。このため、SIMD型アーキテクチャの機械語プログラミングにおいて並列度が変化した場合には、多くの場合人手によって、機械語プログラム記述を変更する必要があった。
【0009】
また、さまざまな並列度の機械語プログラムをあらかじめ用意しておくことで、その都度機械語プログラム記述を変更することなく、さまざまな並列度のSIMD型アーキテクチャに対応可能となるが、たとえば、並列度を動的に変更可能なハードウェアなどでは、複数の並列度に対応した複数の機械語プログラムを保持しなければならなくなる。このため、より多くのメモリ空間が必要となり、装置の小型化・低コスト化の要求に逆行するものとなる。
【0010】
上記問題に鑑み、本発明は、SIMD命令を含む機械語プログラムに従ってSIMD型演算を行う情報処理装置について、当該機械語プログラムの並列度が当該情報処理装置に係るSIMD型アーキテクチャの並列度に対応していない場合であっても、当該機械語プログラムの実行を可能にすることを課題とする。また、原機械語プログラムに係る並列度を変更して、新機械語プログラムを生成するプログラム変換装置の提供を課題とする。
【0011】
【課題を解決するための手段】
上記課題を解決するために本発明が講じた手段は、SIMD演算器を有し、SIMD命令を含む機械語プログラムに従ってSIMD型演算を行う情報処理装置として、前記機械語プログラムから一または連続する複数のSIMD命令を入力し、当該一または連続する複数のSIMD命令を、処理分割数に相当する回数繰り返し出力するSIMD処理分割手段を備え、前記SIMD処理分割手段から出力されたSIMD命令を、前記SIMD演算器によって実行するものとする。
【0012】
これによると、SIMD処理分割手段によって、機械語プログラムから一または連続する複数のSIMD命令が入力され、当該一または連続する複数のSIMD命令が処理分割数に相当する回数繰り返し出力される。そして、繰り返し出力されたSIMD命令はSIMD演算器によって実行される。このように、同一のSIMD命令を複数繰り返し実行することによって、高並列度のSIMD命令を、低並列度のSIMD演算器において、複数の実行クロックに分けて実行することが可能となる。すなわち、本発明に係る情報処理装置は、入力とする機械語プログラムの並列度がSIMD演算器の並列度に対応していない場合であっても、当該機械語プログラムを実行することができる。
【0013】
上記情報処理装置は、前記SIMD処理分割手段から出力されたSIMD命令のうちメモリアクセスに係るものについて、当該SIMD命令の繰り返し出力に係る順序数に応じて、当該SIMD命令に係る原メモリアドレスを新メモリアドレスに変換するメモリアドレス変換手段を備えていることが好ましい。
【0014】
これによると、メモリアドレス変換手段によって、SIMD処理分割手段から繰り返し出力されるSIMD命令に係る原メモリアドレスが、当該SIMD命令の繰り返し出力に係る順序数に応じた新メモリアドレスに変換される。このように、原メモリアドレスを新メモリアドレスに変換することによって、SIMD命令を分割して実行する場合に、正しいメモリアドレスにアクセスすることができる。
【0015】
また、上記情報処理装置は、前記処理分割数に相当する個数の、前記SIMD演算器用のレジスタ群を有し、前記SIMD処理分割手段によるSIMD命令の繰り返し出力に係る順序数に応じて、前記SIMD演算器によって使用される前記レジスタ群を切り換えるレジスタ切換手段を備えていることが好ましい。
【0016】
これによると、レジスタ切換手段によって、SIMD演算器が使用するレジスタ群が、当該SIMD命令の繰り返し出力に係る順序数に応じて切り換えられるため、他のSIMD命令の実行結果が誤って上書きされることを回避することができる。
【0017】
また、好ましくは、上記情報処理装置は、前記SIMD演算器の並列度情報および前記機械語プログラム中に示された前記機械語プログラムの並列度情報に基づいて、前記処理分割数を算出するSIMD処理分割数算出手段を備えているものとする。
【0018】
一方、上記課題を解決するために本発明が講じた手段は、機械語プログラム変換装置として、SIMD命令を含む原機械語プログラムを入力し、当該原機械語プログラムに含まれる命令列全体を処理分割数に相当する回数繰り返したものに相当する中間機械語プログラムを生成するSIMD処理分割手段と、前記SIMD処理分割手段によって生成された中間機械語プログラムに含まれるSIMD命令のうちメモリアクセスに係るものについて、当該SIMD命令に係る原メモリアドレスを新メモリアドレスに変換するメモリアドレス変換手段とを備え、前記メモリアドレス変換手段によってメモリアドレス変換処理が施された後の前記中間機械語プログラムを、新機械語プログラムとして出力するものとする。
【0019】
これによると、SIMD処理分割手段によって、原機械語プログラムに含まれる命令列全体を処理分割数に相当する回数繰り返したものに相当する中間機械語プログラムが生成され、そのうちメモリアクセスに係るものについては、メモリアドレス変換手段によってその原メモリアドレスが新メモリアドレスに変換され、新機械語プログラムとして出力される。このように、原機械語プログラムが繰り返し実行されるようにすることによって、高並列度のSIMD命令を、低並列度のSIMD演算器において、複数の実行クロックに分けて実行することが可能となる。そして、メモリアクセスに係るSIMD命令については、その原メモリアドレスを新メモリアドレスに変換することによって、SIMD命令が分割して実行される場合に、正しいメモリアドレスにアクセスすることができるようになる。以上のようにして、本発明に係る機械語プログラム変換装置は、原機械語プログラムの並列度を変更して、新機械語プログラムを自動生成することができる。
【0020】
具体的には、前記中間機械語プログラムは、前記原機械語プログラムに含まれる命令列全体が前記処理分割数に相当する回数だけ繰り返し出力された命令列からなるものとする。そして、前記メモリアドレス変換手段は、前記中間機械語プログラムに含まれるメモリアクセスに係るSIMD命令について、当該SIMD命令の繰り返し出力に係る順序数に応じて、当該SIMD命令に係る原メモリアドレスを新メモリアドレスに変換するものとする。
【0021】
また、具体的には、前記中間機械語プログラムは、前記原機械語プログラムに含まれる命令列全体をサブルーチンとして、当該サブルーチンを前記処理分割数に相当する回数だけ呼び出すループ命令列からなるものとする。そして、前記メモリアドレス変換手段は、前記原メモリアドレスに係るアドレスオフセットを、前記ループ命令列が実行される際のループ回数を示す変数に書き換えるものとする。
【0022】
【発明の実施の形態】
以下、本発明の実施の形態について、図面を参照しながら説明する。
【0023】
(第1の実施形態)
図1は、本発明の第1の実施形態に係る情報処理装置の構成を示す。本実施形態に係る情報処理装置10は、SIMD処理分割数算出手段11(以下、省略して「算出手段11」と称する場合がある)と、SIMD処理分割手段12(以下、省略して「分割手段12」と称する場合がある)と、メモリアドレス変換手段13(以下、省略して「変換手段13」と称する場合がある)と、SIMD演算器14とを備え、機械語プログラムD10を実行する。情報処理装置10は、たとえば、MPEG(Moving Picture Experts Group)のコーデックとして用いられるものである。なお、算出手段11、分割手段12および変換手段13は、ハードウェアによる構成およびプログラム処理のいずれでも実現可能である。
【0024】
情報処理装置10が入力とする機械語プログラムD10は、機械語プログラムD10に係るSIMD処理の並列度を表したプログラム並列度情報D11(以下、「情報D11」と称する)と、SIMD演算器14によって実行されるSIMD命令を少なくとも一つ含むSIMD命令列D12とを含んでいる。プログラマは情報D11を適宜指定することができる。すなわち、SIMD演算器の並列度の大小に関わらず、同一の命令動作記述が可能となっている。なお、情報D11を指定する方法としては、後述する専用命令を用いる方法や、指定されたレジスタやメモリアドレスに情報D11を格納する方法などがある。
【0025】
以下、情報処理装置10の各構成要素の概要について順に説明する。
【0026】
SIMD処理分割数算出手段11は、機械語プログラムD10における情報D11およびSIMD演算器14の並列度を表したSIMD演算器並列度情報D20(以下、「情報D20」と称する)から、SIMD処理を何回に分割して実行するかを示すSIMD処理分割数D21(以下、「分割数D21」と称する)を算出する。ここで、情報D20によって表されるSIMD演算器14の並列度とは、具体的には、SIMD演算器14におけるプロセッサエレメント141の個数を指す。たとえば、図2(a)に示したSIMD演算器14の場合、4個のプロセッサエレメント141が、また、同図(b)に示したSIMD演算器14の場合、8個のプロセッサエレメント141が、それぞれ独立してデータメモリ142にアクセス可能となっている。したがって、同図(a)(b)のSIMD演算器14の並列度はそれぞれ“4”および“8”ということになる。なお、情報D20を取得する方法としては、専用命令を用いる方法や、所定のレジスタやメモリアドレスから取得する方法などがある。
【0027】
情報D11は、機械語プログラムD10において具体的な数値として記述されている。たとえば、図3に示した機械語プログラムD10の例では、プログラム先頭のVECTOR命令において情報D11が記述されている。VECTOR命令は、機械語プログラムD10の先頭に位置し、情報処理装置10にプログラム並列度を指定する専用命令である。この場合、情報D11として“8”が指定されている。
【0028】
分割数D21は、情報D11の値を情報D20の値で除算することによって算出することができる。具体的には、図2(a)に示したSIMD演算器14で図3に示した機械語プログラムD10を処理する場合、分割数D21は“2”(8/4=2)ということなる。分割数D21は、機械語プログラムD10の実行中は変化することがないため、プログラム実行開始時に一度だけ算出すればよい。なお、通常は、上記除算結果が整数値になるようにSIMD演算器14のアーキテクチャを設計する。除算結果が整数にならない場合であっても本発明は適用可能である。たとえば、8並列の機械語プログラムを5並列のSIMD演算器で実行する場合、当該SIMD演算器のプロセッサエレメントのいずれか一つをスリープさせて4並列にすればよい。しかし、このような方法によると処理効率が悪くなるため、通常はそのようなアーキテクチャは採用しない。以降では、除算結果は整数である場合のみ扱う。
【0029】
図1に戻り、SIMD処理分割手段12は、SIMD命令列D12に含まれる各SIMD命令を入力し、算出手段11によって算出された分割数D21に示された回数だけ、入力した各SIMD命令を繰り返し出力する。このとき、当該繰り返し出力に係る順序数を命令生成回数D22(以下、「回数D22」と称する)としてカウントする。SIMD処理分割手段12の動作の具体例は図4に示したとおりである。すなわち、SIMD処理分割手段12は、SIMD命令(図中では「命令1」として示している)を入力すると、実行クロックごとに同一のSIMD命令(命令1)を一つずつ、分割数D21に示された回数である2回だけ繰り返し出力する。回数D22は、SIMD命令(命令1)の1回目の出力の際には“1”となり、2回目の出力の際には“2”となる。
【0030】
メモリアドレス変換手段13は、図5に示したように、分割数D21および回数D22に基づいて、分割手段12から出力されるSIMD命令(メモリアクセスに係るもの)に係る原メモリアドレスを、実際のデータの参照先である新メモリアドレスに変換して、SIMD演算器14に逐次出力する。このメモリアドレス変換の具体例については後述する。
【0031】
図1に戻り、SIMD演算器14は、複数のプロセッサエレメント141と、各プロセッサエレメント141が独立してデータアクセス可能なデータメモリ142と、レジスタ切換手段143とを備えており、メモリアドレス変換手段13から出力されるSIMD命令を実行する。このうち、レジスタ切換手段143は、SIMD演算器14用の複数のレジスタ群144を有している。レジスタ切換手段143は、回数D22に応じてレジスタ群144を切り換える。SIMD演算器14は、切り換えられたレジスタ群144を使用してSIMD演算を行う。このように、SIMD命令の実行時にSIMD演算器14が使用するレジスタ群を適宜切り換えることによって、SIMD処理分割によるレジスタの上書きが回避される。なお、レジスタ切換手段143は、少なくとも分割数D21よりも多くの個数のレジスタ群144を備えているものとする。
【0032】
次に、メモリアドレス変換手段13による具体的なメモリアドレス変換方法について、並列度が“8”のSIMD命令を並列度が“4”のSIMD演算器14で実行する場合を例に説明する。
【0033】
図6は、メモリアドレス変換の第1の例を示す。本例では、SIMD演算器14におけるデータメモリ142が、単位アドレスに付き4つの並列データを格納できるものとする。機械語プログラムD10におけるSIMD命令(図中では「命令1」として示している)は、原メモリアドレス“ADR”によって指定される8並列のデータ(図中において「1」から「8」までの番号を付して参照している)についてSIMD処理を指示するものである。この原メモリアドレスADRによって指定される8並列のデータは、当該SIMD演算器14におけるデータメモリ142において、2個の4並列データとして、連続する2個のメモリアドレスに格納されることとなる。この分割格納されたデータを正しく参照すべく、SIMD処理分割手段12によって生成される2個のSIMD命令のうち一つについて、そのメモリアドレスを“ADR”から“ADR+1”に変換する。
【0034】
本例の場合、新メモリアドレスADRnewは、原メモリアドレスをADRorg、回数D22をnとして、
ADRnew = ADRorg + n − 1
として得ることができる。また、分割数D21をDIVとして、
ADRnew = ADRorg + DIV − n
としてもよい。
【0035】
図7は、メモリアドレス変換の第2の例を示す。本例では、SIMD演算器14におけるデータメモリ142が、単位アドレスに付き一つのデータを格納するものとする。機械語プログラムD10におけるSIMD命令(図中では「命令1」として示している)は、原メモリアドレス“ADR”によって指定される8並列のデータ(図中において「1」から「8」までの番号を付して参照している)についてSIMD処理を指示するものである。この原メモリアドレスADRによって指定される8並列のデータは、当該SIMD演算器14におけるデータメモリ142において、連続する8個のメモリアドレスに格納されることとなる。この分割格納されたデータを正しく参照すべく、SIMD処理分割手段12によって生成される2個のSIMD命令のうち一つについて、そのメモリアドレスを“ADR”から“ADR+4”に変換する。
【0036】
本例の場合、新メモリアドレスADRnewは、原メモリアドレスをADRorg、回数D22をn、およびデータメモリ142の並列度をSPNUMとして、
ADRnew = ADRorg + (n − 1) * SPNUM
として得ることができる。また、分割数D21をDIVとして、
ADRnew = ADRorg + (DIV − n) * SPNUM
としてもよい。なお、ここで言うデータメモリ142の並列度SPNUMとは、SIMD演算器14において有効に動作するプロセッサエレメント141の個数を、データメモリ142において単位アドレスに付き格納可能なデータ数で除した数値を指す。
【0037】
一方、メモリアドレス変換手段13によるメモリアドレス変換に伴うアドレスオフセットの書き換えは、具体的に次のようにして行う。SIMD命令において、メモリアドレスの記述は、“[A, B]”として与えられる。ここで、Aは、プログラマが記述するプログラムメモリアドレスであり、一般に、“レジスタ+定数”の形で記述される。また、Bは、アドレスオフセットであり、通常、プログラマによって定数“0”が書き込まれる。なお、Bに関しては、プログラマは明示的に値を記述しないようにすることもできる。以上の仕様に従うと、たとえば、メモリアクセス命令は“LD [b0+1, 0], R0”といった記述となる。ここで、メモリアドレス変換手段13は、必要に応じて、上記のBに相当する部分の書き換えを行う。上記第2の例の場合、メモリアドレス変換が施されたメモリアクセス命令は、“LD [b0+1, 4], R0”といった記述となる。
【0038】
以上、本実施形態によると、機械語プログラムD10の並列度に関わらず、所定の並列度のSIMD演算器14によって機械語プログラムD10を実質的に実行することができる。これにより、機械語プログラムD10の書き換えが不要となる。また、並列度を動的に変更可能な、たとえば、省電力モードで動作するときには半数のプロセッサエレメントを休止させるような情報処理装置において、変更可能な並列度に対応した複数個の機械語プログラムを格納する必要がなくなる。
【0039】
なお、図4では、SIMD処理分割手段12はSIMD命令を一つずつ入力するように表示しているが、本発明はこれに限定されるものではない。すなわち、SIMD処理分割手段12は、連続する複数のSIMD命令列を入力し、当該命令列を所定回数繰り返し出力するようにしてもよい。
【0040】
また、SIMD処理分割数D21として定数を与えることで、SIMD処理分割数算出手段11を省略することができる。この場合、たとえば、分割数D21を定数“2”とすることによって、情報処理装置10は、入力とする機械語プログラムD10の並列度を、常に半分にして実行するものとなる。
【0041】
また、機械語プログラムD10においてメモリアクセスに係るSIMD命令が含まれないような場合には、メモリアドレス変換処理を施す必要がないため、メモリアドレス変換手段13を省略してもよい。
【0042】
また、レジスタ切換手段143とは別の方法により、レジスタの上書きを回避するようにしてもよい。この場合であっても、本発明により、上記の効果を得ることができる。
【0043】
(第2の実施形態)
図8は、本発明の第2の実施形態に係る機械語プログラム変換装置の構成を示す。本実施形態に係る機械語プログラム変換装置20は、SIMD処理分割数指定手段21(以下、省略して「指定手段21」と称する場合がある)と、SIMD処理分割手段22(以下、省略して「分割手段22」と称する場合がある)と、メモリアドレス変換手段23(以下、省略して「変換手段23」と称する場合がある)とを備え、SIMD命令を含む原機械語プログラムD30を入力とし、当該原機械語プログラムD30の並列度を低減し、新機械語プログラムD40として出力する。なお、指定手段21、分割手段22および変換手段23については、ハードウェアによる構成およびプログラム処理のいずれでも実現可能である。
【0044】
以下、機械語プログラム変換装置20の各構成要素の概要について順に説明する。
【0045】
SIMD処理分割数指定手段21は、プログラマによって指定されるSIMD処理の分割数を取得し、SIMD処理分割数D31(以下、「分割数D31」と称する)を設定する。SIMD処理の分割数の指定は、機械語プログラム変換装置20の起動時のオプションとして、定数で指定する方法などで実現可能である。
【0046】
SIMD処理分割手段22は、原機械語プログラムD30に含まれる命令列全体を分割数D31によって示された処理分割数に相当する回数だけ繰り返し、中間機械語プログラムD32として出力する。図9は、SIMD処理分割手段22の動作の具体例を示す。同図の例では、原機械語プログラムD30における命令列全体が、分割数D31によって示された回数である2回だけ繰り返し出力されている。
【0047】
図8に戻り、メモリアドレス変換手段23は、中間機械語プログラムD32に含まれるSIMD命令のうちメモリアクセスに係るものについて、当該SIMD命令の繰り返し出力に係る順序数に応じて、当該SIMD命令に係る原メモリアドレスを新メモリアドレスに変換し、新機械語プログラムD40を出力する。図10は、メモリアドレス変換手段23の動作の具体例を示す。同図の例では、中間機械語プログラムD32に含まれるメモリアクセス命令(同図では「命令2」として示している)に係るアドレスオフセットを、当該メモリアクセス命令の繰り返し出力に係る順序数(繰り替えし回数)に応じて書き換えている。なお、原メモリアドレスから新メモリアドレスへの変換は、第1の実施形態において説明した方法と同様にして行うことができる。
【0048】
以上のようにして生成される新機械語プログラムD40は、一般的なSIMD演算器で実行することができる。すなわち、新機械語プログラムD40を実行するSIMD演算器については、第1の実施形態に係るSIMD演算器が有するレジスタ切換手段を特に有する必要がない。
【0049】
以上、本実施形態によると、原機械語プログラムD30のプログラム並列度を変換して新機械語プログラムD40を自動生成することができる。また、新機械語プログラムD40は、原機械語プログラムD30に含まれる命令列全体が所定回数連続して記述されたものであるため、当該新機械語プログラムD40を実行するSIMD演算器によっては、その連続箇所前後における複数の命令を並列処理することが可能である。したがって、新機械語プログラムD40は、原機械語プログラムD30を単純に所定回数繰り返し実行するのに係る時間よりも少ない時間で実行され得る。
【0050】
なお、SIMD処理分割手段22は、原機械語プログラムD30に含まれる命令列全体ではなく、その一部の命令列を単位として、当該命令列を繰り返し出力するようにすることも可能である。ただし、この場合、生成された新機械語プログラムD40を実行するSIMD演算器は、たとえば、第1の実施形態で説明したようなレジスタ切換手段を有している必要があり、また、SIMD処理分割手段22は、レジスタの切り換えを制御するための命令を出力する必要がある。
【0051】
(第3の実施形態)
本発明の第3の実施形態に係る機械語プログラム変換装置は、図8に示した第2の実施形態に係る機械語プログラム変換装置20と同様の構成をしている。ただし、SIMD処理分割手段22およびメモリアドレス変換手段23の動作が、第2の実施形態とは異なっている。以下、本実施形態に係る機械語プログラム変換装置20におけるSIMD処理分割手段22およびメモリアドレス変換手段23の動作について説明する。
【0052】
SIMD処理分割手段22は、原機械語プログラムD30に含まれる命令列全体をサブルーチン化し、このサブルーチンを分割数D31によって示された処理分割数に相当する回数だけ繰り返すループ命令列を生成し、中間機械語プログラムD32として出力する。図11は、SIMD処理分割手段22の動作の具体例を示す。同図の例では、原機械語プログラムD30における命令列全体をサブルーチンsubとし、分割数D31によって示された回数である2回だけサブルーチンsubを呼び出す関数mainが、中間機械語プログラムD32として生成されている。
【0053】
メモリアドレス変換手段23は、中間機械語プログラムD32に含まれるSIMD命令のうちメモリアクセスに係るものについて、当該SIMD命令のアドレスオフセットを、ループ命令列が実行される際のループ回数を示す変数に書き換え、新機械語プログラムD40を出力する。図12は、メモリアドレス変換手段23の動作の具体例を示す。同図の例では、中間機械語プログラムD32に含まれるメモリアクセス命令(同図では「命令2」として示している)に係るアドレスオフセットを、ループカウンタを格納する専用のレジスタlcに書き換えている。なお、本例では、新機械語プログラムD40を実行するSIMD演算器が専用レジスタlcを有していることを想定して、アドレスオフセットの書き換えを行っているが、この専用レジスタlcに代えて、汎用レジスタを用いた記述にすることも可能である。
【0054】
以上、本実施形態によると、第2の実施形態よりも小さなサイズの新機械語プログラムD40を生成することができる。したがって、ユーザは、プログラムサイズを重視する場合には本実施形態による新機械語プログラムD40を、処理パフォーマンスを重視する場合には第2の実施形態による新機械語プログラムD40を、それぞれ選択すればよい。
【0055】
なお、SIMD処理分割手段22は、原機械語プログラムD30に含まれる命令列全体ではなく、その一部の命令列をサブルーチン化することも可能である。ただし、この場合、上述したように、生成された新機械語プログラムD40を実行するSIMD演算器はレジスタ切換手段を有している必要があり、また、SIMD処理分割手段22は、レジスタの切り換えを制御するための命令を出力する必要がある。
【0056】
また、第2および第3に係る機械語プログラム変換装置20と、当該機械語プログラム変換装置20によって生成される新機械語プログラムD40を実行するためのSIMD演算器とを組み合わせて、第1の実施形態のような情報処理装置を構成することが可能である。この場合の情報処理装置は、第1の実施形態とは異なり、入力とする機械語プログラム全体を変換した後に変換後の機械語プログラムを実行することとなる。
【0057】
【発明の効果】
以上説明したように、本発明によると、SIMD命令を含む機械語プログラム入力に対して、処理分割数に相当する回数の繰り返し処理に変換するSIMD処理分割手段を備えることにより、ある並列度のSIMD演算器に適応する機械語プログラムの内容を変更することなく、並列度のみを縮小した別のSIMD演算器で実行させることができる。また、SIMD命令のうち、メモリアクセス命令に係るものについて、繰り返し回数に係る順序数に応じて、当該SIMD命令の原メモリアドレスを新メモリアドレスに変換するメモリアクセス変換手段を備えることにより、並列度のみを縮小した別のSIMD演算器で当該機械語プログラムを実行させる場合に、SIMD演算器のメモリ構成に応じて、当該SIMD命令が正しくメモリアクセスを行うことが可能となる。
【図面の簡単な説明】
【図1】本発明の第1の実施形態に係る情報処理装置の構成図である。
【図2】SIMD演算器のいくつかの構成例を示す図である。
【図3】機械語プログラムの例を示す図である。
【図4】図1におけるSIMD処理分割手段の動作を説明するための図である。
【図5】図1におけるメモリアドレス変換手段の動作を説明するための図である。
【図6】メモリアドレス変換の第1の例を示す図である。
【図7】メモリアドレス変換の第2の例を示す図である。
【図8】本発明の第2および第3の実施形態に係る機械語プログラム変換装置の構成図である。
【図9】第2の実施形態に係るSIMD処理分割手段の動作を説明するための図である。
【図10】第2の実施形態に係るメモリアドレス変換手段の動作を説明するための図である。
【図11】第3の実施形態に係るSIMD処理分割手段の動作を説明するための図である。
【図12】第3の実施形態に係るメモリアドレス変換手段の動作を説明するための図である。
【符号の説明】
10 情報処理装置
11 SIMD処理分割数算出手段
12 SIMD処理分割手段
13 メモリアドレス変換手段
14 SIMD演算器
141 プロセッサエレメント
142 データメモリ
143 レジスタ切換手段
144 レジスタ群
D10 機械語プログラム
20 機械語プログラム変換装置
22 SIMD処理分割手段
23 メモリアドレス変換手段
D30 原機械語プログラム
D32 中間機械語プログラム
D40 新機械語プログラム
Claims (7)
- SIMD演算器を有し、SIMD命令を含む機械語プログラムに従ってSIMD型演算を行う情報処理装置であって、
前記機械語プログラムから一または連続する複数のSIMD命令を入力し、当該一または連続する複数のSIMD命令を、処理分割数に相当する回数繰り返し出力するSIMD処理分割手段を備え、
前記SIMD処理分割手段から出力されたSIMD命令を、前記SIMD演算器によって実行する
ことを特徴とする情報処理装置。 - 請求項1に記載の情報処理装置において、
前記SIMD処理分割手段から出力されたSIMD命令のうちメモリアクセスに係るものについて、当該SIMD命令の繰り返し出力に係る順序数に応じて、当該SIMD命令に係る原メモリアドレスを新メモリアドレスに変換するメモリアドレス変換手段を備えた
ことを特徴とする情報処理装置。 - 請求項1に記載の情報処理装置において、
前記処理分割数に相当する個数の、前記SIMD演算器用のレジスタ群を有し、前記SIMD処理分割手段によるSIMD命令の繰り返し出力に係る順序数に応じて、前記SIMD演算器によって使用される前記レジスタ群を切り換えるレジスタ切換手段を備えた
ことを特徴とする情報処理装置。 - 請求項1に記載の情報処理装置において、
前記SIMD演算器の並列度情報および前記機械語プログラム中に示された前記機械語プログラムの並列度情報に基づいて、前記処理分割数を算出するSIMD処理分割数算出手段を備えた
ことを特徴とする情報処理装置。 - SIMD命令を含む原機械語プログラムを入力し、当該原機械語プログラムに含まれる命令列全体を処理分割数に相当する回数繰り返したものに相当する中間機械語プログラムを生成するSIMD処理分割手段と、
前記SIMD処理分割手段によって生成された中間機械語プログラムに含まれるSIMD命令のうちメモリアクセスに係るものについて、当該SIMD命令に係る原メモリアドレスを新メモリアドレスに変換するメモリアドレス変換手段とを備え、
前記メモリアドレス変換手段によってメモリアドレス変換処理が施された後の前記中間機械語プログラムを、新機械語プログラムとして出力する
ことを特徴とする機械語プログラム変換装置。 - 請求項5に記載の機械語プログラム変換装置において、
前記中間機械語プログラムは、前記原機械語プログラムに含まれる命令列全体が前記処理分割数に相当する回数だけ繰り返し出力された命令列からなるものであり、
前記メモリアドレス変換手段は、前記中間機械語プログラムに含まれるメモリアクセスに係るSIMD命令について、当該SIMD命令の繰り返し出力に係る順序数に応じて、当該SIMD命令に係る原メモリアドレスを新メモリアドレスに変換する
ことを特徴とする機械語プログラム変換装置。 - 請求項5に記載の機械語プログラム変換装置において、
前記中間機械語プログラムは、前記原機械語プログラムに含まれる命令列全体をサブルーチンとして、当該サブルーチンを前記処理分割数に相当する回数だけ呼び出すループ命令列からなるものであり、
前記メモリアドレス変換手段は、前記原メモリアドレスに係るアドレスオフセットを、前記ループ命令列が実行される際のループ回数を示す変数に書き換えることを特徴とする機械語プログラム変換装置。
Priority Applications (3)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
JP2003157487A JP2004362086A (ja) | 2003-06-03 | 2003-06-03 | 情報処理装置および機械語プログラム変換装置 |
US10/843,434 US20040250048A1 (en) | 2003-06-03 | 2004-05-12 | Information processing device and machine language program converter |
CNB2004100484260A CN1297889C (zh) | 2003-06-03 | 2004-06-03 | 信息处理装置以及机器语言程序变换装置 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
JP2003157487A JP2004362086A (ja) | 2003-06-03 | 2003-06-03 | 情報処理装置および機械語プログラム変換装置 |
Publications (1)
Publication Number | Publication Date |
---|---|
JP2004362086A true JP2004362086A (ja) | 2004-12-24 |
Family
ID=33487403
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
JP2003157487A Pending JP2004362086A (ja) | 2003-06-03 | 2003-06-03 | 情報処理装置および機械語プログラム変換装置 |
Country Status (3)
Country | Link |
---|---|
US (1) | US20040250048A1 (ja) |
JP (1) | JP2004362086A (ja) |
CN (1) | CN1297889C (ja) |
Cited By (7)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
WO2007116560A1 (ja) | 2006-03-30 | 2007-10-18 | Nec Corporation | 並列画像処理システムの制御方法および装置 |
JP2008544350A (ja) * | 2005-06-09 | 2008-12-04 | クゥアルコム・インコーポレイテッド | Simd並列処理の自動選択を備えたマイクロプロセッサ |
JP2010073197A (ja) * | 2008-09-19 | 2010-04-02 | Internatl Business Mach Corp <Ibm> | 多重プロセッサ・コア・ベクトル・モーフ結合機構 |
JP2010086256A (ja) * | 2008-09-30 | 2010-04-15 | Mitsubishi Electric Corp | 並列処理型プロセッサ |
JP2010108284A (ja) * | 2008-10-30 | 2010-05-13 | Toshiba Corp | 画像処理プロセッサ |
US8122231B2 (en) | 2005-06-09 | 2012-02-21 | Qualcomm Incorporated | Software selectable adjustment of SIMD parallelism |
US11960239B2 (en) | 2014-11-28 | 2024-04-16 | Canon Kabushiki Kaisha | Cartridge and electrophotographic image forming apparatus |
Families Citing this family (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
GB2464292A (en) * | 2008-10-08 | 2010-04-14 | Advanced Risc Mach Ltd | SIMD processor circuit for performing iterative SIMD multiply-accumulate operations |
US10909037B2 (en) * | 2017-04-21 | 2021-02-02 | Intel Corpor Ation | Optimizing memory address compression |
Family Cites Families (12)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JPH0268651A (ja) * | 1988-09-02 | 1990-03-08 | Fujitsu Ltd | くり返し制御構造の並列処理方式 |
JP2518902B2 (ja) * | 1988-09-19 | 1996-07-31 | 富士通株式会社 | 並列計算機におけるイベントスケジュ―リング処理方式 |
JPH02158859A (ja) * | 1988-12-12 | 1990-06-19 | Matsushita Electric Ind Co Ltd | 割当プロセッサ数決定装置 |
JPH04152465A (ja) * | 1990-10-16 | 1992-05-26 | Fujitsu Ltd | データ処理システム及びデータ処理方法 |
US5551039A (en) * | 1992-02-03 | 1996-08-27 | Thinking Machines Corporation | Compiling a source code vector instruction by generating a subgrid loop for iteratively processing array elements by plural processing elements |
JP3130446B2 (ja) * | 1995-05-10 | 2001-01-31 | 松下電器産業株式会社 | プログラム変換装置及びプロセッサ |
US6026486A (en) * | 1996-05-23 | 2000-02-15 | Matsushita Electric Industrial Co., Ltd. | General purpose processor having a variable bitwidth |
JP3178403B2 (ja) * | 1998-02-16 | 2001-06-18 | 日本電気株式会社 | プログラム変換方法、プログラム変換装置及びプログラム変換プログラムを記憶した記憶媒体 |
US6263426B1 (en) * | 1998-04-30 | 2001-07-17 | Intel Corporation | Conversion from packed floating point data to packed 8-bit integer data in different architectural registers |
US6199067B1 (en) * | 1999-01-20 | 2001-03-06 | Mightiest Logicon Unisearch, Inc. | System and method for generating personalized user profiles and for utilizing the generated user profiles to perform adaptive internet searches |
EP1181648A1 (en) * | 1999-04-09 | 2002-02-27 | Clearspeed Technology Limited | Parallel data processing apparatus |
JP2001309386A (ja) * | 2000-04-19 | 2001-11-02 | Mitsubishi Electric Corp | 画像処理装置 |
-
2003
- 2003-06-03 JP JP2003157487A patent/JP2004362086A/ja active Pending
-
2004
- 2004-05-12 US US10/843,434 patent/US20040250048A1/en not_active Abandoned
- 2004-06-03 CN CNB2004100484260A patent/CN1297889C/zh not_active Expired - Fee Related
Cited By (10)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JP2008544350A (ja) * | 2005-06-09 | 2008-12-04 | クゥアルコム・インコーポレイテッド | Simd並列処理の自動選択を備えたマイクロプロセッサ |
US8122231B2 (en) | 2005-06-09 | 2012-02-21 | Qualcomm Incorporated | Software selectable adjustment of SIMD parallelism |
US8799627B2 (en) | 2005-06-09 | 2014-08-05 | Qualcomm Incorporated | Software selectable adjustment of SIMD parallelism |
WO2007116560A1 (ja) | 2006-03-30 | 2007-10-18 | Nec Corporation | 並列画像処理システムの制御方法および装置 |
US8106912B2 (en) | 2006-03-30 | 2012-01-31 | Nec Corporation | Parallel image processing system control method and apparatus |
JP5077579B2 (ja) * | 2006-03-30 | 2012-11-21 | 日本電気株式会社 | 並列画像処理システムの制御方法および装置 |
JP2010073197A (ja) * | 2008-09-19 | 2010-04-02 | Internatl Business Mach Corp <Ibm> | 多重プロセッサ・コア・ベクトル・モーフ結合機構 |
JP2010086256A (ja) * | 2008-09-30 | 2010-04-15 | Mitsubishi Electric Corp | 並列処理型プロセッサ |
JP2010108284A (ja) * | 2008-10-30 | 2010-05-13 | Toshiba Corp | 画像処理プロセッサ |
US11960239B2 (en) | 2014-11-28 | 2024-04-16 | Canon Kabushiki Kaisha | Cartridge and electrophotographic image forming apparatus |
Also Published As
Publication number | Publication date |
---|---|
US20040250048A1 (en) | 2004-12-09 |
CN1573686A (zh) | 2005-02-02 |
CN1297889C (zh) | 2007-01-31 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
JP4130654B2 (ja) | 拡張可能なプロセッサアーキテクチャ中にアドバンスド命令を追加するための方法および装置 | |
US20080250227A1 (en) | General Purpose Multiprocessor Programming Apparatus And Method | |
JP6502616B2 (ja) | バッチスレッド処理のためのプロセッサ、コード生成装置及びバッチスレッド処理方法 | |
US20220121444A1 (en) | Apparatus and method for configuring cooperative warps in vector computing system | |
KR20010080367A (ko) | 제어 프로그램 제품 및 데이터 처리장치 | |
WO2015114305A1 (en) | A data processing apparatus and method for executing a vector scan instruction | |
EP2951682B1 (en) | Hardware and software solutions to divergent branches in a parallel pipeline | |
EP2015174A1 (en) | Microprogrammed processor having multiple processor cores using time-shared access to a microprogram control store | |
JP2004362086A (ja) | 情報処理装置および機械語プログラム変換装置 | |
JP3805314B2 (ja) | プロセッサ | |
KR20070107814A (ko) | 의존성 명령을 패킷으로 그룹핑하여 실행하는 프로세서 및방법 | |
Wolf et al. | AMIDAR project: lessons learned in 15 years of researching adaptive processors | |
US20120047350A1 (en) | Controlling simd parallel processors | |
JP2018005369A (ja) | 演算処理装置及び演算処理装置の制御方法 | |
EP2652597B1 (en) | Method and apparatus for scheduling the issue of instructions in a microprocessor using multiple phases of execution | |
WO2007116560A1 (ja) | 並列画像処理システムの制御方法および装置 | |
WO2006136943A2 (en) | High-level language processor apparatus and method | |
Brand et al. | Orthogonal instruction processing: An alternative to lightweight VLIW processors | |
JP5644432B2 (ja) | 動作合成システム、動作合成方法、動作合成用プログラム及び半導体装置 | |
CN112602058A (zh) | 处理器存储器存取 | |
WO2010021119A1 (ja) | 命令制御装置 | |
JP3511691B2 (ja) | 演算処理装置 | |
JP3019818B2 (ja) | データ処理方法 | |
Huynh et al. | Evaluating address register assignment and offset assignment algorithms | |
JP4006887B2 (ja) | コンパイラ、プロセッサおよび記録媒体 |