JP2013242823A - 情報処理装置、情報処理方法および制御プログラム - Google Patents
情報処理装置、情報処理方法および制御プログラム Download PDFInfo
- Publication number
- JP2013242823A JP2013242823A JP2012117111A JP2012117111A JP2013242823A JP 2013242823 A JP2013242823 A JP 2013242823A JP 2012117111 A JP2012117111 A JP 2012117111A JP 2012117111 A JP2012117111 A JP 2012117111A JP 2013242823 A JP2013242823 A JP 2013242823A
- Authority
- JP
- Japan
- Prior art keywords
- code
- cache
- memory
- global
- opencl
- 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.)
- Pending
Links
Images
Classifications
-
- G—PHYSICS
- G11—INFORMATION STORAGE
- G11C—STATIC STORES
- G11C7/00—Arrangements for writing information into, or reading information out from, a digital store
- G11C7/10—Input/output [I/O] data interface arrangements, e.g. I/O data control circuits, I/O data buffers
- G11C7/1075—Input/output [I/O] data interface arrangements, e.g. I/O data control circuits, I/O data buffers for multiport memories each having random access ports and serial ports, e.g. video RAM
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F12/00—Accessing, addressing or allocating within memory systems or architectures
- G06F12/02—Addressing or allocation; Relocation
- G06F12/08—Addressing or allocation; Relocation in hierarchically structured memory systems, e.g. virtual memory systems
- G06F12/0802—Addressing of a memory level in which the access to the desired data or data block requires associative addressing means, e.g. caches
- G06F12/0806—Multiuser, multiprocessor or multiprocessing cache systems
- G06F12/0811—Multiuser, multiprocessor or multiprocessing cache systems with multilevel cache hierarchies
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F12/00—Accessing, addressing or allocating within memory systems or architectures
- G06F12/02—Addressing or allocation; Relocation
- G06F12/08—Addressing or allocation; Relocation in hierarchically structured memory systems, e.g. virtual memory systems
- G06F12/0802—Addressing of a memory level in which the access to the desired data or data block requires associative addressing means, e.g. caches
- G06F12/0806—Multiuser, multiprocessor or multiprocessing cache systems
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F12/00—Accessing, addressing or allocating within memory systems or architectures
- G06F12/02—Addressing or allocation; Relocation
- G06F12/08—Addressing or allocation; Relocation in hierarchically structured memory systems, e.g. virtual memory systems
- G06F12/0802—Addressing of a memory level in which the access to the desired data or data block requires associative addressing means, e.g. caches
- G06F12/0806—Multiuser, multiprocessor or multiprocessing cache systems
- G06F12/084—Multiuser, multiprocessor or multiprocessing cache systems with a shared cache
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/46—Multiprogramming arrangements
- G06F9/50—Allocation of resources, e.g. of the central processing unit [CPU]
- G06F9/5005—Allocation of resources, e.g. of the central processing unit [CPU] to service a request
- G06F9/5011—Allocation of resources, e.g. of the central processing unit [CPU] to service a request the resources being hardware resources other than CPUs, Servers and Terminals
- G06F9/5016—Allocation of resources, e.g. of the central processing unit [CPU] to service a request the resources being hardware resources other than CPUs, Servers and Terminals the resource being the memory
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F2212/00—Indexing scheme relating to accessing, addressing or allocation within memory systems or architectures
- G06F2212/60—Details of cache memory
- G06F2212/601—Reconfiguration of cache memory
- G06F2212/6012—Reconfiguration of cache memory of operating mode, e.g. cache mode or local memory mode
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Software Systems (AREA)
- Multimedia (AREA)
- Memory System Of A Hierarchy Structure (AREA)
Abstract
【課題】プログラマの意図通りにパフォーマンスを向上させることが可能な情報処理装置、情報処理方法および制御プログラムを提供することである。
【解決手段】実施の形態による情報処理装置は、OpenCLによって記述されたコードを実行するように構成された情報処理装置であって、ローカルなスコープを持ち、1つのワークグループ内の全てのワークアイテムから参照可能な第1キャッシュと、グローバルなスコープを持ち、複数のワークグループ内の全てのワークアイテムから参照可能な第2キャッシュと、グローバルなスコープを持ち、複数のワークグループ内の全てのワークアイテムから参照可能なグローバルメモリと、前記第2キャッシュをスクラッチパッドメモリとして参照するコードを実行するように構成された演算部と、を備えることを特徴とする。
【選択図】図3
【解決手段】実施の形態による情報処理装置は、OpenCLによって記述されたコードを実行するように構成された情報処理装置であって、ローカルなスコープを持ち、1つのワークグループ内の全てのワークアイテムから参照可能な第1キャッシュと、グローバルなスコープを持ち、複数のワークグループ内の全てのワークアイテムから参照可能な第2キャッシュと、グローバルなスコープを持ち、複数のワークグループ内の全てのワークアイテムから参照可能なグローバルメモリと、前記第2キャッシュをスクラッチパッドメモリとして参照するコードを実行するように構成された演算部と、を備えることを特徴とする。
【選択図】図3
Description
本発明の実施形態は、情報処理装置、情報処理方法および制御プログラムに関する。
従来、並列コンピューティングのためのフレームワークとして、OpenCL(Open Computing Language)が存在する。OpenCLは、CPU(Central Processing Unit)やGPU(Graphics Processing Unit)などの異種のプロセッサを混在させたヘテロジニアス環境でのクロスプラットフォームなフレームワークとして、現在注目されている。
OpenCLでは、カーネル内のメモリとして、グローバルメモリ、コンスタントメモリ、ローカルメモリおよびプライベートメモリの4種類が存在する。これらのうち、プライベートメモリは、ワークアイテム内で使用するレジスタであり、各プロセッサに対して接続される。ローカルメモリは、各ワークグループに対して配置されたキャッシュメモリであり、同一ワークグループ内の全てのワークアイテムから読み書きが可能である。グローバルメモリは、全てのワークグループに対して共通に配置されたメモリであり、全ワークグループ内の全ワークアイテムが読み書き可能である。コンスタントメモリは、グローバルメモリ領域として配置されるメモリ領域であり、すべてのワークアイテムから読み込むことができる。
OpenCLの仕様では、キャッシュメモリとして、ローカルなスコープを持つスクラッチパッドメモリに加え、グローバルなスコープを持つスクラッチパッドメモリを持つ多段キャッシュ構造のマルチプロセッサシステムにおいても利用することができる。しかしながら、既存のOpenCLでは、グローバルなスコープを持つスクラッチパッドメモリを明示的に参照するようにプログラミングすることができない。そのため、プログラマの意図通りにスクラッチパッドメモリを指定してパフォーマンスを向上させることができなかった。
そこで本発明の実施形態が解決しようとする課題は、グローバルなスコープを持つスクラッチパッドメモリを明示的に参照することを可能にすることで、プログラマの意図通りにパフォーマンスを向上させることが可能な情報処理装置、情報処理方法および制御プログラムを提供することである。
実施の形態による情報処理装置は、OpenCLによって記述されたコードを実行するように構成された情報処理装置であって、ローカルなスコープを持ち、1つのワークグループ内の全てのワークアイテムから参照可能な第1キャッシュと、グローバルなスコープを持ち、複数のワークグループ内の全てのワークアイテムから参照可能な第2キャッシュと、グローバルなスコープを持ち、複数のワークグループ内の全てのワークアイテムから参照可能なグローバルメモリと、前記第2キャッシュをスクラッチパッドメモリとして参照するコードを実行するように構成された演算部と、を備えることを特徴とする。
また、実施の形態による情報処理方法は、ローカルなスコープを持ち、1つのワークグループ内の全てのワークアイテムから参照可能な第1キャッシュと、グローバルなスコープを持ち、複数のワークグループ内の全てのワークアイテムから参照可能な第2キャッシュと、グローバルなスコープを持ち、複数のワークグループ内の全てのワークアイテムから参照可能なグローバルメモリとを備え、OpenCLによって記述されたコードを実行可能な情報処理装置が実行する情報処理方法であって、前記第2キャッシュをスクラッチパッドメモリとして参照するコードを実行する工程を含むことを特徴とする。
また、実施の形態による制御プログラムは、ローカルなスコープを持ち、1つのワークグループ内の全てのワークアイテムから参照可能な第1キャッシュと、グローバルなスコープを持ち、複数のワークグループ内の全てのワークアイテムから参照可能な第2キャッシュと、グローバルなスコープを持ち、複数のワークグループ内の全てのワークアイテムから参照可能なグローバルメモリとを備え、OpenCLによって記述されたコードを実行可能な情報処理装置を制御するための制御プログラムであって、前記第2キャッシュをスクラッチパッドメモリとして参照するコードを実行するステップを前記情報処理装置に実行させる。
また、実施の形態による情報処理装置は、OpenCLによって記述されたコードを実行するように構成された情報処理装置であって、前記コードは、物理的なアロケーションを制限しないローカルなスコープを持つコードと、物理的なアロケーションを前記グローバルメモリとするグローバルなスコープを持つコードとのうち少なくとも1つを含むことを特徴とする。
また、実施の形態による情報処理方法は、OpenCLによって記述されたコードを実行する情報処理方法であって、物理的なアロケーションを制限しないローカルなスコープを持つコードと、物理的なアロケーションを前記グローバルメモリとするグローバルなスコープを持つコードとのうち少なくとも1つを含むコードを実行する工程を含むことを特徴とする。
また、実施の形態による制御プログラムは、OpenCLによって記述されたコードを実行するように構成された情報処理装置を制御するための制御プログラムであって、物理的なアロケーションを制限しないローカルなスコープを持つコードと、物理的なアロケーションを前記グローバルメモリとするグローバルなスコープを持つコードとのうち少なくとも1つを含むコードを実行するステップを前記情報処理装置に実行させる。
以下、実施の形態にかかる情報処理装置、情報処理方法および制御プログラムを説明するにあたり、既存のOpenCLで規格されるメモリモデル・プロセッサモデルについて説明する。OpenCL規格は、GPUなどの並列演算可能なプロセッサを汎用演算器として利用するソフトウエアプラットフォームである。図1は、既存のOpenCLで規格されるメモリモデル・プロセッサモデル900の概略構成を示すブロック図である。
図1に示すように、メモリモデル・プロセッサモデル900は、演算装置910がグローバルメモリ20を介して拡張バス30に接続された構成を備える。演算装置910は、たとえばCPUやGPUなどであってよい。グローバルメモリ20には、VRAM(Video Random Access Memory)などを用いることができる。拡張バス30には、たとえばPCIe(PCI Express)などのI/Oシリアルインタフェースが用いられる。
演算装置910は、複数の演算ユニット100〜200と、各演算ユニット100〜200に一対一に設けられたローカルメモリ(L1キャッシュ)130〜230と、全ての演算ユニット100〜200に対して共通に設けられたグローバルキャッシュ(L2キャッシュ)940とを備える。
各演算ユニット100〜200は、それぞれプライベートメモリ111〜112、211〜212を一対一に備える複数のプロセッサ121〜122、221〜222が並列に配置された構成を備える。プライベートメモリ111〜112、211〜212は、それぞれが接続されたプロセッサ121〜122、221〜222に対して命令や情報を格納するレジスタである。
演算装置910内の各ローカルメモリ130〜230は、L1キャッシュ(1次キャッシュともいう)である。一方、グローバルキャッシュ940は、L2キャッシュ(2次キャッシュともいう)である。すなわち、図1に示すメモリモデル・プロセッサモデル900では、L1キャッシュとL2キャッシュとの多段キャッシュ構造が採用されている。
各ローカルメモリ130〜230は、それぞれが接続された演算ユニット100〜200において実行されるワークグループ内の全てのワークアイテムから読み書きが可能である。ただし、各演算ユニット100〜200におけるワークアイテムは、他の演算ユニット100〜200に接続されたローカルメモリ130〜230を参照することができない。一方、グローバルキャッシュ940は、全ての演算ユニット100〜200において実行されるワークグループ内の全てのワークアイテムから読み書きが可能である。
グローバルメモリ20は、全ての演算ユニット100〜200において実行されるワークグループ内の全てのワークアイテムから読み書きが可能なメモリである。このグローバルメモリ20は、たとえばコンスタントメモリに置き換えられてもよい。
図2は、図1に示すメモリモデル・プロセッサモデル900における各演算ユニット100〜200上で実行されるタスクの概略構成を示すモデル図である。図2に示すように、演算ユニット100〜200のうちの1つの演算ユニット(ここでは、演算ユニット100とする)上では、ワークグループの集合300のうちの1つのワークグループ310が実行される。各ワークグループ310は、複数のワークアイテム(work−item)311〜3mnの集合で形成されている。演算ユニット100内の物理的なプロセッサ数よりもワークグループ310内のワークアイテム311〜3mnの数が多い場合、各ワークアイテム311〜3mnは、演算ユニット100内でスケジューリングされながら実行される。
通常のGPUでは、ローカルメモリ130〜230として演算ユニット100〜200にそれぞれ接続されたL1キャッシュが流用され、且つ、グローバルメモリ20にVRAMが用いられるアーキテクチャが採用されている。このような構成では、それぞれのメモリ(130〜230、20)へのアクセス速度がL1キャッシュへのアクセス速度およびVRAMへのアクセス速度に相当することとなる。そのため、OpenCLで記述されたプログラム(以下、OpenCLプログラムという)のパフォーマンスを向上させるためには、ローカルメモリ130〜230を多く利用してグローバルメモリ20へのアクセスを減らすようなコードを記述することが定石とされていた。
一方で、ローカルメモリ130〜230の搭載量は、一般的に少なく、また、搭載されるメモリ容量もデバイスベンダの仕様によって異なる。上述したように、OpenCLプログラムのパフォーマンスを向上させるためにはローカルメモリ130〜230の搭載量を考慮した上でコードを記述する必要があるが、OpenCLプログラムが動作するか否かは必要な量のローカルメモリ130〜230が搭載されているか否かに依存する。そのため、クロスプラットフォームなOpenCLで記述されたコードであるにも関わらず、他のデバイスでは動作しないコードとなる場合があった。その場合、ハードウエア(HW)のメモリ搭載量に応じて論理的なスコープを変更しなければならない場合が存在した。
以上のような課題は、OpenCLでのローカルメモリの意味が、ワークグループ内のみで参照可能とする論理的な意味と、演算ユニットに付随する物理的な意味との2つの意味を混在して含んでいたために生じたと考えられる。
また、既存のOpenCLの仕様では、L1キャッシュ相当(あるいは専用メモリ)をスクラッチパッドメモリとして利用するためのローカルメモリというメモリモデルは存在するものの、L2キャッシュ相当をスクラッチパッドメモリとして明示的に利用するためのメモリモデルが存在しない。そのため、現状のOpenCLでは、全てのワークグループ310間でデータを共有する場合、必然的にアクセス速度が比較的遅いグローバルメモリ20を経由しなければならないという課題も存在する。
L2キャッシュが比較的多く搭載されているデバイスでは、ある程度のデータがL2キャッシュにキャッシュされるため、平均的にはある程度のパフォーマンスを得られる場合があるが、動作状況によってはキャッシュミスなどが発生してしまい、パフォーマンスが不安定になる場合があった。
以上のような状況から、本発明者は、安定して高いパフォーマンスを得るためには、L2キャッシュ相当のメモリをローカルメモリと同様に明示的に利用できる仕組みが必要であることを見出した。そこで、以下の実施の形態では、OpenCLへ追加する新たな仕様を提案する。
図3は、実施の形態にかかるメモリモデル・プロセッサモデル1の概略構成を示すブロック図である。なお、図3において、図1に示す構成と同様の構成については、同一の符号を付すことで、重複する説明を省略する。
図3に示すように、実施の形態にかかるメモリモデル・プロセッサモデル1では、演算装置10が備える各ローカルメモリ130〜230内に、L1キャッシュとしてのローカルシェア131〜231が配置される。また、L2キャッシュとしてのグローバルキャッシュ940が、L2キャッシュとしてのグローバルシェア140に置き換えられている。すなわち、実施の形態にかかるOpenCLでは、L1キャッシュ相当のローカルシェア131〜231と、L2キャッシュ相当のグローバルシェア140との2つのメモリモデルを新たに追加し、これらローカルシェア131〜231およびグローバルシェア140を明示的に利用できるキャッシュメモリであるとして定義する。その他の構成は、図1に示す構成と同様であってよい。
以下の表1に、実施の形態にかかるOpenCLで記述可能なメモリ修飾子の一覧を示す。なお、表1には、既存のOpenCLで記述可能なローカルスコープおよびグローバルスコープの修飾子と、実施の形態にかかるOpenCLで記述可能なローカルスコープおよびグローバルスコープの修飾子とが示されている。
表1に示すように、既存のOpenCLでは、メモリ修飾子が、ローカルメモリ130〜230を示す修飾子‘_local’とグローバルメモリ20を示す修飾子‘_global’との2つのみであったのに対し、実施の形態にかかるOpenCLでは、L1キャッシュに相当するローカルシェア131〜231を示す修飾子‘_local_share’と、L2キャッシュに相当するグローバルシェア140を示す修飾子‘_global_share’とが追加されている。また、これら2つの修飾子の追加に伴い、既存のOpenCLにおける修飾子‘_local’の意味が表1に示す内容に変更された。
具体的には、追加された修飾子‘_local_share’は、ローカルなスコープのスクラッチパッドメモリ(L1キャッシュ相当)を定義する。同じく追加された修飾子‘_global_share’は、グローバルなスコープのスクラッチパッドメモリ(L2キャッシュ相当)を定義する。また、定義が変更された修飾子‘_local’は、物理的なアロケーションを制限せずに、論理的なスコープのみを規定する。したがって、図3に示す構成の場合、修飾子‘_local’によって宣言されたコードが示す物理的なアロケーションは、ローカルメモリ130〜230、グローバルシェア140およびグローバルメモリ20のいずれであってもよい。
また、修飾子‘_global_share’で指定されるバッファオブジェクトをグローバルシェア(L2キャッシュ)140に確保するためのフラグとして、以下の表2に示すような値‘CL_MEM_GLOBAL_SHARE’が追加される。この値‘CL_MEM_GLOBAL_SHARE’は、構文clCreateBuffer()の引数‘cl_mem_flags’に指定される。
また、OpenCLランタイムのモードあるいはOpenCLコンパイラのモードとして、以下の表3に示す2つが定義される。これらのモードは、ローカルシェア131〜231およびグローバルシェア140に対するOpenCLランタイムの振る舞いを規定するものであり、構文cl_runtime_modeの引数‘cl_runtime_mode’に指定される。なお、表3に示すモードは、OpenCLコンパイラへの指示としても利用することができる。
表1にも示したように、OpenCLランタイムにモードCL_RUNTIME_NORMAL_MODEが指定されているときでは、修飾子‘_local_share’または‘_global_share’が宣言された際にL1キャッシュまたはL2キャッシュにメモリが不足しているのであれば、物理的なアロケーションをグローバルメモリ20としてもよい。
つづいて、実施の形態にかかるOpenCLを用いて記述されたコードを、既存のOpenCLを用いて記述されたコードと比較しつつ説明する。図4および図5は、512byteの配列aをワークグループ内のみで参照することを意図するが、ハードウエアの制限によって物理的なスクラッチパッドメモリ(L1キャッシュ相当)に配列aを配置できない場合のコードを示す図である。なお、図4は、既存のOpenCLを用いて記述されたコードの一例を示す図である。図5は、実施の形態にかかるOpenCLを用いて記述されたコードの一例を示す図である。
図4に示すように、既存のOpenCLでは、配列aをワークグループ内のスコープとして宣言できないため、グローバルなスコープ(_global a[])で宣言する必要があった。そのため、可読性の低いコードとなっていた。それに対し、図5に示すように、実施の形態にかかるOpenCLでは、論理的なスコープと物理的なスコープとを分離して宣言できるため、プログラマの意図通りに、配列aをワークグループ内のスコープ(_local a[512])で宣言することができる。また、配列bを物理的なスクラッチパッドメモリ(L1キャッシュ相当)に配置したいというプログラマの意図も、修飾子‘_local_share’を用いて記述することが可能である。
つぎに、図6および図7に、配列aを全てのワークグループ間で共有して参照したいが、読み書きが頻繁に発生する見込みであるため、高速アクセスが可能な物理アロケーションに配置したい場合のコードを示す。なお、図6は、既存のOpenCLを用いて記述されたコードの一例を示す図である。図7は、実施の形態にかかるOpenCLを用いて記述されたコードの一例を示す図である。
図6に示すように、既存のOpenCLでは、修飾子‘_global’によるスコープ(_global a[])のみでしか物理的なアロケーションを指定することができない。そのため、ハードウエア構成によってはキャッシュが有効に利用されるもののが、動作状況によってはパフォーマンスが低下したり不安定になってしまう場合がある。それに対し、図7に示すように、実施の形態にかかるOpenCLでは、修飾子‘_global_share’を用いることで、グローバルなスコープで且つ物理的なスクラッチパッドメモリ(L2キャッシュ相当)を利用するというプログラマの意図(_global_share a[])を記述することができる。これにより、パフォーマンスの向上だけでなく、パフォーマンスの安定化も可能になる。
つぎに、ローカルなスコープのスクラッチパッドメモリを512byte使用するコードを、既存のOpenCLで解釈した場合と実施の形態にかかるOpenCLで解釈した場合との振る舞いの違いを説明する。図8は、ローカルなスコープのスクラッチパッドメモリを512byte使用する場合のコードを示す図である。なお、図8に示すコードは、既存のOpenCLと実施の形態にかかるOpenCLとで同一である。図9は、図8に示すコードを既存のOpenCLで解釈した場合のOpenCLランタイムあるいはOpenCLコンパイラの振る舞いを示すフローチャートである。図10は、図8に示すコードを実施の形態にかかるOpenCLで解釈した場合のOpenCLランタイムあるいはOpenCLコンパイラの振る舞いを示すフローチャートである。
図9に示すように、図8に示すコードを既存のOpenCLで解釈した場合、OpenCLランタイムあるいはOpenCLコンパイラは、まず、ローカルなスコープ(_local a[512])で512byteのメモリ領域の要求があると(ステップS101)、ローカルメモリ130内のローカルシェア131に512byteのメモリ領域を確保可能か否かを判定する(ステップS102)。ローカルシェア131に要求されたメモリ領域を確保可能である場合(ステップS102;YES)、OpenCLランタイムあるいはOpenCLコンパイラは、ローカルシェア131に要求されたメモリ領域を確保して(ステップS103)、動作を終了する。また、ローカルシェア131に要求されたメモリ領域を確保できない場合(ステップS102;NO)、OpenCLランタイムあるいはOpenCLコンパイラは、エラー処理を実行し(ステップS104)、動作を終了する。なお、エラー処理では、コンパイルができないことや、ローカルシェア131に要求されたメモリ領域を確保できないことがプログラマへ通知されてもよい。
一方、図10に示すように、図8に示すコードを実施の形態にかかるOpenCLで解釈した場合、OpenCLランタイムあるいはOpenCLコンパイラは、まず、ローカルなスコープ(_local a[512])で512byteのメモリ領域の要求があると(ステップS111)、ローカルシェア131に512byteのメモリ領域を確保可能か否かを判定し(ステップS112)、確保可能である場合(ステップS112;YES)、ローカルシェア131に要求されたメモリ領域を確保して(ステップS113)、動作を終了する。また、ローカルシェア131に要求されたメモリ領域を確保できない場合(ステップS112;NO)、OpenCLランタイムあるいはOpenCLコンパイラは、つぎにグローバルシェア140に要求されたメモリ領域を確保可能か否かを判定し(ステップS114)、確保可能である場合(ステップS114;YES)、グローバルシェア140に要求されたメモリ領域を確保して(ステップS115)、動作を終了する。さらに、グローバルシェア140にも要求されたメモリを確保できない場合(ステップS114;NO)、OpenCLランタイムあるいはOpenCLコンパイラは、グローバルメモリ20に要求されたメモリ領域を確保可能か否かを判定し(ステップS116)、確保可能である場合(ステップS116;YES)、グローバルメモリ20に要求されたメモリ領域を確保して(ステップS117)、動作を終了する。さらにまた、グローバルメモリ20にも要求されたメモリ領域を確保できない場合(ステップS116;NO)、OpenCLランタイムあるいはOpenCLコンパイラは、エラー処理を実行し(ステップS118)、動作を終了する。
以上のように、実施の形態では、ローカルなスコープ(_local a[512])で指定される物理的なアロケーションが制限されないため、要求されたメモリ領域をローカルシェア(L1キャッシュ)131に確保できない場合でも、代わりに他の物理アロケーション(グローバルシェア140やグローバルメモリ20)に確保することが可能となる。その結果、多くのデバイスで互換性のあるコードを記述することが可能となる。
つぎに、ローカルなスコープのスクラッチパッドメモリを128byte使用する場合の、OpenCLランタイムのモード毎の振る舞いの違いを説明する。図11は、ローカルなスコープのスクラッチパッドメモリを128byte使用する場合のコードを示す図である。図12は、OpenCLランタイムにモードCL_RUNTIME_STRICT_MODEが設定されていた場合の振る舞いを示すフローチャートである。図13は、OpenCLランタイムにモードCL_RUNTIME_NORMAL_MODEが設定されていた場合の振る舞いを示すフローチャートである。
図12に示すように、OpenCLランタイムにモードCL_RUNTIME_STRICT_MODEが設定されていた場合、図11に示すコードを解釈したOpenCLランタイムあるいはOpenCLコンパイラは、まず、ローカルなスコープ(_local_share a[128])で128byteのメモリ領域の要求があると(ステップS201)、ローカルメモリ130内のローカルシェア131に128byteのメモリ領域を確保可能か否かを判定する(ステップS202)。ローカルシェア131に要求されたメモリ領域を確保可能である場合(ステップS202;YES)、OpenCLランタイムあるいはOpenCLコンパイラは、ローカルシェア131に要求されたメモリ領域を確保して(ステップS203)、動作を終了する。また、ローカルシェア131に要求されたメモリ領域を確保できない場合(ステップS202;NO)、OpenCLランタイムあるいはOpenCLコンパイラは、エラー処理を実行し(ステップS204)、動作を終了する。
一方、図13に示すように、OpenCLランタイムにモードCL_RUNTIME_NORMAL_MODEが設定されていた場合、図11に示すコードを解釈したOpenCLランタイムあるいはOpenCLコンパイラは、まず、ローカルなスコープ(_local_share a[128])で128byteのメモリ領域の要求があると(ステップS211)、ローカルシェア131に128byteのメモリ領域を確保可能か否かを判定し(ステップS212)、確保可能である場合(ステップS212;YES)、ローカルシェア131に要求されたメモリ領域を確保して(ステップS213)、動作を終了する。また、ローカルシェア131に要求されたメモリ領域を確保できない場合(ステップS212;NO)、OpenCLランタイムあるいはOpenCLコンパイラは、つぎにグローバルシェア140に要求されたメモリ領域を確保可能か否かを判定し(ステップS214)、確保可能である場合(ステップS214;YES)、グローバルシェア140に要求されたメモリ領域を確保して(ステップS215)、動作を終了する。さらに、グローバルシェア140にも要求されたメモリを確保できない場合(ステップS214;NO)、OpenCLランタイムあるいはOpenCLコンパイラは、グローバルメモリ20に要求されたメモリ領域を確保可能か否かを判定し(ステップS216)、確保可能である場合(ステップS216;YES)、グローバルメモリ20に要求されたメモリ領域を確保して(ステップS217)、動作を終了する。さらにまた、グローバルメモリ20にも要求されたメモリ領域を確保できない場合(ステップS216;NO)、OpenCLランタイムあるいはOpenCLコンパイラは、エラー処理を実行し(ステップS218)、動作を終了する。
以上のように、実施の形態では、OpenCLランタイムに設定されたモードにしたがって振る舞いを切り替えることが可能である。たとえば図11〜図13に示した例では、ローカルなスコープ(_local_share a[128])で指定される物理的なアロケーションに必要なメモリ領域を確保できない場合の振る舞いを、OpenCLランタイムに設定されたモードに応じて変更することができる。この機能は、プログラマによるデバッグやパフォーマンスチューニングにおいて有効である。
以上のように、実施の形態では、L1キャッシュとL2キャッシュとの多段キャッシュを備えるメモリモデル・プロセッサモデル1において、これらのキャッシュメモリを明示的に利用することが可能なコードのOpenCLプログラムを記述することができる。また、実施の形態では、OpenCLで提示されている論理的なメモリモデルに由来する変数のスコープと、実際のハードウエアに依存した物理的にアロケーション可能なメモリ量とを分離しつつ、OpenCLプログラムを記述することができる。これらの結果、実施の形態によれば、物理的なメモリ搭載量に関わらず、動作が保証されたOpenCLプログラムを記述することが可能となる。加えて、異なるハードウエアに対しても互換性の高いOpenCLプログラムを記述することも可能となる。
また、実施の形態にかかるOpenCLによれば、ハードウエア構成に応じたOpenCLプログラムを容易に記述することが可能となるため、特定のハードウエアがより高いパフォーマンスを発揮することできるOpenCLプログラムを記述することも可能になる。
さらに、実施の形態によれば、ワークグループ内という論理的なスコープのみが必要で、必ずしも高いパフォーマンスを必要としないコードを記述した場合でも、このようなプログラマの意図通りにスコープを限定した記述が可能である。その結果、プログラムの可読性や開発効率を向上させることができる。
以上では、本発明の実施形態を説明したが、この実施形態は、例として提示したものであり、発明の範囲を限定することは意図していない。この新規な実施形態は、その他の様々な形態で実施されることが可能であり、発明の要旨を逸脱しない範囲で、種々の省略、置き換え、変更を行うことができる。この実施形態やその変形は、発明の範囲や要旨に含まれるとともに、特許請求の範囲に記載された発明とその均等の範囲に含まれる。
1…メモリモデル・プロセッサモデル、10…演算装置、20…グローバルメモリ(VRAM)、30…拡張バス、100〜200…演算ユニット、111〜112,211〜212…プライベートメモリ(レジスタ)、121〜122,221〜222…プロセッサ、130〜230…ローカルメモリ、131〜231…ローカルシェア(L1キャッシュ)、140…グローバルシェア(L2キャッシュ)
Claims (11)
- OpenCLによって記述されたコードを実行するように構成された情報処理装置であって、
ローカルなスコープを持ち、1つのワークグループ内の全てのワークアイテムから参照可能な第1キャッシュと、
グローバルなスコープを持ち、複数のワークグループ内の全てのワークアイテムから参照可能な第2キャッシュと、
グローバルなスコープを持ち、複数のワークグループ内の全てのワークアイテムから参照可能なグローバルメモリと、
前記第2キャッシュをスクラッチパッドメモリとして参照するコードを実行するように構成された演算部と、
を備えることを特徴とする情報処理装置。 - 前記コードは、前記第1キャッシュと前記第2キャッシュとをそれぞれ異なるスクラッチパッドメモリとして区別して参照するように記述され、
前記演算部は、前記コードに基づいて、前記第1キャッシュと前記第2キャッシュとをそれぞれ異なるスクラッチパッドメモリとして区別して参照することを特徴とする請求項1に記載の情報処理装置。 - 前記コードは、前記第1キャッシュをスクラッチパッドメモリとして参照するローカルなスコープを持つ第1コードと、前記第2キャッシュをスクラッチパッドメモリとして参照するグローバルなスコープを持つ第2コードとのうち少なくとも1つを含むことを特徴とする請求項2に記載の情報処理装置。
- 前記演算部は、前記コードにより要求されるメモリ領域が前記第2キャッシュに確保できない場合、前記第1キャッシュまたは前記グローバルメモリに前記要求されたメモリ領域を確保することを特徴とする請求項1に記載の情報処理装置。
- OpenCLランタイムのモードとして第1モードと第2モードとを備え、
前記演算部は、前記第1モードが設定されているときであって前記コードにより要求されるメモリ領域を前記第2キャッシュに確保できない場合、前記第1キャッシュまたは前記グローバルメモリに前記要求されたメモリ領域を確保し、前記第2モードが設定されているときであって前記コードにより要求されるメモリ領域を前記第2キャッシュに確保できない場合、エラーとすることを特徴とする請求項4に記載の情報処理装置。 - 前記グローバルメモリの物理的なアロケーションは、VRAMであることを特徴とする請求項1に記載の情報処理装置。
- ローカルなスコープを持ち、1つのワークグループ内の全てのワークアイテムから参照可能な第1キャッシュと、グローバルなスコープを持ち、複数のワークグループ内の全てのワークアイテムから参照可能な第2キャッシュと、グローバルなスコープを持ち、複数のワークグループ内の全てのワークアイテムから参照可能なグローバルメモリとを備え、OpenCLによって記述されたコードを実行可能な情報処理装置が実行する情報処理方法であって、
前記第2キャッシュをスクラッチパッドメモリとして参照するコードを実行する工程を含むことを特徴とする情報処理方法。 - ローカルなスコープを持ち、1つのワークグループ内の全てのワークアイテムから参照可能な第1キャッシュと、グローバルなスコープを持ち、複数のワークグループ内の全てのワークアイテムから参照可能な第2キャッシュと、グローバルなスコープを持ち、複数のワークグループ内の全てのワークアイテムから参照可能なグローバルメモリとを備え、OpenCLによって記述されたコードを実行可能な情報処理装置を制御するための制御プログラムであって、
前記第2キャッシュをスクラッチパッドメモリとして参照するコードを実行するステップを前記情報処理装置に実行させるための制御プログラム。 - OpenCLによって記述されたコードを実行するように構成された情報処理装置であって、
前記コードは、物理的なアロケーションを制限しないローカルなスコープを持つコードと、物理的なアロケーションを前記グローバルメモリとするグローバルなスコープを持つコードとのうち少なくとも1つを含むことを特徴とする情報処理装置。 - OpenCLによって記述されたコードを実行する情報処理方法であって、
物理的なアロケーションを制限しないローカルなスコープを持つコードと、物理的なアロケーションを前記グローバルメモリとするグローバルなスコープを持つコードとのうち少なくとも1つを含むコードを実行する工程を含むことを特徴とする情報処理方法。 - OpenCLによって記述されたコードを実行するように構成された情報処理装置を制御するための制御プログラムであって、
物理的なアロケーションを制限しないローカルなスコープを持つコードと、物理的なアロケーションを前記グローバルメモリとするグローバルなスコープを持つコードとのうち少なくとも1つを含むコードを実行するステップを前記情報処理装置に実行させるための制御プログラム。
Priority Applications (3)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
JP2012117111A JP2013242823A (ja) | 2012-05-23 | 2012-05-23 | 情報処理装置、情報処理方法および制御プログラム |
PCT/JP2013/057942 WO2013175843A1 (en) | 2012-05-23 | 2013-03-13 | Information processor, information processing method, and control program |
US13/963,179 US20130332666A1 (en) | 2012-05-23 | 2013-08-09 | Information processor, information processing method, and computer program product |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
JP2012117111A JP2013242823A (ja) | 2012-05-23 | 2012-05-23 | 情報処理装置、情報処理方法および制御プログラム |
Publications (1)
Publication Number | Publication Date |
---|---|
JP2013242823A true JP2013242823A (ja) | 2013-12-05 |
Family
ID=49623547
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
JP2012117111A Pending JP2013242823A (ja) | 2012-05-23 | 2012-05-23 | 情報処理装置、情報処理方法および制御プログラム |
Country Status (3)
Country | Link |
---|---|
US (1) | US20130332666A1 (ja) |
JP (1) | JP2013242823A (ja) |
WO (1) | WO2013175843A1 (ja) |
Cited By (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN105163127A (zh) * | 2015-09-07 | 2015-12-16 | 浙江宇视科技有限公司 | 视频分析方法及装置 |
JP2019036343A (ja) * | 2018-10-19 | 2019-03-07 | イーソル株式会社 | オペレーティングシステム及びメモリ割り当て方法 |
JP2019075101A (ja) * | 2017-10-17 | 2019-05-16 | 三星電子株式会社Samsung Electronics Co.,Ltd. | インメモリのコマンド処理方法、これを適用する高帯域幅メモリ(hbm)、及びhbmシステム |
JP2020077402A (ja) * | 2018-10-19 | 2020-05-21 | イーソル株式会社 | オペレーティングシステム及びメモリ割り当て方法 |
Families Citing this family (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US9069549B2 (en) | 2011-10-12 | 2015-06-30 | Google Technology Holdings LLC | Machine processor |
US20130103931A1 (en) * | 2011-10-19 | 2013-04-25 | Motorola Mobility Llc | Machine processor |
US9448823B2 (en) | 2012-01-25 | 2016-09-20 | Google Technology Holdings LLC | Provision of a download script |
CN104077368A (zh) * | 2014-06-18 | 2014-10-01 | 国电南瑞科技股份有限公司 | 一种调度监控系统历史数据两级缓存多阶段提交方法 |
CN107003934B (zh) * | 2014-12-08 | 2020-12-29 | 英特尔公司 | 改进共享本地存储器和系统全局存储器之间的存储器访问性能的装置和方法 |
US10768935B2 (en) * | 2015-10-29 | 2020-09-08 | Intel Corporation | Boosting local memory performance in processor graphics |
Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JPH10187533A (ja) * | 1996-10-18 | 1998-07-21 | Samsung Electron Co Ltd | キャッシュシステム、プロセッサ及びプロセッサを動作させる方法 |
JP2004038597A (ja) * | 2002-07-03 | 2004-02-05 | Matsushita Electric Ind Co Ltd | コンパイラ装置 |
JP2004303113A (ja) * | 2003-04-01 | 2004-10-28 | Hitachi Ltd | 階層メモリ向け最適化処理を備えたコンパイラおよびコード生成方法 |
JP2011523140A (ja) * | 2008-06-06 | 2011-08-04 | アップル インコーポレイテッド | マルチプロセッサのための多次元スレッドグループ化 |
-
2012
- 2012-05-23 JP JP2012117111A patent/JP2013242823A/ja active Pending
-
2013
- 2013-03-13 WO PCT/JP2013/057942 patent/WO2013175843A1/en active Application Filing
- 2013-08-09 US US13/963,179 patent/US20130332666A1/en not_active Abandoned
Patent Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JPH10187533A (ja) * | 1996-10-18 | 1998-07-21 | Samsung Electron Co Ltd | キャッシュシステム、プロセッサ及びプロセッサを動作させる方法 |
JP2004038597A (ja) * | 2002-07-03 | 2004-02-05 | Matsushita Electric Ind Co Ltd | コンパイラ装置 |
JP2004303113A (ja) * | 2003-04-01 | 2004-10-28 | Hitachi Ltd | 階層メモリ向け最適化処理を備えたコンパイラおよびコード生成方法 |
JP2011523140A (ja) * | 2008-06-06 | 2011-08-04 | アップル インコーポレイテッド | マルチプロセッサのための多次元スレッドグループ化 |
Non-Patent Citations (6)
Title |
---|
CSND200900772017; 田村 陽介 YOUSUKE TAMURA: '驚異の1TFLOPSオーバーパワーを徹底活用 GPGPUによる並列処理' 月刊アスキードットテクノロジーズ 第14巻 第12号 ASCII.technologies 第14巻, 20090401, 78-85, 株式会社アスキー・メディアワークス * |
CSNG200900174011; Hamid Laga: '私の研究開発ツール -第22回- my recommendations on research & development tools.' 映像情報メディア学会誌 第63巻 第4号 The Journal of The Institute of Image Information and Tele 第63巻, 20090401, 465-470, (社)映像情報メディア学会 The Institute of Image * |
CSNG201200261003; 李 珍泌 JINPIL LEE: 'PGAS並列プログラミング言語XcalableMPにおける演算加速装置を持つクラスタ向け拡張仕様の提' 情報処理学会論文誌 論文誌トランザクション 2011(平成23)年度▲2▼ [CD-ROM] 第5巻, 20120415, 33-50, 一般社団法人情報処理学会 * |
JPN6013061198; 田村 陽介 YOUSUKE TAMURA: '驚異の1TFLOPSオーバーパワーを徹底活用 GPGPUによる並列処理' 月刊アスキードットテクノロジーズ 第14巻 第12号 ASCII.technologies 第14巻, 20090401, 78-85, 株式会社アスキー・メディアワークス * |
JPN6013061199; 李 珍泌 JINPIL LEE: 'PGAS並列プログラミング言語XcalableMPにおける演算加速装置を持つクラスタ向け拡張仕様の提' 情報処理学会論文誌 論文誌トランザクション 2011(平成23)年度▲2▼ [CD-ROM] 第5巻, 20120415, 33-50, 一般社団法人情報処理学会 * |
JPN6013061200; Hamid Laga: '私の研究開発ツール -第22回- my recommendations on research & development tools.' 映像情報メディア学会誌 第63巻 第4号 The Journal of The Institute of Image Information and Tele 第63巻, 20090401, 465-470, (社)映像情報メディア学会 The Institute of Image * |
Cited By (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN105163127A (zh) * | 2015-09-07 | 2015-12-16 | 浙江宇视科技有限公司 | 视频分析方法及装置 |
JP2019075101A (ja) * | 2017-10-17 | 2019-05-16 | 三星電子株式会社Samsung Electronics Co.,Ltd. | インメモリのコマンド処理方法、これを適用する高帯域幅メモリ(hbm)、及びhbmシステム |
US11556476B2 (en) | 2017-10-17 | 2023-01-17 | Samsung Electronics Co., Ltd. | ISA extension for high-bandwidth memory |
US11940922B2 (en) | 2017-10-17 | 2024-03-26 | Samsung Electronics Co., Ltd. | ISA extension for high-bandwidth memory |
JP2019036343A (ja) * | 2018-10-19 | 2019-03-07 | イーソル株式会社 | オペレーティングシステム及びメモリ割り当て方法 |
JP2020077402A (ja) * | 2018-10-19 | 2020-05-21 | イーソル株式会社 | オペレーティングシステム及びメモリ割り当て方法 |
Also Published As
Publication number | Publication date |
---|---|
US20130332666A1 (en) | 2013-12-12 |
WO2013175843A1 (en) | 2013-11-28 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
JP2013242823A (ja) | 情報処理装置、情報処理方法および制御プログラム | |
US9430400B2 (en) | Migration directives in a unified virtual memory system architecture | |
US9798487B2 (en) | Migrating pages of different sizes between heterogeneous processors | |
US10133677B2 (en) | Opportunistic migration of memory pages in a unified virtual memory system | |
CN103309786B (zh) | 用于在非可抢占式图形处理单元上交互调试的方法和装置 | |
US10303616B2 (en) | Migration scheme for unified virtual memory system | |
US9792220B2 (en) | Microcontroller for memory management unit | |
US10740152B2 (en) | Technologies for dynamic acceleration of general-purpose code using binary translation targeted to hardware accelerators with runtime execution offload | |
US9606808B2 (en) | Method and system for resolving thread divergences | |
TW201331836A (zh) | 推理執行和回復 | |
US10216413B2 (en) | Migration of peer-mapped memory pages | |
US9229717B2 (en) | Register allocation for clustered multi-level register files | |
GB2563469A (en) | Methods and systems for inter-pipeline data hazard avoidance | |
US11741015B2 (en) | Fault buffer for tracking page faults in unified virtual memory system | |
US8949777B2 (en) | Methods and systems for mapping a function pointer to the device code | |
CN117377943A (zh) | 存算一体化并行处理系统和方法 | |
US20170160962A1 (en) | System and method for processor mapping | |
Shirakuni et al. | Design and evaluation of asymmetric and symmetric 32-core architectures on FPGA |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
A131 | Notification of reasons for refusal |
Free format text: JAPANESE INTERMEDIATE CODE: A131 Effective date: 20131217 |
|
A02 | Decision of refusal |
Free format text: JAPANESE INTERMEDIATE CODE: A02 Effective date: 20140430 |