JPWO2012127590A1 - エンディアン変換方法、およびシステム - Google Patents

エンディアン変換方法、およびシステム Download PDF

Info

Publication number
JPWO2012127590A1
JPWO2012127590A1 JP2013505650A JP2013505650A JPWO2012127590A1 JP WO2012127590 A1 JPWO2012127590 A1 JP WO2012127590A1 JP 2013505650 A JP2013505650 A JP 2013505650A JP 2013505650 A JP2013505650 A JP 2013505650A JP WO2012127590 A1 JPWO2012127590 A1 JP WO2012127590A1
Authority
JP
Japan
Prior art keywords
endian conversion
address
endian
data
conversion setting
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.)
Granted
Application number
JP2013505650A
Other languages
English (en)
Other versions
JP5733385B2 (ja
Inventor
晶人 片岡
晶人 片岡
浩一郎 山下
浩一郎 山下
尚記 大舘
尚記 大舘
鈴木 貴久
貴久 鈴木
宏真 山内
宏真 山内
康志 栗原
康志 栗原
俊也 大友
俊也 大友
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Fujitsu Ltd
Original Assignee
Fujitsu Ltd
Priority date (The priority date 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 date listed.)
Filing date
Publication date
Application filed by Fujitsu Ltd filed Critical Fujitsu Ltd
Publication of JPWO2012127590A1 publication Critical patent/JPWO2012127590A1/ja
Application granted granted Critical
Publication of JP5733385B2 publication Critical patent/JP5733385B2/ja
Expired - Fee Related legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F12/00Accessing, addressing or allocating within memory systems or architectures
    • G06F12/02Addressing or allocation; Relocation
    • G06F12/06Addressing a physical block of locations, e.g. base addressing, module addressing, memory dedication
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F7/00Methods or arrangements for processing data by operating upon the order or content of the data handled
    • G06F7/76Arrangements for rearranging, permuting or selecting data according to predetermined rules, independently of the content of the data
    • G06F7/768Data position reversal, e.g. bit reversal, byte swapping
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2213/00Indexing scheme relating to interconnection of, or transfer of information or other signals between, memories, input/output devices or central processing units
    • G06F2213/0038System on Chip

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Memory System Of A Hierarchy Structure (AREA)

Abstract

システム内の処理性能に影響を与えずにエンディアン変換し、かつ複雑なデータ構造を有するエンディアン変換を実行する。CPU(101)が、バイトオーダーの異なるGPU(102)に対してデータ転送を行う場合を想定する。CPU(101)が、ロードモジュール(111)をロードし、プログラムが実行されることを検出する。検出後、CPU(101)は、エンディアン変換設定(112)を取得し、エンディアン変換機構(105)に通知する。CPU(101)からバス(104)へのアクセスを検出したエンディアン変換機構(105)は、エンディアン変換設定(112)に基づいてエンディアン変換を行う。

Description

本発明は、エンディアンを変換するエンディアン変換方法、およびシステムに関する。
従来から、プロセッサが複数バイトを扱う場合に、プロセッサやデータフォーマットの仕様として、データのバイト単位の並べ方であるバイトオーダーが規定されている。バイトオーダーは、大別して、リトルエンディアンとビッグエンディアンが存在する。リトルエンディアンは、最下位のバイトから順番に格納する並べ方である。ビッグエンディアンは、最上位のバイトから順番に格納する並べ方である。
ここで、プロセッサのバイトオーダーの仕様と、データフォーマットの仕様とが異なる場合、プロセッサは、該当データの処理にあたって、データのバイト単位での並び替えを行うことになる。前述のバイト単位での並び替えをエンディアン変換と称する。
たとえば、自装置と異なるバイトオーダーとなる装置に対してデータを送受信する場合、ソフトウェアがデータをスワップした後に送信する、または、受信してきたデータに対してスワップしてからデータを読み込むといった技術が開示されている(以下、従来技術1と称する)。
また、たとえば、エンディアン変換を行う技術として、プロセッサ内部にてエンディアン変換を行う技術が開示されている(たとえば、下記特許文献1、2を参照。)。また、他のハードウェアでエンディアン変換を行う技術として、バスにてスワップ回路を有し、エンディアン変換を行う技術が開示されている(たとえば、下記特許文献3を参照。)。
特開平8−278918号公報 特開2007−34680号公報 特開2000−305892号公報
しかしながら、上述した従来技術において、従来技術1にかかる技術では、ソフトウェアによる変換であるため、処理性能が低下するという問題があった。また、特許文献1、2にかかる技術では、ハードウェアで行えるため、高速に処理可能ではあるが、プロセッサは高速で動作しており、さらにエンディアン変換機構を追加する場合、プロセッサの処理性能を維持するのが困難であるという問題があった。また、特許文献3にかかる技術では、バス幅全体のエンディアン変換を行うことはできるが、バス幅内の一部のアドレス範囲についてエンディアン変換を行うといった、複雑なデータ構造を有するエンディアン変換を実行することが困難であった。
本発明は、上述した従来技術による問題点を解消するため、システム内の処理性能に影響を与えずにエンディアン変換し、かつ複雑なデータ構造を有するエンディアン変換を実行できるエンディアン変換方法、およびシステムを提供することを目的とする。
上述した課題を解決し、目的を達成するため、本発明の一側面によれば、CPUが、エンディアン変換設定を含むプログラムを実行し、エンディアン変換設定に含まれるメインメモリのアドレスにアクセスするときに、メインメモリのアドレスによって指定されるデータをエンディアン変換するエンディアン変換方法、およびシステムが提案される。
本発明の一側面によれば、システム内の処理性能に影響を与えずにエンディアン変換し、かつ複雑なデータ構造を有するエンディアン変換を実行できるという効果を奏する。
図1は、実施の形態1にかかるシステム100のエンディアン変換動作を示す説明図である。 図2は、実施の形態1にかかるシステム100のハードウェアを示すブロック図である。 図3は、システム100の機能を示すブロック図である。 図4は、エンディアン変換機構105の内部を示す説明図である。 図5は、実施の形態1にかかるエンディアン変換設定レジスタ401の記憶内容の一例とスワップ指示の生成例を示す。 図6は、エンディアン変換設定情報の生成例を示す説明図である。 図7は、エンディアン変換例を示す説明図である。 図8は、プログラムビルド処理を示すフローチャートである。 図9は、プログラム実行処理を示すフローチャートである。 図10は、実施の形態1にかかるバスアクセス時処理を示すフローチャート(その1)である。 図11は、実施の形態1にかかるバスアクセス時処理を示すフローチャート(その2)である。 図12は、実施の形態2にかかるエンディアン変換機構1201の内部を示す説明図である。 図13は、実施の形態2にかかるバスアクセス時処理を示すフローチャート(その1)である。 図14は、実施の形態3にかかるシステム100のエンディアン変換動作を示す説明図である。 図15は、エンディアン変換設定の登録対象が構造体の場合におけるAPIの追加例を示す説明図である。 図16は、エンディアン変換設定情報登録処理を示すフローチャートである。 図17は、エンディアン変換設定情報削除処理を示すフローチャートである。 図18は、実施の形態4にかかるシステム100のエンディアン変換動作を示す説明図である。 図19は、実施の形態4にかかるエンディアン変換設定レジスタ1901の記憶内容の一例を示す説明図である。
以下に添付図面を参照して、開示のエンディアン変換方法、およびシステムの実施の形態を詳細に説明する。
(実施の形態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等のコンピュータで読み取り可能な記録媒体に記録され、コンピュータによって記録媒体から読み出されることによって実行される。また本エンディアン変換方法を実行するプログラムは、インターネット等のネットワークを介して配布してもよい。
101 CPU
104 バス
105 エンディアン変換機構
207 I/F
301 メインメモリ
302 プログラム
303 エンディアン変換設定
311 検出部
312 取得部
313 通知部
314 変換部

Claims (12)

  1. CPUが、
    エンディアン変換設定を含むプログラムを実行し、
    前記エンディアン変換設定に含まれるメインメモリのアドレスにアクセスするときに、前記メインメモリのアドレスによって指定されるデータをエンディアン変換すること
    を特徴とするエンディアン変換方法。
  2. 前記エンディアン変換設定は、前記プログラムのソースコードをコンパイルするときに生成されること
    を特徴とする請求項1に記載のエンディアン変換方法。
  3. 前記プログラムは、前記アドレスへのアクセス終了時に前記エンディアン変換設定を削除するためのエンディアン変換削除通知を含むこと
    を特徴とする請求項1または請求項2に記載のエンディアン変換方法。
  4. 前記エンディアン変換設定に含まれるアドレスと前記メインメモリのアドレスの中でマスクによって指定されるアドレス部分とを比較し、比較結果に基づいて前記メインメモリのアドレスによって指定されるデータをエンディアン変換すること
    を特徴とする請求項1乃至請求項3の何れか一に記載のエンディアン変換方法。
  5. プログラムを実行するCPUとアクセス可能なエンディアン変換機構が、
    アクセスするメインメモリのアドレスがエンディアン変換領域に含まれるか否か、および、前記メインメモリのアドレスにエンディアン変換設定が存在しているか否かを判定し、
    前記判定結果に基づいて前記アドレスによって指定されるデータをエンディアン変換すること
    を特徴とするエンディアン変換方法。
  6. 前記エンディアン変換機構は、キャッシュメモリにおいて前記アドレスがエンディアン変換領域に含まれるとともに前記アドレスに前記エンディアン変換設定が存在しないことが示されるとき、前記メインメモリにおいて前記アドレスに前記エンディアン変換設定が存在しているか否かを判定すること
    を特徴とする請求項5に記載のエンディアン変換方法。
  7. 前記アドレスがエンディアン変換領域に含まれるか否かについての情報は、前記プログラムのソースコードをコンパイルするときに生成されること
    を特徴とする請求項5または請求項6に記載のエンディアン変換方法。
  8. 前記アドレスに対応するデータが処理されるとき、前記アドレスに対してエンディアン変換設定が取得されること
    を特徴とする請求項5乃至請求項7の何れか一に記載のエンディアン変換方法。
  9. プログラムを実行するCPUと、
    メインメモリと、
    前記メインメモリのアドレスがアクセスされるときに、前記メインメモリのアドレスがエンディアン変換されるデータのアドレスに対応する場合、スワップ指示を生成する生成回路と、
    前記スワップ指示に基づいて前記データをエンディアン変換するエンディアン変換回路と
    を含むことを特徴とするシステム。
  10. 前記生成回路は、前記プログラムに含まれるエンディアン変換設定によって指定されるメインメモリのアドレスに基づいて前記スワップ指示を生成すること
    を特徴とする請求項9に記載のシステム。
  11. 前記生成回路は、前記メインメモリのアドレスがエンディアン変換領域に含まれており、前記メインメモリのアドレスにエンディアン変換設定が存在している場合に前記スワップ指示を生成すること
    を特徴とする請求項9に記載のシステム。
  12. 前記スワップ指示に基づいて前記データを所定単位で並び替えるスワップ回路を含むこと
    を特徴とする請求項9乃至請求項11の何れか一に記載のシステム。
JP2013505650A 2011-03-18 2011-03-18 エンディアン変換方法、およびシステム Expired - Fee Related JP5733385B2 (ja)

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
PCT/JP2011/056660 WO2012127590A1 (ja) 2011-03-18 2011-03-18 エンディアン変換方法、およびシステム

Publications (2)

Publication Number Publication Date
JPWO2012127590A1 true JPWO2012127590A1 (ja) 2014-07-24
JP5733385B2 JP5733385B2 (ja) 2015-06-10

Family

ID=46878787

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2013505650A Expired - Fee Related JP5733385B2 (ja) 2011-03-18 2011-03-18 エンディアン変換方法、およびシステム

Country Status (3)

Country Link
US (1) US9448931B2 (ja)
JP (1) JP5733385B2 (ja)
WO (1) WO2012127590A1 (ja)

Families Citing this family (10)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20160217197A1 (en) * 2015-01-23 2016-07-28 Honeywell International, Inc. System and method for endian correction of complex data structures in heterogeneous systems
US10248463B2 (en) 2015-02-13 2019-04-02 Honeywell International Inc. Apparatus and method for managing a plurality of threads in an operating system
JP6540458B2 (ja) * 2015-10-30 2019-07-10 セイコーエプソン株式会社 画像処理方法、画像処理装置、および印刷システム
US10069949B2 (en) 2016-10-14 2018-09-04 Honeywell International Inc. System and method for enabling detection of messages having previously transited network devices in support of loop detection
US10387077B2 (en) * 2016-11-23 2019-08-20 Netflix, Inc. Techniques for efficiently accessing values spanning slabs of memory
US10810086B2 (en) 2017-10-19 2020-10-20 Honeywell International Inc. System and method for emulation of enhanced application module redundancy (EAM-R)
US10783026B2 (en) 2018-02-15 2020-09-22 Honeywell International Inc. Apparatus and method for detecting network problems on redundant token bus control network using traffic sensor
KR102151779B1 (ko) * 2019-03-25 2020-09-03 엘에스일렉트릭(주) 데이터 변환 장치
CN112835842B (zh) * 2021-03-05 2024-04-30 深圳市汇顶科技股份有限公司 端序处理方法、电路、芯片以及电子终端
US11934332B2 (en) * 2022-02-01 2024-03-19 Mellanox Technologies, Ltd. Data shuffle offload

Family Cites Families (8)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5687337A (en) 1995-02-24 1997-11-11 International Business Machines Corporation Mixed-endian computer system
US5961640A (en) * 1997-04-22 1999-10-05 Vlsi Technology, Inc. Virtual contiguous FIFO having the provision of packet-driven automatic endian conversion
JP4114900B2 (ja) 1999-04-23 2008-07-09 株式会社ルネサステクノロジ システムlsi及び半導体集積回路
JP2000330760A (ja) * 1999-05-17 2000-11-30 Kyushu Nippon Denki Tsushin System Kk エンディアン変換方式
JP4346587B2 (ja) 2005-07-27 2009-10-21 富士通株式会社 システムシミュレーション方法
US20070299863A1 (en) * 2006-04-27 2007-12-27 Qualcomm Incorporated Portable object serialization
JP2008033722A (ja) * 2006-07-31 2008-02-14 Matsushita Electric Ind Co Ltd エンディアン変換回路を備えたデータ転送制御装置
JP2011039964A (ja) * 2009-08-18 2011-02-24 Fujitsu Semiconductor Ltd エンディアン変換回路、エンディアン変換方法及びマイクロコントローラ

Also Published As

Publication number Publication date
WO2012127590A1 (ja) 2012-09-27
US9448931B2 (en) 2016-09-20
US20140019710A1 (en) 2014-01-16
JP5733385B2 (ja) 2015-06-10

Similar Documents

Publication Publication Date Title
JP5733385B2 (ja) エンディアン変換方法、およびシステム
JP5780243B2 (ja) スケジューリング方法、およびマルチコアプロセッサシステム
JP5488697B2 (ja) マルチコアプロセッサシステム、同期制御方法、および同期制御プログラム
US9779472B2 (en) Shared virtual memory
TWI622880B (zh) 比較及取代動態位址轉譯表項之電腦程式產品、電腦系統及方法
US20080235477A1 (en) Coherent data mover
JP4339371B2 (ja) 情報処理装置および情報処理方法
US20050216701A1 (en) Automatic configuration of a microprocessor
US20120159101A1 (en) Information processing device
JP5843801B2 (ja) 情報処理装置およびデバッグ方法
WO2014090087A1 (en) Translation management instructions for updating address translation data structures in remote processing nodes
US9478000B2 (en) Sharing non-page aligned memory
KR102326280B1 (ko) 데이터 처리 방법, 장치, 기기 및 매체
KR102569336B1 (ko) 데이터 처리방법과 장치 및 관련 제품
JP2008234491A (ja) 情報処理装置および情報処理方法
KR20210096153A (ko) 캐시 메모리들의 계층에서의 캐시 메모리들에 저장을 위한 데이터를 압축하는 방법
US20150089149A1 (en) Arithmetic processing device and control method for arithmetic processing device
JP2002032264A (ja) キャッシュメモリ装置及びそれを用いた中央演算処理装置
EP3136245B1 (en) Computer
US9122824B2 (en) System-on-chip design structure and method
JP2024503229A (ja) アドレス変換サービスバッファ
JP6740719B2 (ja) 情報処理装置、情報処理方法、およびプログラム
JP5293609B2 (ja) マルチプロセッサ並びにそのキャッシュ同期制御方法及びプログラム
GB2502858A (en) A method of copying data from a first memory location and storing it in a cache line associated with a different memory location
JP5811211B2 (ja) マルチコアプロセッサシステム、マルチコアプロセッサシステムの制御方法、およびマルチコアプロセッサシステムの制御プログラム

Legal Events

Date Code Title Description
A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20140930

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20141201

TRDD Decision of grant or rejection written
A01 Written decision to grant a patent or to grant a registration (utility model)

Free format text: JAPANESE INTERMEDIATE CODE: A01

Effective date: 20150317

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20150330

R150 Certificate of patent or registration of utility model

Ref document number: 5733385

Country of ref document: JP

Free format text: JAPANESE INTERMEDIATE CODE: R150

LAPS Cancellation because of no payment of annual fees