JP2012043138A - 情報処理装置、情報処理方法、半導体集積回路、及びストリーム再生システム - Google Patents

情報処理装置、情報処理方法、半導体集積回路、及びストリーム再生システム Download PDF

Info

Publication number
JP2012043138A
JP2012043138A JP2010183241A JP2010183241A JP2012043138A JP 2012043138 A JP2012043138 A JP 2012043138A JP 2010183241 A JP2010183241 A JP 2010183241A JP 2010183241 A JP2010183241 A JP 2010183241A JP 2012043138 A JP2012043138 A JP 2012043138A
Authority
JP
Japan
Prior art keywords
address
variable
logical
thread
logical 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.)
Withdrawn
Application number
JP2010183241A
Other languages
English (en)
Inventor
Akihiko Inoue
昭彦 井上
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.)
Panasonic Corp
Original Assignee
Panasonic Corp
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 Panasonic Corp filed Critical Panasonic Corp
Priority to JP2010183241A priority Critical patent/JP2012043138A/ja
Publication of JP2012043138A publication Critical patent/JP2012043138A/ja
Withdrawn legal-status Critical Current

Links

Images

Landscapes

  • Memory System Of A Hierarchy Structure (AREA)

Abstract

【課題】マルチスレッド実行制御方式でデータ処理を行う情報処理装置は、スレッドプライベート宣言された変数の全てが必ずしも利用されるわけではないため、結果的に、スレッド用に確保された領域への書き込み動作のうちの一部の動作が無駄になってしまう場合がある。
【解決手段】スレッド1で利用されるスレッドプライベート変数に対応付けられた第1論理アドレスで指定される領域と、その変数に対応するスレッド2で利用されるスレッドプライベート変数に対応付けられた第2論理アドレスで指定される領域とは、いずれかのスレッドプライベート変数への書き込みが行われるまでは、共通の第1物理アドレスで指定される領域を利用し、いずれかのスレッドプライベート変数への書き込みが行われた後は、それぞれ、第1物理アドレスで指定される領域と第2物理アドレスで指定される領域とを利用する。
【選択図】図2

Description

本発明は、マルチスレッド実行制御機能を有する情報処理装置に関する。
コンピュータシステムにおいてループ処理等のイタレーション処理の実行時間を短縮するための技術として、イタレーション処理を複数のスレッドに分担させて並列に実行させる技術がある。
特許文献1には、処理を複数のスレッドに分担させて並列に実行させる場合において、その処理に係る変数にスレッドプライベート宣言された変数があるとき、そのスレッドプライベート宣言された変数を記憶するための領域をスレッドの数だけ確保し、各スレッドは、自スレッド用に確保された領域を利用して処理を行うという技術が開示されている。
この特許文献1に開示されている技術では、スレッド用に確保された領域を初期化する際には、全ての領域に初期値を書き込む必要がある。
しかしながら、各スレッドの処理において、スレッドプライベート宣言された変数の全てが必ずしも利用されるわけではないため、結果的に、スレッド用に確保された領域への初期値の書き込み動作のうちの一部の書き込み動作が無駄になってしまう場合がある。
この書き込み動作の無駄を削減するための技術に、例えば、特許文献2に開示されている技術がある。
特許文献2に開示されている技術は、OS(Operating System)が記憶領域をページ単位で管理するシステムにおいて、各スレッドの論理ページは、アプリケーションプログラムからの書き込みが発生するまで物理ページを共有し、いずれかの論理ページの領域への書き込みが発生すると、対応する各スレッドの論理ページをそれぞれ新たな物理ページに対応付けて、書き込み発生直前に共用していた物理ページのデータを、新たな物理ページそれぞれに書き込むという技術である。
この特許文献2に開示されている技術を用いることで、アプリケーションプログラムの書き込み命令によって書き込みが行われる領域を含む論理ページ以外のページのデータは、新たな物理ページに書き込まれることがなくなる。
特開2002−99426号公報 特開平7−160583号公報
特許文献2に開示されている技術は、記憶領域をページ単位で取り扱うため、各スレッドの論理ページに新たな物理ページが割り当てられる場合に、その新たな物理ページそれぞれの全ての領域に、共用していた物理ページの全てのデータが書き込まれる。
しかしながら、その新たな物理ページの全てのデータが必ずしも更新されるわけではないため、結果的に、書き込まれる必要のない領域のデータを、物理アドレスによって指定される領域に書き込んでしまうという書き込み動作の無駄が発生してしまうことがある。
そこで、本発明は係る問題に鑑みてなされたものであり、上述の無駄な書き込み動作の発生頻度を、従来よりも少なくすることができる情報処理装置を提供することを目的とする。
上記課題を解決するために本発明に係る情報処理装置は、アプリケーションプログラムの1つの書き込み命令によりそれぞれアクセスに用いられる、互いに異なる第1論理アドレスと第2論理アドレスとを対応付ける変数情報を取得する変数情報取得手段と、物理アドレスによって指定される記憶領域を有する記憶手段と、論理アドレスを物理アドレスに変換するアドレス変換手段と、前記アドレス変換手段によって変換された物理アドレスを用いてアプリケーションプログラムの命令を実行する命令実行手段と、第1状態と第2状態とのいずれか一方の状態を示し、前記アドレス変換手段の行うアドレス変換の方法を特定するための状態フラグを記憶するフラグ記憶手段とを備え、前記アドレス変換手段は、前記状態フラグが前記第1状態を示す場合に、前記第1論理アドレスと前記第2論理アドレスとを第1物理アドレスに変換し、前記状態フラグが前記第2状態を示すときに、前記第1論理アドレスを前記第1物理アドレスに、前記第2論理アドレスを第2物理アドレスに変換し、前記命令実行手段は、前記状態フラグが第1状態を示す場合において、アプリケーションプログラムによる前記第2論理アドレスへの書き込み命令を実行するとき、当該命令を実行する際に前記状態フラグを前記第2状態とし、アプリケーションプログラムによる前記第1論理アドレスへの書き込み命令を実行するとき、当該命令を実行する際に前記状態フラグを前記第2状態として前記第1物理アドレスによって示される領域に記憶されているデータを前記第2物理アドレスによって示される領域に記憶させることを特徴とする。
上述の構成を備える本発明に係る情報処理装置は、第1論理アドレスによって指定される領域と第2論理アドレスによって指定される領域とが第1物理アドレスによって指定される領域を共用している場合において、第1論理アドレスによって指定される領域への書き込み、又は第2論理アドレスによって指定される領域への書き込みが発生するとき、第2物理アドレスで指定される領域へのデータの書き込みが行われる。
従って、書き込まれる必要のない領域のデータを、物理アドレスによって指定される領域に書き込んでしまう無駄な書き込み動作の発生頻度を、従来よりも少なくすることができる。
情報処理装置100の主要なハードウエア構成を示すブロック図 情報処理装置100の主要な機能ブロックの構成を示す機能ブロック図 アプリケーションプログラムの一例を示す図 中間コードの一例を示す図 変数情報のデータ構成図 アドレス対応テーブルのデータ構成図 コンパイル処理のフローチャート プログラム実行処理のフローチャート アドレス対応テーブル生成処理のフローチャート オブジェクトコード実行処理のフローチャートその1 オブジェクトコード実行処理のフローチャートその2 (A)各状態フラグ605が”0”の場合の論理アドレスと物理アドレスとの対応関係を示す図、(B)各状態フラグ605が”1”の場合の論理アドレスと物理アドレスとの対応関係を示す図 変形情報処理装置の主要な機能ブロックの構成を示すブロック図 変形変数情報のデータ構成図 変形アドレス対応テーブルの構成図 変形コンパイル処理のフローチャート 変形プログラム実行処理のフローチャート 変形アドレス対応テーブル生成処理のフローチャート 変形オブジェクトコード実行処理のフローチャートその1 変形オブジェクトコード実行処理のフローチャートその2 (A)各状態フラグ605が”0”の場合の論理アドレスと物理アドレスとの対応関係を示す図、(B)各状態フラグ605が”1”の場合の論理アドレスと物理アドレスとの対応関係を示す図 (A)各状態フラグ605が”0”の場合の論理アドレスと物理アドレスとの対応関係を示す図、(B)各状態フラグ605が”1”の場合の論理アドレスと物理アドレスとの対応関係を示す図 ブルーレイ録画再生システム2300の構成図
<実施の形態1>
<概要>
以下、本発明に係る情報処理装置の一実施形態として、記憶領域を共用する2つのプロセッサを備え、マルチスレッド実行制御方式でデータ処理を行う情報処理装置について説明する。
この情報処理装置は、例えば、C言語といった高級言語で記述されたソースプログラムをユーザから指定されると、そのソースプログラムを、マルチスレッド実行制御方式に対応した形式のオブジェクトコードにコンパイルし、ユーザからコンパイルされたオブジェクトコードを指定されると、そのオブジェクトコードを、2つのプロセッサを用いて実行するものである。
また、この情報処理装置は、オブジェクトコードを実行する場合において、互いに対応するスレッドプライベート変数が互いに異なるスレッドで利用されているとき、互いに対応するスレッドプライベート変数のいずれにもアプリケーションプログラムからの書き込みが発生していなければ、それらのスレッドプライベート変数に対応する論理アドレスに1つの物理アドレスを対応付け、互いに対応するスレッドプライベート変数のいずれかにアプリケーションプログラムからの書き込みが発生していれば、スレッドプライベート変数に対応する論理アドレスのそれぞれに、それぞれ互いに異なる物理アドレスを対応付けるというものである。
以下、本実施の形態1に係る情報処理装置の構成について図面を参照しながら説明する。
<構成>
図1は、情報処理装置100の主要なハードウエア構成を示すブロック図である。
同図に示す通り、情報処理装置100は、半導体集積回路110とハードディスク装置130と出力装置131と入力装置132とから構成される。
半導体集積回路110は、プロセッサA101とプロセッサB102とROM(Read Only Memory)103とRAM(Random Access Memory)104とハードディスク装置インターフェース105と出力装置インターフェース106と入力装置インターフェース107とバスライン120とを集積した集積回路であって、ハードディスク装置130と出力装置131と入力装置132とに接続する。
プロセッサA101とプロセッサB102とは、それぞれバスライン120と接続し、それぞれROM103、RAM104、又はハードディスク装置130に記憶されているOS、アプリケーションプログラムといったプログラムを実行することで、ROM103、RAM104、ハードディスク装置130、出力装置131、入力装置132を制御して、様々な機能を実現する。
プロセッサA101、又はプロセッサB102によって実行されるアプリケーションプログラムは、論理アドレスを用いて記憶領域の指定を行い、アプリケーションプログラムで使用される変数は、全て4Byteの固定サイズとなっている。
プロセッサA101、及びプロセッサB102は、アプリケーションプログラムを実行する場合において記憶領域にアクセスするときには、RAM104に記憶されているアドレス対応テーブル(後述)を用いて論理アドレスを物理アドレスに変換して、記憶領域へのアクセスを行う。
ROM103は、バスライン120と接続し、プロセッサA101とプロセッサB102との動作を規定するプログラムと、プロセッサA101とプロセッサB102とが利用するデータとを記憶し、物理アドレスによって記憶領域を指定される。
RAM104は、バスライン120と接続し、プロセッサA101とプロセッサB102との動作を規定するプログラムとを一時的に記憶し、プロセッサA101、又はプロセッサB102がプログラムを実行することに伴って発生するデータを一時的に記憶し、アドレス対応テーブルを記憶し、物理アドレスによって記憶領域を指定される。
ハードディスク装置インターフェース105と出力装置インターフェース106と入力装置インターフェース107とは、それぞれバスライン120と接続し、それぞれバスライン120とハードディスク装置130との間の信号のやり取りを仲介する機能、バスライン120と出力装置131との間の信号のやり取りを仲介する機能、バスライン120と入力装置132との間の信号のやり取りを仲介する機能を有する。
バスライン120は、プロセッサA101とプロセッサB102とROM103とRAM104とハードディスク装置インターフェース105と出力装置インターフェース106と入力装置インターフェース107とに接続し、接続される回路間の信号を伝達する機能を有する。
ハードディスク装置130は、ハードディスク装置インターフェース105と接続し、プロセッサA101、又はプロセッサB102によって制御され、内蔵するハードディスクにデータを書き込む機能と、内蔵するハードディスクに書き込まれているデータを読み出す機能とを有する。
出力装置131は、出力装置インターフェース106と接続し、プロセッサA101、又はプロセッサB102によって制御され、内蔵するディスプレイを用いて文字列を表示する機能を有する。
入力装置132は、入力装置インターフェース107と接続し、プロセッサA101、又はプロセッサB102によって制御され、付属するキーボードとマウスとを通じてユーザからの操作コマンドを受け付け、受け付けた操作コマンドをプロセッサA101、又はプロセッサB102に送信する機能を有する。
上述のハードウエア構成の情報処理装置100は、プロセッサA101とプロセッサB102とがプログラムを実行することによって、様々な機能を実現する。
以上のようなハードウエアで実現される情報処理装置100について、以下図面を用いて、その機能構成を説明する。
図2は、情報処理装置100の主要な機能ブロックの構成を示す機能ブロック図である。
同図に示す通り、情報処理装置100は、アプリケーションプログラム記憶手段221とコンパイル手段200とオブジェクトコード記憶手段222と変数情報記憶手段223とプログラム実行手段210とデータ記憶手段224とから構成される。
アプリケーションプログラム記憶手段221は、コンパイル手段200と接続し、C言語等の高級言語で記述されたソースプログラムであるアプリケーションプログラムを記憶するための記憶領域であって、ハードディスク装置130に内蔵されているハードディスクの一部の領域として実装されている。
コンパイル手段200は、アプリケーションプログラム記憶手段221とオブジェクトコード記憶手段222と変数情報記憶手段223とに接続し、アプリケーションプログラム記憶手段221に記憶されているソースプログラムであるアプリケーションプログラムをコンパイルしてオブジェクトコードと変数情報(後述)とを生成する機能と、生成したオブジェクトコードと変数情報とを、それぞれオブジェクトコード記憶手段222と変数情報記憶手段223とに記憶させる機能とを有する。
コンパイル手段200は、第1ユーザ操作受付手段201とアプリケーションプログラム読み出し手段202とオブジェクトコード生成手段203と変数情報生成手段204とから構成される。
第1ユーザ操作受付手段201は、アプリケーションプログラム読み出し手段202と接続し、ユーザによる、アプリケーションプログラムをコンパイルする旨の操作コマンドを受け付ける機能と、受け付けた操作コマンドによって指定されるアプリケーションプログラムを特定する情報をアプリケーションプログラム読み出し手段202に出力する機能とを有する。
アプリケーションプログラム読み出し手段202は、第1ユーザ操作受付手段201とオブジェクトコード生成手段203とアプリケーションプログラム記憶手段221とに接続し、第1ユーザ操作受付手段201から出力される情報で指定されるアプリケーションプログラムを、アプリケーションプログラム記憶手段221から読み出してオブジェクトコード生成手段203に出力する機能を有する。
オブジェクトコード生成手段203は、アプリケーションプログラム読み出し手段202と変数情報生成手段204とオブジェクトコード記憶手段222とに接続し、以下の4つの機能を有する。
機能1:OpenMPをサポートする形式でアプリケーションプログラムをコンパイルするコンパイル機能。
OpenMPの仕様については、例えば、文献「OpenMP C and C++ Application Program Interface version1.0 - October 1998 Document Number004-2229-001」(発行元:OpenMP Architecture ReviewBoard)に記載されている。
機能2:コンパイルするアプリケーションプログラムにスレッドプライベート宣言されている変数がある場合に、そのスレッドプライベート宣言された変数と、スレッド毎に割り当てられたそのスレッドプライベート宣言された変数に対応するスレッドプライベート変数と、それらスレッドプライベート変数を記憶するための領域を示す論理アドレスとの組を変数情報生成手段204に出力する機能。
機能3:コンパイルするアプリケーションプログラムにスレッドプライベート宣言されていない変数がある場合に、その変数と、その変数を記憶するための領域を示す論理アドレスとの組を変数情報生成手段204に出力する機能。
機能4:コンパイルすることによって生成したオブジェクトコードを、オブジェクトコード記憶手段222に書き込む機能。
オブジェクトコード生成手段203のコンパイル機能はOpenMPをサポートするため、コンパイル対象のソースプログラムに#pragma omp parallel形式で記述されるディレクティブが含まれている場合には、生成されるオブジェクトコードは、#pragma omp parallel文で指定される節が、プロセッサA101が処理するスレッドと、プロセッサB102が処理するスレッドとの2つのスレッドとに分割する。
オブジェクトコード生成手段203は、ソースプログラムをコンパイルする際に、ソースプログラムから一端中間コードを生成し、生成した中間コードからオブジェクトコードを生成する。
以下、オブジェクトコード生成手段203のOpenMPをサポートするコンパイル機能について、図面を参照しながら具体例を用いて説明する。
図3は、アプリケーションプログラム記憶手段221に記憶されているアプリケーションプログラムの一例を示す図である。
アプリケーションプログラム301には、for文で指定される演算を100回繰り返す処理が含まれており、この100回繰り返す処理の部分を、複数のスレッド(ここではプロセッサが2つなので2つのスレッド)の処理に分割するようにコンパイルさせる旨のディレクティブ(#pragma omp parallelで始まる文)が挿入されている。
また、このディレクティブによって、変数xと変数aと変数sumとがスレッドプライベート宣言されている。
図4は、オブジェクトコード生成手段203が、アプリケーションプログラム301をコンパイルする際に生成する中間コードである。
同図において、中間コード400は、オブジェクトコード生成手段203が、アプリケーションプログラム301をコンパイルする際に生成する中間コードであって、スレッド1の処理401とスレッド2の処理402と処理403とを含んでいる。
オブジェクトコード生成手段203は、コンパイル対象のソースプログラムに#pragma omp parallel形式で記述されるディレクティブが含まれている場合には、#pragma omp parallel文で指定される節を2つのスレッドの処理に分割した中間コードを生成する。
オブジェクトコード生成手段203は、アプリケーションプログラム301の中に#pragma omp parallel形式で記述されるディレクティブを見つけると、#pragma omp parallel文で指定される節の構文を解析し、for文で指定される演算を100回繰り返す処理を、for文で指定される演算を50回繰り返すスレッド1の処理401と、for文で指定される演算を50回繰り返すスレッド2の処理402と、最終的な演算結果であるsumを生成する処理403とを含む中間コードを生成する。
中間コード生成の際には、スレッドプライベート宣言された変数xをスレッド1用のスレッドプライベート変数x_1とスレッド2用のスレッドプライベート変数x_2とに割り当て、スレッドプライベート宣言された変数aをスレッド1用のスレッドプライベート変数a_1とスレッド2用のスレッドプライベート変数a_2とに割り当て、スレッドプライベート宣言された変数sumをスレッド1用のスレッドプライベート変数sum_1とスレッド2用のスレッドプライベート変数sum_2とに割り当てる。
中間コードが生成されると、オブジェクトコード生成手段203は、生成された中間コードからオブジェクトコードを生成する。
再び図2に戻って、情報処理装置100の機能構成の説明を続ける。
変数情報生成手段204は、オブジェクトコード生成手段203と変数情報記憶手段223とに接続し、以下の2つの機能を有する。
機能1:オブジェクトコード生成手段203から出力されるスレッドプライベート宣言された変数とスレッド毎に割り当てられたそのスレッドプライベート宣言された変数に対応するスレッドプライベート変数とそのスレッドプライベート変数を記憶するための領域を示す論理アドレスとの組と、オブジェクトコード生成手段203から出力されるスレッドプライベート宣言された変数以外の変数とその変数を記憶するための領域を示す論理アドレスとの組とに基づいて変数情報を生成する機能。
機能2:生成された変数情報を変数情報記憶手段223に書き込む機能。
図5は、変数情報生成手段204によって生成される変数情報のデータ構成図である。
同図に示されるように、変数情報は、オリジナル変数ID501とスレッド1変数ID502と第1論理アドレス503とスレッド2変数ID504と第2論理アドレス505とを対応付けたものである。
オリジナル変数ID501は、アプリケーションプログラムで定義されている変数を示す情報である。
スレッド1変数ID502は、対応するオリジナル変数ID501によって示される変数がスレッドプライベート宣言されている場合には、その変数に対応するスレッド1に割り当てられたスレッドプライベート変数を示す情報であり、対応するオリジナル変数ID501によって示される変数がスレッドプライベート宣言されていない場合には、その変数を示す情報である。
第1論理アドレス503は、対応するスレッド1変数ID502によって示される変数を記憶するための領域を示す論理アドレスである。
スレッド2変数ID504は、対応するオリジナル変数ID501によって示される変数がスレッドプライベート宣言されている場合には、その変数に対応する、スレッド2に割り当てられたスレッドプライベート変数を示す情報であり、対応するオリジナル変数ID501によって示される変数がスレッドプライベート宣言されていない場合には、空値となる。
第2論理アドレス505は、対応するスレッド2変数ID504によって示される変数を記憶するための領域を示す論理アドレスであって、対応するスレッド2変数ID504が空値の場合には、空値となる。
再び図2に戻って、情報処理装置100の機能構成の説明を続ける。
オブジェクトコード記憶手段222は、コンパイル手段200とプログラム実行手段210とに接続し、コンパイル手段200のオブジェクトコード生成手段203から出力されるオブジェクトコードを記憶するための記憶領域であって、ハードディスク装置130に内蔵されているハードディスクの一部の領域として実装されている。
変数情報記憶手段223は、コンパイル手段200とプログラム実行手段210とに接続し、コンパイル手段200の変数情報生成手段204から出力される変数情報を記憶するための記憶領域であって、ハードディスク装置130に内蔵されているハードディスクの一部の領域として実装されている。
データ記憶手段224は、プログラム実行手段210と接続し、オブジェクトコード記憶手段222に記憶されているオブジェクトコードがロードされ、そのオブジェクトコードによって利用されるための記憶領域であって、RAM104の一部の領域として実装されている。
データ記憶手段224の記憶領域は、物理アドレスによって指定される。
プログラム実行手段210は、オブジェクトコード記憶手段222と変数情報記憶手段223とデータ記憶手段224とに接続し、オブジェクトコード記憶手段222に記憶されているオブジェクトコードを実行する機能を有する。
プログラム実行手段210は、第2ユーザ操作受付手段211とオブジェクトコードロード手段212とアドレス対応テーブル生成手段213とアドレス対応テーブル記憶手段214とオブジェクトコード実行手段215とメモリアクセス手段216とから構成される。
第2ユーザ操作受付手段211は、オブジェクトコードロード手段212と接続し、ユーザによる、オブジェクトコードを実行する旨の操作コマンドを受け付ける機能と、受け付けた操作コマンドによって指定されるオブジェクトコードを特定する情報をオブジェクトコードロード手段212に出力する機能とを有する。
オブジェクトコードロード手段212は、オブジェクトコード記憶手段222と第2ユーザ操作受付手段211とアドレス対応テーブル生成手段213とオブジェクトコード実行手段215とデータ記憶手段224とに接続し、以下の4つの機能を有する。
機能1:第2ユーザ操作受付手段211から出力される情報で指定されるロード対象のオブジェクトコードを、オブジェクトコード記憶手段222から読み出して、そのオブジェクトコードで利用される記憶領域を示す論理アドレスのそれぞれに物理アドレスを対応付けて、対応付けた論理アドレスと物理アドレスとの組をアドレス対応テーブル生成手段213に出力する機能。
機能2:ロード対象のオブジェクトコードを、データ記憶手段224にロードする機能。
機能3:ロード対象のオブジェクトコードを特定するための情報をアドレス対応テーブル生成手段213に出力する機能。
機能4:アドレス対応テーブル生成手段213によって生成されるアドレス対応テーブル(後述)を参照して、第1物理アドレス(後述)によって指定されるデータ記憶手段224の領域に初期値を代入して初期化する機能。
アドレス対応テーブル生成手段213は、変数情報記憶手段223とオブジェクトコードロード手段212とアドレス対応テーブル記憶手段214とに接続し、以下の2つの機能を有する。
機能1:オブジェクトコードロード手段212から出力される情報で指定されるオブジェクトコードに対応する変数情報を変数情報記憶手段223から読み出す機能。
機能2:変数情報記憶手段223から読み出した変数情報と、オブジェクトコードロード手段212から出力される論理アドレスと物理アドレスとの組とに基づいて、アドレス対応テーブルを生成してアドレス対応テーブル記憶手段214に書き込む機能。
図6は、アドレス対応テーブル生成手段213によって生成されるアドレス対応テーブルのデータ構成図である。
同図に示されるように、アドレス対応テーブルは、変数ID601と論理アドレス602と第1物理アドレス603と第2物理アドレス604と状態フラグ605と対変数ID606とスレッド番号607とを対応付けたものである。
変数ID601は、オブジェクトコードに対応するアプリケーションプログラムで利用される変数を示す情報であって、対応する変数情報に含まれるスレッド1変数ID502(図5参照)、又はスレッド2変数ID504に対応するものである。
論理アドレス602は、対応する変数ID601によって示される変数を記憶するための領域を示す論理アドレスである。
第1物理アドレス603は、対応する変数ID601によって示される変数がスレッド1で利用されるスレッドプライベート変数である場合には、その変数を記憶するための領域を示す物理アドレスであり、対応する変数ID601によって示される変数がスレッド2で利用されるスレッドプライベート変数である場合には、その変数に対応するスレッド1で利用されるスレッドプライベート変数を記憶するための領域を示す物理アドレスであり、対応する変数ID601によって示される変数が、スレッドプライベート変数でない場合にはその変数を記憶するための領域を示す物理アドレスである。
第2物理アドレス604は、対応する変数ID601によって示される変数がスレッド1で利用されるスレッドプライベート変数である場合には、その変数に対応するスレッド2で利用されるスレッドプライベート変数を記憶するための領域を示す物理アドレスであり、対応する変数ID601によって示される変数がスレッド2で利用されるスレッドプライベート変数である場合にはその変数を記憶するための領域を示す物理アドレスであり、対応する変数ID601によって示される変数が、スレッドプライベート変数でない場合には空値となる。
状態フラグ605は、”0”又は”1”のいずれか一方の値となるフラグであって、初期状態は”0”に設定されている。
ここで、状態フラグ605の値”0”は、対応する第1物理アドレス603によって示される領域、及び対応する第2物理アドレス604によって示される領域に、オブジェクトコードに含まれる命令によって書き込みが行われたことがないことを示す。
また、状態フラグ605の値”1”は、対応する第1物理アドレス603によって示される領域、又は対応する第2物理アドレス604によって示される領域に、オブジェクトコードに含まれる命令によって書き込みが行われたことがあることを示す。
対変数ID606は、対応する変数ID601によって示される変数がスレッドプライベート変数である場合には、その変数と対になるスレッドプライベート変数を示す情報であり、対応する変数ID601によって示される変数がスレッドプライベート変数でない場合は、空値となる。
スレッド番号607は、対応する変数IDによって示される変数がスレッドプライベート変数である場合には、その変数が利用されるスレッドを示す情報であり、対応する変数ID601によって示される変数がスレッドプライベート変数でない場合は、空値となる。
ここではプロセッサの数が2つなので、対変数ID606の値は、”1”、”2”、又は空値のいずれか1つとなる。
再び図2戻って、情報処理装置100の機能構成の説明を続ける。
アドレス対応テーブル記憶手段214は、オブジェクトコードロード手段212とアドレス対応テーブル生成手段213とメモリアクセス手段216とに接続し、アドレス対応テーブルを記憶するための記憶領域であって、RAM104の一部の領域として実装されている。
オブジェクトコード実行手段215は、オブジェクトコードロード手段212とメモリアクセス手段216とに接続し、オブジェクトコードロード手段212によってデータ記憶手段224にロードされたオブジェクトコードを実行する機能を有する。
オブジェクトコード実行手段215は、オブジェクトコードを実行する場合においてデータ記憶手段224にアクセスするときには、メモリアクセス手段216を介してデータ記憶手段224にアクセスする。
メモリアクセス手段216は、オブジェクトコード実行手段215とデータ記憶手段224とアドレス対応テーブル記憶手段214とに接続し、オブジェクトコード実行手段215がデータ記憶手段224をアクセスするために用いる論理アドレスを、アドレス対応テーブル記憶手段214に記憶されているアドレス対応テーブルを用いて物理アドレスに変換し、変換した物理アドレスを用いて、データ記憶手段224へのアクセスを行う機能と、アドレス対応テーブル記憶手段214に記憶されているアドレス対応テーブルを書き換える機能とを有する。
以上のように構成される情報処理装置100の行う動作について、以下、図面を参照しながら説明する。
<動作>
ここでは、情報処理装置100の行う動作のうち、特徴的な動作である、コンパイル手段200の行うコンパイル処理と、プログラム実行手段210の行うプログラム実行処理とについて説明する。
<コンパイル処理>
コンパイル処理は、ユーザによって指定されるアプリケーションプログラムをアプリケーションプログラム記憶手段221から読み出してコンパイルし、オブジェクトコードと変数情報とを生成する処理である。
図7は、コンパイル手段200の行うコンパイル処理のフローチャートである。
第1ユーザ操作受付手段201がユーザからのアプリケーションプログラムをコンパイルする旨の操作コマンドを受け付けると(ステップS700)、受け付けた操作コマンドによって指定されるアプリケーションプログラムを特定する情報をアプリケーションプログラム読み出し手段202に出力する。
アプリケーションプログラム読み出し手段202は、アプリケーションプログラムを特定する情報を受け取ると、その情報で特定されるアプリケーションプログラムをアプリケーションプログラム記憶手段221から読み出して(ステップS710)、オブジェクトコード生成手段203に出力する。
オブジェクトコード生成手段203は、アプリケーションプログラムを受け取ると、受け取ったアプリケーションプログラムの構文解析を行い(ステップS720)、複数のスレッド(ここではプロセッサが2つなので2つのスレッド)の処理に分割するようにコンパイルさせる旨のディレクティブ(#pragma omp parallelで始まる文)の有無を調べる(ステップS730)。
ステップS730において、複数のスレッドの処理に分割するようにコンパイルさせる旨のディレクティブがある場合(ステップS730:Yes)、オブジェクトコード生成手段203は、#pragma omp parallel文で指定される節をスレッド1用の処理とスレッド2用の処理との2つの処理に分割して中間コードを生成する(ステップS740)。
オブジェクトコード生成手段203は、中間コード生成時に、スレッドプライベート宣言された変数を、スレッド1用のスレッドプライベート変数とスレッド2用のスレッドプライベート変数とに割り当てる。
ステップS730において、複数のスレッドの処理に分割するようにコンパイルさせる旨のディレクティブがない場合(ステップS730:No)、オブジェクトコード生成手段203は、オブジェクトコードを複数のスレッドの処理に分割することなく、中間コードを生成する(ステップS750)。
ステップS740の処理が終了する、又はステップS750の処理が終了すると、オブジェクトコード生成手段203は中間コードからオブジェクトコードを生成し、生成したオブジェクトコードをオブジェクトコード記憶手段222に書き込む(ステップS760)。
オブジェクトコード生成手段203は、オブジェクトコード生成時に、アプリケーションプログラムで用いられている変数それぞれについて、変数がスレッドプライベート宣言された変数であれば、そのスレッドプライベート宣言された変数と、スレッド毎に割り当てられたそのスレッドプライベート宣言された変数に対応するスレッドプライベート変数と、そのスレッドプライベート変数を記憶するための領域を示す論理アドレスとの組を変数情報生成手段204に出力し、変数がスレッドプライベート宣言されていない変数であれば、その変数と、その変数を記憶するための領域を示す論理アドレスとの組を変数情報生成手段204に出力する。
ステップS760の処理が終わると、変数情報生成手段204は、オブジェクトコード生成手段203から出力された変数と論理アドレスとの組に基づいて、変数情報を生成し、生成した変数情報を変数情報記憶手段223に書き込む(ステップS770)。
ステップS770の処理が終わると、コンパイル手段200は、コンパイル処理を終了する。
<プログラム実行処理>
プログラム実行処理は、ユーザによって指定されるオブジェクトコードをオブジェクトコード記憶手段222から読み出して、読み出したオブジェクトコードをロードして実行する処理である。
図8は、プログラム実行手段210が行うプログラム実行処理のフローチャートである。
第2ユーザ操作受付手段211がユーザからのオブジェクトコードを実行する旨の操作コマンドを受け付けると(ステップS800)、受け付けた操作コマンドによって指定されるオブジェクトコードを特定する情報をオブジェクトコードロード手段212に出力する。
オブジェクトコードロード手段212は、オブジェクトコードを特定する情報を受け取ると、その情報で特定されるオブジェクトコードをオブジェクトコード記憶手段222から読み出して、オブジェクトコードで利用される記憶領域を示す論理アドレスのそれぞれに物理アドレスを対応付けて、対応付けた論理アドレスと物理アドレスとの組をアドレス対応テーブル生成手段213に出力し、読み出したオブジェクトコードをデータ記憶手段224にロードする(ステップS810)。
ステップS810の処理が終了すると、アドレス対応テーブル生成手段213は、オブジェクトコードロード手段212から出力される論理アドレスと物理アドレスとの組と、変数情報記憶手段223に記憶されている、オブジェクトコードに対応する変数情報とに基づいて、アドレス対応テーブルを生成する(アドレス対応テーブル生成処理:ステップS820)。
図9は、ステップS820であるアドレス対応テーブル生成処理のフローチャートである。
アドレス対応テーブル生成処理は、アドレス対応テーブル生成手段213が、変数情報の第1論理アドレス503(図5参照)と第2論理アドレス505とのそれぞれに対して、物理アドレス等を対応付けてアドレス対応テーブルを生成する処理である。
アドレス対応テーブル生成手段213は、オブジェクトコードロード手段212から出力される情報で指定されるオブジェクトコードに対応する変数情報を変数情報記憶手段223から読み出し、読み出した変数情報に含まれる第1論理アドレス、又は第2論理アドレスの中から1つの論理アドレスを選択する。
1つの論理アドレスを選択すると、アドレス対応テーブル生成手段213は、対応付けられている変数がスレッドプライベート変数であるか否かを調べる(ステップS900)。
スレッドプライベート変数であるか否かの判断は、選択されている論理アドレスにスレッド1変数ID502とスレッド2変数ID504との双方が対応付けられているか否かによって判断される。
ステップS900の処理において、対象の変数がスレッドプライベート変数である場合には(ステップS900:Yes)、アドレス対応テーブル生成手段213は、対となるスレッドプライベート変数が、生成中のアドレス対応テーブルの中に既に存在していないか存在しているかを調べる(ステップS910)。
ステップS910の処理において、対となるスレッドプライベート変数を示す変数IDが、生成中のアドレス対応テーブルの中に存在していない場合には(ステップS910:Yes)、アドレス対応テーブル生成手段213は、(1)変数情報において対象の変数に対応付けられている第1論理アドレスに対応付けられている物理アドレスを第1物理アドレス603(図6参照)とし、(2)変数情報において対象の変数に対応付けられている第2論理アドレスに対応付けられている物理アドレスを第2物理アドレス604とし、(3)選択中の論理アドレス602に、第1物理アドレス603と第2物理アドレス604と対応する変数を示す変数ID601とを対応付ける(ステップS920)。
ステップS910の処理において、対となるスレッドプライベート変数を示す変数IDが、生成中のアドレス対応テーブルの中に存在している場合には(ステップS910:No)、アドレス対応テーブル生成手段213は、選択中の論理アドレス602に、対となるスレッドプライベート変数を示す変数ID601に対応付けられている第1物理アドレス603と第2物理アドレス604と、対応する変数を示す変数ID601とを対応付ける(ステップS930)。
ステップS920の処理が終了した場合、又はステップS930の処理が終了した場合に、アドレス対応テーブル生成手段213は、選択中の論理アドレスに、対となるスレッドプライベート変数を示す変数IDを対変数ID606として対応付け(ステップS940)て、さらに、その論理アドレスが使用されるスレッドを示すスレッド番号607を対応付ける(ステップS950)。
ステップS900の処理において、対象の変数がスレッドプライベート変数でない場合には(ステップS900:No)、アドレス対応テーブル生成手段213は、(1)対応付けられている物理アドレスを第1物理アドレスとし、(2)空値を第2物理アドレスとし、(3)空値を対変数IDとし、(4)空値をスレッド番号として、(5)選択中の論理アドレス602に、第1物理アドレス603と第2物理アドレス604と対変数ID606とスレッド番号607とを対応付ける(ステップS960)。
ステップS950の処理が終了した場合、又はステップS960の処理が終了した場合に、アドレス対応テーブル生成手段213は、さらに、選択中の論理アドレスに初期値”0”で初期化された状態フラグ605を対応付ける(ステップS970)。
ステップS970の処理が終わると、アドレス対応テーブル生成手段213は、変数情報に含まれる第1論理アドレス、又は第2論理アドレスの中に、未だ選択されていない論理アドレスが存在するか否かを調べる(ステップS980)。
ステップS980の処理において、未だ選択されていない論理アドレスが存在する場合には(ステップS980:Yes)、アドレス対応テーブル生成手段213は、未だ選択されていない論理アドレスの中から1つの論理アドレスを選択し(ステップS990)、再びステップS900の処理に戻って、ステップS900以降の処理を行う。
ステップS980の処理において、未だ選択されていない論理アドレスが存在しない場合には(ステップS980:No)、アドレス対応テーブル生成手段213は、そのアドレス対応テーブル生成処理を終了する。
再び図8に戻って、プログラム実行処理の説明を続ける。
ステップS820の処理が終わると、アドレス対応テーブル生成手段213は、生成したアドレス対応テーブルをアドレス対応テーブル記憶手段に書き込む(ステップS830)。
ステップS830の処理が終わると、オブジェクトコードロード手段212は、アドレス対応テーブル生成手段213によって生成されたアドレス対応テーブルを参照して、第1物理アドレスによって指定されるデータ記憶手段224の領域にのみ初期値を代入して初期化する(ステップS840)。
ステップS840の処理が終わると、オブジェクトコード実行手段215は、データ記憶手段224にロードされたオブジェクトコードを実行する(オブジェクトコード実行処理:ステップS850)。
オブジェクトコード実行手段215は、オブジェクトコードを実行する場合において、データ記憶手段224への書き込み命令、又はデータ記憶手段224からの読み出し命令があるとき、メモリアクセス手段216を用いてデータ記憶手段224への書き込み、又はデータ記憶手段224からの読み出しを行う。
図10、図11は、ステップS850であるオブジェクトコード実行処理のフローチャートである。
オブジェクトコード実行手段215は、オブジェクトコードに含まれる命令を1つずつ順に実行する。
オブジェクトコード実行手段215は、実行対象となる命令が書き込み命令か否かを調べて(ステップS1000)、その命令が書き込み命令である場合には(ステップS1000:Yes)、メモリアクセス手段216は、アドレス対応テーブル記憶手段214に記憶されているアドレス対応テーブルを参照して、その書き込み命令で指定される論理アドレスに対応する変数がスレッドプライベート変数か否かを調べる(ステップS1005)。
書き込み命令で指定される論理アドレスに対応する変数がスレッドプライベート変数か否かは、対応する対変数ID606を調べることで判定する。
すなわち、対応する対変数ID606が空値でない場合にはスレッドプライベート変数であると判定し、対応する対変数ID606が空値である場合にはスレッドプライベート変数ではないと判定する。
ステップS1005の処理において、その書き込み命令で指定される論理アドレスに対応する変数がスレッドプライベート変数である場合に(ステップS1005:Yes)、メモリアクセス手段216は、その書き込み命令で指定される論理アドレスと対応する状態フラグ605(図6参照)の値が”0”であるか否かを調べる(ステップS1010)。
ステップS1010の処理において、状態フラグ605の値が”0”の場合には(ステップS1010:Yes)、メモリアクセス手段216は、その状態フラグ605の値を”1”とし、さらに、対応する対変数ID606と等しい変数ID601に対応付けられている状態フラグ605の値を”1”とする(ステップS1015)。
ステップS1015の処理が終わると、メモリアクセス手段216は、書き込み命令で指定される論理アドレスに対応する変数がスレッド1で利用される変数であるか否かを調べる(ステップS1020)。
書き込み命令で指定される論理アドレスに対応する変数がスレッド1で利用される変数であるか否かは、対応するスレッド番号607の値を調べることで判定する。
すなわち、対応するスレッド番号607の値が”1”であれば、スレッド1で利用される変数であると判定し、”2”又は空値であれば、スレッド1で利用される変数ではないと判定する。
ステップS1020の処理において、スレッド1で利用される変数である場合には(ステップS1020:Yes)、メモリアクセス手段216は、第1物理アドレス603で指定される領域に書き込まれているデータを、第2物理アドレス604で指定される領域に書き込む(ステップS1025)。
ステップS1025の処理が終了した場合、又はステップS1005の処理において、スレッドプライベート変数でない場合に(ステップS1005:No)、メモリアクセス手段216は、第1物理アドレスで指定される領域への書き込みを実施する(ステップS1030)。
ステップS1020の処理において、スレッド2で利用される変数である場合には(ステップS1020:No)、メモリアクセス手段216は、第2物理アドレスで指定される領域への書き込みを実施する(ステップS1035)。
ステップS1010の処理において、状態フラグ605の値が”1”の場合には(ステップS1010:No)、メモリアクセス手段216は、書き込み命令で指定される論理アドレスに対応する変数がスレッド1で利用される変数であるか否かを調べる(ステップS1100)。
ステップS1100の処理において、スレッド1で利用される変数である場合には(ステップS1100:Yes)、メモリアクセス手段216は、第1物理アドレスで指定される領域への書き込みを実施し(ステップS1110)、スレッド2で利用される変数である場合には(ステップS1100:No)、メモリアクセス手段216は、第2物理アドレスで指定される領域への書き込みを実施する(ステップS1120)。
ステップS1000の処理において、その命令が書き込み命令でない場合には(ステップS1000:No)、オブジェクトコード実行手段215は、その命令が読み出し命令であるか否かを調べる(ステップS1040)。
ステップS1040の処理において、その命令が読み出し命令である場合には(ステップS1040:Yes)、メモリアクセス手段216は、読み出し命令で指定される論理アドレスに対応する変数がスレッドプライベート変数であるか否かを調べる(ステップS1130)。
ステップS1130の処理において、その読み出し命令で指定される論理アドレスに対応する変数がスレッドプライベート変数である場合には(ステップS1130:Yes)、その読み出し命令で指定される論理アドレスと対応する状態フラグ605の値が”0”であるか否かを調べる(ステップS1140)。
ステップS1140の処理において、状態フラグ605の値が”0”の場合(ステップS1040:Yes)、又はステップS1130の処理において、スレッドプライベート変数でない場合には(ステップS1130:No)、メモリアクセス手段216は、第1物理アドレスで指定される領域からの読み出しを実施する(ステップS1150)。
ステップS1140の処理において、状態フラグ605の値が”1”の場合には(ステップS1040:No)、メモリアクセス手段216は、書き込み命令で指定される論理アドレスに対応する変数がスレッド1で利用される変数であるか否かを調べる(ステップS1160)。
ステップS1160の処理において、スレッド1で利用される変数である場合には(ステップS1160:Yes)、メモリアクセス手段216は、第1物理アドレスで指定される領域からの読み出しを実施し(ステップS1170)、スレッド2で利用される変数である場合には(ステップS1160:No)、メモリアクセス手段216は、第2物理アドレスで指定される領域からの読み出しを実施する(ステップS1180)。
ステップS1040の処理において、その命令が読み出し命令でない場合には(ステップS1040:No)、オブジェクトコード実行手段215は、データ記憶手段224を利用せずにその命令を実行する(ステップS1190)。
ステップS1030の処理が終了した場合、ステップS1035の処理が終了した場合、ステップS1110の処理が終了した場合、ステップS1120の処理が終了した場合、ステップS1150の処理が終了した場合、ステップS1170の処理が終了した場合、ステップS1180の処理が終了した場合、又はステップS1190の処理が終了した場合には、オブジェクトコード実行手段215は、次の命令があるか否かを調べる(ステップS1045)。
ステップS1045の処理において、次の命令がある場合には(ステップS1045:Yes)、次の命令を選択して(ステップS1050)、再びステップS1000の処理に戻って、ステップS1000以降の処理を行う。
ステップS1045の処理において、次の命令が存在しない場合には(ステップS1045:No)、オブジェクトコード実行手段215は、メモリアクセス手段216を用いて行うオブジェクトコード実行処理を終了する。
再び図8に戻って、プログラム実行処理の説明を続ける。
ステップS850の処理を終了すると、プログラム実行手段210は、そのプログラム実行処理を終了する。
<具体例>
以上のように動作する情報処理装置100の具体的動作例について、以下、図面を参照しながら説明する。
ここでは、アドレス対応テーブル記憶手段214に記憶されているアドレス対応テーブルが図6で示されるものである場合において、各状態フラグ605が”0”で初期化されているときの論理アドレスと物理アドレスとの対応関係と、各状態フラグ605が”1”となっているときの論理アドレスと物理アドレスとの対応関係とについて説明する。
図12(A)は、各状態フラグ605が”0”で初期化されている場合において論理アドレスを物理アドレスに変換するときの、論理アドレスと物理アドレスとの対応関係を示す図で、図12(B)は、状態フラグ605が”1”である論理アドレスを物理アドレスに変換するときの、論理アドレスと物理アドレスとの対応関係を示す図である。
図12(A)、(B)において、論理アドレス領域1201は論理アドレス0x0000 0000を開始アドレスとする4Byteの領域であって、変数ID601(図6参照)が”x_1”で示されるスレッド1で利用されるスレッドプライベート変数(以下、変数x_1という。)に割り当てられた領域である。
論理アドレス領域1202は論理アドレス0x0000 0004を開始アドレスとする4Byteの領域であって、変数ID601が”x_2”で示されるスレッド2で利用されるスレッドプライベート変数(以下、変数x_2という。)に割り当てられた領域である。
論理アドレス領域1203は論理アドレス0x0000 0008を開始アドレスとする4Byteの領域であって、変数ID601が”a_1”で示されるスレッド1で利用されるスレッドプライベート変数(以下、変数a_1という。)に割り当てられた領域である。
論理アドレス領域1204は論理アドレス0x0000 000Cを開始アドレスとする4Byteの領域であって、変数ID601が”a_2”で示されるスレッド2で利用されるスレッドプライベート変数(以下、変数a_2という。)に割り当てられた領域である。
物理アドレス領域1211は物理アドレス0x1000 0000を開始アドレスとする4Byteの領域であって、物理アドレス領域1212は物理アドレス0x1000 0004を開始アドレスとする4Byteの領域であって、物理アドレス領域1213は物理アドレス0x1000 0008を開始アドレスとする4Byteの領域であって、物理アドレス領域1214は物理アドレス0x1000 000Cを開始アドレスとする4Byteの領域である。
図12(A)に示されるように、各状態フラグ605が”0”で初期化されている場合において論理アドレスが物理アドレスに変換されるときは、変数x_1用の論理アドレス領域1201と、変数x_2用の論理アドレス領域1202とが、共通の物理アドレス領域1211に変換され、変数a_1用の論理アドレス領域1203と、変数a_2用の論理アドレス領域1204とが、共通の物理アドレス領域1213に変換される。
その後、変数x_1用の論理アドレス領域1201、又は変数x_2用の論理アドレス領域1202への書き込みが行われて、変数a_1用の論理アドレス領域1203、又は変数a_2用の論理アドレス領域1204への書き込みが行われて、各状態フラグ605が”1”に書き換えられると、図12(B)に示されるように、対応する状態フラグ605が”1”である場合において論理アドレスを物理アドレスに変換されるときには、変数x_1用の論理アドレス領域1201が物理アドレス領域1211に変換され、変数x_2用の論理アドレス領域1202が物理アドレス領域1212に変換され、変数a_1用の論理アドレス領域1203が物理アドレス領域1213に変換され、変数a_2用の論理アドレス領域1204が物理アドレス領域1213に変換される。
<まとめ>
上述の情報処理装置100によれば、スレッド1で利用されるスレッドプライベート変数に対応付けられた第1論理アドレスで指定される領域と、その変数に対応するスレッド2で利用されるスレッドプライベート変数に対応付けられた第2論理アドレスで指定される領域とは、いずれかのスレッドプライベート変数への書き込みが行われるまでは、共通の第1物理アドレスで指定される領域を利用し、いずれかのスレッドプライベート変数への書き込みが行われた後は、それぞれ、第1物理アドレスで指定される領域と第2物理アドレスで指定される領域とを利用する。
また、上述の情報処理装置100によれば、第2物理アドレスで指定される領域へのデータの書き込みは、スレッド1で利用されるスレッドプライベート変数、又はスレッド2で利用されるスレッドプライベート変数のいずれかに書き込みが行われた場合に限って行われる。
従って、アプリケーションプログラムによって書き込まれる必要のない論理アドレスによって指定される領域のデータを、物理アドレスによって指定される領域に書き込んでしまう無駄な書き込み動作の発生頻度を、従来よりも少なくすることができる。
<実施の形態2>
以下、本実施の形態に係る情報処理装置の一実施形態として、実施の形態1に係る情報処理装置100の一部を変形した実施の形態2に係る変形情報処理装置について説明する。
変形情報処理装置は、ハードウエア構成が情報処理装置100と同一であるが、プロセッサA101、又はプロセッサB102によって実行されるソフトウエアの一部が、情報処理装置100におけるソフトウエアから変形されたものとなっている。従って、変形情報処理装置によって実現される機能の一部は、情報処理装置100によって実現される機能から変形されている。
この変形情報処理装置は、記憶領域の管理を4096Byteのサイズをもつページ単位で行い、互いに異なるスレッドによって利用される論理領域は、互いに異なる論理ページ群に割り当てられ、互いに異なるスレッドで利用される対応付けられたスレッドプライベート変数を記憶するための領域には、互いに等しいページ内オフセットが割り当てられる。
以下、本実施の形態2に係る変形情報処理装置の構成について、実施の形態1に係る情報処理装置100との相違点を中心に、図面を参照しながら説明する。
<構成>
図13は、変形情報処理装置の主要な機能ブロックの構成を示すブロック図である。
変形情報処理装置は、情報処理装置100の一部が変形されたものであって、コンパイル手段200がコンパイル手段1300に変形され、プログラム実行手段210がプログラム実行手段1310に変形されたものである。
コンパイル手段1300は、オブジェクトコード生成手段203がオブジェクトコード生成手段1303に変形され、変数情報生成手段204が変数情報生成手段1304に変形されたものであり、プログラム実行手段1310は、オブジェクトコードロード手段212がオブジェクトコードロード手段1312に変形され、アドレス対応テーブル生成手段213がアドレス対応テーブル生成手段1313に変形され、メモリアクセス手段216がメモリアクセス手段1316に変形したものである。
オブジェクトコード生成手段1303は、実施の形態1におけるオブジェクトコード生成手段203の一部の機能が変形されたものであり、アプリケーションプログラム読み出し手段202と変数情報生成手段1304とオブジェクトコード記憶手段222とに接続し、オブジェクトコード生成手段203の有する機能1と機能4とに加えて、以下の3つの機能を有する。
機能2a:コンパイルするアプリケーションプログラムにスレッドプライベート宣言されている変数がある場合に、そのスレッドプライベート宣言された変数と、スレッド毎に割り当てられたそのスレッドプライベート宣言された変数に対応するスレッドプライベート変数と、それらスレッドプライベート変数を記憶するための領域に対応する論理ページアドレスと、それらスレッドプライベート変数を記憶するための領域を示すページ内オフセットとの組を変数情報生成手段1304に出力する機能。
機能3a:コンパイルするアプリケーションプログラムにスレッドプライベート宣言されていない変数がある場合に、その変数と、その変数を記憶するための領域に対応する論理ページアドレスと、その変数を記憶するための領域を示すページ内オフセットとの組を変数情報生成手段1304に出力する機能。
機能5:同一スレッドのスレッドプライベート変数が同一論理ページ群になるように各スレッドプライベート変数に論理ページを割り当て、互いに対応するスレッドプライベート変数が同一ページ内オフセットとなるように各スレッドプライベート変数にページ内オフセットを割り当てる機能。
変数情報生成手段1304は、実施の形態1における変数情報生成手段204の一部の機能が変形されたものであり、オブジェクトコード生成手段1303と変数情報記憶手段223とに接続し、オブジェクトコード生成手段1303から出力されるスレッドプライベート宣言された変数とスレッド毎に割り当てられたそのスレッドプライベート宣言された変数に対応するスレッドプライベート変数とそれらスレッドプライベート変数を記憶するための領域に対応する論理ページアドレスとそれらスレッドプライベート変数を記憶するための領域を示すページ内オフセットとの組と、オブジェクトコード生成手段1303から出力されるスレッドプライベート宣言された変数以外の変数とその変数を記憶するための領域に対応する論理ページアドレスとその変数を記憶するための領域を示すページ内オフセットとの組とに基づいて変形変数情報を生成する機能と、生成された変形変数情報を変数情報記憶手段223に書き込む機能とを有する。
図14は、変数情報生成手段1304によって生成される変形変数情報のデータ構成図である。
同図に示されるように、変形変数情報は、オリジナル変数ID1401とスレッド1変数ID1402と第1論理ページアドレス1403とスレッド2変数ID1404と第2論理ページアドレス1405とページ内オフセット1406とを対応付けたものである。
オリジナル変数ID1401とスレッド1変数ID1402とスレッド2変数ID1404とは、それぞれ、実施の形態1における変数情報のオリジナル変数ID501とスレッド1変数ID502とスレッド2変数ID504と同様のものである。従って、ここではそれらの説明を省略する。
第1論理ページアドレス1403は、対応するスレッド1変数ID1402によって示される変数を記憶するための領域を含む論理ページのアドレスである。
第2論理ページアドレス1405は、対応するスレッド2変数ID1404によって示される変数を記憶するための領域を含む論理ページのアドレスであって、対応するスレッド2変数ID1404が空値の場合には、空値となる。
ページ内オフセット1406は、対応するスレッド1変数ID1402によって示される変数を記憶するための領域のページ内オフセットであって、対応するスレッド2変数ID1404が空値でない場合には、スレッド1変数ID1402によって示される変数を記憶するための領域のページ内オフセットでもある。
再び図13に戻って、変形情報処理装置の機能構成の説明を続ける。
オブジェクトコードロード手段1312は、実施の形態1におけるオブジェクトコードロード手段212の一部の機能が変形されたものであり、オブジェクトコード記憶手段222と第2ユーザ操作受付手段211とアドレス対応テーブル生成手段1313とオブジェクトコード実行手段215とに接続し、オブジェクトコード生成手段203の有する機能2と機能3とに加えて、以下の2つの機能を有する。
機能1a:第2ユーザ操作受付手段211から出力される情報で指定されるロード対象のオブジェクトコードを、オブジェクトコード記憶手段222から読み出して、そのオブジェクトコードで利用される記憶領域を含む論理ページのアドレスのそれぞれに物理ページのアドレスを対応付けて、対応付けた論理ページアドレスと物理ページアドレスとその記憶領域のページ内オフセットとの組をアドレス対応テーブル生成手段1313に出力する機能。
機能4:アドレス対応テーブル生成手段213によって生成される変形アドレス対応テーブルを参照して、第1物理ページアドレス(後述)とページ内オフセットとの組によって指定されるデータ記憶手段224の領域に初期値を代入して初期化する機能。
アドレス対応テーブル生成手段1313は、実施の形態1におけるアドレス対応テーブル生成手段213の一部の機能が変形されたものであり、変数情報記憶手段223とオブジェクトコードロード手段1312とアドレス対応テーブル記憶手段214とに接続し、アドレス対応テーブル生成手段213の有する機能1に加えて、以下の機能を有する。
機能2a:変数情報記憶手段223から読み出した変数情報と、オブジェクトコードロード手段1312から出力される論理ページと物理ページとページ内オフセットとの組とに基づいて、変形アドレス対応テーブルを生成してアドレス対応テーブル記憶手段214に書き込む機能。
図15は、アドレス対応テーブル生成手段1313によって生成される変形アドレス対応テーブルの構成図である。
同図に示されるように、変形アドレス対応テーブルは、変数ID1501と論理ページアドレス1502とページ内オフセット1503と第1物理ページアドレス1504と第2物理ページアドレス1505と状態フラグ1506と対変数ID1507とスレッド番号1508とを対応付けたものである。
変数ID1501と、状態フラグ1506と対変数ID1507とスレッド番号1508とは、それぞれ、実施の形態1におけるアドレステーブルの変数ID601と、状態フラグ605と対変数ID606とスレッド番号607と同様のものである。従って、ここではそれらの説明を省略する。
論理ページアドレス1502は、対応する変数ID1501によって示される変数を記憶するための領域を含む論理ページのアドレスである。
ページ内オフセット1503は、対応する変数ID1501によって示される変数を記憶するための領域のページ内アドレスである。
第1物理ページアドレス1504は、対応する変数ID1501によって示される変数がスレッド1で利用されるスレッドプライベート変数である場合には、その変数を記憶するための領域を含む物理ページのアドレスであり、対応する変数ID1501によって示される変数がスレッド2で利用されるスレッドプライベート変数である場合には、その変数に対応するスレッド1で利用されるスレッドプライベート変数を記憶するための領域を含む物理ページのアドレスであり、対応する変数ID1501によって示される変数が、スレッドプライベート変数でない場合にはその変数を記憶するための領域を含む物理ページのアドレスである。
第2物理ページアドレス1505は、対応する変数ID1501によって示される変数がスレッド1で利用されるスレッドプライベート変数である場合には、その変数に対応するスレッド2で利用されるスレッドプライベート変数を記憶するための領域を含む物理ページのアドレスであり、対応する変数ID1501によって示される変数がスレッド2で利用されるスレッドプライベート変数である場合にはその変数を記憶するための領域を含む物理ページのアドレスであり、対応する変数ID1501によって示される変数が、スレッドプライベート変数でない場合には空値となる。
再び図13に戻って、変形情報処理装置の機能構成の説明を続ける。
メモリアクセス手段1316は、オブジェクトコード実行手段215とデータ記憶手段224とアドレス対応テーブル記憶手段214とに接続し、オブジェクトコード実行手段215がデータ記憶手段224をアクセスするために用いる論理アドレスを、アドレス対応テーブル記憶手段214に記憶されている変形アドレス対応テーブルを用いて物理アドレスに変換し、変換した物理アドレスを用いて、データ記憶手段224へのアクセスを行う機能と、アドレス対応テーブル記憶手段214に記憶されているアドレス対応テーブルを書き換える機能とを有する
以上のように構成される変形情報処理装置の行う動作について、以下、図面を参照しながら説明する。
<動作>
ここでは、変形情報処理装置の行う動作のうち、特徴的な動作である、コンパイル手段1300の行う変形コンパイル処理と、プログラム実行手段1310の行う変形プログラム実行処理とについて説明する。
<変形コンパイル処理>
変形コンパイル処理は、実施の形態1におけるコンパイル処理の一部が変形されたものであって、ユーザによって指定されるアプリケーションプログラムをアプリケーションプログラム記憶手段221から読み出してコンパイルし、オブジェクトコードと変形変数情報とを生成する処理である。
実施の形態1におけるコンパイル処理では、オブジェクトコードと共に生成されるものが変数情報であったが、変形コンパイル処理では、オブジェクトコードと共に生成されるものが変形変数情報となっている。
図16は、コンパイル手段1300の行う変形コンパイル処理のフローチャートである。
変形コンパイル処理のうち、ステップS1600〜ステップS1650の処理は、それぞれ実施の形態1におけるコンパイル処理におけるステップS700〜ステップS750の処理と同様の処理である。従って、これらの処理についての説明を省略する。
ステップS1640の処理が終了すると、オブジェクトコード生成手段1303は、同一スレッドのスレッドプライベート変数が同一論理ページ群になるように各スレッドプライベート変数に論理ページを割り当てて(ステップS1643)、互いに対応するスレッドプライベート変数が同一ページ内オフセットとなるように各スレッドプライベート変数にページ内オフセットを割り当てる(ステップS1648)。
ステップS1648の処理が終了する、又はステップS1650の処理が終了すると、オブジェクトコード生成手段1303は中間コードからオブジェクトコードを生成し、生成したオブジェクトコードをオブジェクトコード記憶手段222に書き込む(ステップS1660)。
オブジェクトコード生成手段1303は、オブジェクトコード生成時に、アプリケーションプログラムで用いられている変数それぞれについて、変数がスレッドプライベート宣言されている変数であれば、そのスレッドプライベート宣言された変数と、スレッド毎に割り当てられたそのスレッドプライベート宣言された変数に対応するスレッドプライベート変数と、それらスレッドプライベート変数を記憶するための領域に対応する論理ページアドレスと、それらスレッドプライベート変数を記憶するための領域を示すページ内オフセットとの組を変数情報生成手段1304に出力し、変数がスレッドプライベート宣言されていない変数であれば、その変数と、その変数を記憶するための領域に対応する論理ページアドレスと、その変数を記憶するための領域を示すページ内オフセットとの組を変数情報生成手段1304に出力する。
ステップS1660の処理が終わると、変数情報生成手段1304は、オブジェクトコード生成手段1303から出力された変数と論理ページアドレスとページ内オフセットの組に基づいて、変形変数情報を生成し、生成した変数情報を変数情報記憶手段223に書き込む(ステップS1670)。
ステップS1670の処理が終わると、コンパイル手段1300は、変形コンパイル処理を終了する。
<変形プログラム実行処理>
変形プログラム実行処理は、実施の形態1におけるコンパイル処理の一部が変形されたものであって、ユーザによって指定されるオブジェクトコードをオブジェクトコード記憶手段222から読み出して、読み出したオブジェクトコードをロードして実行する処理である。
実施の形態1におけるプログラム実行処理は、論理アドレスを物理アドレスに変換するためのテーブルとして、図6に示されるアドレス対応テーブルを用いるが、変形プログラム実行処理は、論理アドレスを物理アドレスに変換するためのテーブルとして、図15に示される変形アドレス対応テーブルを用いる。
図17はプログラム実行手段1301の行う変形プログラム実行処理のフローチャートである。
変形プログラム実行処理のうち、ステップS1700〜ステップS1710の処理の処理は、それぞれ実施の形態1におけるプログラム実行処理におけるステップS800〜ステップS810の処理と同様の処理である。従って、これらの処理についての説明を省略する。
ステップS1710の処理が終了すると、アドレス対応テーブル生成手段1313は、オブジェクトコードロード手段1312から出力される論理ページと物理ページとページ内オフセットとの組と、変数情報記憶手段223に記憶されている、オブジェクトコードに対応する変形変数情報とに基づいて、変形アドレス対応テーブルを生成する(変形アドレス対応テーブル生成処理:ステップS1720)。
図18は、ステップS1720である変形アドレス対応テーブル生成処理のフローチャートである。
変形アドレス対応テーブル生成処理は、アドレス対応テーブル生成手段1313が、変形変数情報の第1論理ページアドレス1403(図14参照)とページ内オフセット1406との組と、第2論理ページアドレス1405とページ内オフセット1406との組とのそれぞれに対して、物理ページアドレス等を対応付けて変形アドレス対応テーブルを生成する処理である。
アドレス対応テーブル生成手段1313は、オブジェクトコードロード手段1312から出力される情報で指定されるオブジェクトコードに対応する変形変数情報を変数情報記憶手段223から読み出し、読み出した変形変数情報に含まれる第1論理ページアドレスとページ内オフセットとの組、又は第2論理ページアドレスとページ内オフセットとの組の中から1つの組を選択する。
組を選択されると、アドレス対応テーブル生成手段1313は、対応付けられているスレッド1変数ID1402、又はスレッド2変数ID1404によって示される変数がスレッドプライベート変数であるか否かを調べる(ステップS1800)。
スレッドプライベート変数であるか否かの判断は、選択されている論理ページアドレスとページ内オフセットとの組にスレッド1変数ID1402とスレッド2変数ID1404との双方が対応付けられているか否かによって判断される。
ステップS1800の処理において、対象の変数がスレッドプライベート変数である場合には(ステップS1800:Yes)、アドレス対応テーブル生成手段1313は、対となるスレッドプライベート変数が、生成中の変形アドレス対応テーブルの中に既に存在しているか否かを調べる(ステップS1810)。
ステップS1810の処理において、対となるスレッドプライベート変数を示す変数IDが、生成中のアドレス対応テーブルの中に存在していない場合には(ステップS1810:Yes)、アドレス対応テーブル生成手段1313は、(1)変数情報において対象の変数に対応付けられている第1論理ページアドレスに対応付けられている物理ページアドレスを第1物理ページアドレス1504(図15参照)とし、(2)変数情報において対象の変数に対応付けられている第2論理ページアドレスに対応付けられている物理ページアドレスを第2物理ページアドレス1505とし、(3)選択中の論理ページアドレス1502とページ内オフセット1503との組に、第1物理ページアドレス1504と第2物理ページアドレス1505と対応する変数を示す変数ID1501とを対応付ける(ステップS1820)。
ステップS1810の処理において、対となるスレッドプライベート変数を示す変数IDが、生成中の変形アドレス対応テーブルの中に存在している場合には(ステップS1810:No)、アドレス対応テーブル生成手段1313は、選択中の論理ページアドレスとページ内オフセットとの組に、対となるスレッドプライベート変数を示す変数ID1501に対応付けられている第1物理ページアドレス1504と第2物理ページアドレス1505と、対応する変数を示す変数ID1501とを対応付ける(ステップS1830)。
ステップS1820の処理が終了した場合、又はステップS1830の処理が終了した場合に、アドレス対応テーブル生成手段1313は、選択中の論理ページアドレスとページ内オフセットとの組に、対となるスレッドプライベート変数を示す変数IDを対変数ID1507として対応付け(ステップS1840)て、さらに、その論理ページアドレスとページ内オフセットとの組が使用されるスレッドを示すスレッド番号1508を対応付ける(ステップS1850)。
ステップS1800の処理において、対象の変数がスレッドプライベート変数でない場合には(ステップS1800:No)、アドレス対応テーブル生成手段1313は、(1)対応付けられている物理ページアドレスを第1物理ページアドレスとし、(2)空値を第2物理ページアドレスとし、(3)空値を対変数IDとし、(4)空値をスレッド番号として、(5)選択中の論理ページアドレスとページ内オフセットとの組に、第1物理ページアドレス1504と第2物理ページアドレス1505と対変数ID1507とスレッド番号1508とを対応付ける(ステップS1860)。
ステップS1850の処理が終了した場合、又はステップS1860の処理が終了した場合に、アドレス対応テーブル生成手段1313は、さらに、選択中の論理ページアドレスとページ内オフセットとの組に初期値”0”で初期化された状態フラグ1506を対応付ける(ステップS1870)。
ステップS1870の処理が終わると、アドレス対応テーブル生成手段1313は、変数情報に含まれる第1論理ページアドレスとページ内オフセットとの組、又は第2論理ページアドレスとページ内オフセットとの組の中に、未だ選択されていない組が存在するか否かを調べる(ステップS1880)。
ステップS1880の処理において、未だ選択されていない組が存在する場合には(ステップS1880:Yes)、アドレス対応テーブル生成手段1313は、未だ選択されていない論理ページアドレスとページ内オフセットとの組の中から1つの組を選択し(ステップS1890)、再びステップS1800の処理に戻って、ステップS1800以降の処理を行う。
ステップS1880の処理において、組が存在しない場合には(ステップS1880:No)、アドレス対応テーブル生成手段1313は、その変形アドレス対応テーブル生成処理を終了する。
再び図17に戻って、変形プログラム実行処理の説明を続ける。
ステップS1720の処理が終わると、アドレス対応テーブル生成手段1313は、生成した変形アドレス対応テーブルをアドレス対応テーブル記憶手段に書き込む(ステップS1730)。
ステップS1730の処理が終わると、オブジェクトコードロード手段1312は、アドレス対応テーブル生成手段1313によって生成された変形アドレス対応テーブルを参照して、第1物理ページアドレスとページ内オフセットとの組によって指定されるデータ記憶手段224の領域にのみ初期値を代入して初期化する(ステップS1740)。
ステップS1740の処理が終わると、オブジェクトコード実行手段215は、データ記憶手段224にロードされたオブジェクトコードを実行する(変形オブジェクトコード実行処理:ステップS1750)。
オブジェクトコード実行手段215は、オブジェクトコードを実行する場合において、データ記憶手段224への書き込み命令、又はデータ記憶手段224からの読み出し命令があるとき、メモリアクセス手段1316を用いてデータ記憶手段224への書き込み、又はデータ記憶手段224からの読み出しを行う。
図19、図20は、ステップS1750である変形オブジェクトコード実行処理のフローチャートである。
変形オブジェクトコード実行処理における各ステップの処理は、実施の形態1におけるオブジェクトコード実行処理における各ステップの処理において、「メモリアクセス手段216」を「メモリアクセス手段1316」に読み換え、「アドレス対応テーブル」を「変形アドレス対応テーブル」に読み換え、「論理アドレス」を「論理ページアドレスとページ内オフセットとの組」に読み換え、「第1物理アドレス」を「第1物理ページアドレスとページ内オフセットとの組」に読み換え、「第2物理アドレス」を「第2物理ページアドレスとページ内オフセットとの組」に読み換えたものと同様の処理である。従って、ここでは各処理の説明を省略する。
再び図17に戻って、変形プログラム実行処理の説明を続ける。
ステップS1750の処理を終了すると、プログラム実行手段1310は、その変形プログラム実行処理を終了する。
<具体例>
以上のように動作する変形情報処理装置の具体的動作例について、以下、図面を参照しながら説明する。
ここでは、アドレス対応テーブル記憶手段214に記憶されている変形アドレス対応テーブルが図15で示されるものである場合において、各状態フラグ1506が”0”で初期化されているときの論理ページアドレスとページ内オフセットとの組と、物理ページアドレスとページ内オフセットとの組との対応関係と、各状態フラグ1506が”1”となっているときの論理ページアドレスとページ内オフセットとの組と、物理ページアドレスとページ内オフセットとの組との対応関係とについて説明する。
図21(A)は、各状態フラグ1506が”0”で初期化されている場合において論理ページアドレスとページ内オフセットとの組を物理ページアドレスとページ内オフセットとの組に変換するときの、論理アドレスと物理アドレスとの対応関係を示す図で、図12(B)は、状態フラグ1506が”1”である場合において論理ページアドレスとページ内オフセットとの組を物理ページアドレスとページ内オフセットとの組に変換するときの、論理アドレスと物理アドレスとの対応関係を示す図である。
図21(A)、(B)において、論理アドレス領域2101は論理アドレス0x0000 0000を開始アドレスとする4096Byteの領域であって、スレッド1で利用される第1論理ページであり、論理アドレス領域2102は論理アドレス0x0000 1000を開始アドレスとする4096Byteの領域であって、スレッド2で利用される第2論理ページである。
ここで、論理アドレスとは、論理ページアドレスとページ内オフセットとを組み合わせた論理アドレスであって、例えば、論理アドレス0x0000 0000とは、論理ページアドレス0x0000 0とページ内オフセット0x000とを組み合わせた論理アドレスである(以下の、論理アドレス、物理アドレスも同様である。)。
論理アドレス領域2111は、論理アドレス0x0000 0000を開始アドレスとする4Byteの領域であって、変数ID1501(図15参照)が”x_1”で示されるスレッド1で利用されるスレッドプライベート変数(以下、変数x_1という。)に割り当てられた領域である。
論理アドレス領域2112は論理アドレス0x0000 0004を開始アドレスとする4Byteの領域であって、変数ID1501が”a_1”で示されるスレッド1で利用されるスレッドプライベート変数(以下、変数a_1という。)に割り当てられた領域である。
論理アドレス領域2121は論理アドレス0x0000 1000を開始アドレスとする4Byteの領域であって、変数ID1501が”x_2”で示されるスレッド2で利用されるスレッドプライベート変数(以下、変数x_2という。)に割り当てられた領域である。
論理アドレス領域2122は論理アドレス0x0000 1004を開始アドレスとする4Byteの領域であって、変数ID1501が”a_2”で示されるスレッド2で利用されるスレッドプライベート変数(以下、変数a_2という。)に割り当てられた領域である。
物理アドレス領域2131は物理アドレス0x1000 0000を開始アドレスとする4096Byteの領域であって、スレッド1で利用される第1論理ページ2101に対応する第1物理ページであり、物理アドレス領域2132は物理アドレス0x1000 1000を開始アドレスとする4096Byteの領域であって、スレッド2で利用される第2論理ページ2102に対応する第2物理ページである。
物理アドレス領域2141は物理アドレス0x1000 0000を開始アドレスとする4Byteの領域であって、物理アドレス領域2142は物理アドレス0x1000 0004を開始アドレスとする4Byteの領域であって、物理アドレス領域2151は物理アドレス0x1000 1000を開始アドレスとする4Byteの領域であって、物理アドレス領域2152は物理アドレス0x1000_1004を開始アドレスとする4Byteの領域である。
図21(A)に示されるように、各状態フラグ1506が”0”で初期化されている場合において論理アドレスが物理アドレスに変換されるときは、変数x_1用の論理アドレス領域2111と、変数x_2用の論理アドレス領域2121とが、共通の物理アドレス領域2141に変換され、変数a_1用の論理アドレス領域2112と、変数a_2用の論理アドレス領域2122とが、共通の物理アドレス領域2142に変換される。
その後、変数x_1用の論理アドレス領域2111、又は変数x_2用の論理アドレス領域2121への書き込みが行われて、変数a_1用の論理アドレス領域2112、又は変数a_2用の論理アドレス領域2122への書き込みが行われて、各状態フラグ1506が”1”に書き換えられると、図21(B)に示されるように、対応する状態フラグ1506が”1”である場合において論理アドレスを物理アドレスに変換されるときには、変数x_1用の論理アドレス領域2111が物理アドレス領域2141に変換され、変数x_2用の論理アドレス領域2121が物理アドレス領域2151に変換され、変数a_1用の論理アドレス領域2112が物理アドレス領域2142に変換され、変数a_2用の論理アドレス領域2122が物理アドレス領域2152に変換される。
<まとめ>
上述の変形情報処理装置によれば、スレッド1で利用されるスレッドプライベート変数に対応付けられた第1論理ページアドレスとページ内オフセットとの組で指定される領域と、その変数に対応するスレッド2で利用されるスレッドプライベート変数に対応付けられた第2論理ページアドレスとページ内オフセットとの組で指定される領域とは、いずれかのスレッドプライベート変数への書き込みが行われるまでは、共通の第1物理ページアドレスとページ内オフセットとの組で指定される領域を利用し、いずれかのスレッドプライベート変数への書き込みが行われた後は、それぞれ、第1物理ページアドレスとページ内オフセットとの組で指定される領域と、第2物理ページアドレスとページ内オフセットとの組で指定される領域とを利用する。
また、上述の変形情報処理装置によれば、第2物理ページアドレスとページ内オフセットとの組で指定される領域へのデータの書き込みは、スレッド1で利用されるスレッドプライベート変数、又はスレッド2で利用されるスレッドプライベート変数のいずれかに書き込みが行われた場合に限って行われる。
従って、アプリケーションプログラムによって書き込まれる必要のない論理ページアドレスとページ内オフセットとの組によって指定される領域のデータを、物理ページアドレスとページ内オフセットとの組によって指定される領域に書き込んでしまう無駄な書き込み動作の発生頻度を、従来よりも少なくすることができる。
<補足>
(1)実施の形態1において、情報処理装置がプロセッサを2つ備える例について説明したが、マルチスレッド実行制御機能を実現することができれば、プロセッサの数は必ずしも2つである必要はなく、例えば、プロセッサを4つや8つ備える構成であっても構わないし、複数のスレッドの処理を並列に実行することができるプロセッサを1つ備える構成であっても構わない。
(2)実施の形態1において、アプリケーションプログラム記憶手段221に記憶されているアプリケーションプログラムが、例えばC言語で記述されている例について説明したが、OpenMPをサポートする言語であれば、必ずしもC言語に限られる必要はなく、例えば、C++やFORTRANといった言語であっても構わない。
(3)実施の形態1において、アプリケーションプログラム記憶手段221に記憶されているアプリケーションプログラムで使用される変数は、記憶するための領域が4Byteの固定サイズである構成の例について説明したが、論理アドレスを用いて変数を記憶するための領域を一意に決定することができれば、必ずしも4Byteの固定サイズである必要はなく、例えば、6Byteの固定サイズであってもよく、さらには、記憶するための領域が可変長サイズであっても、論理アドレスとデータサイズを示す情報との組によって、変数を記憶するための領域を一意に決定するという構成であってもよい。
可変長サイズの変数の一種として、例えば、複数のデータの集合である配列が考えられる。
(4)実施の形態1において、プロセッサA101とプロセッサB102とROM103とRAM104とハードディスク装置インターフェース105と出力装置インターフェース106と入力装置インターフェース107とバスライン120とが、1つの半導体集積回路110に集積されている例について説明したが、これらの回路が必ずしも1つの集積回路に集積されている必要はなく、半導体集積回路110によって実現される機能を実現することができれば、例えば、各回路がそれぞれ互いに異なる集積回路に集積されている構成であっても構わない。
(5)実施の形態1において、プロセッサA101又はプロセッサB102によって実行されるプログラムの中にOSが含まれている例について説明したが、情報処理装置100によって実現される機能と同等の機能を実現することができれば、必ずしもOSが含まれている必要はない。
(6)実施の形態1において、アドレス対応テーブルがRAM104の一部の領域として実装されているアドレス対応テーブル記憶手段214に記憶されている例について説明したが、メモリアクセス手段216によってアクセスされることができれば、アドレス対応テーブルは必ずしもRAM104の一部の領域に記憶されている必要はなく、例えばプロセッサ内部のTLB(Translation Lookaside Buffer)に記憶されている構成であっても構わないし、半導体集積回路110の外部の外付けRAMに記憶されている構成であっても構わない。
(7)実施の形態1において、オブジェクトコード生成手段203は、ソースプログラムをコンパイルする際に、ソースプログラムから一端中間コードを生成し、生成した中間コードからオブジェクトコードを生成する構成の例を示したが、オブジェクトコードを生成することができれば、必ずしも一端中間コードを生成しない構成であっても構わない。
(8)実施の形態1において、変数情報生成手段204は、生成された変数情報を、オブジェクトコードとは別のファイルとして変数情報記憶手段223に書き込む構成の例を示したが、変数情報を書き込むことができれば、必ずしもオブジェクトコードとは別のファイルとしてに書き込む必要はなく、例えば、変数情報をいわゆるシンボリック情報としてオブジェクトコードに含ませて、オブジェクトコード記憶手段222に書き込む構成であっても構わない。
(9)実施の形態2において、オブジェクトコード生成手段1303は、同一スレッドのスレッドプライベート変数が同一論理ページ群になるように各スレッドプライベート変数に論理ページを割り当て、互いに対応するスレッドプライベート変数が同一ページ内オフセットとなるように各スレッドプライベート変数にページ内オフセットを割り当てる例について説明したが、各スレッドプライベート変数に、それぞれ互いに異なる論理ページとページ内オフセットとの組を割り当てることができれば、必ずしも、同一スレッドのスレッドプライベート変数が同一論理ページ群にならなくても構わないし、対応するスレッドプライベート変数が同一ページ内オフセットとならなくても構わない。
図22(A)、(B)は、スレッド1で利用されるスレッドプライベート変数を記憶するための領域2211とスレッド2で利用されるスレッドプライベート変数を記憶するための領域2212とが、互いに同じ論理ページ2201に割り当てられた場合において、各状態フラグが”0”で初期化されているとき(図22(A))と、各状態フラグが”1”であるとき(図22(B))とにおける、論理アドレスと物理アドレスとの対応関係を示す図である。
(10)実施の形態1で説明した半導体集積回路110は、様々な情報処理装置に利用されることができる
図23は、半導体集積回路110を利用した情報処理装置の一例として、半導体集積回路110を利用したブルーレイ録画再生システム2300の構成図である。
(11)以下、さらに本発明の一実施形態に係る情報処装置の構成及びその変形例と各効果について説明する。
(a)本発明の一実施形態に係る情報処理装置は、アプリケーションプログラムの1つの書き込み命令によりそれぞれアクセスに用いられる、互いに異なる第1論理アドレスと第2論理アドレスとを対応付ける変数情報を取得する変数情報取得手段と、物理アドレスによって指定される記憶領域を有する記憶手段と、論理アドレスを物理アドレスに変換するアドレス変換手段と、前記アドレス変換手段によって変換された物理アドレスを用いてアプリケーションプログラムの命令を実行する命令実行手段と、第1状態と第2状態とのいずれか一方の状態を示し、前記アドレス変換手段の行うアドレス変換の方法を特定するための状態フラグを記憶するフラグ記憶手段とを備え、前記アドレス変換手段は、前記状態フラグが前記第1状態を示す場合に、前記第1論理アドレスと前記第2論理アドレスとを第1物理アドレスに変換し、前記状態フラグが前記第2状態を示すときに、前記第1論理アドレスを前記第1物理アドレスに、前記第2論理アドレスを第2物理アドレスに変換し、前記命令実行手段は、前記状態フラグが第1状態を示す場合において、アプリケーションプログラムによる前記第2論理アドレスへの書き込み命令を実行するとき、当該命令を実行する際に前記状態フラグを前記第2状態とし、アプリケーションプログラムによる前記第1論理アドレスへの書き込み命令を実行するとき、当該命令を実行する際に前記状態フラグを前記第2状態として前記第1物理アドレスによって示される領域に記憶されているデータを前記第2物理アドレスによって示される領域に記憶させることを特徴とする。
上述の構成を備える本発明の一実施形態に係る情報処理装置は、第1論理アドレスによって指定される領域と第2論理アドレスによって指定される領域とが第1物理アドレスによって指定される領域を共用している場合において、第1論理アドレスによって指定される領域への書き込み、又は第2論理アドレスによって指定される領域への書き込みが発生するとき、第2物理アドレスで指定される領域へのデータの書き込みが行われる。
ここで、第1論理アドレスによって指定される領域と第2論理アドレスによって指定される領域と第1物理アドレスによって指定される領域と第2物理アドレスによって指定される領域とは、アプリケーションプログラムの1つの書き込み命令でアクセスされる領域である。
すなわち、新たに第2物理アドレスで指定される領域へのデータの書き込みは、アプリケーションプログラムの1つの書き込み命令でアクセスされる領域のデータのみの書き込みとなる。
従って、書き込まれる必要のない領域のデータを、物理アドレスによって指定される領域に書き込んでしまう無駄な書き込み動作の発生頻度を、従来よりも少なくすることができる。
(b)また、前記情報処理装置は、マルチスレッド実行制御機能を有し、前記第1論理アドレスと前記第2論理アドレスとは、アプリケーションプログラムによって生成される互いに異なるスレッドで利用される論理アドレスのうち、論理アドレスによって指定される領域の初期値が互いに等しいものである関係を有するとしてもよい。
このような構成にすることによって、互いに異なるスレッドで利用され、互いに共通の初期値を有するスレッドプライベート変数を、互いに共通の物理アドレスで指定される領域に対応付けることができるようになる。
(c)また、アプリケーションプログラムによって生成される互いに異なるスレッドで利用される論理アドレスの組の中に、指定される領域の初期値が互いに等しい論理アドレスから成るものが存在する場合に、該当する論理アドレスの利用に先駆けて、前記論理アドレスの組を構成する一つの論理アドレスを前記第1論理アドレスとし、前記論理アドレスの組を構成する前記第1論理アドレスでない論理アドレスの一つを前記第2論理アドレスとし、前記第1論理アドレスと前記第2論理アドレスとを対応付けて前記変数情報を生成する変数情報生成手段を備えるとしてもよい。
このような構成にすることによって、変数情報取得手段によって取得される変数情報を生成することがきるようになる。
(d)また、前記記憶手段の記憶領域は、複数のページから成り、前記第2物理アドレスは、前記第1物理アドレスによって指定される領域を含むページと互いに異なるページに含まれる領域を指定するものであるとしてもよい。
一般に、アプリケーションプログラムの1つの書き込み命令によりアクセスされる物理アドレスで指定される領域よりも、物理ページの領域の方が広い。
すなわち、物理ページを指定するために必要なビット数の方が、アプリケーションプログラムの1つの書き込み命令によりアクセスされる領域を指定するために必要な物理アドレスのビット数よりも少ない。
このような構成にすることによって、第1物理アドレスで指定される領域と第の物理アドレスで指定される領域との区別を、それぞれが含まれるページを区別するだけで実現できるようになるため、第1物理アドレスと第2アドレスとを指定するために必要なビット数よりも少ないビット数の物理アドレスで、第1物理アドレスで指定される領域と第の物理アドレスで指定される領域とを区別することができるようになる。
本発明に係る情報処理装置は、マルチスレッド実行制御機能を有する機器に広く利用することができる。
200 コンパイル手段
201 第1ユーザ操作受付手段
202 アプリケーションプログラム読み出し手段
203 オブジェクトコード生成手段
204 変数情報生成手段
210 プログラム実行手段
211 第2ユーザ操作受付手段
212 オブジェクトコードロード手段
213 アドレス対応テーブル生成手段
214 アドレス対応テーブル記憶手段
215 オブジェクトコード実行手段
216 メモリアクセス手段
221 アプリケーションプログラム記憶手段
222 オブジェクトコード記憶手段
223 変数情報記憶手段
224 データ記憶手段

Claims (7)

  1. アプリケーションプログラムの1つの書き込み命令によりそれぞれアクセスに用いられる、互いに異なる第1論理アドレスと第2論理アドレスとを対応付ける変数情報を取得する変数情報取得手段と、
    物理アドレスによって指定される記憶領域を有する記憶手段と、
    論理アドレスを物理アドレスに変換するアドレス変換手段と、
    前記アドレス変換手段によって変換された物理アドレスを用いてアプリケーションプログラムの命令を実行する命令実行手段と、
    第1状態と第2状態とのいずれか一方の状態を示し、前記アドレス変換手段の行うアドレス変換の方法を特定するための状態フラグを記憶するフラグ記憶手段とを備え、
    前記アドレス変換手段は、前記状態フラグが前記第1状態を示す場合に、前記第1論理アドレスと前記第2論理アドレスとを第1物理アドレスに変換し、前記状態フラグが前記第2状態を示すときに、前記第1論理アドレスを前記第1物理アドレスに、前記第2論理アドレスを第2物理アドレスに変換し、
    前記命令実行手段は、前記状態フラグが第1状態を示す場合において、アプリケーションプログラムによる前記第2論理アドレスへの書き込み命令を実行するとき、当該命令を実行する際に前記状態フラグを前記第2状態とし、アプリケーションプログラムによる前記第1論理アドレスへの書き込み命令を実行するとき、当該命令を実行する際に前記状態フラグを前記第2状態として前記第1物理アドレスによって示される領域に記憶されているデータを前記第2物理アドレスによって示される領域に記憶させる
    ことを特徴とする情報処理装置。
  2. 前記情報処理装置は、マルチスレッド実行制御機能を有し、
    前記第1論理アドレスと前記第2論理アドレスとは、アプリケーションプログラムによって生成される互いに異なるスレッドで利用される論理アドレスのうち、論理アドレスによって指定される領域の初期値が互いに等しいものである関係を有する
    ことを特徴とする請求項1記載の情報処理装置。
  3. アプリケーションプログラムによって生成される互いに異なるスレッドで利用される論理アドレスの組の中に、指定される領域の初期値が互いに等しい論理アドレスから成るものが存在する場合に、該当する論理アドレスの利用に先駆けて、前記論理アドレスの組を構成する一つの論理アドレスを前記第1論理アドレスとし、前記論理アドレスの組を構成する前記第1論理アドレスでない論理アドレスの一つを前記第2論理アドレスとし、前記第1論理アドレスと前記第2論理アドレスとを対応付けて前記変数情報を生成する変数情報生成手段を備える
    ことを特徴とする請求項2記載の情報処理装置。
  4. 前記記憶手段の記憶領域は、複数のページから成り、
    前記第2物理アドレスは、前記第1物理アドレスによって指定される領域を含むページと互いに異なるページに含まれる領域を指定するものである
    ことを特徴とする請求項2記載の情報処理装置。
  5. 物理アドレスによって指定される記憶領域を有する記憶手段と、第1状態と第2状態とのいずれか一方の状態を示す状態フラグを記憶するためのフラグ記憶手段とを備える情報処理装置に情報処理させるための情報処理方法であって、
    アプリケーションプログラムの1つの書き込み命令によりそれぞれアクセスに用いられる、互いに異なる第1論理アドレスと第2論理アドレスとを対応付ける変数情報を取得する変数情報取得ステップと、
    論理アドレスを物理アドレスに変換するアドレス変換ステップと、
    前記アドレス変換ステップを利用して、アプリケーションプログラムの命令を実行する命令実行ステップとを備え、
    前記アドレス変換ステップは、前記状態フラグが前記第1状態を示す場合に、前記第1論理アドレスと前記第2論理アドレスとを第1物理アドレスに変換し、前記状態フラグが前記第2状態を示すときに、前記第1論理アドレスを前記第1物理アドレスに、前記第2論理アドレスを第2物理アドレスに変換し、
    前記命令実行ステップは、前記状態フラグが第1状態を示す場合において、アプリケーションプログラムによる前記第2論理アドレスへの書き込み命令を実行するとき、当該命令を実行する際に前記状態フラグを前記第2状態とし、アプリケーションプログラムによる前記第1論理アドレスへの書き込み命令を実行するとき、当該命令を実行する際に前記状態フラグを前記第2状態として前記第1物理アドレスによって示される領域に記憶されているデータを前記第2物理アドレスによって示される領域に記憶させる
    ことを特徴とする情報処理方法。
  6. アプリケーションプログラムの1つの書き込み命令によりそれぞれアクセスに用いられる、互いに異なる第1論理アドレスと第2論理アドレスとを対応付ける変数情報を取得する変数情報取得手段と、
    物理アドレスによって指定される記憶領域を有する記憶手段と、
    論理アドレスを物理アドレスに変換するアドレス変換手段と、
    前記アドレス変換手段によって変換された物理アドレスを用いてアプリケーションプログラムの命令を実行する命令実行手段と、
    第1状態と第2状態とのいずれか一方の状態を示し、前記アドレス変換手段の行うアドレス変換の方法を特定するための状態フラグを記憶するフラグ記憶手段とを備え、
    前記アドレス変換手段は、前記状態フラグが前記第1状態を示す場合に、前記第1論理アドレスと前記第2論理アドレスとを第1物理アドレスに変換し、前記状態フラグが前記第2状態を示すときに、前記第1論理アドレスを前記第1物理アドレスに、前記第2論理アドレスを第2物理アドレスに変換し、
    前記命令実行手段は、前記状態フラグが第1状態を示す場合において、アプリケーションプログラムによる前記第2論理アドレスへの書き込み命令を実行するとき、当該命令を実行する際に前記状態フラグを前記第2状態とし、アプリケーションプログラムによる前記第1論理アドレスへの書き込み命令を実行するとき、当該命令を実行する際に前記状態フラグを前記第2状態として前記第1物理アドレスによって示される領域に記憶されているデータを前記第2物理アドレスによって示される領域に記憶させる
    ことを特徴とする集積回路。
  7. 請求項1記載の情報処理装置と、
    ストリームの入力を受け付けるストリーム受付部とを備え、
    前記命令実行手段の実行するアプリケーションプログラムの命令に、前記ストリーム受付部が受け付けたストリームに含まれるデータを用いて行う処理が含まれている
    ことを特徴とするストリーム再生システム。
JP2010183241A 2010-08-18 2010-08-18 情報処理装置、情報処理方法、半導体集積回路、及びストリーム再生システム Withdrawn JP2012043138A (ja)

Priority Applications (1)

Application Number Priority Date Filing Date Title
JP2010183241A JP2012043138A (ja) 2010-08-18 2010-08-18 情報処理装置、情報処理方法、半導体集積回路、及びストリーム再生システム

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
JP2010183241A JP2012043138A (ja) 2010-08-18 2010-08-18 情報処理装置、情報処理方法、半導体集積回路、及びストリーム再生システム

Publications (1)

Publication Number Publication Date
JP2012043138A true JP2012043138A (ja) 2012-03-01

Family

ID=45899382

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2010183241A Withdrawn JP2012043138A (ja) 2010-08-18 2010-08-18 情報処理装置、情報処理方法、半導体集積回路、及びストリーム再生システム

Country Status (1)

Country Link
JP (1) JP2012043138A (ja)

Similar Documents

Publication Publication Date Title
JP3601341B2 (ja) 並列プログラム生成方法
US9606919B2 (en) Method and apparatus to facilitate shared pointers in a heterogeneous platform
US8954943B2 (en) Analyze and reduce number of data reordering operations in SIMD code
JP5733385B2 (ja) エンディアン変換方法、およびシステム
US20140310484A1 (en) System and method for globally addressable gpu memory
US20050160415A1 (en) Method and system for improving performance of Java virtual machine
US10896127B2 (en) Highly configurable memory architecture for partitioned global address space memory systems
JP2008217134A (ja) メモリ管理方法、情報処理装置、プログラムの作成方法及びプログラム
JP5118745B2 (ja) メモリアクセス命令のベクトル化
EP1094392B1 (en) Method and apparatus for interfacing with a secondary storage system
JP4041248B2 (ja) コンパイラ装置、コンパイルプログラムが記録されたコンピュータ読み取り可能な記録媒体及びコンパイル方法
US8266416B2 (en) Dynamic reconfiguration supporting method, dynamic reconfiguration supporting apparatus, and dynamic reconfiguration system
JP7239547B2 (ja) データ処理方法、装置、及び関連製品
US20220237041A1 (en) Parallel processing system performing in-memory processing
CN116830080A (zh) 经合并的机器级中间表示优化
JP2013092852A (ja) バス接続回路、半導体装置及びバス接続回路の動作方法
Winterstein et al. Pass a pointer: Exploring shared virtual memory abstractions in OpenCL tools for FPGAs
US20130275688A1 (en) Data processing device and method
JP2012043138A (ja) 情報処理装置、情報処理方法、半導体集積回路、及びストリーム再生システム
WO2019008715A1 (ja) データロードプログラム、データロード方法およびデータロード装置
JP2018124877A (ja) コード生成装置、コード生成方法、およびコード生成プログラム
WO2010110430A1 (ja) プログラムの飜訳装置、飜訳方法、ならびに、記録媒体
Iwashita et al. A source-to-source translation of coarray Fortran with MPI for high performance
US11829736B2 (en) Method of optimizing register memory allocation for vector instructions and a system thereof
US20240037028A1 (en) Software sharing across multiple cores

Legal Events

Date Code Title Description
A300 Withdrawal of application because of no request for examination

Free format text: JAPANESE INTERMEDIATE CODE: A300

Effective date: 20131105