以下に添付図面を参照して、開示のエンディアン変換方法、およびシステムの実施の形態を詳細に説明する。
(実施の形態1の説明)
図1は、実施の形態1にかかるシステム100のエンディアン変換動作を示す説明図である。システム100は、CPU(Central Processing Unit)101と、GPU(Graphics Processing Unit)102と、RAM(Random Access Memory)103と、を含む。各部は、バス104で接続されている。また、CPU101とバス104は、エンディアン変換機構105によって接続されている。また、CPU101のエンディアンはビッグエンディアンであり、GPU102のエンディアンがリトルエンディアンであることを想定する。なお、CPU101と、RAM103については、図2で詳細に説明する。
続けて、CPU101が、CPU101で実行可能なロードモジュール111をロードする場合を想定する。なお、ロードモジュール111が実行されることで生成されるアプリケーションソフトウェア(以下、「アプリ」と称する)は、画像編集アプリであることを想定している。また、ロードモジュール111は、エンディアン変換設定112に対応づけられている。また、RAM103内のメモリ領域113は、アドレス0x00100000以降のメモリ内容を示している。
エンディアン変換設定112は、アドレス、サイズという2つのフィールドを含む。図1で示すエンディアン変換設定112は、アドレス0x00100000から始まる4[バイト]をエンディアン変換し、さらに、アドレス0x00100004から始まる2[バイト]をエンディアン変換するという指示が記載されている。
CPU101は、ロードモジュールによってアプリを起動すると、エンディアン変換設定112をエンディアン変換機構105に通知する。次に、アプリがGPU102に対して画像処理を実行する場合を想定する。CPU101とGPU102はエンディアンが異なるため、エンディアン変換処理が発生する。また、画像処理の引数となるデータは、0x00100000から始める8[バイト]に格納されていると想定する。
CPU101は、アプリによってアドレス0x00100000に対してライトアクセスを行う。書き込まれるデータは、0xFEDCBA9876543210である。エンディアン変換機構105は、ライトアクセスを検出し、エンディアン変換設定112に従ってデータ配置を変換する。
具体的には、エンディアン変換機構105は、0x00100000の0バイト目から3バイト目のデータをスワップする。これにより、0x00100000の0バイト目から3バイト目のデータは、0xFEDCBA98から、0x98BADCFEに変換される。また、エンディアン変換機構105は、0x00100000の4バイト目から5バイト目のデータをスワップする。これにより、0x00100000の4バイト目から5バイト目のデータは、0x7654から、0x5476に変換される。
以上の変換により、エンディアン変換機構105は、ライトアクセスのデータを0x98BADCFE54763210に変換して出力する。以後、GPU102は、メモリ領域113から画像処理の引数となるデータを読み出す。
このように、システム100は、プログラム起動時にエンディアン変換する範囲をCPU101の外部のエンディアン変換機構105に通知し、エンディアン変換機構105が指定された範囲についてエンディアン変換を行う。これにより、システム100は、システム100内の性能に悪影響を与えにくい箇所でエンディアン変換でき、また、バス104幅内の一部のアドレス範囲についてエンディアン変換を行うといった、複雑な変換も行える。
(システム100のハードウェア)
図2は、実施の形態1にかかるシステム100のハードウェアを示すブロック図である。図2において、システム100は、CPU101と、ROM(Read‐Only Memory)202と、RAM103と、を含む。また、システム100は、フラッシュROM203と、フラッシュROMコントローラ204と、フラッシュROM205と、を含む。また、システム100は、ユーザやその他の機器との入出力装置として、ディスプレイ206と、I/F(Interface)207と、キーボード208と、を含む。また、各部はバス104によってそれぞれ接続されている。なお、システム100は、図1で示したGPU102を含んでなくてもよく、GPU102の代わりに、DSP(Digital Signal Processor)を含んでいてもよい。
ここで、CPU101は、システム100の全体の制御を司る。また、CPU101は、少なくとも2つ以上のCPUを含むマルチコアプロセッサシステムであってもよい。また、マルチコアプロセッサシステムとは、コアが複数搭載されたプロセッサを含むコンピュータのシステムである。コアが複数搭載されていれば、複数のコアが搭載された単一のプロセッサでもよく、シングルコアのプロセッサが並列されているプロセッサ群でもよい。また、CPU101は、専用のキャッシュメモリ201を含む。
また、CPU101とバス104は、エンディアン変換機構105で接続されている。なお、システム100が複数のCPUを含む場合、各CPUが、それぞれのエンディアン変換機構105でバス104と接続されている。また、図2で示すシステム100は、CPU101とバス104の間にエンディアン変換機構105を配置しているが、たとえばLSI(Large Scale Integration)外部とのバスインターフェース等の位置にエンディアン変換機構105を配置してもよい。
ROM202は、ブートプログラムなどのプログラムを記憶している。RAM103は、CPU101のワークエリアとして使用される。フラッシュROM203は、読出し速度が高速なフラッシュROMであり、たとえば、NOR型フラッシュメモリである。フラッシュROM203は、OS(Operating System)などのシステムソフトウェアやアプリなどを記憶している。たとえば、OSを更新する場合、システム100は、I/F207によって新しいOSを受信し、フラッシュROM203に格納されている古いOSを、受信した新しいOSに更新する。
フラッシュROMコントローラ204は、CPU101の制御に従ってフラッシュROM205に対するデータのリード/ライトを制御する。フラッシュROM205は、データの保存、運搬を主に目的としたフラッシュROMであり、たとえば、NAND型フラッシュメモリである。フラッシュROM205は、フラッシュROMコントローラ204の制御で書き込まれたデータを記憶する。データの具体例としては、システム100を使用するユーザがI/F207を通して取得した画像データ、映像データなどや、また本実施の形態にかかるエンディアン変換方法を実行するプログラムなどを記憶してもよい。フラッシュROM205は、たとえば、メモリカード、SDカードなどを採用することができる。
ディスプレイ206は、カーソル、アイコンあるいはツールボックスを始め、文書、画像、機能情報などのデータを表示する。ディスプレイ206は、たとえば、TFT(Thin Film Transistor)液晶ディスプレイなどを採用することができる。
I/F207は、通信回線を通じてLAN(Local Area Network)、WAN(Wide Area Network)、インターネットなどのネットワーク209に接続され、ネットワーク209を介して他の装置に接続される。そして、I/F207は、ネットワーク209と内部のインターフェースを司り、外部装置からのデータの入出力を制御する。I/F207には、たとえばモデムやLANアダプタなどを採用することができる。
キーボード208は、数字、各種指示などの入力のためのキーを有し、データの入力を行う。また、キーボード208は、タッチパネル式の入力パッドやテンキーなどであってもよい。
(システム100の機能)
次に、システム100の機能について説明する。図3は、システム100の機能を示すブロック図である。システム100は、検出部311と、取得部312と、通知部313と、変換部314と、を含む。この制御部となる機能(検出部311〜通知部313)は、記憶装置に記憶されたプログラムをCPU101が実行することにより、その機能を実現する。記憶装置とは、具体的には、たとえば、図2に示したROM202、RAM103、フラッシュROM203、フラッシュROM205などである。また、システム100は、メインメモリ301にアクセス可能である。
また、システム100は、エンディアン変換設定303を含んだプログラム302を実行可能である。また、変換部314は、エンディアン変換機構105が実行することにより、その機能を実現する。なお、エンディアン変換設定303には、エンディアン変換対象のアドレス範囲が記載されている。アドレス範囲の指定方法としては、開始アドレスと終了アドレスの組み合わせであってもよいし、開始アドレスとサイズの組み合わせであってもよい。
メインメモリ301は、CPU101からアクセス可能な主記憶装置である。たとえば、メインメモリ301は、RAM103全体であったり、RAM103の一部であったりしてもよい。
検出部311は、エンディアン変換設定を含むプログラムが実行されることを検出する機能を有する。たとえば、検出部311は、エンディアン変換設定303を含むプログラム302が実行することを検出する。なお、検出されたことを示す情報は、CPU101のレジスタ、キャッシュメモリ、メインメモリ301などの記憶領域に記憶される。
取得部312は、検出部311によってプログラムが実行されることを検出した場合、プログラムのエンディアン変換設定を取得する機能を有する。たとえば、取得部312は、エンディアン変換設定303を取得する。なお、取得したエンディアン変換設定303は、CPU101のレジスタ、キャッシュメモリ、メインメモリ301などの記憶領域に記憶される。
通知部313は、取得されたエンディアン変換設定を、変換部314に通知する機能を有する。たとえば、通知部313は、エンディアン変換設定303を、変換部314に通知する。なお、通知を行ったことを示す情報は、CPU101のレジスタ、キャッシュメモリ、メインメモリ301などの記憶領域に記憶される。
変換部314は、通知されたエンディアン変換設定に基づいて、メインメモリ301のアドレスにアクセスするときに、メインメモリ301のアドレスによって指定されるデータをエンディアン変換する機能を有する。たとえば、エンディアン変換設定303に、アドレス0x00100004から2バイト分エンディアン変換するような命令が記載されていた場合を想定する。このとき、変換部314は、0x00100000〜0x0010000Fのアドレスにアクセスするときに、0x00100004と0x00100005のデータをスワップすることでエンディアン変換を行う。
このように、システム100は、CPU101とバス104間において、CPU101によるアクセスで指定されたアドレス範囲内のバイト列の順序を変換する変換部314を含み、プログラムがCPU101によって実行されることを検出する。続けて、システム100は、プログラムが検出された場合、プログラムに対応するバイト列の順序を変換するアドレス範囲をCPU101によって取得し、アドレス範囲をCPU101によって変換部314に通知する。
図4は、エンディアン変換機構105の内部を示す説明図である。エンディアン変換機構105は、エンディアン変換設定レジスタ401と、スワップ指示生成回路402と、ライト用スワップ回路403と、リード用スワップ回路404と、を含む。また、エンディアン変換機構105は、CPU101とのインターフェースとなるバスインターフェース(マスタ側)405と、バス104とのインターフェースとなるバスインターフェース(スレーブ側)406と、を含む。
エンディアン変換設定レジスタ401は、エンディアン変換の指示領域と、指示領域内における個別の変換設定内容を含むエンディアン変換設定テーブル408を記憶するレジスタである。エンディアン変換設定レジスタ401の詳細は、図5にて後述する。また、エンディアン変換設定テーブル408の元となるエンディアン変換設定情報の生成例は、図6にて後述する。
スワップ指示生成回路402は、バスアクセス発生時に、バスアクセスのアドレスとバスアクセスのサイズを元に、所定単位でのスワップ指示を生成する回路である。所定単位は、たとえばバイト単位である。具体的に、スワップ指示生成回路402は、エンディアン変換設定テーブル408を引いて得られる、バスアクセスサイズ数分の個別エンディアン変換設定に基づいて、スワップ指示を生成する。なお、スワップ指示生成回路402が生成するスワップ指示例は、図5にて後述する。
ライト用スワップ回路403は、スワップ指示生成回路402のスワップ指示情報に基づいて、バス104へのライトアクセス時のバスインターフェース(マスタ側)405から送信されたデータに対して、所定単位での並び替えを行う回路である。同様に、リード用スワップ回路404は、スワップ指示生成回路402のスワップ指示情報に基づいて、バス104へのリードアクセス時のバスインターフェース(スレーブ側)406から送信されたデータに対して、所定単位での並び替えを行う回路である。
また、バスインターフェース(マスタ側)405とバスインターフェース(スレーブ側)406は、データフォーマット407に従ってデータを送受信する。データフォーマット407は、アクセス種類、サイズ、アドレス、という3つのフィールドを含む。さらに、データフォーマットは、アクセス種類が取る値によって、ライトデータフィールド、またはリードデータフィールド、のいずれかのフィールドを含む。
アクセス種類フィールドには、送受信されるデータがリードアクセスによるデータか、またはライトアクセスによるデータかを示す識別子が格納される。たとえば、アクセス種類フィールドが“リード”であればリードアクセスによるデータを示し、アクセス種類フィールドが“ライト”であればライトアクセスによるデータを示す。サイズフィールドには、送受信されるデータのデータサイズが格納される。アドレスフィールドには、送受信されるデータの先頭アドレスが格納される。ライトデータフィールドには、ライトアクセス時に送信されるデータが格納される。リードデータフィールドには、リードアクセス時に受信するデータが格納される。
たとえば、図4の例では、CPU101が、アドレス0x00100000から始める16バイトに対するリードアクセスを発行した場合を想定している。この時、バスインターフェース(スレーブ側)406は、アクセス種類フィールドに“リード”、サイズフィールドに16[バイト]、アドレスフィールドに“0x0010000”、リードデータフィールドに読み込まれたデータが格納されたデータを送信する。
また、スワップ指示生成回路402は、データフォーマット407のサイズフィールドとアドレスフィールドを参照して、個別エンディアン変換設定を取得し、スワップ指示を生成する。また、ライト用スワップ回路403は、スワップ指示が存在する場合に、ライトデータフィールドに対してスワップを実行する。同様に、リード用スワップ回路404は、スワップ指示が存在する場合に、リードデータフィールドに対してスワップを実行する。
なお、エンディアン変換機構105は、バスインターフェース(マスタ側)405、バスインターフェース(スレーブ側)406のバス幅と同一のサイズで転送を行ってもよいし、バス幅以下のサイズで転送を行ってもよい。たとえば、エンディアン変換機構105は、サイズフィールドが8[バイト]となるデータであってもよい。
図5は、実施の形態1にかかるエンディアン変換設定レジスタ401の記憶内容の一例とスワップ指示の生成例を示す。エンディアン変換設定レジスタ401は、エンディアン変換設定テーブル408を記憶する。エンディアン変換設定テーブル408は、エンディアン変換領域テーブル501と、個別エンディアン変換設定テーブル502と、を含む。
エンディアン変換領域テーブル501は、有効フラグ、開始アドレス、終了アドレスという3つのフィールドを含む。有効フラグフィールドには、該当のレコードが有効であるか否かを示す値が格納される。たとえば、有効フラグフィールドが“1”であれば、該当のレコードが有効であることを示す。また、有効フラグフィールドが“0”であれば、該当のレコードが無効であることを示す。開始アドレスフィールドには、エンディアン変換の対象となる先頭アドレスが格納される。終了アドレスフィールドには、エンディアン変換の対象となる終了アドレスが格納される。
たとえば、図5に示すエンディアン変換領域テーブル501は、レコード501−1が有効であり、エンディアン変換の対象領域が、0x00100000〜0x001FFFFFであることを示している。なお、エンディアン変換領域テーブル501には、レコード501−1が登録されているが、複数のレコードが登録されていてもよい。
個別エンディアン変換設定テーブル502は、有効フラグ、アドレス、サイズという3つのフィールドを含む。有効フラグフィールドには、該当のレコードが有効であるか否かを示す値が格納される。アドレスフィールドには、スワップを開始する先頭アドレスが格納される。サイズフィールドには、スワップを行うバイト数が格納される。なお、個別エンディアン変換設定テーブル502のレコード1つ分を、1エントリと称する。
たとえば、図5に示す個別エンディアン変換設定テーブル502には、有効なレコード群として、エントリ502−1〜エントリ502−14が登録されている。エントリ502−1〜エントリ502−4は、アドレス0x00100000〜アドレス0x00100003から始まる1バイトの個別エンディアン変換設定を示す。また、エントリ502−5は、アドレス0x00100004から始まる2バイトの個別エンディアン変換設定を示す。さらに、エントリ502−6、エントリ502−7は、アドレス0x00100008、アドレス0x0010000Cから始まる4バイトの個別エンディアン変換設定を示す。
同様に、エントリ502−8〜エントリ502−11は、アドレス0x00100040〜アドレス0x00100043から始まる1バイトの個別エンディアン変換設定を示す。また、エントリ502−12は、アドレス0x00100044から始まる2バイトの個別エンディアン変換設定を示す。さらに、エントリ502−13、エントリ502−14は、アドレス0x00100048、アドレス0x0010004Cから始まる4バイトの個別エンディアン変換設定を示す。
また、スワップ指示生成回路402は、0x00100000から始まる16[バイト]のアクセスを検出する。以下の説明では、0x00100000を対象アドレスに設定する。スワップ指示生成回路402は、対象アドレスがエンディアン変換領域テーブル501の開始アドレスと終了アドレスからなるアドレス範囲内かを判断する。図5の例では範囲内であるため、続けて、スワップ指示生成回路402は、個別エンディアン変換設定テーブル502のレコード群から、開始アドレスからの16[バイト]分の個別エンディアン変換設定となるオフセット値とスワップサイズを取得する。なお、オフセット値は、16進数で表現されたオフセット値である。
取得された対象オフセットとスワップサイズは、対象アドレスに対応する個別エンディアン変換設定503にて図示する値となる。具体的には、オフセット値0〜オフセット値3でのスワップサイズが1となり、オフセット値4でのスワップサイズが2となり、オフセット値8、オフセット値Cでのスワップサイズが4となる。取得後、スワップ指示生成回路402は、バイト単位でのスワップ指示情報504を生成する。スワップ指示生成回路402は、生成されたスワップ指示情報504を、ライト用スワップ回路403、リード用スワップ回路404に通知する。
具体的に、スワップ指示情報504の指示内容は、オフセット値4のデータをオフセット値5のデータ位置に設定し、オフセット値5のデータを、オフセット値4のデータ位置に設定する。同様に、スワップ指示情報504の指示内容は、オフセット値8のデータを、オフセット値Bのデータ位置に設定し、オフセット値9のデータを、オフセット値Aのデータ位置に設定する。さらに、スワップ指示情報504の指示内容は、オフセット値Aのデータを、オフセット値9のデータ位置に設定し、オフセット値Bのデータを、オフセット値8のデータ位置に設定する。同様に、スワップ指示情報504の指示内容は、オフセット値C〜オフセット値Fを、オフセット値F〜オフセット値Cのデータ位置に設定する。
図6は、エンディアン変換設定情報の生成例を示す説明図である。エンディアン変換設定情報は、ロードモジュール生成時にコンパイラとリンカによって生成される。リンカは、ロードモジュール生成時に、プログラム内に存在するグローバル変数をメモリ空間に割り当てる。たとえば、矩形601内で示すメモリ空間上へのデータの配置情報として、リンカは、型がheader構造体であり、グローバル変数であるH1、H2を、それぞれ0x00100000、0x00100040をベースアドレスにして割り当てる。リンカは、割り当てられたベースアドレスを、データ配置情報602として生成する。
また、コンパイラは、オブジェクトファイル生成時に、矩形603で示すheader構造体の変換対象データ形式に基づいて、構造体の各メンバのベースアドレスからのオフセット値とサイズを解析し、データ形式解析結果604を生成する。具体的には、コンパイラは、header構造体の符号なし1バイトデータの配列であるメンバ変数attr[4]について、attr[0]がオフセット値0x0000、サイズ1であると解析する。同様に、コンパイラは、attr[1]がオフセット値0x0001、サイズ1であると解析し、attr[2]がオフセット値0x0002、サイズ1であると解析し、attr[3]がオフセット値0x0003、サイズ1であると解析する。
同様に、コンパイラは、符号なし2バイトデータであるメンバ変数typeがオフセット値0x0004、サイズ2であると解析する。また、コンパイラは、4バイトデータであるメンバ変数sizeがオフセット値0x0004、サイズ2であると解析し、4バイトデータであるメンバ変数optがオフセット値0x0004、サイズ2であると解析する。
リンカは、データ配置情報602とデータ形式解析結果604とに基づいて、エンディアン変換設定情報605を生成する。エンディアン変換設定情報605は、エンディアン変換領域情報606と、個別エンディアン変換設定情報607を含む。なお、エンディアン変換領域情報606と、個別エンディアン変換設定情報607は、エンディアン変換設定テーブル408内のエンディアン変換領域テーブル501と個別エンディアン変換設定テーブル502から、有効フラグフィールドを取り除いた情報である。したがって、エンディアン変換領域情報606と、個別エンディアン変換設定情報607の各フィールドの説明は省略する。
リンカは、エンディアン変換領域テーブル501の開始アドレスと終了アドレスを、データ配置情報602のベースアドレス群が全て含まれるように設定する。図6では、リンカは、開始アドレスと終了アドレスを連続した領域として、0x00100000〜0x001FFFFFを設定しているが、複数の領域を2レコード以上に分割して設定してもよい。次に、リンカは、個別エンディアン変換設定テーブル502のアドレスを、データ配置情報602のベースアドレスとデータ形式解析結果604のオフセット値とを加算した値に設定する。
このように、エンディアン変換設定情報605は、コンパイラまたはリンカによって生成される。また、エンディアン変換設定情報605は、アプリの設計者等により生成されてもよい。
図7は、エンディアン変換例を示す説明図である。図7では、リード用スワップ回路404によるエンディアン変換例を示す。CPU101は、バス104に対して、アドレスサイズ16[バイト]、アクセス先アドレス0x00100000であるリードアクセスを含んだバスアクセス情報701を送信する。バス104は、アクセス先アドレスのデータをメインメモリ301等から取得し、エンディアン変換機構105に通知する。エンディアン変換機構105は、バスインターフェース(スレーブ側)406から送信されたデータ702を、スワップ指示情報504に基づいて、バスインターフェース(マスタ側)405に送信されたデータ703に変換する。
具体的には、エンディアン変換機構105は、矩形603で示すheader構造体の変換対象データ形式に基づいた変換を行う。メンバ変数attr[4]が格納されたオフセット値0〜オフセット値3のデータについては、1バイトのデータであるため、エンディアン変換機構105は変換を行わない。
メンバ変数typeが格納されたオフセット値4、オフセット値5のデータについては、2バイトのデータであり、エンディアン変換機構105は、エンディアン変換する。同様に、メンバ変数sizeが格納されたオフセット値8〜オフセット値Bのデータと、メンバ変数optが格納されたオフセット値C〜オフセット値Fのデータについては、4バイトのデータであり、エンディアン変換機構105は、エンディアン変換する。なお、指示がないオフセット値6、オフセット値7については、1バイトのデータと同様に扱ってもよい。
以上より、システム100は、既に生成されているエンディアン変換設定と、エンディアン変換機構105により、プログラム実行中にエンディアン変換を行う。図8にて、プログラムビルド時の処理を示し、図9にて、ビルドされたプログラムの実行処理を示す。また、図10、図11にて、実行中のプログラムにてバスアクセスが発生した際の処理を示す。
図8は、プログラムビルド処理を示すフローチャートである。なお、プログラムビルド処理を実行する装置は、システム100であってもよいし、クロスコンパイラを有した他の装置であってもよい。図8の説明では、システム100内のCPU101がプログラムビルド処理を実行する場合を想定する。
CPU101は、コンパイラによりソースコードのコンパイルを実行する(ステップS801)。実行により、CPU101は、オブジェクトファイル851とデータ形式解析結果604を生成する。次に、CPU101は、生成されたオブジェクトファイル851と、他のソースコードのコンパイルによって生成されたオブジェクトファイル群852とを元にして、リンカによってリンクする(ステップS802)。実行により、CPU101は、ロードモジュール854とデータ配置情報602を生成する。
また、CPU101は、生成されたデータ形式解析結果604と設計者等によって生成されたデータ形式解析結果853とを元にして、エンディアン変換設定情報605を生成する(ステップS803)。
図9は、プログラム実行処理を示すフローチャートである。CPU101は、実行するロードモジュール854にエンディアン変換設定情報605が存在するか否かを判断する(ステップS901)。エンディアン変換設定情報が存在する場合(ステップS901:Yes)、CPU101は、エンディアン変換設定情報605をエンディアン変換機構105内のエンディアン変換設定レジスタ401に格納する(ステップS902)。格納後、またはエンディアン変換設定情報が存在しない場合(ステップS901:No)、CPU101は、ロードモジュール854をメインメモリ301にロードする(ステップS903)。ロード後、CPU101は、ロードしたプログラムを実行開始する(ステップS904)。
プログラムを実行開始後、CPU101は、プログラムが終了するか否かを判断する(ステップS905)。プログラムが終了する場合(ステップS905:Yes)、CPU101は、プログラムを終了する。プログラムが続行される場合(ステップS905:No)、CPU101は、プログラム実行の中で、バス104へアクセス要求を行う(ステップS906)。CPU101は、バス104からのアクセス要求に対応する応答を受けるまで待機する。
エンディアン変換機構105は、バスへのアクセス要求を検出すると、バスアクセス時処理を実行する(ステップS907)。バスアクセス時処理の詳細については、図10、図11にて後述する。エンディアン変換機構105によるバスアクセス時処理の実行により、アクセス要求に対応する応答がCPU101に出力される。CPU101は、バス104からアクセス応答を受け付け(ステップS908)、ステップS905の処理に移行する。
図10は、実施の形態1にかかるバスアクセス時処理を示すフローチャート(その1)である。エンディアン変換機構105は、バスアクセスの対象アドレスがエンディアン変換領域テーブル501のアドレス範囲内か否かを判断する(ステップS1001)。アドレス範囲内である場合(ステップS1001:Yes)、エンディアン変換機構105は、個別エンディアン変換設定テーブル502から対象アドレスに対応する個別エンディアン変換設定を取得する(ステップS1002)。
続けて、エンディアン変換機構105は、対象アドレスに対応する個別エンディアン変換設定が存在するか否かを判断する(ステップS1003)。対象アドレスに対応する個別エンディアン変換設定が存在する場合(ステップS1003:Yes)、エンディアン変換機構105は、取得した個別エンディアン変換設定に基づいてデータのスワップ指示情報を生成する(ステップS1004)。生成後、エンディアン変換機構105は、図11に示すステップS1101に移行する。
アドレス範囲外である場合(ステップS1001:No)、または対象アドレスに対応する個別エンディアン変換設定が存在しない場合(ステップS1003:No)、エンディアン変換機構105は、通常通りバスアクセスを実行する(ステップS1005)。実行後、エンディアン変換機構105は、バスアクセス時処理を終了する。
図11は、実施の形態1にかかるバスアクセス時処理を示すフローチャート(その2)である。エンディアン変換機構105は、バスアクセスのアクセス種類を判断する(ステップS1101)。アクセス種類がリードである場合(ステップS1101:リード)、エンディアン変換機構105は、リードアクセスを実行する(ステップS1102)。実行後、エンディアン変換機構105は、バスインターフェース(スレーブ側)406からデータが到着したか否かを判断する(ステップS1103)。
データが到着した場合(ステップS1103:Yes)、エンディアン変換機構105は、データスワップを実行する(ステップS1104)。実行後、エンディアン変換機構105は、スワップしたデータをバスインターフェース(マスタ側)405に送信し(ステップS1105)、続けて、到着したデータが最終データか否かを判断する(ステップS1106)。
到着したデータが最終データである場合(ステップS1106:Yes)、エンディアン変換機構105は、バスアクセス時処理を終了する。データが到着していない場合(ステップS1103:No)、または到着したデータが最終データでない場合(ステップS1106:No)、エンディアン変換機構105は、ステップS1103の処理に移行する。
アクセス種類がライトである場合(ステップS1101:ライト)、エンディアン変換機構105は、バスインターフェース(マスタ側)405からデータが到着したか否かを判断する(ステップS1107)。
データが到着した場合(ステップS1107:Yes)、エンディアン変換機構105は、データスワップを実行する(ステップS1108)。実行後、エンディアン変換機構105は、スワップしたデータをバスインターフェース(スレーブ側)406に送信し(ステップS1109)、続けて、到着したデータが最終データか否かを判断する(ステップS1110)。
到着したデータが最終データである場合(ステップS1110:Yes)、エンディアン変換機構105は、ライトアクセスを実行し(ステップS1111)、バスアクセス時処理を終了する。データが到着していない場合(ステップS1107:No)、または到着したデータが最終データでない場合(ステップS1110:No)、エンディアン変換機構105は、ステップS1107の処理に移行する。
以上説明したように、実施の形態1にかかるエンディアン変換方法、およびシステムによれば、プログラム起動時にエンディアン変換するアドレス範囲をバスに通知し、バスで指定された範囲についてエンディアン変換を行う。これにより、システムは、システム内の性能に影響を与えにくい箇所でエンディアン変換でき、バス幅内の一部のアドレス範囲についてエンディアン変換を行うといった、複雑な変換も行える。
また、実施の形態1にかかるシステムは、バスアクセスのレイテンシが、エンディアン変換機構が追加される分だけ伸びるが、以下の2点の理由により、システムの処理性能に与える影響が小さくなる。1点目の理由としては、バスアクセスの頻度は、CPUがキャッシュにアクセスする回数よりも少ないことが挙げられる。たとえば、キャッシュミスが10[%]であっても、キャッシュアクセス10回中1回だけバスアクセスが発生することになる。したがって、CPU内部でエンディアン変換を行うよりも、バスでエンディアン変換を行うことで、システムの処理性能に与える影響が小さくなる。また、2点目の理由としては、バスアクセスは通常バーストアクセスであるため、エンディアン変換にかかる時間を他の処理とオーバーラップして隠ぺいできることが挙げられる。
また、実施の形態1にかかるシステムは、エンディアン変換するアドレス範囲が格納されたエンディアン変換設定を、プログラムのソースコードをコンパイルするときに生成してもよい。これにより、システムは、エンディアン変換設定抜け等が発生せず、エンディアン変換を行う全てのアドレス範囲を網羅することができる。
また、実施の形態1にかかるエンディアン変換機構は、エンディアン変換の対象アドレスが、エンディアン変換領域に含まれ、かつ、個別エンディアン変換設定が存在する場合に、エンディアン変換を行ってもよい。これにより、エンディアン変換機構は、対象アドレスがエンディアン変換領域に含まれない場合、個別エンディアン変換設定が存在するか否かという分岐処理を行わなくてよい。
(実施の形態2の説明)
実施の形態1にかかるエンディアン変換機構105では、個別エンディアン変換設定全てが個別エンディアン変換設定テーブル502に登録されていた。実施の形態2にかかるシステム100は、個別エンディアン変換設定の一部を実施の形態2にかかるエンディアン変換機構1201内に登録し、他の個別エンディアン変換設定については、メインメモリ301に記憶する形態を取る。
図12は、実施の形態2にかかるエンディアン変換機構1201の内部を示す説明図である。エンディアン変換機構1201は、実施の形態1にかかるエンディアン変換機構105に含まれていたエンディアン変換設定レジスタ401の代わりに、エンディアン変換設定キャッシュ1202を含む。また、エンディアン変換機構1201は、個別エンディアン変換設定入れ替え制御回路1203、アクセス調停回路1204を含む。なお、エンディアン変換機構1201に含まれる他のハードウェアは、実施の形態1にかかるエンディアン変換機構105と同様の機能を有するため、説明を省略する。
また、実施の形態2にかかるメインメモリ301には、エンディアン変換設定テーブル1211が格納されている。また、エンディアン変換設定テーブル1211が格納される領域は、アドレス0x000F0000から始まる領域であることを想定している。メインメモリ301上に記憶されているエンディアン変換設定テーブル1211は、図6で示した、エンディアン変換領域情報606、個別エンディアン変換設定情報607が含まれる。
エンディアン変換設定キャッシュ1202は、エンディアン変換設定テーブルの一部を記憶するキャッシュメモリである。また、エンディアン変換設定キャッシュ1202は、エンディアン変換領域テーブル1205と個別エンディアン変換設定テーブル1206とを含む。
エンディアン変換領域テーブル1205は、エンディアン変換領域テーブル501に、さらに、エンディアン変換設定テーブル先頭アドレスフィールドを含んでいる。エンディアン変換設定テーブル先頭アドレスフィールドは、エンディアン変換設定キャッシュ1202に設定されているエンディアン変換設定テーブルがメインメモリ301での格納先となる先頭アドレスの値を格納している。たとえば、図12に示すエンディアン変換機構1201には、エンディアン変換設定テーブル1211が設定されているため、エンディアン変換設定情報先頭アドレスフィールドには、0x000F000が格納される。
個別エンディアン変換設定テーブル1206は、個別エンディアン変換設定テーブル502と同一のフィールドを有する。そのため、個別エンディアン変換設定テーブル1206の各フィールドの説明を省略する。また、個別エンディアン変換設定テーブル1206は、エントリが12まで登録可能であることを想定しており、エントリ502−1〜エントリ502−12が登録されている。エントリ502−13、エントリ502−14については、個別エンディアン変換設定テーブル1206に登録されておらず、エンディアン変換設定テーブル1211内に記憶されている。
個別エンディアン変換設定入れ替え制御回路1203は、個別エンディアン変換設定テーブル1206の入れ替えを制御する回路である。具体的には、個別エンディアン変換設定入れ替え制御回路1203は、メインメモリ301から1エントリ分の情報を取得し、個別エンディアン変換設定テーブル1206のレコードに書き込む。たとえば、エントリ502−13を個別エンディアン変換設定テーブル1206に登録する場合、個別エンディアン変換設定入れ替え制御回路1203は、個別エンディアン変換設定テーブル1206の1エントリを選択し、エントリ502−13で上書きする。
アクセス調停回路1204は、バスインターフェイス(スレーブ側)406によるバス104へのアクセス要求と、個別エンディアン変換設定入れ替え制御回路1203によるバス104へのアクセス要求と、を調停する回路である。たとえば、アクセス調停回路1204は、アクセス要求を記憶可能なバッファを有し、前述の両アクセス要求のうち、一方がアクセス中の間に、他方からアクセス要求があった場合、他方からのアクセス要求をバッファリングする。一方に対してアクセス応答を返却した後、アクセス調停回路1204は、他方のアクセス要求をバス104に通知する。
図12に示したエンディアン変換機構1201によって、システム100はエンディアン変換を行う。なお、実施の形態2にかかるプログラムビルド処理、プログラム実行処理については、実施の形態1にかかるプログラムビルド処理、プログラム実行処理と等しいため、説明を省略する。また、実施の形態2にかかるバスアクセス時処理(その2)は、実施の形態1にかかるバスアクセス時処理(その2)と等しいため、説明を省略する。
図13は、実施の形態2にかかるバスアクセス時処理を示すフローチャート(その1)である。エンディアン変換機構1201は、バスアクセスの対象アドレスがエンディアン変換領域テーブル1205のアドレス範囲内か否かを判断する(ステップS1301)。アドレス範囲内である場合(ステップS1301:Yes)、エンディアン変換機構1201は、個別エンディアン変換設定テーブル1206から対象アドレスに対応する個別エンディアン変換設定を取得する(ステップS1302)。
続けて、エンディアン変換機構1201は、対象アドレスに対応する個別エンディアン変換設定が存在するか否かを判断する(ステップS1303)。対象アドレスに対応する個別エンディアン変換設定が存在する場合(ステップS1303:Yes)、エンディアン変換機構1201は、取得した個別エンディアン変換設定に基づいてデータのスワップ指示情報を生成する(ステップS1304)。生成後、エンディアン変換機構1201は、図11に示したステップS1101に移行する。
対象アドレスに対応するエンディアン変換設定が存在しない場合(ステップS1303:No)、エンディアン変換機構105は、メインメモリ301上のエンディアン変換設定テーブル1211から対象アドレスに対応する個別エンディアン変換設定を取得する(ステップS1305)。なお、メインメモリ301上の個別エンディアン変換設定情報607は、エンディアン変換設定情報先頭アドレスフィールドに格納されたエンディアン変換設定情報に含まれるデータである。
続けて、エンディアン変換機構105は、対象アドレスに対応する個別エンディアン変換設定が存在するか否かを判断する(ステップS1306)。対象アドレスに対応する個別エンディアン変換設定が存在する場合(ステップS1306:Yes)、エンディアン変換機構1201は、個別エンディアン変換設定テーブル1206の1エントリを選択する(ステップS1307)。なお、エントリの選択方法は、空きエントリがあればそのまま空きエントリを選択する。空きエントリがない場合のエントリの選択方法は、LRU(Least Recently Used)、LFU(Least Frequently Used)等の置換アルゴリズムに従って、1エントリを選択する。
選択後、エンディアン変換機構1201は、対象アドレスに対応するエンディアン変換設定で、選択されたエントリを上書きする(ステップS1308)。上書き後、エンディアン変換機構1201は、ステップS1304の処理に移行する。
アドレス範囲外である場合(ステップS1301:No)、または対象アドレスに対応する個別エンディアン変換設定が存在しない場合(ステップS1306:No)、エンディアン変換機構105は、通常通りバスアクセスを実行する(ステップS1309)。実行後、エンディアン変換機構105は、バスアクセス時処理を終了する。
以上説明したように、実施の形態2にかかるエンディアン変換方法、およびシステムによれば、個別エンディアン変換設定の一部をエンディアン変換機構内に登録し、他の個別エンディアン変換設定については、メインメモリに記憶する。これにより、実施の形態2にかかるエンディアン変換方法は、個別エンディアン変換設定を記憶する記憶領域を抑えることができる。また、システムは、エンディアン変換を行うアドレスに時間的局所性が存在する場合、個別エンディアン設定の入れ替え頻度も少なくなるため、性能上のオーバーヘッドを削減することができる。なお、時間的局所性が存在するアドレスは、たとえば、スタティック変数が格納されたアドレス等が該当する。スタティック変数は、宣言された関数内でしか使用されないため、時間的局所性が発生する。
(実施の形態3の説明)
実施の形態1および実施の形態2にかかるシステム100では、プログラムロード時に、エンディアン変換設定をエンディアン変換機構105、1201に通知していた。実施の形態3にかかるシステム100は、プログラム実行時にエンディアン変換設定をエンディアン変換機構1401に通知する。また、実施の形態3にかかるエンディアン変換機構1401は、実施の形態2にかかるエンディアン変換機構1201が有していたエンディアン変換設定キャッシュ1202と同様のハードウェアであることを想定する。
図14は、実施の形態3にかかるシステム100のエンディアン変換動作を示す説明図である。ソフトウェア開発時において、ソフトウェア開発用装置は、コンパイラ1402の機能により、ソースコード1403を解析し、エンディアン変換が行われる登録対象アドレスが確保される箇所を抽出する。たとえば、コンパイラ1402は、ヒープ領域を確保するmalloc()関数、new演算子、または、ヒープ領域を再確保するrealloc()関数等を抽出する。同様に、コンパイラ1402は、ヒープ領域を解放するfree()関数、delete演算子等を抽出する。なお、登録対象アドレスは、ヒープ領域に記憶される変数や、グローバル変数が格納されるグローバルデータのアドレス範囲内となる。
抽出後、ソフトウェア開発用装置は、コンパイラ1402によって、エンディアン変換が行われる箇所より前に、エンディアン変換設定を通知するAPI(Application Programming Interface)呼び出しを追加する。エンディアン変換が行われる箇所より前とは、たとえば、登録対象アドレスが確保される箇所である。同様に、ソフトウェア開発用装置は、コンパイラ1402によって、エンディアン変換が不要となる箇所に、エンディアン変換設定の解除を行うAPI呼び出しを追加する。エンディアン変換が不要となる箇所とは、たとえば、登録対象アドレスが解放される箇所である。
API呼び出しが追加されたロードモジュール1404のバイナリコードのイメージは、コードイメージ1405となる。コードイメージ1405には、コード1406、コード1407が追加されている。コード1406は、malloc()関数の後に追加されているコードであり、エンディアン変換設定を通知するAPI“set_endian_mode(p、size、p、4、LE)”である。
なお、set_endian_modeの第1引数は、登録対象アドレスの先頭アドレスであり、エンディアン変換領域テーブル1205の開始アドレスフィールドに設定される。第2引数は、登録対象アドレスのサイズであり、第1引数と加算した結果が、エンディアン変換領域テーブル1205の終了アドレスフィールドに設定される。第3引数は、登録対象の個別エンディアン変換設定のアドレスであり、個別エンディアン変換設定テーブル1206のアドレスフィールドに設定される。第4引数は、登録対象の個別エンディアン変換設定のサイズであり、個別エンディアン変換設定テーブル1206のサイズフィールドに設定される。第5引数は、リトルエンディアン、またはビッグエンディアンのいずれかを示す識別子が格納される。
同様に、コード1407は、free()関数の後に追加されており、エンディアン変換設定の削除を通知するAPI“delete_endian_mode(p、size)”が追加されている。なお、delete_endian_modeの第1引数は、削除対象アドレスの先頭アドレスである。第2引数は、削除対象アドレスのサイズである。なお、プログラムの設計者が、ソースコード内に上記APIによる命令コードを追加してもよい。
CPU101は、ロードモジュール1404を実行し、プログラム実行中にエンディアン変換設定を通知するAPIが実行されると、エンディアン変換設定情報をエンディアン変換機構1401に通知する。通知を受けたエンディアン変換機構1401は、エンディアン変換設定キャッシュ1202にエンディアン変換設定情報を登録する。なお、システム100は、RAM103のアドレス空間に機器のアドレス空間が共存するメモリマップドI/Oの形態を想定している。したがって、CPU101は、エンディアン変換設定キャッシュ1202に割り当てられたアドレスにアクセスすることが可能である。なお、エンディアン変換設定情報登録処理については、図16にて後述する。
また、CPU101は、プログラム実行中にエンディアン変換設定の削除を通知するAPIが実行されると、エンディアン変換設定情報の削除をエンディアン変換機構1401に通知する。なお、エンディアン変換設定情報削除処理については、図17にて後述する。
このように、エンディアン変換機構105は、set_endian_mode()によって設定されたアドレスに対して、CPU101からのバスアクセスが行われるタイミングでエンディアン変換を行うことができる。
図15は、エンディアン変換設定の登録対象が構造体の場合におけるAPIの追加例を示す説明図である。ソースコード1501には、header構造体の定義情報1502が含まれ、header構造体を型として、ヒープ領域に確保される変数が定義されている。ソフトウェア開発用装置は、コンパイラ1402によって、ソースコード1501をコンパイルし、ロードモジュール1503を生成する。API呼び出しが追加されたロードモジュール1503のバイナリコードのイメージは、コードイメージ1504となる。コードイメージ1504には、コード1505、コード1506が追加されている。
コード1505は、set_endian_mode()が、header構造体で定義されているメンバごとに追加されている。たとえば、コード1505の先頭には、“set_endian_mode(h、sizeof(struct header)、&h−>attr[0]、1、LE)”が追加されている。
次に、各引数の説明を行う。第1引数には、登録対象アドレスの先頭アドレスが設定されている。第2引数には、登録対象アドレスのサイズとなる、header構造体のサイズが設定されている。第3引数には、登録対象の個別エンディアン変換設定のアドレスである、h−>attr[0]のアドレスが設定されている。第4引数には、登録対象の個別エンディアン変換設定のサイズである、h−>attr[0]のサイズとなる1が設定されている。
同様に、2行目〜4行目におけるset_endian_mode()は、h−>attr[1]〜h−>attr[3]が登録対象の個別エンディアン変換設定として追加されている。さらに、5行目〜7行目におけるset_endian_mode()は、h−>type、h−>size、h−>optが登録対象の個別エンディアン変換設定として追加されている。また、コード1506は、delete_endian_mode()が追加されている。削除に関しては、図15で説明した処理と同等であるため、説明を省略する。
図16は、エンディアン変換設定情報登録処理を示すフローチャートである。エンディアン変換機構1401は、登録対象アドレスがグローバルデータのアドレス範囲内か否かを判断する(ステップS1601)。アドレス範囲内である場合(ステップS1601:Yes)、エンディアン変換機構1401は、メインメモリ301上のエンディアン変換設定テーブル1211から登録対象アドレスに対応する個別エンディアン変換設定を取得する(ステップS1602)。
続けて、エンディアン変換機構1401は、登録対象アドレスに対応する個別エンディアン変換設定が存在するか否かを判断する(ステップS1603)。個別エンディアン変換設定が存在しない場合(ステップS1603:No)、エンディアン変換機構1401は、メインメモリ301上のエンディアン変換設定の空きエントリを探索する(ステップS1604)。探索後、エンディアン変換機構1401は、空きエントリが存在するか否かを判断する(ステップS1605)。
空きエントリが存在する場合(ステップS1605:Yes)、エンディアン変換機構1401は、空きエントリを有効に設定する(ステップS1606)。続けて、エンディアン変換機構1401は、登録対象の個別エンディアン変換設定のアドレス、サイズを、個別エンディアン変換設定情報のうち有効に設定したエントリのアドレスフィールド、サイズフィールドに設定する(ステップS1607)。設定後、エンディアン変換機構1401は、個別エンディアン変換設定テーブル1206の1エントリを選択する(ステップS1608)。なお、ステップS1608におけるエントリの選択方法は、ステップS1307にて記述した方法でよい。
選択後、エンディアン変換機構1401は、選択したエントリを有効に設定する(ステップS1609)。設定後、エンディアン変換機構1401は、登録対象の個別エンディアン変換設定のアドレス、サイズを、選択したエントリのアドレスフィールド、サイズフィールドに設定し(ステップS1610)、エンディアン変換設定情報登録処理を終了する。
アドレス範囲内でない場合(ステップS1601:No)、エンディアン変換機構1401は、エラーを出力し(ステップS1611)、エンディアン変換設定情報登録処理を終了する。なお、エラーの出力先は、CPU101でもよいし、エンディアン変換機構1401内のステータスレジスタ等であってもよい。
また、空きエントリが存在しない場合(ステップS1605:No)、または個別エンディアン変換設定が存在する場合(ステップS1603:Yes)、エンディアン変換機構1401は、ステップS1611の処理に移行する。
図17は、エンディアン変換設定情報削除処理を示すフローチャートである。エンディアン変換機構1401は、削除対象アドレスがグローバルデータのアドレス範囲内か否かを判断する(ステップS1701)。アドレス範囲内である場合(ステップS1701:Yes)、エンディアン変換機構1401は、メインメモリ301上のエンディアン変換設定テーブル1211から削除対象アドレスに対応する個別エンディアン変換設定を取得する(ステップS1702)。
続けて、エンディアン変換機構1401は、削除対象アドレスに対応する個別エンディアン変換設定が存在するか否かを判断する(ステップS1703)。対応する個別エンディアン変換設定が存在する場合(ステップS1703:Yes)、エンディアン変換機構1401は、取得した個別エンディアン変換設定を無効化する(ステップS1704)。無効化後、エンディアン変換機構1401は、個別エンディアン変換設定テーブル1206から削除対象アドレスに対応する個別エンディアン変換設定を取得する(ステップS1705)。
続けて、エンディアン変換機構1401は、削除対象アドレスに対応する個別エンディアン変換設定が存在するか否かを判断する(ステップS1706)。削除対象アドレスに対応する個別エンディアン変換設定が存在する場合(ステップS1706:Yes)、エンディアン変換機構1401は、取得した個別エンディアン変換設定を無効化し(ステップS1707)、エンディアン変換設定情報削除処理を終了する。
また、削除対象アドレスに対応する個別エンディアン変換設定が存在しない場合(ステップS1706:No)、エンディアン変換機構1401は、エンディアン変換設定情報削除処理を終了する。アドレス範囲内でない場合(ステップS1701:No)、または対応する個別エンディアン変換設定が存在しない場合(ステップS1703:No)、エンディアン変換機構1401は、エラーを出力する(ステップS1708)。出力後、エンディアン変換機構1401は、エンディアン変換設定情報削除処理を終了する。
以上説明したように、実施の形態3にかかるエンディアン変換方法、およびシステムによれば、実行中にグローバルデータを確保する場合に個別エンディアン変換設定を登録し、グローバルデータを解放する際に個別エンディアン変換設定を削除する。このように、実施の形態3にかかるエンディアン変換機構は、確保されたグローバルデータに対応する個別エンディアン変換設定のみ有していればよくなる。したがって、実施の形態3にかかるエンディアン変換機構は、実施の形態2にかかるエンディアン変換機構と比較して、個別エンディアン変換設定テーブルのサイズをより小さくすることができる。
(実施の形態4の説明)
実施の形態1〜実施の形態3では、エンディアン変換設定を行うアドレス全てが、個別エンディアン変換設定を有していることを前提としていた。実施の形態4では、配列などの繰り返し構造を有するデータに対応したエンディアン変換機構105の説明を行う。
図18は、実施の形態4にかかるシステム100のエンディアン変換動作を示す説明図である。リンカは、ロードモジュール生成時に、プログラム内に存在するグローバル変数となる配列をメモリ空間に割り当てる。たとえば、矩形1801内で示すメモリ空間上へのデータの配置情報として、リンカは、型が矩形1803で示すheader構造体であり、グローバル変数であるH[16]を、0x00100000をベースアドレスにして割り当てる。
また、Hの各要素として、H[0]が0x00100000に割り当てられ、H[1]が0x00100040に割り当てられ、H[2]が0x00100080に割り当てられ、H[3]が0x001000C0に割り当てられる。以下、H[4]〜H[15]まで、一つの要素サイズが0x40となるように、各要素が割り当てられる。なお、最後の要素となるH[15]が0x001003FFに割り当てられる。また、一つの要素サイズとなった0x40は、header構造体のサイズとなる。このようなデータの配置情報より、リンカは、エンディアン変換領域情報1802を生成する。
また、コンパイラは、オブジェクトファイル生成時に、矩形1803で示すheader構造体の変換対象データ形式に基づいて、構造体の各メンバのベースアドレスからのオフセット値とサイズを解析し、1要素分のデータ形式解析結果1804を生成する。なお、1要素分のデータ形式解析結果1804は、実施の形態1にかかるデータ形式解析結果604と等しい情報であるので、説明を省略する。リンカは、1要素分のデータ形式解析結果1804をそのまま個別エンディアン変換設定情報1805に設定し、エンディアン変換領域情報1802と個別エンディアン変換設定情報1805とをあわせて、エンディアン変換設定情報1806に設定する。
エンディアン変換領域情報1802は、実施の形態1におけるエンディアン変換領域情報606から、さらにマスクフィールドを含む情報である。マスクフィールドは、対象アドレスから、1要素分のデータ形式解析結果1804のオフセット値を比較するためのマスク値である。たとえば、対象アドレスが0x00100044の場合、対象アドレスは、H[1].typeのデータを記憶している。このとき、マスク結果が0x00100044&(0x003F)=0x0004となるため、マスク結果は1要素分のデータ形式解析結果1804のオフセット値0x0004と一致する。
次に、実施の形態4にかかるエンディアン変換機構105の説明を行う。実施の形態4にかかるエンディアン変換機構105は、実施の形態1にかかるエンディアン変換機構105に含まれるエンディアン変換設定レジスタ401の記憶内容と、スワップ指示生成回路402の機能と、を除くハードウェア、機能が全て等しい。したがって、エンディアン変換設定レジスタ401とスワップ指示生成回路402以外の説明を省略する。図19では、実施の形態4にかかるエンディアン変換機構105に含まれるエンディアン変換設定レジスタ1901とスワップ指示生成回路1902について説明を行う。
図19は、実施の形態4にかかるエンディアン変換設定レジスタ1901の記憶内容の一例を示す説明図である。エンディアン変換設定レジスタ1901は、エンディアン変換設定テーブル1903を記憶する。なお、図19では、エンディアン変換設定レジスタ1901内にエンディアン変換設定テーブル1903#0とエンディアン変換設定テーブル1903#1を含む。エンディアン変換設定テーブル1903#0、#1は、エンディアン変換領域テーブル1904#0、#1と、個別エンディアン変換設定テーブル1905#0、#1と、を含む。
エンディアン変換領域テーブル1904は、実施の形態1にかかるエンディアン変換領域テーブル501が含むフィールド群に追加して、マスクフィールドを含む。マスクフィードに格納される内容は、エンディアン変換領域情報1802と等しいため、説明を省略する。
個別エンディアン変換設定テーブル1905は、実施の形態1にかかる個別エンディアン変換設定テーブル502のアドレスフィールドが、オフセット値フィールドに置き換わったテーブルである。オフセット値フィールドに格納される内容は、データ形式解析結果1804のオフセット値と等しいため、説明を省略する。
スワップ指示生成回路1902は、データフォーマット407のアドレスフィールドをエンディアン変換領域テーブル1904のマスクフィールドでマスクする。続けて、スワップ指示生成回路1902は、マスクして得られた値と、個別エンディアン変換設定テーブル1905のオフセット値フィールドを比較して、個別エンディアン変換設定を取得する。
なお、実施の形態4にかかるバスアクセス時処理は、ステップS1002にて、「個別エンディアン変換設定テーブル502から対象アドレスをマスクフィールドにてマスクしたアドレスに対応する個別エンディアン変換設定を取得」することに置き換える。他の処理は全て実施の形態1にかかるバスアクセス時処理と等しいため、説明を省略する。
以上説明したように、実施の形態4にかかるエンディアン変換方法、およびシステムによれば、変換対象アドレスをマスクし、オフセット値と一致した場合に、エンディアン変換を行う。これにより、実施の形態4にかかるシステムは、配列などの繰り返し構造を有するデータに対して、少ない個別エンディアン変換設定で対応することができる。
たとえば、CPUがGPUに3D処理を依頼する際に、頂点データの配列を転送することを想定する。このような場合、実施の形態1〜実施の形態3におけるエンディアン変換機構では、確保された頂点データ全てに対する個別エンディアン変換設定を登録しなければならない。しかし、実施の形態4におけるエンディアン変換機構は、1要素分の個別エンディアン変換設定で対応することができる。
なお、本実施の形態で説明したエンディアン変換方法は、予め用意されたプログラムをパーソナル・コンピュータやワークステーション等のコンピュータで実行することにより実現することができる。本エンディアン変換方法を実行するプログラムは、ハードディスク、フレキシブルディスク、CD−ROM、MO、DVD等のコンピュータで読み取り可能な記録媒体に記録され、コンピュータによって記録媒体から読み出されることによって実行される。また本エンディアン変換方法を実行するプログラムは、インターネット等のネットワークを介して配布してもよい。