以下に添付図面を参照して、開示のデータ作成装置、データ作成方法、およびデータ作成プログラムの実施の形態を詳細に説明する。
図1は、データ作成装置の動作例を示す説明図である。図1において、コンピュータシステム100は、CPU101と、CPU101からの取得要求に応答するデータ作成装置102と、を含む。CPU101は、CPU101の記憶領域の格納順にしたがってこれから実行する命令群と、CPU101が実行した命令により指定される記憶領域に格納されているデータとの取得要求を、データ作成装置102に通知する。ここで、記憶領域に格納されているデータは、たとえば、アドレスによって指定されている。また、記憶領域に格納されているデータは、ファイル名によって指定されてもよい。データは、たとえば、画像ソフトウェアが用いる画像データ、動画像ソフトウェアが用いる動画像データであってもよい。また、CPU101にプログラムによって再構成可能な演算回路が含まれる場合、データは、演算回路の再構成を行うプログラムであってもよい。
以下、CPU101のうちの、再構成可能な演算回路以外の、再構成可能でない通常の演算回路を、「GPP(General Purpose Processor)」と呼称する。また、再構成可能な演算回路を「RC(ReConfigurable)エンジン」と呼称する。また、GPPが実行する命令を、「GP命令」と呼称する。また、RCエンジンが実行するプログラムを、「RCプログラム」と呼称する。
また、GP命令のうちの、RCエンジンが実行するRCプログラムを実行できる状態にする命令を「RCプログラム指示命令」と呼称する。RCプログラム指示命令により、GPPは、RCプログラムの取得要求を、データ作成装置102に通知する。なお、RCプログラムを実行できる状態については、図3にて後述する。また、GP命令のうちの、RCエンジンへのRCプログラムの実行指示命令を「RC実行指示命令」と呼称する。また、RCプログラム指示命令とRC実行指示命令とを、「RC命令」と総称する。また、以下の説明では、CPU101が実行した命令により指定される記憶領域に格納されているデータが、RCプログラムであるとして説明する。
たとえば、GP命令が固定長命令であって、1命令のデータサイズが32[ビット]であるとし、CPU101が、「0x80〜0x9F番地に格納されたRCプログラムを読み込め」という0x0C番地のRCプログラム指示命令を実行したとする。このとき、CPU101は、これから実行する命令群として、たとえば、0x10〜0x2F番地のGP命令群と、0x80〜0x9F番地に格納されているRCプログラム112との取得要求を、データ作成装置102に通知する。データ作成装置102は、GP命令群とRCプログラムとの取得要求に対する応答データを効率よく送信する。
具体的に、データ作成装置102は、GP命令群とRCプログラムとの取得要求を受け付けた場合、GP命令群の各々のGP命令が圧縮された各々の圧縮GP命令を取得する。図1の例では、0x10〜0x2F番地には、圧縮GP命令群111が格納されているとする。なお、コンピュータシステム100は、0x10〜0x2F番地に各々のGP命令を記憶しておき、データ作成装置102は、各々のGP命令を圧縮してもよい。データ作成装置102は、たとえば、0x10番地のGP命令が圧縮された圧縮GP命令111−1を取得する。さらに、データ作成装置102は、0x14番地のGP命令が圧縮された圧縮GP命令111−2と、…、0x2C番地のGP命令が圧縮された圧縮GP命令111−8と、を取得する。
次に、データ作成装置102は、圧縮GP命令111−1〜111−8について、RCプログラム112のビット列の中から、各々のGP命令のデータサイズから各々の圧縮GP命令のデータサイズを減じたサイズ分のビット列を抽出する。たとえば、圧縮GP命令111−1のデータサイズが14[ビット]であれば、データ作成装置102は、RCプログラム112のビット列の中から、32[ビット]から14[ビット]を減じた18[ビット]分のビット列112−1を抽出する。
続けて、データ作成装置102は、圧縮GP命令111−2のデータサイズが30[ビット]であれば、RCプログラム112のビット列の中から、32[ビット]から30[ビット]を減じた2[ビット]分のビット列112−2を抽出する。このように、データ作成装置102は、圧縮GP命令群111について抽出を行う。最後の抽出として、データ作成装置102は、圧縮GP命令111−8のデータサイズが24[ビット]であれば、RCプログラム112のビット列の中から、32[ビット]から24[ビット]を減じた8[ビット]分のビット列112−8を抽出する。
次に、データ作成装置102は、各々の圧縮GP命令と抽出されたビット列とを結合した各々の結合データを、CPU101での格納順にしたがって連結することにより、取得要求に対する応答データを作成する。たとえば、データ作成装置102は、圧縮GP命令111−1とビット列112−1とを結合した結合データ113−1を作成する。同様に、データ作成装置102は、圧縮GP命令111−2とビット列112−2とを結合した結合データ113−2と、…、圧縮GP命令111−8とビット列112−8とを結合した結合データ113−8とを作成する。続けて、データ作成装置102は、結合データ113−1〜結合データ113−8を格納順にしたがって連結することにより、応答データ114を作成する。
応答データ114の作成後、データ作成装置102は、応答データ114をCPU101に出力する。このように、データ作成装置102は、GP命令群とRCプログラムが要求された場合、GP命令と圧縮GP命令との差分サイズ分のRCプログラムを圧縮命令の後に埋め込んだビット列を、各命令の格納順にしたがって連結して出力する。これにより、データ作成装置102は、GP命令群の送信を阻害せずに、RCプログラムを送信することができる。以下、図2〜図15を用いて、コンピュータシステム100について詳細に説明する。
(コンピュータシステム100のハードウェア)
図2は、コンピュータシステムのハードウェア構成例を示すブロック図である。コンピュータシステム100は、CPU101と、ROM(Read Only Memory)201と、RAM(Random Access Memory)202と、フラッシュROM203と、フラッシュROMコントローラ204と、フラッシュROM205を有する。コンピュータシステム100は、さらに、ディスプレイ206と、IF207と、キーボード208と、を有する。CPU101、ROM201〜キーボード208は、それぞれバス209にて接続されている。
また、データ作成装置102は、ROM201〜フラッシュROMコントローラ204と、バス209の間に存在する。さらに、GP命令群または圧縮GP命令群111とRCプログラム112とは、ROM201〜フラッシュROM203、フラッシュROM205のいずれかに記憶されている。
ここで、CPU101は、コンピュータシステム100の全体の制御を司る制御装置である。また、コンピュータシステム100は、N個のCPUを含んでいてもよい。Nは、2以上の整数である。
ROM201は、ブートプログラムなどのプログラムを記憶している不揮発性メモリである。RAM202は、CPU101のワークエリアとして使用される揮発性メモリである。フラッシュROM203は、書き換え可能な不揮発性メモリであり、たとえば、読出し速度が高速なNOR型フラッシュメモリである。フラッシュROM203は、OS(Operating System)などのシステムソフトウェアやアプリなどを記憶している。たとえば、OSを更新する場合、コンピュータシステム100は、IF207によって新しいOSを受信し、フラッシュROM203に格納されている古いOSを、受信した新しいOSに更新する。
フラッシュROMコントローラ204は、CPU101の制御にしたがってフラッシュROM205に対するデータのリード/ライトを制御する制御装置である。フラッシュROM205は、書き換え可能な不揮発性メモリであり、たとえば、データの保存、運搬を主に目的とした、NAND型フラッシュメモリである。フラッシュROM205は、フラッシュROMコントローラ204の制御で書き込まれたデータを記憶する。データの具体例としては、コンピュータシステム100を使用するユーザがIF207を通して取得した画像データ、映像データなどを記憶してもよい。フラッシュROM205は、たとえば、メモリカード、SDカードなどを採用することができる。
ディスプレイ206は、カーソル、アイコンあるいはツールボックスをはじめ、文書、画像、機能情報などのデータを表示する。ディスプレイ206は、たとえば、TFT液晶ディスプレイなどを採用することができる。
IF207は、通信回線を通じてLAN(Local Area Network)、WAN(Wide Area Network)、インターネットなどのネットワーク210に接続され、ネットワーク210を介して他の装置に接続される。そして、IF207は、ネットワーク210と内部のインターフェースを司り、外部装置からのデータの入出力を制御する。IF207には、たとえばモデムやLANアダプタなどを採用することができる。
キーボード208は、数字、各種指示などの入力のためのキーを有し、データの入力を行う。また、キーボード208は、タッチパネル式の入力パッドやテンキーなどであってもよい。
図3は、CPU内部のハードウェア構成例を示す説明図である。図3では、コンピュータシステム100にCPU101と、CPU300という複数のCPUがある例を示している。CPU101は、GPP301と、RCエンジン302と、伸長装置303と、RCプログラム制御部304と、を含む。さらに、CPU101は、共有レジスタ311と、インストラクションキャッシュメモリ312と、RCプログラム指示命令キュー313と、RCプログラムバッファ314とを含む。
GPP301は、再構成可能でない通常の演算回路である。GPP301は、GP命令を実行可能である。RCエンジン302は、再構成可能な演算回路である。RCエンジン302の具体例として、PLD(Programmable Logic Device)、FPGA(Field Programmable Gate Array)がある。コンピュータシステム100は、RCプログラムを2つ以上記憶している。ここで、RCエンジン302がPLD、FPGAであれば、たとえば、第1のRCプログラムは、特定の関数を計算し、計算結果が第1の閾値以上なら第1の閾値を出力するというプログラムである。さらに、第2のRCプログラムは、たとえば、第1のRCプログラムにおいて第1の閾値が第2の閾値に変更されたプログラムである。この場合、RCプログラムの内容は、処理内容すべてを記載していてもよいし、第1の閾値、第2の閾値のみが記載されていてもよい。
また、RCエンジン302の他の例としては、動作モードを変更可能なSIMD(Single Instruction Multiple Data)演算器等がある。具体的な動作モードは、たとえば、8ビット乗算を4つ独自に扱うモードと、下位30ビットを使って、10ビット乗算を3つ独自に扱うモードと、16ビット乗算を2つ独自に扱うモードと、32ビット乗算を1つ扱うモードと、という4つのモードがある。
伸長装置303は、データ作成装置102から出力されてきた応答データ114を伸長する。具体的に、伸長装置303は、応答データ114のビット列を伸長して、伸長されたGP命令群をインストラクションキャッシュメモリ312に出力するとともに、伸長されなかった残余のビット列をRCプログラム112としてRCプログラム制御部304に出力する。
RCプログラム制御部304は、RCプログラムに関する制御を行う。具体的に、RCプログラム制御部304は、GPP301がRCプログラム指示命令を実行したことを受け付けると、RCプログラムの取得要求を伸長装置303に通知する。また、RCプログラム制御部304は、伸長装置303からRCプログラムを受け付けた場合、RCプログラムをRCプログラムバッファ314に格納する。なお、RCプログラムを実行できる状態とは、RCプログラムがRCプログラムバッファ314に格納済みの状態である。
さらに、RCプログラム制御部304は、GPP301がRC実行指示命令を実行したことを受け付けると、RCプログラムを実行できる状態にあるか否かを判断する。RCプログラムを実行できる状態にない場合、RCプログラム制御部304は、GPP301にパイプライン動作の停止を指示して、RCプログラムの取得要求を伸長装置303に通知する。RCプログラムを実行できる状態にある場合、RCプログラム制御部304は、GPP301にRCプログラムの実行を許可する。
共有レジスタ311は、GPP301とRCエンジン302とが共有してアクセス可能な記憶領域である。共有レジスタ311を用いて、たとえば、GPP301は、RCエンジン302に実行させる処理の引数を与え、RCエンジン302は、処理結果をGPP301に通知する。インストラクションキャッシュメモリ312は、GP命令を一時的に記憶する記憶領域である。
RCプログラム指示命令キュー313は、RCプログラム指示命令を先入れ先出しにて記憶する記憶領域である。たとえば、伸長装置303がRCプログラムを取得している途中に、GPP301が新たなRCプログラム指示命令を実行した場合、RCプログラム制御部304は、新たなRCプログラム指示命令をRCプログラム指示命令キュー313に格納する。伸長装置303がRCプログラムの取得を完了した後、RCプログラム制御部304は、RCプログラム指示命令キュー313から新たなRCプログラム指示命令を取得し、新たなRCプログラムの取得要求を伸長装置303に通知する。
RCプログラムバッファ314は、RCプログラムを格納する記憶領域である。RCプログラムバッファ314は、RCプログラム1つ分を記憶可能な記憶領域でもよいし、RCプログラム複数分を記憶可能な記憶領域でもよい。
なお、RCエンジン302〜RCプログラム制御部304と、インストラクションキャッシュメモリ312〜RCプログラムバッファ314は、すべてのCPUに含まれていてもよいし、一部のCPUに含まれていてもよい。たとえば、CPU300に、RCエンジン302〜RCプログラム制御部304と、インストラクションキャッシュメモリ312〜RCプログラムバッファ314があってもなくてもよい。
続けて、図4と図5にて、GP命令群とRCプログラム112との取得要求に対する応答について説明を行う。図4では、GP命令群を圧縮せずに転送する例について説明し、図5では、GP命令群を圧縮して転送する例について説明する。
図4は、GP命令群を圧縮せずにGP命令群とRCプログラムとを転送する例を示す説明図である。図4では、GP命令群とRCプログラム112との取得要求と、に対して、データ作成装置102が、GP命令群を圧縮せずに時分割にて調停して転送する例を示している。図4の(A)は、転送すべきGP命令群と転送すべきRCプログラム112を表示している。以下、GP命令群とRCプログラム112とを順に説明する。また、図4の(A)と図4の(B)では、RCプログラム112に対して網掛けしている。
初めに、1番目に転送する命令は、GP命令群401である。次に、2番目に転送する命令は、RCプログラム指示命令402である。具体的に、RCプログラム指示命令402の更新対象となるプログラムは、RCプログラム(#A)となる。続けて、3番目に転送する命令は、GP命令群403である。また、RCプログラム指示命令402の実行によって発生した、1番目に転送するRCプログラム112は、RCプログラム(#A)411となる。次に、4番目に転送する命令は、RC実行指示命令404である。RC実行指示命令404により、RCエンジン302は、RCプログラム(#A)を実行する。
続けて、5番目に転送する命令は、GP命令群405である。次に、6番目に転送する命令は、RCプログラム指示命令406である。具体的に、RCプログラム指示命令406の更新対象となるプログラムは、RCプログラム(#B)となる。続けて、7番目に転送する命令は、GP命令群407である。また、RCプログラム指示命令406の実行によって発生した、2番目に転送するRCプログラム112は、RCプログラム(#B)412となる。次に、8番目に転送する命令は、RC実行指示命令408である。RC実行指示命令408により、RCエンジン302は、RCプログラム(#B)を実行する。
続けて、9番目に転送する命令は、RC実行指示命令409である。RC実行指示命令409により、RCエンジン302は、RCプログラム(#A)を実行する。なお、RC実行指示命令409の時点にて、RCプログラム(#A)が、RCプログラムバッファ314に既に格納されているため、RCプログラム指示命令を行わなくてもよい。
図4の(B)は、GP命令群とRCプログラム112とを転送した例を示している。データ作成装置102は、GP命令群403とRCプログラム(#A)411とを時分割にて重畳してバス幅ごとに転送する。たとえば、データ作成装置102がRCプログラム(#A)411を転送中の場合、GPP301は、実行すべきGP命令群403がまだ転送できていないため、実行を一旦停止することになる。
図5は、GP命令群を圧縮した圧縮GP命令群とRCプログラムとを転送する例を示す説明図である。図5では、GP命令群とRCプログラム112との取得要求と、に対して、データ作成装置102が、GP命令群を圧縮して転送する例を示している。図5の(A)は、転送すべきGP命令群と転送すべきRCプログラム112を表示している。以下、GP命令群とRCプログラム112とを順に説明する。また、図5の(A)と図5の(B)では、RCプログラム112に対して網掛けしている。
GP命令群には、GP命令群が圧縮されているか否かを表す1ビットの圧縮フラグ501が先頭に付与されている。圧縮フラグは、たとえば、後続のGP命令が圧縮されている場合、“1”が設定されており、後続のGP命令が圧縮されていない場合、“0”が設定される。また、圧縮フラグ501を付与する前のGP命令のデータサイズがバス幅と一致していた場合、圧縮フラグ501を付与することになった場合のGP命令のデータサイズは、バス幅から1ビット減じた値となる。また、圧縮フラグ501は、GP命令に含まれ、GP命令の先頭ビットが圧縮フラグ501としてもよい。また、圧縮フラグ501は、GP命令群に付与されずに、他の記憶領域にあってもよい。
1番目に転送する命令と、2番目に転送する命令は、図4と同一である。続けて、3番目に転送する命令は、GP命令群403が圧縮された圧縮GP命令群502である。また、RCプログラム指示命令402の実行によって発生した、1番目に転送するRCプログラム112は、RCプログラム(#A)411となる。
続けて、4番目に転送する命令から、6番目に転送する命令までは、図4と同一である。次に、7番目に転送する命令は、GP命令群407が圧縮された圧縮GP命令群503である。また、RCプログラム指示命令406の実行によって発生した、2番目に転送するRCプログラム112は、RCプログラム(#B)412となる。続けて、8番目に転送する命令から、10番目に転送する命令までは、図4と同一である。
図5(B)は、圧縮GP命令群とRCプログラム112と重畳して転送した例を示している。データ作成装置102は、圧縮GP命令群502の各々の圧縮GP命令とRCプログラム(#A)411のビット列の中から抽出したビット列とを結合した結合データを、CPU101での格納順にしたがって連結した応答データ511としてバス幅ごとに転送する。このように、応答データ511の作成について、データ作成装置102は、GP命令群403を圧縮によって発生した空き領域に、RCプログラム(#A)411のビット列を格納順にしたがって詰めて挿入している。また、応答データ511は、RCプログラム(#A)411のビット列すべてを詰めることができた場合を示している。
また、応答データ512の作成について、データ作成装置102は、GP命令群407を圧縮によって発生した空き領域に、RCプログラム(#B)412のビット列を格納順にしたがって詰めて挿入している。また、応答データ512は、RCプログラム(#B)412のビット列すべてを詰めることができなかった場合を示している。このとき、データ作成装置102は、RC実行指示命令408を転送する前に、詰め切れなかった残余のビット列513を転送する。なお、結合データの記憶内容について、図6にて後述する。
図6は、結合データの記憶内容の一例を示す説明図である。図6の(A1)と図6の(A2)は、命令フェッチのバス幅と、OSの使用する標準的なデータサイズとなる幅となるワード幅とが一致する場合における、結合データの記憶内容の一例を示している。図6の(B1)と図6の(B2)は、命令フェッチのバス幅と、ワード幅とが異なる場合における、結合データの記憶内容の一例を示している。
データ作成装置102は、バス幅とワード幅とが同一である場合、図6の(A1)にて示す結合データ601を作成してもよいし、図6の(A2)にて示す結合データ602を作成してもよい。また、データ作成装置102は、バス幅とワード幅とが異なる場合、図6の(B1)にて示す結合データ603を作成してもよいし、図6の(B2)にて示す結合データ604を作成してもよい。
図6の(A1)で示す結合データ601は、最上位ビットを含むビット列に圧縮GP命令611を有する。さらに、結合データ601は、圧縮GP命令611の後に、RCプログラムのビット列から抽出した、ワード幅から圧縮GP命令611を減じたサイズ分のビット列612を有する。また、図6の(A2)で示す結合データ602は、最下位ビットを含むビット列に圧縮GP命令611を有する。さらに、結合データ602は、圧縮GP命令611の前に、ワード幅から圧縮GP命令611を減じたサイズ分、RCプログラムのビット列から抽出したビット列612を有する。
また、図6の(B1)で示す結合データ603は、ワード幅ごとに、各ワード幅の最上位ビットを含むビット列に、圧縮GP命令621、圧縮GP命令622、圧縮GP命令623、圧縮GP命令624を有する。さらに、結合データ603は、圧縮GP命令621〜圧縮GP命令624の後に、それぞれ、ビット列631、ビット列632、ビット列633、ビット列634を有する。
また、図6の(B2)で示す結合データ604は、最上位ビットを含むビット列に、圧縮GP命令621、圧縮GP命令622、圧縮GP命令623、圧縮GP命令624を順に有する。さらに、結合データ604は、圧縮GP命令623の後に、バス幅から圧縮GP命令621〜圧縮GP命令624のデータサイズを減じたサイズ分、RCプログラムのビット列から抽出したビット列635を有する。
なお、図6では図示していないが、データ作成装置102は、各ワード幅の最下位ビットを含むビット列に圧縮GP命令621〜624を有し、圧縮GP命令621〜624の前に、それぞれ、ビット列631〜634を有する結合データを作成してもよい。また、データ作成装置102は、最下位ビットを含むビット列に、圧縮GP命令621〜624を有し、圧縮GP621の前に、バス幅から圧縮GP命令621〜624のデータサイズを減じたサイズ分のビット列635を格納した結合データを作成してもよい。続いて、図7にて、図5にて示した動作を行う機能例と、図6に示した記憶内容を作成する機能例について説明する。
(コンピュータシステムの機能構成)
次に、コンピュータシステム100の機能構成例について説明する。図7は、コンピュータシステムの機能構成例を示すブロック図である。コンピュータシステム100は、受付部701と、取得部702と、抽出部703と、作成部704と、出力部705と、実行部710と、送信部711と、受信部712と、格納部713と、伸長部714と、出力部715とを含む。受付部701〜出力部705は、データ作成装置102が有する機能群である。実行部710は、GPP301が有する機能群である。送信部711〜出力部715は、伸長装置303が有する機能群である。また、伸長装置303は、記憶領域720にアクセス可能である。
受付部701は、要求元装置における格納順にしたがって連続するGP命令群と、要求元装置が実行したGP命令により指定される記憶領域に格納されているRCプログラムとの取得要求を受け付ける。ここで、要求元装置とは、たとえば、CPU101である。たとえば、受付部701は、0x10〜0x2F番地の連続するGP命令群と、CPU101が実行した0x0C番地のGP命令により指定される0x80〜0x9F番地に格納されているRCプログラムとの取得要求を受け付ける。
また、受付部701は、GP命令群の取得要求と、RCプログラムの取得要求とを、別々に受け付けてもよい。2つの取得要求を別々に受け付けた場合、たとえば、数クロックの時間差内といった特定の時間以内に受け付けた場合、受付部701は、GP命令群とRCプログラムの取得要求として受け付けたことにしてもよい。また、RCプログラムの取得要求を受け付けた場合に一定時間待機し、待機中にGP命令群の取得要求を受け付けた場合、受付部701は、GP命令群とRCプログラムの取得要求として受け付けたことにしてもよい。なお、受け付けた取得要求は、データ作成装置102内のレジスタ等の記憶領域に記憶される。
取得部702は、受付部701によって、GP命令群とRCプログラムとの取得要求を受け付けた場合、GP命令群の各々のGP命令が圧縮された各々の圧縮GP命令を取得する。たとえば、取得部702は、ROM201〜フラッシュROM203、フラッシュROM205等の記憶領域に記憶されたGP命令群の各々の命令を圧縮して、圧縮した命令を取得する。また、取得部702は、GP命令群とデータとの取得要求を受け付けた場合、各々の圧縮GP命令を、各々の圧縮GP命令が記憶された記憶領域から取得してもよい。
また、取得部702は、GP命令群とデータとの取得要求を受け付けた場合、GP命令群の格納順に連続する所定数のGP命令ごとに圧縮された所定数のGP命令ごとの圧縮GP命令を取得してもよい。所定数は、どのような値でもよいが、たとえば、バス幅/GP命令のデータサイズや、インストラクションキャッシュメモリ312のキャッシュライン幅/GP命令のデータサイズが好ましい。たとえば、バス幅が128[ビット]であり、GP命令のデータサイズが32[ビット]であれば、所定数は、128/32=4となる。
たとえば、取得部702は、GP命令群とデータとの取得要求を受け付けた場合、連続する4つのGP命令ごとに圧縮された4つのGP命令ごとの圧縮GP命令を取得する。なお、取得した圧縮GP命令は、データ作成装置102内のレジスタ等の記憶領域に記憶される。または、ROM201〜フラッシュROM203、フラッシュROM205等の記憶領域内の圧縮GP命令が格納されたアドレスが、データ作成装置102内のレジスタ等の記憶領域に記憶されてもよい。
抽出部703は、取得部702によって取得された各々の圧縮GP命令について、記憶領域に格納されているRCプログラムのビット列の中から、各々のGP命令のデータサイズから各々の圧縮GP命令のデータサイズを減じたサイズ分のビット列を抽出する。また、RCプログラムのビット列から抽出される順序として、抽出部703は、ビット列の先頭から抽出してもよいし、ビット列の末尾から抽出してもよい。
たとえば、GP命令のデータサイズが32[ビット]であり、圧縮GP命令のデータサイズが14[ビット]である場合、抽出部703は、32−14=18[ビット]分のビット列を抽出する。なお、記憶領域にGP命令が格納されており、圧縮GP命令が格納されていない場合、圧縮GP命令のデータサイズは、実際に圧縮することにより取得することができる。また、記憶領域に、GP命令が格納されていなく、圧縮GP命令が格納されている場合、圧縮GP命令を伸長することにより、圧縮GP命令のデータサイズとGP命令のデータサイズを取得することができる。
また、抽出部703は、各々の圧縮GP命令に対応する各々のGP命令のデータサイズを記憶する記憶領域を参照して、各々のGP命令のデータサイズから各々の圧縮GP命令のデータサイズを減じたサイズ分のビット列を抽出してもよい。各々の圧縮GP命令に対応する各々のGP命令のデータサイズを記憶する記憶領域は、たとえば、GP命令が固定長命令であれば、各々の圧縮GP命令のサイズを記憶する。GP命令が固定長命令であれば、GP命令のデータサイズは記憶してなくてもよい。図1に示した、圧縮GP命令111−1〜111−8を用いると、前述の記憶領域は、14、30、…、24を記憶している。前述の記憶領域を参照することにより、抽出部703は、伸長せずとも圧縮GP命令とGP命令のデータサイズを取得することができる。
また、抽出部703は、RCプログラムのビット列すべてを抽出した場合、RCプログラムのビット列すべてを抽出したことを表すビット列の中からビット列を抽出してもよい。RCプログラムのビット列すべてを抽出したことを表すビット列は、どのようなビット列でもよいが、RCプログラム中に出現しないビット列が好ましい。以下、RCプログラムのビット列すべてを抽出したことを表す情報を終端情報とする。RCプログラム中に出現する可能性のあるビット列であれば、たとえば、任意のユニークなエスケープコードを定義し、終端と通常のビット列を区別する。
また、抽出部703は、取得部702によって取得された各々の圧縮GP命令について、RCプログラムのサイズを表すビット列の中から、各々のGP命令のデータサイズから各々の圧縮GP命令のデータサイズを減じたサイズ分のビット列を抽出する。さらに、抽出部703は、RCプログラムのビット列の中から、各々のGP命令のデータサイズから各々の圧縮GP命令のデータサイズを減じたサイズ分のビット列を抽出してもよい。RCプログラムのサイズを表すビット列は、バイト単位にて示したデータのサイズでもよいし、ビット単位にて示したデータのサイズでもよい。
また、抽出部703は、RCプログラムのビット列のうち抽出されていない残余のビット列があり、かつ、要求元装置からデータの取得要求を受け付けた場合、残余のビット列を抽出してもよい。
また、抽出部703は、所定数のGP命令ごとの圧縮GP命令について、RCプログラムのビット列の中から、所定数のGP命令のデータサイズから所定数のGP命令ごとの圧縮GP命令のデータサイズを減じたサイズ分のビット列を抽出してもよい。
たとえば、所定数が4であって、所定数のGP命令の合計のデータサイズが、4×32=128[ビット]であり、所定数のGP命令ごとの圧縮GP命令のデータサイズが、56[ビット]であるとする。この場合、抽出部703は、RCプログラムのビット列の中から、128−56=72[ビット]分のデータ列を抽出する。なお、抽出したビット列は、データ作成装置102内のレジスタ等の記憶領域に記憶される。または、ROM201〜フラッシュROM203、フラッシュROM205等の記憶領域内のRCプログラムが格納されたアドレスのうち、抽出された範囲を示すアドレスが、データ作成装置102内のレジスタ等の記憶領域に記憶されてもよい。
作成部704は、各々の圧縮GP命令と抽出部703によって各々の圧縮GP命令について抽出されたビット列とを結合した各々の結合データを、格納順にしたがって連結することにより、GP命令群とRCプログラムとの取得要求に対する応答データを作成する。たとえば、図1の例であれば、作成部704は、圧縮GP命令111−1とビット列112−1とを結合した結合データ113−1と、…、圧縮GP命令111−8とビット列112−8とを結合した結合データ113−8とを作成する。
また、作成部704は、抽出部703によって抽出された残余のビット列を、RCプログラムの取得要求に対する応答データとして作成してもよい。たとえば、GP命令群とRCプログラムとの取得要求に対する応答データの出力後、RCプログラムのビット列の中に抽出されなかったビット列があれば、作成部704は、残余のビット列を、RCプログラムの取得要求に対する応答データとして作成する。また、作成部704は、所定数のGP命令ごとの圧縮GP命令と抽出部703によって所定数のGP命令ごとの圧縮GP命令について抽出されたビット列とを結合した所定数のGP命令ごとの結合データを、格納順にしたがって連結してもよい。
出力部705は、作成部704によって作成された応答データを要求元装置に出力する。たとえば、図1の例を用いると、出力部705は、応答データ114を出力する。
実行部710は、GP命令を実行する。たとえば、実行部710は、AND命令、OR命令、ロード命令やストア命令といった命令を実行する。送信部711は、格納順にしたがって連続するGP命令群と、実行部710が実行したGP命令により指定されたRCプログラムとの取得要求をデータ作成装置102に送信する。
受信部712は、応答データをデータ作成装置102から受信する。応答データは、各々の圧縮GP命令と、RCプログラムのビット列の中から抽出された、各々のGP命令のデータサイズから各々の圧縮GP命令のデータサイズを減じたサイズ分のビット列とを結合した結合データを格納順にしたがって連結したデータである。
格納部713は、応答データを受け付けた場合、応答データを記憶領域720に格納する。伸長部714は、格納部713によって記憶領域720に格納された応答データから、各々の圧縮GP命令を伸長する。出力部715は、伸長部714によって伸長されたGP命令と、応答データのビット列から、伸長されたGP命令を除いた残余のビット列とを出力する。
図8は、命令を圧縮する際の動作例を示す説明図である。図8では、GP命令群403が圧縮される場合の動作について説明する。なお、圧縮を行う装置としては、コンピュータシステム100用のソフトウェアを生成するコンパイラを実行する装置でもよいし、データ作成装置102でもよい。図8では、コンパイラを実行する装置が圧縮を行うとし、実行主体を、説明の簡略化のため、コンパイラとして説明を行う。
コンパイラは、GP命令を、所定のサイズを1単位として圧縮する。所定のサイズは、たとえば、1命令のサイズ、ワードアラインメントのサイズ、バス幅、キャッシュラインのサイズ等である。所定のサイズが1命令のサイズであれば、たとえば1ワード=32[ビット]である。所定のサイズがキャッシュラインのサイズであれば、たとえば、1ラインに4命令が格納できる場合、32[ビット]×4=128[ビット]が所定のサイズとなる。
図8の例では、コンパイラが、GP命令群403を、バス幅ごとに圧縮するとする。コンパイラは、GP命令群403の先頭から、バス幅に含まれる圧縮前となるGP命令801を抽出し、圧縮する。次に、コンパイラは、GP命令801と圧縮GP命令811とのデータサイズを比較し、GP命令801より圧縮GP命令811のデータサイズが小さければ、コンパイラは、圧縮フラグを有効に設定し、圧縮GP命令811に圧縮フラグを付与する。また、圧縮GP命令811が圧縮前のGP命令801以上のデータサイズとなる場合、コンパイラは、圧縮フラグを無効に設定し、GP命令801に圧縮フラグを付与してデータを作成する。図8の例では、GP命令801より圧縮GP命令811が小さかった場合を示している。
続けて、コンパイラは、GP命令群403のうち、バス幅に含まれる次の圧縮前のGP命令802を抽出し、圧縮する。圧縮前となるGP命令802より圧縮GP命令812が小さかったとして、コンパイラは、圧縮GP命令812に、有効に設定した圧縮フラグを付与する。このように、コンパイラは、バス幅に含まれる命令を順次圧縮していく。
また、具体的なデータ作成方法は、たとえば、命令の出現頻度を記憶した辞書を用いて、圧縮前の符号より短い符号へ置換する。圧縮のアルゴリズムとしては、たとえば、ハフマン符号等がある。また、辞書に相当するデータは、圧縮を行うコンパイラと、伸長装置303が有する。辞書の作成タイミングとしては、コンパイラがGP命令を圧縮するタイミングでもよいし、データ作成装置102がGP命令を圧縮するタイミングでもよい。また、コンパイラが辞書だけを作成しておき、データ作成装置102が、既に作成されている辞書を参照して、GP命令を圧縮してもよい。
また、圧縮が行われる、RCプログラム指示命令と、RC実行指示命令までのコードブロックを1つの辞書を用いる単位としてもよい。たとえば、GP命令群403を圧縮するのに用いる辞書と、GP命令群407を圧縮するのに用いる辞書と、が異なってもよい。GP命令群403とGP命令群407にて命令の出現頻度が異なる場合、異なる辞書を用いることにより、コンピュータシステム100は、圧縮率を向上することができる。
また、辞書の参照方法としては、たとえば、コンパイラは、コードブロックの先頭に、辞書データを挿入してもよいし、辞書データへのアドレス位置を挿入してもよい。また、複数の辞書を用いる場合、コンパイラは、コードブロックの特定のため、アドレス、またはプログラム先頭からのオフセット、をキーとするテーブルを各コードブロックの先頭に挿入する。
また、GP命令が可変長命令であってもよい。この場合、コンパイラは、可変長命令のうち命令長が長い命令がコードブロックをまたがないように、NOP(No OPeration)命令を挿入してもよい。
また、圧縮するか否かの判断方法は、ソースコードに記述された指示にしたがってもよい。たとえば、ソースコードに、コンパイラ固有の指定を行う“#pragma”命令がある場合、コンパイラは、“#pragma”命令の引数にしたがって、圧縮するか否かを判断する。次に、応答データの転送後の動作例について、図9を用いて説明する。
図9は、転送後の動作例を示す説明図である。図9では、データ作成装置102が図6の(B2)にて説明した結合データを連結して出力した後の動作を説明する。また、結合データが0x10バイトごとに作成されているとする。伸長装置303は、記憶領域720に、データ作成装置102が出力した応答データを記憶する。
具体的に、記憶領域720のうち、0x00〜0x0F番地の記憶領域は、最上位ビットから、圧縮フラグ901と、圧縮GP命令911と、圧縮GP命令912と、圧縮GP命令913と、圧縮GP命令914とを格納している。さらに、0x00〜0x0F番地の記憶領域は、空き領域に、RCプログラム112のビット列の一部のビット列931を格納している。圧縮フラグ901は、後続のGP命令が圧縮されていることを示す“1”が設定されているとする。
また、0x10〜0x1F番地の記憶領域は、最上位ビットから、圧縮フラグ902と、GP命令915と、GP命令916と、GP命令917と、GP命令918とを格納している。圧縮フラグ902は、後続のGP命令が圧縮されていないことを示す“0”が設定されているとする。
また、0x20〜0x2F番地の記憶領域は、最上位ビットから、圧縮フラグ903と、圧縮GP命令919と、圧縮GP命令920と、圧縮GP命令921と、圧縮GP命令922とを格納している。さらに、0x20〜0x2F番地の記憶領域は、空き領域に、RCプログラム112のビット列の一部のビット列932を格納している。圧縮フラグ903は、後続のGP命令が圧縮されていることを示す“1”が設定されているとする。
このような記憶内容となる状態において、伸長装置303は、圧縮フラグ901を参照して、圧縮GP命令911〜圧縮GP命令914を順に伸長して、伸長したデータを、インストラクションキャッシュメモリ312に出力する。また、伸長装置303は、4つ分の圧縮GP命令を伸長した残りのデータを、RCプログラム112のビット列であるとして、RCプログラム制御部304に出力する。
また、伸長装置303は、GPP301から0x28のGP命令取得要求を受け付けたとする。このとき、伸長装置303は、0x28の上位8ビットとなる0x20〜0x2Fの記憶領域をGPP301に出力する。または、伸長装置303は、0x20〜0x2Fの記憶領域に含まれるGP命令を順に伸長していき、0x28の位置にあるGP命令をGPP301に出力してもよい。このように、アドレス位置を維持して圧縮GP命令が格納されているため、伸長装置303は、取得要求に対する命令が格納された位置を容易に特定することができる。
次に、図10〜図14を用いて、コンピュータシステム100が実行するフローチャートについて説明を行う。図10、図11では、それぞれ、GPP301が、RCプログラム指示命令と、RC実行指示命令を実行した場合のフローチャートを示している。図12では、GPP301から、命令の取得要求が発生した場合のフローチャートを示している。図13、図14では、それぞれ、データ作成装置102と伸長装置303の処理手順のフローチャートを示している。
図10は、RCプログラム指示処理手順の一例を示すフローチャートである。RCプログラム指示は、GPP301がRCプログラム指示命令を実行した場合の処理である。GPP301がRCプログラム指示命令を実行した場合、RCプログラム制御部304は、RCプログラム指示命令キュー313にRCプログラム指示命令を追加する(ステップS1001)。次に、RCプログラム制御部304は、データ作成装置102と伸長装置303の動作状態がともに終了状態か否かを判断する(ステップS1002)。どちらかの動作状態が終了状態でない場合(ステップS1002:No)、RCプログラム制御部304は、一定時間経過後、ステップS1002の処理を再び実行する。
どちらも動作状態が終了状態である場合(ステップS1002:Yes)、RCプログラム制御部304は、RCプログラム指示命令キュー313から、RCプログラム指示命令を取り出す(ステップS1003)。次に、RCプログラム制御部304は、データ作成装置102と伸長装置303とRCプログラムバッファ314とを初期化する(ステップS1004)。ステップS1004の処理は、具体的には、データ作成装置102は、RCプログラムの転送を終了していない状態に設定する。また、伸長装置303は、たとえば、終端情報を受け付けていない状態に設定する。また、RCプログラム制御部304は、RCプログラムバッファ314を、たとえば、すべて0埋めする。
続けて、RCプログラム制御部304は、伸長装置303が終端情報を受け付けたか否かを判断する(ステップS1005)。終端情報を受け付けていない場合(ステップS1005:No)、RCプログラム制御部304は、一定時間経過後、ステップS1005の処理を再び実行する。終端情報を受け付けた場合(ステップS1005:Yes)、RCプログラム制御部304は、RCプログラムバッファ314に空きがあるか否かを判断する(ステップS1006)。
空きがない場合(ステップS1006:No)、RCプログラム制御部304は、最も古いRCプログラムを破棄する(ステップS1007)。空きがある場合(ステップS1006:Yes)、RCプログラム制御部304は、RCプログラムをRCプログラムバッファ314に書き込む(ステップS1008)。次に、RCプログラム制御部304は、書き込んだRCプログラムをRCエンジン302に設定する(ステップS1009)。ステップS1009の実行終了後、RCプログラム制御部304は、RCプログラム指示処理を終了する。RCプログラム指示処理を実行することにより、RCプログラム制御部304は、RCプログラムを実行できる状態に設定することができる。
図11は、RC実行指示処理手順の一例を示すフローチャートである。RC実行指示処理は、GPP301がRC実行指示命令を実行した場合の処理である。GPP301がRC実行指示命令を実行した場合、RCプログラム制御部304は、該当のRCプログラムが実行可能か否かを判断する(ステップS1101)。実行可能でない場合(ステップS1101:No)、RCプログラム制御部304は、GPP301のパイプラインを停止させる(ステップS1102)。次に、RCプログラム制御部304は、残余のRCプログラムのDMA転送要求を、伸長装置303に指示する(ステップS1103)。
転送完了後、RCプログラム制御部304は、GPP301のパイプラインの停止を解除させる(ステップS1104)。停止の解除後、または実行可能である場合(ステップS1101:Yes)、RCプログラム制御部304は、RCエンジン302にRCプログラムを実行させる(ステップS1105)。ステップS1105の実行終了後、RCプログラム制御部304は、RCプログラム実行処理を終了する。RCプログラム実行処理を実行することにより、RCプログラム制御部304は、該当のRCプログラムをRCエンジン302に実行させることができる。
図12は、取得要求処理手順の一例を示すフローチャートである。取得要求処理は、GPP301が、GP命令を取得する時に実行する処理である。GPP301は、RCプログラム指示中か否かを判断する(ステップS1201)。RCプログラム指示中である場合(ステップS1201:Yes)、GPP301は、圧縮GP命令群とRCプログラムとのDMA転送要求を伸長装置303に通知する(ステップS1202)。RCプログラム指示中でない場合(ステップS1201:No)、GPP301は、GP命令のDMA転送要求を通知する(ステップS1203)。ステップS1202、またはステップS1203の処理実行後、GPP301は取得要求処理を終了する。取得要求処理を実行することにより、GPP301は、これから読み込むGP命令群とGP命令の実行により要求されるデータの取得要求を発行できる。
図13は、データ作成装置の処理手順の一例を示すフローチャートである。データ作成装置102は、動作状態を実行中状態に設定する(ステップS1301)。データ作成装置102は、いずれかのDMA転送要求を受け付けたか否かを判断する(ステップS1302)。圧縮GP命令群とRCプログラムとのDMA転送要求を受け付けた場合(ステップS1302:圧縮GP命令群とRCプログラム)、データ作成装置102は、結合データの圧縮フラグを有効に設定する(ステップS1303)。次に、データ作成装置102は、圧縮GP命令を取得する(ステップS1304)。
続けて、データ作成装置102は、RCプログラムの転送が終了したか否かを判断する(ステップS1305)。RCプログラムの転送が終了した場合(ステップS1305:Yes)、データ作成装置102は、圧縮GP命令と終端情報を結合する(ステップS1306)。RCプログラムの転送が終了していない場合(ステップS1305:No)、データ作成装置102は、RCプログラムのビット列の中から、圧縮GP命令のデータサイズからGP命令のサイズを減じたサイズ分のビット列を抽出する(ステップS1307)。次に、データ作成装置102は、圧縮GP命令と抽出したビット列を結合する(ステップS1308)。ステップS1306、またはステップS1308の実行後、データ作成装置102は、格納順にしたがって応答データを作成する(ステップS1309)。
また、GP命令のDMA転送要求を受け付けた場合(ステップS1302:GP命令)、データ作成装置102は、応答データの圧縮フラグを無効に設定する(ステップS1310)。次に、データ作成装置102は、応答データにGP命令を格納する(ステップS1311)。残余のRCプログラムのDMA転送要求を受け付けた場合(ステップS1302:残余のRCプログラム)、データ作成装置102は、RCプログラムのビット列の中から、抽出されていない残余のビット列を抽出する(ステップS1312)。続けて、データ作成装置102は、抽出したビット列を応答データに格納する(ステップS1313)。
ステップS1309、ステップS1311、またはステップS1313の実行終了後、データ作成装置102は、応答データを出力する(ステップS1314)。続けて、データ作成装置102は、要求されたDMA転送が終了したか否かを判断する(ステップS1315)。DMA転送が終了していない場合(ステップS1315:No)、データ作成装置102は、ステップS1302の処理に移行する。DMA転送が終了した場合(ステップS1315:Yes)、データ作成装置102は、動作状態を終了状態に設定する(ステップS1316)。ステップS1316の実行終了後、データ作成装置102は、処理を終了する。
また、応答データにRCプログラムのデータサイズを含めるときは、データ作成装置102は、ステップS1305の処理にて、RCプログラムの転送を開始するか否かを判断し、開始する場合、圧縮GP命令とRCプログラムのサイズを表すビット列とを結合する。図13のフローチャートにて示す処理により、データ作成装置102は、GP命令群の送信を阻害せずに、RCプログラムを送信することができる。
図14は、伸長装置の処理手順の一例を示すフローチャートである。伸長装置303は、動作状態を実行中状態に設定する(ステップS1401)。次に、伸長装置303は、応答データを受け付ける(ステップS1402)。続けて、伸長装置303は、応答データの圧縮フラグが有効か否かを判断する(ステップS1403)。圧縮フラグが有効である場合(ステップS1403:Yes)、伸長装置303は、応答データ内の圧縮GP命令を伸長する(ステップS1404)。次に、伸長装置303は、応答データ内の圧縮GP命令以降のビット列をRCプログラムの一部のビット列として抽出する(ステップS1405)。なお、ステップS1405の処理にて、伸長装置303は、応答データ内の圧縮GP命令以降のビット列に終端情報が含まれていた場合、終端情報以降の応答データ内の圧縮GP命令以降のビット列を破棄する。続けて、伸長装置303は、GP命令と一部のビット列とを出力する(ステップS1406)。
圧縮フラグが無効である場合(ステップS1403:No)、伸長装置303は、応答データを出力する(ステップS1407)。ステップS1406、またはステップS1407の実行終了後、伸長装置303は、DMA転送が終了したか否かを判断する(ステップS1408)。DMA転送が終了していない場合(ステップS1408:No)、伸長装置303は、ステップS1402の処理に移行する。DMA転送が終了している場合(ステップS1408:Yes)、伸長装置303は、動作状態を終了状態に設定する(ステップS1409)。ステップS1409の実行終了後、伸長装置303は、処理を終了する。
また、応答データにRCプログラムのデータサイズが含まれているときは、伸長装置303は、ステップS1405の1回目の処理にて、RCプログラムのデータサイズを取得する。次に、伸長装置303は、ステップS1405の2回目以降の処理にて、抽出したRCプログラムのビット列の合計のサイズを算出し、算出した値がRCプログラムのデータサイズとなった場合、応答データ内の圧縮GP命令以降のビット列を破棄する。図14のフローチャートにて示す処理により、伸長装置303は、圧縮GP命令とRCプログラムを分離して出力することができる。
図15は、本実施の形態にかかるコンピュータを用いたシステムの適用例を示す説明図である。図15において、ネットワーク210は、サーバ1501とクライアント1511〜クライアント1514とが通信可能なネットワークであり、たとえば、LAN、WAN、インターネット、携帯電話網などを含む。
クライアント1511はノート型PC(Personal Computer)である。クライアント1512はデスクトップ型PC、クライアント1513は携帯電話機である。携帯電話機として、クライアント1513は、スマートフォンであってもよいし、PHS(Personal Handyphone System)であってもよい。クライアント1514はタブレット型端末である。
図15のサーバ1501、クライアント1511〜クライアント1514が、実施の形態で説明したコンピュータシステムとなる。たとえば、サーバ1501は、データ作成装置102を有し、さらにサーバ1501内のCPUに、GPP301〜RCプログラム制御部304と、共有レジスタ311〜RCプログラムバッファ314を含んで、本実施の形態で示した動作を行う。
以上説明したように、データ作成装置102によれば、GP命令群とRCプログラムが要求された場合、GP命令と圧縮GP命令との差分サイズ分のデータを圧縮命令の後に埋め込んだビット列を、各GP命令の格納順にしたがって連結して出力する。これにより、データ作成装置102は、GP命令の送信を阻害せずにRCプログラムを送信できる。したがって、データ作成装置102は、RCプログラムを効率よく送信できるようになり、GPP301の実効パフォーマンスを向上させることができる。
また、データ作成装置102は、圧縮GP命令をROM201等に記憶している場合に、各々の圧縮GP命令に対応する各々のGP命令のデータサイズを記憶する記憶領域を参照して、圧縮GP命令のデータサイズとGP命令のデータサイズを取得してもよい。これにより、コンピュータシステム100は、GP命令を圧縮しておくことができ、データ量の削減を行うことができる。また、データ作成装置102は、圧縮GP命令を伸長しなくとも圧縮GP命令のデータサイズとGP命令のデータサイズを取得することができるため、伸長にかかる処理分、処理量を削減することができる。
また、データ作成装置102は、RCプログラムをすべて出力した場合、終端情報を付与してもよい。これにより、RCプログラムを受信する伸長装置303は、RCプログラムをすべて取得した状態になったことが判断できるようにできる。
また、データ作成装置102は、RCプログラムのサイズを表すビット列を出力した後に、RCプログラムを出力してもよい。これにより、RCプログラムを受信する伸長装置303は、RCプログラムをすべて取得した状態になったことが判断できるようにできる。
また、データ作成装置102は、GP命令群とRCプログラムとの取得要求に対する応答データに、RCプログラムすべてが送信できなかった後に、RCプログラムの取得要求を受け付けた場合、RCプログラムのうち残余のビット列を出力してもよい。これにより、データ作成装置102は、RCプログラム112を実行できる状態を担保することができる。
また、データ作成装置102は、所定数のGP命令ごとに圧縮された圧縮GP命令と、所定数のGP命令のデータサイズから所定数のGP命令ごとの圧縮命令のデータサイズを減じたサイズ分抽出されたRCプログラムのビット列と、を連結してもよい。所定数のGP命令ごとに圧縮された圧縮GP命令には、圧縮フラグを1つ付与すればよく、所定数分の圧縮フラグを付与しなくてよいため、所定数−1のビット分、データ量を減少することができる。
また、可逆圧縮を行うアルゴリズムは、データの規則性、冗長性を検出して、出現頻度の高いものに短い符号を、出現頻度の低いものに長い符号を与えることで、圧縮率を高くする方法をとっているものがある。したがって、データ作成装置102は、圧縮対象となるデータサイズが大きくなることにより、圧縮率が高くなる可能性が増え、より多くのRCプログラムを転送することができる。
圧縮対象となるデータサイズが大きくなると圧縮率が高くなる理由として、たとえば、命令長が32[ビット]のGP命令群のうち、AND命令が最頻出であり、AND命令が4箇所連続している箇所があったとする。1つのGP命令を1つの圧縮GP命令へ圧縮する場合、圧縮を行う装置は、1つのGP命令32[ビット]を1[ビット]の符号に置き換える。次に、4つのGP命令を1つの圧縮GP命令へ圧縮する場合、GP命令群を4つの命令ごとに分け、その中で、連続する4つのAND命令が最頻出となったとする。このとき、圧縮を行う装置は、32×4[ビット]を1[ビット]の符号に置き換える。このように、圧縮対象となるデータサイズが大きくなった場合、より大きいデータを短い符号に置き換えられる可能性が高まり、圧縮率が高くなる可能性が増える。
また、本実施の形態では、RC命令と、RCプログラムがGP命令のある範囲と対応するという性質を用いて、RCプログラム指示命令とRC実行指示命令の間のGP命令を圧縮して、圧縮により生まれた隙間にRCプログラムを充填している。これにより、GPP301やインストラクションキャッシュメモリ312を制御するシステムからのGP命令転送を阻害することなく、RCプログラムの転送を実現することができる。
なお、本実施の形態で説明したデータ作成方法は、予め用意されたプログラムをコンピュータで実行することにより実現してもよい。また、本データ作成プログラムは、ハードディスク、フレキシブルディスク、CD−ROM、MO、DVD等のコンピュータで読み取り可能な記録媒体に記録され、コンピュータによって記録媒体から読み出されることによって実行される。また本データ作成プログラムは、インターネット等のネットワークを介して配布してもよい。
また、本実施の形態で説明したデータ作成装置102と伸長装置303とは、スタンダードセルやストラクチャードASIC(Application Specific Integrated Circuit)などの特定用途向けIC(以下、単に「ASIC」と称す。)やFPGAなどのPLDによっても実現することができる。具体的には、たとえば、上述したデータ作成装置102の受付部701〜出力部705をHDL記述によって機能定義し、HDL記述を論理合成してASICやPLDに与えることにより、データ作成装置102を製造することができる。同様に、伸長装置303の送信部711〜出力部715、記憶領域720をHDL記述によって機能定義し、HDL記述を論理合成してASICやPLDに与えることにより、伸長装置303を製造することができる。