JP2012221135A - Numaアーキテクチャ向け並列化プログラムの生成方法 - Google Patents
Numaアーキテクチャ向け並列化プログラムの生成方法 Download PDFInfo
- Publication number
- JP2012221135A JP2012221135A JP2011085041A JP2011085041A JP2012221135A JP 2012221135 A JP2012221135 A JP 2012221135A JP 2011085041 A JP2011085041 A JP 2011085041A JP 2011085041 A JP2011085041 A JP 2011085041A JP 2012221135 A JP2012221135 A JP 2012221135A
- Authority
- JP
- Japan
- Prior art keywords
- array
- loop
- dimension
- source code
- parallelized
- 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
Landscapes
- Devices For Executing Special Programs (AREA)
Abstract
【課題】NUMAアーキテクチャを採用した共有メモリ型マルチプロセッサ計算機システムを使用するプログラマがソースコードを書き換えることなく、ローカルメモリへアクセスする並列化プログラムを生成するコンパイラを提供する。
【解決手段】ローカルメモリにアクセスさせたい配列名と並列化させたい配列の次元がコンパイルオプションとして指定されていた場合に、配列名と配列の次元を配列テーブルに格納し、ソースコード内に配列テーブルに格納されている指定した配列をアロケートする処理がある場合に、アロケート処理の直後に指定した配列の初期化ループを追加し、ソースコード内にあるループに指定した配列がある場合に、指定した次元に使用されている変数と同じ変数をループ制御変数として使用しているループを並列化する。
【選択図】図6
【解決手段】ローカルメモリにアクセスさせたい配列名と並列化させたい配列の次元がコンパイルオプションとして指定されていた場合に、配列名と配列の次元を配列テーブルに格納し、ソースコード内に配列テーブルに格納されている指定した配列をアロケートする処理がある場合に、アロケート処理の直後に指定した配列の初期化ループを追加し、ソースコード内にあるループに指定した配列がある場合に、指定した次元に使用されている変数と同じ変数をループ制御変数として使用しているループを並列化する。
【選択図】図6
Description
本発明は、NUMA(Non-Uniform Memory Access)アーキテクチャを採用した共有メモリ型マルチプロセッサ計算機システムで効率よく動作させるための並列化プログラムの生成方法及びコンパイラに関する。
共有メモリ型マルチプロセッサ計算機システムでは、ループを並列に処理させることで効率よく計算機システムを使用している。例えば、前記したループの並列に処理させる既存の技術として、特開2009−104422号公報(特許文献1)がある。この公報には、「キャッシュメモリまたは主記憶を共有する複数の演算器から構成される計算機システムに対して、ソースコードより最適な並列コードを生成する方法を提供する。」と記載されている(要約参照)。また、特開2009−140451号公報(特許文献2)がある。この公報には、「リスト構造ループの処理を高速化することを課題とする。」と記載されている(要約参照)。非特許文献1には、コンパイラの具体的な実装方法などが記載されている。
NUMAアーキテクチャを採用した共有メモリ型マルチプロセッサ計算機システムでは、ローカルメモリへのアクセスとリモートメモリへのアクセスではアクセス時間が異なる。ローカルメモリアクセスとリモートメモリアクセスの一例を図1で説明する。ローカルメモリアクセス101とは、同じCPUカード102内にある演算器1 103からメモリスイッチ104、メモリコントローラ105を通し主記憶装置1106へアクセスすることであり。リモートメモリアクセス107とは、演算器2 107がメモリスイッチ108からチップ間バス109を通して違うCPUカード102内の主記憶装置1 106へアクセスすることである。並列化プログラムを生成するコンパイラは、ソースコード内にあるループの依存関係のみを判定して並列化するため、ループで使用する配列データのメモリ配置まで意識していない。これによりリモートメモリへのデータアクセスが発生し、性能低下を招くことがある。
例えば、図2に示す並列化プログラムの最初の2重ループ201では、内側202で並列化される。よって、配列aにおける1次元目の1から100までは演算器1 103で計算される。この際、ファーストタッチルールにより、配列aにおける1次元目の1から100までは主記憶装置1 106にアロケートされる。ファーストタッチルールとは、データを初めにアクセスする演算器と同じCPUカード内の主記憶装置にメモリ配置することである。配列aにおける1次元目の101から200までは演算器2 107で計算される。この際、ファーストタッチルールにより、配列aにおける1次元目の101から200までは主記憶装置2 110にアロケートされる。図3に最初の2重ループ201の配列aにおける演算器と主記憶装置への配置の関係を示す。
2つ目の2重ループ203では、外側204で並列化される。よって、配列aにおける2次元目の1から100までは演算器1 103で参照される。配列aにおける2次元目の101から200までは演算器2 107で参照される。図4に2つ目の2重ループ203の配列aにおける演算器と主記憶装置への配置の関係を示す。図4では401と402はローカルアクセスとなり、403と404についてはリモートアクセスが発生していることが判る。
現在、ローカルメモリへのデータアクセスを意識した並列化プログラムを生成するには、ソースコードに指示行等をプログラマが書き加える必要がある。
本発明は、計算機によるNUMAアーキテクチャ向け並列化プログラムの生成方法であって、前記計算機は、ソースコードを格納する記憶装置と、オプション解析部と、初期化処理追加部と、解析部とを備え、前記オプション解析部は、前記記憶装置からソースコードが入力される際に、ローカルメモリにアクセスさせたい配列名と並列化させたい配列の次元がコンパイルオプションとして指定されていた場合に、前記配列名と配列の次元を配列テーブルに格納し、前記初期化処理追加部は、前記ソースコード内に前記配列テーブルに格納されている指定した配列をアロケートする処理がある場合に、アロケート処理の直後に指定した配列の初期化ループを追加し、前記解析部は、前記ソースコード内にあるループに指定した配列がある場合に、指定した次元に使用されている変数と同じ変数をループ制御変数として使用しているループを並列化する。
本発明により生成された並列化プログラムを用いると、演算器からのメモリアクセスがローカルメモリアクセスとなり性能が向上する。また、コンパイラが自動で最適な並列化プログラムを生成するためプログラマによるソースコードの書き換えが不要となる。
以下、実施例を図面を用いて説明する。
図5は、本発明の実施例によるコンパイルを実行する計算機システムの構成図を示す。この計算機システムは、ディスプレイ装置501、キーボード502、演算器503、主記憶装置504、外部記憶装置505から構成される。並列化プログラム506を生成する際は、キーボード502から並列化プログラム生成のためのコマンドとコンパイルオプションを入力する。コンパイルオプションの指定方法は、図7で説明する。並列化プログラムの生成状況及びエラーメッセージや終了メッセージはディスプレイ装置501に表示される。外部記憶装置505には、ソースコード507と最終的に生成される並列化プログラム506が格納される。主記憶装置504には、オプション解析部508、初期化処理追加部509、解析部510、配列テーブル511が格納される。演算器503は、並列化プログラムの生成処理を制御する。
図5のソースコードから並列化プログラムを生成する際の処理内容を図6に示す。ソースコード601とコンパイルオプション602をコンパイラ603に入力することで並列化プログラムを生成する。コンパイラ603は、オプション解析部604でプログラマが入力したコンパイルオプション602の解析する。図7で説明するコンパイルオプションが入力されている場合、配列テーブル605にコンパイルオプションで指定した配列名と次元を登録する。配列テーブル605の詳細について図8で説明する。初期化処理追加部606では、コンパイルオプションで指定した配列の初期化処理を追加する。解析部607は並列化について解析する。初期化処理追加部606の詳細については図9で、解析部607の詳細については図10で説明する。コンパイラ603は解析部607の結果を元に並列化プログラム608を生成する。
図7に、図6のコンパイルオプション602の指定方法を示す。プログラマが入力するコンパイルオプションの指定方法を示す。本実施例で並列化プログラムを生成する際は、並列化方針のオプション701を入力し、その後に配列名702と次元703を指定する。配列名702はローカルメモリアクセスさせる配列名である。配列名と次元は704で示すように、複数指定することを可能とする。複数の配列を指定した場合は先に指定した配列名を優先して並列化する。
図8に、図6の配列テーブル605の一例を示す。配列テーブルには、コンパイルオプションで先に指定した順に番号801を付け、802に配列名、803の配列の次元を登録する。
図9に、図6の初期化処理追加部606のフロー図を示す。まず901の処理で開始する。902の処理では、配列テーブルにコンパイルオプションに指定した配列名が登録されているか解析する。配列名が登録されている場合は903の処理で、配列名を読み込む。903の処理で読み込む配列名は、コンパイルオプションで先に指定した順に読み込む。904の処理は読み込んだ配列がソースコード内でアロケート処理がある場合は、905の処理で、配列のアロケート処理の直後に配列の初期化ループを追加する。905の処理が終了したら902の処理に戻る。904の処理で、読み込んだ配列のアロケート処理が無い場合は902の処理に戻る。配列テーブルに登録されている全ての配列について解析するまで、902の処理から905の処理を繰り返す。
図10に、図6の解析部607のフロー図を示す。まず1001で処理を開始する。1002の処理はソースコードにループがあるか解析する。ループがある場合は1003の処理に移動する。1003の処理は配列テーブルからコンパイルオプションに指定した配列名と次元を読み込む。1003の処理で読み込む配列名と次元は、コンパイルオプションで先に指定した順に配列名と次元を読み込む。1004の処理は読み込んだ配列名がループにあるか解析する。読み込んだ配列名がある場合は1005の処理に移動する。1005の処理で配列の次元に使用している変数がループ制御変数に使用している場合、106の処理でループを並列化する。ループの並列化については、図11及び図12で説明する。1006の処理が終了したら1002の処理に戻る。
1004の処理で読み込んだ配列名がループ内に無い場合は、1007の処理に移動する。1007の処理は配列テーブルに読み込んだ配列以外に配列名が登録されているか解析する。他の配列が登録されている場合は、1008の処理で配列テーブルから他の配列名と次元を読み込む。1008の処理が終了したら1004の処理に戻る。1007の処理で他の配列名が、配列テーブルに登録されていない場合は1002の処理に戻る。1005の処理で配列の次元に使用している変数がループ制御変数に使用していない場合、1007の処理に移動する。ソースコード内の全てのループを解析するまで、1002から1006の処理を繰り返す。1002の処理でソースコード内にループが無い場合は、1009で解析部を終了する。
本実施例によりコンパイルした並列化プログラムの一例を図1及び図11、図12を使用して説明する。まず、本実施例に示す、コンパイルオプションで、配列aと配列の次元に2を指定する。指定したコンパイルオプションに従い、コンパイラは配列aの初期化ループとして2重ループ1101を追加する。2重ループ1101の配列aの2次元目では、変数jが使用されている。変数jは外側1102の制御変数となるので、2重ループ1101は外側1102で並列化される。よって、配列aにおける2次元目の1から100までは、演算器1 103で計算される。この際、ファーストタッチルールにより、配列aにおける2次元目の1から100までは、主記憶装置1 106にアロケートされる。配列aにおける2次元目の101から200までは演算器2 107で計算される。この際、ファーストタッチルールにより配列aにおける2次元目の101から200までは、主記憶装置2 110にアロケートされる。図12に追加した2重ループ1101の配列aにおける演算器と主記憶装置への配置の関係を示す。
2つ目の2重ループ1103では、コンパイルオプションの指定により外側ループ1104で並列化される。よって、配列aにおける2次元目の1から100までが演算器1 103で計算される。配列aにおける101から200までが演算器2 107で計算される。
3つ目の2重ループ1104においても、コンパイルオプションの指定により外側ループ1106が並列化される。よって、配列aにおける2次元目の1から100までが演算器1 103で参照され、配列aにおける101から200までが演算器2 107で参照される。したがって、2つ目の2重ループ1103及び3つ目の2重ループ1105の配列aにおける演算器と主記憶装置への配置の関係についても図12と同じになり、配列aにおいてはリモートメモリアクセスが発生しなくなる。
101 ローカルメモリアクセス
102 CPUカード
103,107,503 演算器
104,108 メモリスイッチ
105 メモリコントローラ
106,110,504 主記憶装置
107 リモートメモリアクセス
109 チップ間バス
501 ディスプレイ装置
502 キーボード
505 外部記憶装置
506,608 並列化プログラム
507,601 ソースコード
508,604 オプション解析部
509,606 初期化処理追加部
510,607 解析部
511,605 配列テーブル
602 コンパイルオプション
603 コンパイラ
102 CPUカード
103,107,503 演算器
104,108 メモリスイッチ
105 メモリコントローラ
106,110,504 主記憶装置
107 リモートメモリアクセス
109 チップ間バス
501 ディスプレイ装置
502 キーボード
505 外部記憶装置
506,608 並列化プログラム
507,601 ソースコード
508,604 オプション解析部
509,606 初期化処理追加部
510,607 解析部
511,605 配列テーブル
602 コンパイルオプション
603 コンパイラ
Claims (1)
- 計算機によるNUMAアーキテクチャ向け並列化プログラムの生成方法であって、前記計算機は、ソースコードを格納する記憶装置と、オプション解析部と、初期化処理追加部と、解析部とを備え、前記オプション解析部は、前記記憶装置からソースコードが入力される際に、ローカルメモリにアクセスさせたい配列名と並列化させたい配列の次元がコンパイルオプションとして指定されていた場合に、前記配列名と配列の次元を配列テーブルに格納し、前記初期化処理追加部は、前記ソースコード内に前記配列テーブルに格納されている指定した配列をアロケートする処理がある場合に、アロケート処理の直後に指定した配列の初期化ループを追加し、前記解析部は、前記ソースコード内にあるループに指定した配列がある場合に、指定した次元に使用されている変数と同じ変数をループ制御変数として使用しているループを並列化するNUMAアーキテクチャ向け並列化プログラムの生成方法。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
JP2011085041A JP2012221135A (ja) | 2011-04-07 | 2011-04-07 | Numaアーキテクチャ向け並列化プログラムの生成方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
JP2011085041A JP2012221135A (ja) | 2011-04-07 | 2011-04-07 | Numaアーキテクチャ向け並列化プログラムの生成方法 |
Publications (1)
Publication Number | Publication Date |
---|---|
JP2012221135A true JP2012221135A (ja) | 2012-11-12 |
Family
ID=47272594
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
JP2011085041A Pending JP2012221135A (ja) | 2011-04-07 | 2011-04-07 | Numaアーキテクチャ向け並列化プログラムの生成方法 |
Country Status (1)
Country | Link |
---|---|
JP (1) | JP2012221135A (ja) |
Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JP2001297068A (ja) * | 2000-04-11 | 2001-10-26 | Hitachi Ltd | 並列プログラム生成方法およびその記録媒体 |
JP2004206314A (ja) * | 2002-12-25 | 2004-07-22 | Nec Corp | 並列プログラム生成装置,並列プログラム生成方法および並列プログラム生成プログラム |
JP2009301453A (ja) * | 2008-06-17 | 2009-12-24 | Nec Corp | 分散メモリ型マルチプロセッサシステム、マスク付き逆シフト通信方法及びプログラム |
-
2011
- 2011-04-07 JP JP2011085041A patent/JP2012221135A/ja active Pending
Patent Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JP2001297068A (ja) * | 2000-04-11 | 2001-10-26 | Hitachi Ltd | 並列プログラム生成方法およびその記録媒体 |
JP2004206314A (ja) * | 2002-12-25 | 2004-07-22 | Nec Corp | 並列プログラム生成装置,並列プログラム生成方法および並列プログラム生成プログラム |
JP2009301453A (ja) * | 2008-06-17 | 2009-12-24 | Nec Corp | 分散メモリ型マルチプロセッサシステム、マスク付き逆シフト通信方法及びプログラム |
Non-Patent Citations (2)
Title |
---|
CSNG200100414018; 廣岡孝志、太田 寛、菊池純男: '分散共有メモリ向け自動データ分散方法の提案' 情報処理学会研究報告 Vol.99,No.66, 19990804, pp.101〜106, 社団法人情報処理学会 * |
JPN6014006507; 廣岡孝志、太田 寛、菊池純男: '分散共有メモリ向け自動データ分散方法の提案' 情報処理学会研究報告 Vol.99,No.66, 19990804, pp.101〜106, 社団法人情報処理学会 * |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
Chen et al. | GFlink: An in-memory computing architecture on heterogeneous CPU-GPU clusters for big data | |
Ma et al. | Rammer: Enabling holistic deep learning compiler optimizations with {rTasks} | |
Gautier et al. | Xkaapi: A runtime system for data-flow task programming on heterogeneous architectures | |
Wang et al. | Blasx: A high performance level-3 blas library for heterogeneous multi-gpu computing | |
US8997071B2 (en) | Optimized division of work among processors in a heterogeneous processing system | |
Lu et al. | Mrphi: An optimized mapreduce framework on intel xeon phi coprocessors | |
CN102402419A (zh) | 用所选执行运行时执行的用户代码的运行时不可知表示 | |
Li et al. | Warp-consolidation: A novel execution model for gpus | |
JP4381459B1 (ja) | 情報処理装置、粒度調整方法およびプログラム | |
Memeti et al. | HSTREAM: a directive-based language extension for heterogeneous stream computing | |
Silvano et al. | The ANTAREX tool flow for monitoring and autotuning energy efficient HPC systems | |
Arandi et al. | DDM-VMc: the data-driven multithreading virtual machine for the cell processor | |
Gioiosa et al. | The minos computing library: Efficient parallel programming for extremely heterogeneous systems | |
JP4830108B2 (ja) | プログラム処理装置、プログラム処理方法、並列処理プログラム用コンパイラおよび並列処理プログラム用コンパイラを格納した記録媒体 | |
Kale et al. | Toward a standard interface for user-defined scheduling in OpenMP | |
Parashar et al. | Hardware abstractions for targeting EDDO Architectures with the Polyhedral Model | |
Pereira et al. | Compiling and optimizing OpenMP 4. X programs to OpenCL and SPIR | |
Kim et al. | Parallel quick sort algorithms analysis using OpenMP 3.0 in embedded system | |
Yan et al. | Homp: Automated distribution of parallel loops and data in highly parallel accelerator-based systems | |
Peccerillo et al. | Task-dag support in single-source PHAST library: Enabling flexible assignment of tasks to cpus and gpus in heterogeneous architectures | |
JP5360506B2 (ja) | マルチコアにおけるプログラミングシステム、その方法及びそのプログラム | |
JP2012221135A (ja) | Numaアーキテクチャ向け並列化プログラムの生成方法 | |
US20120137300A1 (en) | Information Processor and Information Processing Method | |
Diavastos et al. | Auto-tuning static schedules for task data-flow applications | |
Thoman et al. | Optimizing task parallelism with library-semantics-aware compilation |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
A621 | Written request for application examination |
Free format text: JAPANESE INTERMEDIATE CODE: A621 Effective date: 20130621 |
|
A977 | Report on retrieval |
Free format text: JAPANESE INTERMEDIATE CODE: A971007 Effective date: 20140120 |
|
A131 | Notification of reasons for refusal |
Free format text: JAPANESE INTERMEDIATE CODE: A131 Effective date: 20140218 |
|
A02 | Decision of refusal |
Free format text: JAPANESE INTERMEDIATE CODE: A02 Effective date: 20140617 |