2. OpenMP OpenMP OpenMP OpenMP #pragma#pragma omp #pragma omp parallel #pragma omp single #pragma omp master #pragma omp for #pragma omp critica

Similar documents
2. OpenMP におけるキーワード一覧 OpenMP の全体像を理解するために 指示文 指示節 実行時ライブラリ関数 環境変数にそれぞれどうようなものがあるのかを最初に示します 各詳細については第 4 章以降で説明します 2.1 OpenMP の指示文 OpenMPの指示文は プログラム内で並列

02_C-C++_osx.indd

OpenMP 3.0 C/C++ 構文の概要

03_Fortran_osx.indd

The 3 key challenges in programming for MC

Copyright 2004 Sun Microsystems, Inc., 4150 Network Circle, Santa Clara, California 95054, U.S.A. All rights reserved. U.S. Government Rights - Commer

Microsoft PowerPoint - OpenMP入門.pptx

PowerPoint プレゼンテーション

OpenMP (1) 1, 12 1 UNIX (FUJITSU GP7000F model 900), 13 1 (COMPAQ GS320) FUJITSU VPP5000/64 1 (a) (b) 1: ( 1(a))

コードのチューニング

Microsoft PowerPoint - 03_What is OpenMP 4.0 other_Jan18

NUMAの構成

OpenMP¤òÍѤ¤¤¿ÊÂÎó·×»»¡Ê£²¡Ë

01_OpenMP_osx.indd

untitled

OpenMPプログラミング

(Microsoft PowerPoint \215u\213`4\201i\221\272\210\344\201j.pptx)

OpenMPプログラミング

C

並列プログラミング入門(OpenMP編)

Microsoft Word - openmp-txt.doc

enshu5_4.key

演習1: 演習準備

AICS 村井均 RIKEN AICS HPC Summer School /6/2013 1

OpenMP¤òÍѤ¤¤¿ÊÂÎó·×»»¡Ê£±¡Ë

Microsoft PowerPoint - 阪大CMSI pptx

OpenMP¤òÍѤ¤¤¿ÊÂÎó·×»»¡Ê£±¡Ë

生物情報実験法 (オンライン, 4/20)

FFTSS Library Version 3.0 User's Guide

WinHPC ppt

C C UNIX C ( ) 4 1 HTML 1

Java updated

Microsoft PowerPoint - 阪大CMSI pptx

Microsoft PowerPoint ppt [互換モード]

8 / 0 1 i++ i 1 i-- i C !!! C 2

Microsoft Word - 計算科学演習第1回3.doc

64bit SSE2 SSE2 FPU Visual C++ 64bit Inline Assembler 4 FPU SSE2 4.1 FPU Control Word FPU 16bit R R R IC RC(2) PC(2) R R PM UM OM ZM DM IM R: reserved

untitled

Intel® Compilers Professional Editions

スライド 1

(Version: 2017/4/18) Intel CPU 1 Intel CPU( AMD CPU) 64bit SIMD Inline Assemler Windows Visual C++ Linux gcc 2 FPU SSE2 Intel CPU do

( CUDA CUDA CUDA CUDA ( NVIDIA CUDA I

/* do-while */ #include <stdio.h> #include <math.h> int main(void) double val1, val2, arith_mean, geo_mean; printf( \n ); do printf( ); scanf( %lf, &v

C言語によるアルゴリズムとデータ構造

64bit SSE2 SSE2 FPU Visual C++ 64bit Inline Assembler 4 FPU SSE2 4.1 FPU Control Word FPU 16bit R R R IC RC(2) PC(2) R R PM UM OM ZM DM IM R: reserved

連載講座 : 高生産並列言語を使いこなす (4) ゲーム木探索の並列化 田浦健次朗 東京大学大学院情報理工学系研究科, 情報基盤センター 目次 1 準備 問題の定義 αβ 法 16 2 αβ 法の並列化 概要 Young Brothers Wa

Microsoft PowerPoint - 演習1:並列化と評価.pptx

enshu5_6.key

3 Java 3.1 Hello World! Hello World public class HelloWorld { public static void main(string[] args) { System.out.println("Hello World");

XcalableMP入門

OpenMP の概要

cpp1.dvi

Microsoft PowerPoint ppt [互換モード]

製品価格 ( 新規購入 ) INT6531 インテル VTune Amplifier XE 2017 for Windows Floating 1-275, ,000 INT6532 インテル VTune Amplifier XE 2017 for Linux Floating 1-27

第5回お試しアカウント付き並列プログラミング講習会

I I / 47

LinuxDeviceDriver2003-PDF.PDF

ex01.dvi

MPI MPI MPI.NET C# MPI Version2

P05.ppt

‚æ4›ñ

:30 12:00 I. I VI II. III. IV. a d V. VI

tuat1.dvi

Microsoft Word - w_mkl_build_howto.doc

DPD Software Development Products Overview

Microsoft PowerPoint - 002_OpenMP 5.0_2018_Part2

1.ppt

Intel_ParallelStudioXE2013_ClusterStudioXE2013_Introduction.pptx

C¥×¥í¥°¥é¥ß¥ó¥° ÆþÌç

連載講座 : 高生産並列言語を使いこなす (5) 分子動力学シミュレーション 田浦健次朗 東京大学大学院情報理工学系研究科, 情報基盤センター 目次 1 問題の定義 17 2 逐次プログラム 分子 ( 粒子 ) セル 系の状態 ステップ 18

r07.dvi

ohp07.dvi

2


2

インテル® VTune™ パフォーマンス・アナライザー 9.1 Windows* 版

Informatics 2014

Cell/B.E. BlockLib

±é½¬£²¡§£Í£Ð£É½éÊâ

I. Backus-Naur BNF S + S S * S S x S +, *, x BNF S (parse tree) : * x + x x S * S x + S S S x x (1) * x x * x (2) * + x x x (3) + x * x + x x (4) * *

¥×¥í¥°¥é¥ß¥ó¥°±é½¬I Exercise on Programming I [1zh] ` `%%%`#`&12_`__~~~ alse

VT SoftWare Users Guide


Java (5) 1 Lesson 3: x 2 +4x +5 f(x) =x 2 +4x +5 x f(10) x Java , 3.0,..., 10.0, 1.0, 2.0,... flow rate (m**3/s) "flow

1 return main() { main main C 1 戻り値の型 関数名 引数 関数ブロックをあらわす中括弧 main() 関数の定義 int main(void){ printf("hello World!!\n"); return 0; 戻り値 1: main() 2.2 C main

Class Overview

XMPによる並列化実装2

‚æ2›ñ C„¾„ê‡Ìš|

Microsoft PowerPoint ppt [互換モード]

Copyright 2009, SofTek Systems, Inc. All rights reserved.

:30 12:00 I. I VI II. III. IV. a d V. VI

LAN Copyright c Daikoku Manabu This tutorial is licensed under a Creative Commons Attribution 2.1 Japan License

超初心者用

2012年度HPCサマーセミナー_多田野.pptx

C による数値計算法入門 ( 第 2 版 ) 新装版 サンプルページ この本の定価 判型などは, 以下の URL からご覧いただけます. このサンプルページの内容は, 新装版 1 刷発行時のものです.

10/ / /30 3. ( ) 11/ 6 4. UNIX + C socket 11/13 5. ( ) C 11/20 6. http, CGI Perl 11/27 7. ( ) Perl 12/ 4 8. Windows Winsock 12/11 9. JAV

1 OpenCL OpenCL 1 OpenCL GPU ( ) 1 OpenCL Compute Units Elements OpenCL OpenCL SPMD (Single-Program, Multiple-Data) SPMD OpenCL work-item work-group N

Microsoft Word - C.....u.K...doc

Transcription:

C OpenMP 1. OpenMP OpenMP Architecture Review BoardARB OpenMP OpenMP OpenMP OpenMP OpenMP Version 2.0 Version 2.0 OpenMP Fortran C/C++ C C++ 1997 10 OpenMP Fortran API 1.0 1998 10 OpenMP C/C++ API 1.0 1999 11 OpenMP Fortran API 1.1 2000 11 OpenMP Fortran API 2.0 2002 3 OpenMP C/C++ API 2.0 2005 5 OpenMP Fortran C/C++ API Version 2.5 2007 10 OpenMP Fortran C/C++ API Version 3.0 Draft OpenMP #pragma OpenMP OpenMP MPI 1 OpenMP MPI OpenMP OpenMP http://www.openmp.org/ スーパーコンピューティングニュース - 149 -

2. OpenMP OpenMP 4 2.1 OpenMP OpenMP #pragma#pragma omp #pragma omp parallel #pragma omp single #pragma omp master #pragma omp for #pragma omp critical #pragma omp sections #pragma omp atomic #pragma omp barrier #pragma omp ordered #pragma omp flush #pragma omp parallel for #pragma omp parallel sections #pragma omp threadprivate #pragma omp sections section #pragma omp section 2.2 OpenMP OpenMP OpenMP #pragma omp private firstprivate lastprivate shared default reduction copyin copyprivate ordered schedule if num_threads nowait スーパーコンピューティングニュース - 150 -

2.3 OpenMP OpenMP omp.h omp_set_num_threads(int) omp_init_lock(omp_lock_t *) omp_grt_num_threads() omp_destroy_lock(omp_lock_t *) omp_get_max_threads() omp_set_lock(omp_lock_t *) omp_get_thread_num() omp_unset_lock(omp_lock_t *) omp_get_num_procs() omp_test_lock(omp_lock_t *) omp_in_parallel() omp_set_dynamic(int) omp_init_nest_lock(omp_nest_lock_t *) omp_get_dynamic() omp_destroy_nest_lock(omp_nest_lock_t *) omp_set_nested(int) omp_set_nest_lock(omp_nest_lock_t *) omp_get_nested() omp_unset_nest_lock(omp_nest_lock_t *) omp_test_nest_lock(omp_nest_lock_t *) omp_get_wtime() omp_get_wtick() OpenMP OpenMP 2 omp_lock_t omp_nest_lock_t 2.4 OpenMP OMP_NUM_THREADS OMP_SCHEDULE OMP_DYNAMIC OMP_NESTED OMP_WAIT_POLICYOpenMP 3.0 OMP_STACK_SIZE OpenMP 3.0 スーパーコンピューティングニュース - 151 -

3. 3.1 OpenMP gcc (*1) Intel PGI (*2) Sun Studio Visual Studio IBM XLC PathScale (*1) gcc 4.1 OpenMP gcc41 gcc42 (*2) PGI OpenMP OpenMP OpenMP OpenMP OpenMP OpenMP OpenMP OpenMP gcc Intel PGI Sun Studio Visual Studio IBM XLC PathScale (*1) 3.2 OMP_NUM_THREADS 16 sh OMP_NUM_THREADS=16 export OMP_NUM_THREADS csh tcsh setenv OMP_NUM_THREADS 16 bash Linux FreeBSD sh export OMP_NUM_THREADS=16 Windows set OMP_NUM_THREADS=16 スーパーコンピューティングニュース - 152 -

4 OpenMP 4.1 #pragma omp parallel #pragma omp parallel 1 { } #include <stdio.h> int main(void) { #pragma omp parallel { printf("hello World! n"); } } Hello World!OpenMP 4.2 #pragma omp for for int a[100] 0 2 #pragma omp for 1 #pragma omp parallel for 4 4 for 0 1 2 3 スーパーコンピューティングニュース - 153 -

4.3 #pragma omp sections #pragma omp sections#pragma omp section#pragma omp section 1 1 #pragma omp section 1 Hello 1Hello 2Hello 3 2 #pragma omp section #pragma omp section #pragma omp section #pragma omp section #pragma omp sections #pragma omp sections nowait #pragma omp sections 1 #pragma omp parallel sections スーパーコンピューティングニュース - 154 -

4.4 #pragma omp single 1 Hello 1Hello 3Hello 2 1 #pragma omp singlehello 1Hello 2Hello 3 Hello 1Hello 2 4.5 #pragma omp master (0 ) Hello 1Hello 2I am a master #pragma omp single #pragma omp master I am a masterhello 2#pragma omp single スーパーコンピューティングニュース - 155 -

4.6 #pragma omp critical 1 1 sleep(1) 1 sleep end 1 1 sleep end name 4.7 #pragma omp atomic 1 #pragma omp atomic 1 x x #pragma omp atomic#pragma omp critical #pragma omp atomic #pragma omp critical スーパーコンピューティングニュース - 156 -

4.8 #pragma omp barrier Hello 1Hello 2 #pragma omp barrier 4.9 #pragma omp ordered for #pragma omp for#pragma omp parallel for 4 i=0 thread_num=0 i=1 thread_num=0 i=24 thread_num=0 i=25 thread_num=1 i=49 thread_num=1 i=50 thread_num=2 i=74 thread_num=2 i=75 thread_num=3 i=99 thread_num=3 スーパーコンピューティングニュース - 157 -

i=024i=2549i=5074i=7599 5.8 schedule for 4.10 #pragma omp flush #pragma omp flush flush #pragma omp parallel #pragma omp for #pragma omp parallel for #pragma omp sections #pragma omp parallel sections #pragma omp single #pragma omp critical #pragma omp barrier #pragma omp ordered nowait flush flush #pragma omp for #pragma omp parallel for #pragma omp sections #pragma omp parallel sections #pragma omp single #pragma omp master 4.11 #pragma omp threadprivate(list) threadprivate, threadprivate threadprivate #pragma omp parallel copyin threadprivate copyin schedule if private firstprivate lastprivate shared reduction threadprivate default スーパーコンピューティングニュース - 158 -

#pragma omp threadprivate 5 int i threadprivate 4 i 100 i 100 9 i=200 i 200 100 11 printf() 13 i=1000 14 copyin(i) i 1000 threadprivate i 16 threadprivate i 17 printf() スーパーコンピューティングニュース - 159 -

5 OpenMP 5.1 private(list) list,#pragma omp for for default shared private 5.2 firstprivate(list) list private private firstprivate 5.3 lastprivate(list) list private private #pragma omp forfor #pragma omp sections 5.4 shared(list) list default sharedshared 5.5 default(shared none) default(shared)default(none) privatesharedfirstprivatelastprivatereduction default default(shared) 5.6 reduction(operator:list) list operator operator list, #pragma omp atomic#pragma omp critical reduction スーパーコンピューティングニュース - 160 -

double a[] n reduction #pragma omp parallel sections 5.7 ordered for #pragma omp ordered 5.8 schedule for schedule(type) schedule(type,chunk)type staticdynamicguidedruntime 1 static chunk schedule static dynamic chunk chunk=1 guided スーパーコンピューティングニュース - 161 -

chunk chunk chunk=1 runtime OMP_SCHEDULE chunk 5.9 copyin copyin threadprivate copyin threadprivate threadprivate 5.10 copyprivate(list) #pragma omp singlelist 1 random() i 5.11 if #pragma omp parallel n 100 5.12 num_threads OMP_NUM_THREADS スーパーコンピューティングニュース - 162 -

5.13 nowait 5.14 parallel for sections single parallel for parallel sections private firstprivate lastprivate shared default reduction ordered schedule copyin copyprivate if num_threads nowait 6 OpenMP 6.1 OpenMP omp.h OpenMP OpenMP _OPENMP OpenMP OpenMP OpenMP Version 1.0 _OPENMP =199810 OpenMP Version 2.0 _OPENMP =200505 OpenMP _OPENMP スーパーコンピューティングニュース - 163 -

6.2 void omp_set_num_threads(int); int omp_get_num_threads(); int omp_get_max_threads(); int omp_get_thread_num(); 0 p-1 p int omp_get_num_procs(); int omp_in_parallel(); 0 0 void omp_set_dynamic(int); 0 0 int omp_get_dynamic(); 0 0 void omp_set_nested(int); 0 0 int omp_get_nested(); 0 0 6.3 OpenMP 2 void omp_init_lock(&lock); lock omp_lock_t lock void omp_destory_lock(&lock); void omp_set_lock(&lock); omp_unset_lock() void omp_unset_lock(&lock); スーパーコンピューティングニュース - 164 -

int omp_test_lock(&lock); 1 0 omp_set_lock() void omp_init_nest_lock(&lock); 0 lock omp_nest_lock_t lock void omp_destory_nest_lock(&lock); void omp_set_nest_lock(&lock); 1 void omp_unset_nest_lock(&lock); 1 0 int omp_test_nest_lock(&lock); 1 1 0 omp_set_nest_lock() 6.4 double omp_get_wtime(); 1970 1 1 0 2 double omp_get_wtick(); omp_get_wtime() スーパーコンピューティングニュース - 165 -

7 OpenMP 7.1 OMP_NUM_THREADS omp_set_num_threads() #pragma omp parallel num_threads 7.2 OMP_SCHEDULE #pragma omp for#pragma omp parallel forschedule(runtime) type type,chunk type STATICDYNAMICGUIDED chunk setenv OMP_SCHEDULE STATIC,5 setenv OMP_SCHEDULE DYNAMIC,5 setenv OMP_SCHEDULE GUIDED 7.3 OMP_DYNAMIC TRUE FALSE TRUE PGI 7.4 OMP_NESTED TRUE FALSE FALSE PGI 7.5 OMP_WAIT_POLICY OpenMP 3.0 ACTIVE PASSIVE 7.6 OMP_STACK_SIZEOpenMP 3.0 setenv OMP_STACK_SIZE 2K setenv OMP_STACK_SIZE 2M setenv OMP_STACK_SIZE 2G setenv OMP_STACK_SIZE 256B K M G B K スーパーコンピューティングニュース - 166 -

8 8.1 ping 192.168.0.1192.168.0.254 254 IP ping ping 1 254 OpenMP 254 2 スーパーコンピューティングニュース - 167 -

8.2 2 1 1 スーパーコンピューティングニュース - 168 -