説明

情報処理装置、情報処理方法及び制御プログラム

【課題】メモリに対するアクセス時間を低減し、ひいては、実行パフォーマンスを向上する。
【解決手段】実施形態の情報処理装置は、並列処理が可能な複数のプロセッサと、前記複数のプロセッサで共有されるメモリと、を備えている。そして、割当手段は、メモリのアクセス範囲が予め記述可能とされるとともに複数のスレッドで構成されたワークグループを、それぞれ記述されたアクセス範囲を参照して複数のプロセッサのいずれかに実行させるために割り当てる。

【発明の詳細な説明】
【技術分野】
【0001】
本発明の実施形態は、情報処理装置、情報処理方法及び制御プログラムに関する。
【背景技術】
【0002】
従来複数のスレッドの命令を並列実行するマルチスレッドプロセッサが知られている(例えば、特許文献1参照)。
このようなマルチスレッドプロセッサとして、GPU(Graphics Processing Units)が知られているが、近年、このGPUを並列演算能力を汎用演算に用いるGPGPU(General Purpose computing on Graphics Processing Units)が提案されている。
【0003】
例えば、GPGPUの実行プラットフォームとしては、CUDA(Compute Unified Device Architecture)、OpenCL(Open Computing Language)といった技術が知られている。
これらのGPGPUの実行プラットフォームにおいては、GPU上に多数搭載されている演算プロセッサを並列に動作させることによって、大規模な演算を高速に実行することが可能となっている。
【先行技術文献】
【特許文献】
【0004】
【特許文献1】特開2010−277371号公報
【発明の概要】
【発明が解決しようとする課題】
【0005】
ところで、上述したようなGPGPUの実行プラットフォーム上におけるプログラミングにおいて、実行パフォーマンスを大きく左右する要因は、演算プロセッサ上における演算時間ではなく、各演算プロセッサがメモリにアクセスしてデータの読み書きを行うアクセス時間が主なものとなっていた。
【0006】
本発明は、上記に鑑みてなされたものであって、メモリに対するアクセス時間を低減し、ひいては、実行パフォーマンスを向上することが可能な情報処理装置、情報処理方法及び制御プログラムを提供することにある。
【課題を解決するための手段】
【0007】
実施形態の情報処理装置は、並列処理が可能な複数のプロセッサと、前記複数のプロセッサで共有されるメモリと、を備えている。
そして、割当手段は、メモリのアクセス範囲が予め記述可能とされるとともに複数のスレッドで構成されたワークグループを、それぞれ記述されたアクセス範囲を参照して複数のプロセッサのいずれかに実行させるために割り当てる。
【図面の簡単な説明】
【0008】
【図1】図1は、実施形態に係る情報処理装置の概要構成の一例を示す図である。
【図2】図2は、GPUの概要構成説明図である。
【図3】図3は、演算ユニットの詳細構成説明図である。
【図4】図4は、GPUにおけるアプリケーションプログラムの実行モデルの概念説明図である。
【図5】図5は、各ワークグループのVRAMの利用状況の説明図である。
【図6】図6は、APIの仕様の一例の説明図である。
【図7】図7は、実施形態の処理フローチャートである。
【発明を実施するための形態】
【0009】
次に図面を参照して実施形態について説明する。
図1は、実施形態に係る情報処理装置の概要構成の一例を示す図である。
情報処理装置10は、大別すると、汎用プロセッサであるMPU11、グラフィックプロセッサであるGPU12、比較的高速なバス(Bus)を介して通信を行う回路を対象としてインタフェース動作を行うノースブリッジ13、ノースブリッジ13にメモリバス14を介して接続され、記録媒体として機能して、各種制御プログラム等が格納されたROM15、ノースブリッジ13にメモリバス14を介して接続され、ワークエリア等として各種データを格納するRAM16、ノースブリッジ13に接続され比較的低速なバスを介して通信を行う回路を対象としてインタフェース動作を行うサウスブリッジ17、サウスブリッジ17に接続され、外部記憶装置として機能するHDD18、サウスブリッジ17にPCIバス19を介して接続され、通信インタフェース動作を行う通信インタフェース(IF)部20を備えている。
また、GPU12には、キャッシュ21を介してVRAM22が接続されている。
上記構成において、MPU11は、いわゆるマイクロコンピュータとして構成されており、図示しないCPU、ROM、RAM等を備えている。
GPU12は、行列演算などの定式化された単純な演算の繰り返しを高速で行うための複数の演算ユニットを多数備えている。
【0010】
ここで、図2を参照してGPU12について詳細に説明する。
図2は、GPUの概要構成説明図である。
GPU12は、複数の演算ユニット31と、これら複数の演算ユニット31上におけるスレッドの実行制御を行うコントローラ32を備えている。各演算ユニット31は、例えば、PCI Express2.0規格に則った高速グラフィックバス33を介して、キャッシュ21に接続されている。さらにこのキャッシュ21を介して、複数の演算ユニット31により共用されるVRAM22が接続されている。
VRAM22は、大別すると、汎用メモリエリア34及び各種定数を格納する定数メモリエリア35を備えている。
【0011】
図3は、演算ユニットの詳細構成説明図である。
GPU12を構成している各演算ユニット31は、複数の演算エレメント41と、全演算エレメント41により共有されるメモリエリアを構成するローカルメモリ42と、各演算エレメント41に対応づけられ、当該対応する演算エレメント41により占有されるメモリエリアを構成するプライベートメモリ43と、各演算エレメント41とローカルメモリ42とを相互に接続するバス44と、を備えている。ここで、バス44と、高速グラフィックバス33とは、相互に接続されている。
【0012】
次に再び情報処理装置の構成について説明する。
ノースブリッジ13は、比較的広帯域で高速なバスの通信インタフェース動作を行っている。
ROM15は、制御プログラム等の不揮発的に記憶する必要があるデータを格納している。
RAM16は、いわゆるメインメモリを構成しており、各種のデータを一時的に格納する。
サウスブリッジ17は、機械的な駆動部を有するHDD、光ディスクドライブ等の比較的狭帯域で低速なバスに接続される装置との間の通信インタフェース動作を行う。
HDD18は、低速動作ではあるが、大容量のデータを記憶する。
通信インタフェース(IF)部20は、図示しないイーサネット(登録商標)規格に準拠した通信ネットワークを介して他の情報処理装置等との間でデータ通信を行う際の通信インタフェース動作を行う。
【0013】
ここで、実施形態の動作説明に先立ち、処理対象のデータについて説明する。
本実施形態においては、スレッドを実行する演算ユニット31は、可能な場合には、メモリアクセス領域(メモリアクセス範囲)が近いスレッド群(≒タスク)を近い時間に実行するようにされている。
GPU12においては、一つのアプリケーションプログラムが複数のデータに対して実行されるSPMD(Single Program Multiple Data)という実行モデルが適用されることが多い。
【0014】
ところで、一つのアプリケーションプログラムは、並列に実行されるスレッド(ワークアイテム)と呼ばれる小さなプログラムで構成されている。そして、スレッドを実行するに際しては、複数のスレッドが、一つのワークグループとしてグルーピングされてワークグループ単位で実行される。したがって、一つのアプリケーションプログラムを実行することで複数のワークグループが並列に実行されることとなる。
【0015】
そして、各演算ユニット31には、ワークグループ単位で割り当てがなされる。演算ユニット31に割り当てられたワークグループを構成する複数のスレッドには、割り当てがなされた演算ユニット31に対応するローカルメモリ42が共有可能とされている。すなわち、同一の演算ユニット31に割り当てられた複数のワークグループは、ローカルメモリ42を共有する。
さらにワークグループを構成する各スレッドは、それぞれ演算エレメント41に割り当てられ、各演算エレメント41に割り当てられたスレッドは、当該演算エレメント41に割り当てられたスレッドのみが参照可能なプライベートメモリ43を利用可能な状態となっている。
【0016】
図4は、GPUにおけるアプリケーションプログラムの実行モデルの概念説明図である。
図4に示すように、アプリケーションプログラムAPLは、概念上、2次元のインデックス=(Wx,Wy)で識別され、それぞれ並列に実行可能とされた複数のワークグループWGにより構成されている。各ワークグループWGは、同様にそれぞれ並列に実行可能とされた複数のスレッドTHにより構成されている。
【0017】
図5は、各ワークグループのVRAMの利用状況の説明図である。
図5においては、3つのワークグループがメモリを参照している場合の説明図である。
図5に示すように、グループID=100が割り当てられているワークグループWG1のVRAM22の汎用メモリエリア34の参照エリアと、グループID=300が割り当てられているワークグループWG3のVRAM22の汎用メモリエリア34の参照エリアと、は一部重なる領域がある。
【0018】
これに対し、グループID=200が割り当てられているワークグループWG2の参照エリアは、いずれのワークグループWG1、WG3が参照しているエリアとは重なりがなく、異なる領域となっている。
上述したようにグループID=100が割り当てられているワークグループWG1のVRAM22の汎用メモリエリア34の参照エリアと、グループID=300が割り当てられているワークグループWG3のVRAM22の汎用メモリエリア34の参照エリアと、は一部重なりがある。したがって、このまま、ワークグループWG1と、ワークグループWG3と、を並列動作可能な別の演算ユニット31にそれぞれ割り当てたとしても、ワークグループWG1及びワークグループWG3が同時に並列して実行された場合には、同一のメモリアドレスにアクセスすることはできない。すなわち、同一データのフェッチは排他制御により異なる演算ユニット31で同時に行うことはできないため、実質的な実行効率が低下することとなる。
【0019】
したがって、このような場合には、ワークグループWG1及びワークグループWG3を同一の演算ユニット31に割り当てることで、メモリアクセス空間における最適な割り当て(空間方向のアクセス最適化)を行うことが可能となる。
【0020】
一方、グループID=100が割り当てられているワークグループWG1のVRAM22の汎用メモリエリア34の参照エリアと、グループID=200が割り当てられているワークグループWG2のVRAM22の汎用メモリエリア34の参照エリアと、は、重なりがない。
このため、このままワークグループWG1と、ワークグループWG2と、を同一の演算ユニット31に割り当てたとしても、例えば、ワークグループWG1の次にワークグループWG2を同一の演算ユニット31に割り当てて実行した場合には、演算ユニット31は、ワークグループWG1の処理終了後、ワークグループWG2の処理を行う前にデータの再読込を行う必要があり、キャッシュ21の利用効率が低下する。
【0021】
したがって、このような場合には、ワークグループWG1と、ワークグループWG2を同時並行して処理が可能な別の演算ユニット31にそれぞれ割り当てることで、時間軸方向における最適な割り当て(時間方向のアクセス最適化)を行うことが可能となる。
これらのため、本実施形態においては、ワークグループについて空間方向及び時間方向のアクセス最適化を行うために、ランタイムモジュールに各ワークグループの参照エリア(メモリアクセス範囲)を通知する構成を採っている。
【0022】
この場合に、各ワークグループWG1〜WG3に参照エリアが割り当てられる態様としては、アドレスが連続したメモリエリアが参照エリアとして割り当てられるラスター形式の割り当て態様と、アドレスは不連続であるが、概念的に2次元のメモリ空間上でタイル形状(矩形形状)のメモリエリアが参照エリアとして割り当てられるタイル形式の割り当て態様(連続したメモリ空間では、所定アドレスずつ離れて、複数の同一容量のメモリ空間が配置される態様となる)、が存在する。
そこで、本実施形態においては、APIの仕様として、参照エリアがラスター形式で割り当てられる場合と、タイル形式で割り当てられる場合との、双方に対応可能な仕様を採用した。
【0023】
図6は、APIの仕様の一例の説明図である。
図6の記述態様は、OpenCL規格に則った場合における参照エリア通知関数の記述態様である。
参照エリアがラスター形式で通知される場合の参照エリア通知関数FNのパラメータとしては、システムのリソースを管理し、ハードウェアとソフトウェアコンポーネントのやりとりを管理するカーネル(kernel)を特定するためのカーネル名パラメータ、ラスター形式に相当する参照エリア割り当て形式パラメータ=「TYPE_RASTER」、参照エリア開始アドレスパラメータ(start_position)、参照エリアサイズパラメータ(size)及び参照エリア通知関数FNのフォーマットを一定とするために使用しないパラメータについて、対応するパラメータが存在しないことを示すNULLパラメータがある。
【0024】
また、参照エリアがタイル形式で通知される場合の参照エリア通知関数FNのパラメータとしては、カーネルを特定するためのカーネル名パラメータ、タイル形式に相当する参照エリア割り当て形式パラメータ=「TYPE_TILE」、参照エリア開始アドレスパラメータ(start_position)、参照エリアを2次元のメモリ空間として表現した場合の横幅に相当する連続アドレス数を示す参照エリア水平サイズパラメータ(h_size)及び参照エリアを2次元のメモリ空間として表現した場合の縦幅に相当する参照エリア垂直サイズパラメータ(v_size)がある。
【0025】
この場合において、参照エリア開始アドレスパラメータは、ワークグループWG及び当該ワークグループWGに含まれるスレッドTHの数(アイテム数)により定まり、ワークグループWGを特定するためのインデックスに対応するワークグループID組込変数g_idx及び当該ワークグループIDパラメータg_idxで特定されるワークグループに含まれるスレッドTHの数を示すスレッド数(アイテム数)組込変数g_numに基づいて算出される。これらのワークグループID組込変数g_idx及びスレッド数組込変数g_numは、ワークグループを構成するスレッドを特定するためのx方向及びy方向の2次元のデータであり、次元を表すパラメータ([0]又は[1])によりx方向(=[0])及びy方向(=[1])が示される。
【0026】
図6の例の場合、
start_position=g_num[0]*g_idx[0]+g_num[1]*g_idx[1]
となっている。
また、参照エリアサイズパラメータ(size)は、定数である。
【0027】
次に実施形態の動作を説明する。
図7は、実施形態の処理フローチャートである。
まず、コントローラ32は、キューの先頭にあるタスクのグループのメモリアクセス領域を取得する(ステップS10)。
【0028】
次にコントローラ32は、キューがいっぱいであるか否かを判別する(ステップS11)。
ステップS11の判別において、キューがいっぱいである場合には(ステップS11;Yes)、再び処理をステップS10に移行して待機状態となる。
ステップS11の判別において、キューがいっぱいではない、すなわち、キューに余裕がある場合には(ステップS11;No)、スケジュール待ちをしているタスクのグループがあり、他のタスクのグループをキューに積むことが可能であるか否かを判別する(ステップS12)。
【0029】
ステップS12の判別において、スケジュール待ちをしているタスクのグループがない場合には(ステップS12;No)、再び処理をステップS10に移行して待機状態となる。
ステップS12の判別において、スケジュール待ちをしているタスクのグループがあり、他のタスクのグループをキューに積むことが可能である場合には(ステップS12;Yes)、当該スケジュール待ちをしているタスクのグループのメモリアクセス領域を計算により算出する(ステップS13)。
【0030】
次にコントローラ32は、算出したメモリアクセス領域がキューの先頭にあるグループのメモリアクセス領域と重なっているか否かを判別する(ステップS14)。
ステップS14の判別において、算出したタスクのグループのメモリアクセス領域がキューの先頭にあるグループのメモリアクセス領域と重なっている場合には(ステップS14;Yes)、当該タスクのグループをメモリアクセス領域が重なるグループのリストに追加し(ステップS15)、処理をステップS17に移行する。
【0031】
一方、ステップS14の判別において、算出したタスクのグループのメモリアクセス領域がキューの先頭にあるグループのメモリアクセス領域と重なっていない場合には(ステップS14;No)、当該タスクのグループをメモリアクセス領域が重ならないグループのリストに追加する(ステップS16)。
続いてコントローラ32は、メモリアクセス領域が重なるグループのリスト及びメモリアクセス領域が重ならないグループのリストに含まれるタスクのグループの数がキューにタスクのグループを積むか否かを判定するための所定の閾値を超えたか否かを判別する(ステップS17)。
【0032】
ステップS17の判別において、両リストに含まれる全タスクのグループの数が所定の閾値を超えていない場合には(ステップS17;No)、コントローラ32は、スケジュール待ちをしているタスクのグループがあり、他のタスクのグループをキューに積むことが可能であるか否かを再び判別する(ステップS18)。
ステップS18の判別において、スケジュール待ちしているタスクのグループがある場合には(ステップS18;Yes)、処理を再びステップS13に移行し、以下、同様の処理を行う。
【0033】
ステップS18の判別において、スケジュール待ちしているタスクのグループがない場合には(ステップS18;No)、コントローラ32は、メモリアクセス領域が重なるグループのリストに含まれるタスクのグループのうち、最も重なる領域が多いタスクのグループを時間方向にキューに積む(ステップS19)。すなわち、キューの先頭にあるワークグループの処理後に同一の演算ユニット3(あるいは、演算エレメント41)において、処理がなされるようにキューに積まれることとなる。
【0034】
また、コントローラ32は、メモリアクセス領域が重ならないグループのリストに含まれるタスクのグループのうち、最もアドレスが近いタスクのグループを空間方向にキューに積む(ステップS20)。すなわち、キューの先頭にあるタスクのグループとは、別の演算ユニット31(あるいは演算エレメント41)において、処理がなされるようにキューに積まれることとなる。
【0035】
以上の説明のように、本実施形態によれば、メモリアクセス領域(メモリ参照領域)が重なり、同時にメモリにアクセスすることができないワークグループ同士あるいはスレッド同士は、時間方向にキューに積まれるように割り当てられる。したがって、キャッシュにおけるヒット率を向上させることができ、処理効率を向上させることができる。
【0036】
また、メモリアクセス領域(メモリ参照領域)が重ならず、同時にメモリにアクセスすることが可能なワークグループ同士あるいはスレッド同士は、空間方向にキューに積まれて、すなわち、別の演算ユニット31あるいは別の演算エレメント41に割り当てられる。したがって、同時にメモリにアクセスすることが可能なワークグループ同士あるいはスレッド同士を、同時並列に処理することが可能となり、処理効率を向上させることができる。
【0037】
本実施形態の情報処理装置で実行される制御プログラムは、インストール可能な形式又は実行可能な形式のファイルでCD−ROM、フレキシブルディスク(FD)、CD−R、DVD(Digital Versatile Disk)等のコンピュータで読み取り可能な記録媒体に記録されて提供される。
【0038】
また、本実施形態の情報処理装置で実行される制御プログラムを、インターネット等のネットワークに接続されたコンピュータ上に格納し、ネットワーク経由でダウンロードさせることにより提供するように構成しても良い。また、本実施形態の情報処理装置で実行される制御プログラムをインターネット等のネットワーク経由で提供または配布するように構成しても良い。
【0039】
また、本実施形態の情報処理装置の制御プログラムを、ROM等の記憶媒体に予め組み込んで提供するように構成してもよい。
本実施形態の情報処理装置で実行される制御プログラムは、上述した各部(参照手段、割当手段)を含むモジュール構成となっており、実際のハードウェアとしてはCPU(プロセッサ)がROM等の記憶媒体あるいは上記記録媒体から制御プログラムを読み出して実行することにより上記各手段が主記憶装置上にロードされ、参照手段、割当手段が主記憶装置上に生成されるようになっている。
【0040】
本発明のいくつかの実施形態を説明したが、これらの実施形態は、例として提示したものであり、発明の範囲を限定することは意図していない。これら新規な実施形態は、その他の様々な形態で実施されることが可能であり、発明の要旨を逸脱しない範囲で、種々の省略、置き換え、変更を行うことができる。これら実施形態やその変形は、発明の範囲や要旨に含まれるとともに、特許請求の範囲に記載された発明とその均等の範囲に含まれる。
【符号の説明】
【0041】
10…情報処理装置、11…MPU、12…GPU、15…ROM(記録媒体)、21…キャッシュ、22…VRAM、31…演算ユニット(プロセッサ)、32…コントローラ(参照手段、割当手段)、33…高速グラフィックバス、34…汎用メモリエリア(メモリ)、41…演算エレメント(プロセッサ)、42…ローカルメモリ(メモリ)、43…プライベートメモリ、44…バス、APL…アプリケーションプログラム、FN…参照エリア通知関数、TH…スレッド、WG、WG1〜WG3…ワークグループ、WGG…ワークグループ群。

【特許請求の範囲】
【請求項1】
並列処理が可能な複数のプロセッサと、
前記複数のプロセッサで共有されるメモリと、
前記メモリのアクセス範囲が予め記述可能とされるとともに複数のスレッドで構成されたワークグループを、それぞれ記述された前記アクセス範囲を参照して前記複数のプロセッサのいずれかに実行させるために割り当てる割当手段と、
を備えた情報処理装置。
【請求項2】
前記プロセッサは、キャッシュを介して前記メモリに接続されており、
前記割当手段は、前記アクセス範囲の少なくとも一部が重複する複数のワークグループを同一のプロセッサに連続して割り当てる、
請求項1記載の情報処理装置。
【請求項3】
前記割当手段は、前記アクセス範囲の少なくとも一部が重複する複数のワークグループのうち、最も重複範囲が大きいワークグループを優先的に同一のプロセッサに割り当てる、
請求項2記載の情報処理装置。
【請求項4】
前記割当手段は、前記アクセス範囲が重複しない複数のワークグループを、並列処理させるためにそれぞれ異なるプロセッサに割り当てる、
請求項1乃至請求項3のいずれか1項に記載の情報処理装置。
【請求項5】
前記割当手段は、前記アクセス範囲が重複しない複数のワークグループのうち、最もアドレスの近いワークグループを優先的にプロセッサに割り当てる、
請求項4記載の情報処理装置。
【請求項6】
前記プロセッサは、GPUを構成する演算ユニットとして構成されており、
前記メモリは、前記演算ユニットで共用されるVRAMとして構成されている、
請求項1乃至請求項5のいずれか1項に記載の情報処理装置。
【請求項7】
前記プロセッサは、GPUが有する複数の演算ユニットのそれぞれを構成する演算エレメントとして構成されており、
前記メモリは、前記演算ユニット毎に割り当てられたローカルメモリとして構成されている、
請求項1乃至請求項5のいずれか1項に記載の情報処理装置。
【請求項8】
並列処理が可能な複数のプロセッサと、前記複数のプロセッサで共有されるメモリと、を備えた情報処理装置において実行される情報処理方法であって、
前記メモリのアクセス範囲が予め記述可能とされるとともに複数のスレッドで構成されたワークグループについて、記述された前記アクセス範囲を参照する参照過程と、
前記参照したアクセス範囲に基づいて、各前記ワークグループを前記複数のプロセッサのいずれかに実行させるために割り当てる割当過程と、
を備えた情報処理方法。
【請求項9】
並列処理が可能な複数のプロセッサと、前記複数のプロセッサで共有されるメモリと、を備えた情報処理装置をコンピュータにより制御するための制御プログラムであって、
前記コンピュータを、前記メモリのアクセス範囲が予め記述可能とされるとともに複数のスレッドで構成されたワークグループについて、記述された前記アクセス範囲を参照する参照手段と、
前記参照したアクセス範囲に基づいて、各前記ワークグループを前記複数のプロセッサのいずれかに実行させるために割り当てる割当手段と、
して機能させる制御プログラム。

【図1】
image rotate

【図2】
image rotate

【図3】
image rotate

【図4】
image rotate

【図5】
image rotate

【図6】
image rotate

【図7】
image rotate


【公開番号】特開2013−114538(P2013−114538A)
【公開日】平成25年6月10日(2013.6.10)
【国際特許分類】
【出願番号】特願2011−261512(P2011−261512)
【出願日】平成23年11月30日(2011.11.30)
【出願人】(000003078)株式会社東芝 (54,554)
【Fターム(参考)】