第三回 MPI 実践セミナー HPC システムズ株式会社 新規事業企画室南本和秀 Copyright (C) 2009 HPC SYSTEMS, Inc. All 2009/3/26 1 rights reserved.

Size: px
Start display at page:

Download "第三回 MPI 実践セミナー HPC システムズ株式会社 新規事業企画室南本和秀 Copyright (C) 2009 HPC SYSTEMS, Inc. All 2009/3/26 1 rights reserved."

Transcription

1 第三回 MPI 実践セミナー HPC システムズ株式会社 新規事業企画室南本和秀 Copyright (C) 2009 HPC SYSTEMS, Inc. All 2009/3/26 1 rights

2 大規模 高性能への需要と物理的限界 自然科学や物理シミュレーションなど 成果 / 精度を得るには 速さ 記憶容量 が必須 大規模メモリ空間が使用可能な時代 しかし CPU クロック周波数は 4GHz を目前に足踏み メモリ容量は 物理的に搭載量が制限される Copyright (C) 2009 HPC SYSTEMS, Inc. All 2009/3/26 2 rights

3 並列処理による制限の回避 1 つの巨大で複雑な問題 ( 処理 ) を 複数の単純な問題 ( 処理 ) へ分割し並列に解いて高速化を図る 小 P Problem 小 P 小 P 小 P 2009/3/26 3 Copyright (C) 2009 HPC SYSTEMS, Inc. All rights

4 並列処理 とは何を示すのか コンピュータにおいて複数のプロセッサで 1 つのタスクを動作させること 問題を解く過程はより小さなタスクに分割できることが多い という事実を利用して処理効率の向上を図る手法である 出典 : フリー百科事典 ウィキペディア (Wikipedia) より抜粋 2009/3/26 4 Copyright (C) 2009 HPC SYSTEMS, Inc. All rights

5 並列処理の簡単な例 Y=a[0]+a[1]+ +a[99] Σ 1CPU 4CPU プロセス0 プロセス1 プロセス2 プロセス3 a=a[0]+ +a[24] b=a[25]+ +a[49] c=a[50]+ +a[74] d=a[75]+ +a[99] Y=a+b+c+d 並列処理を行う部分 Copyright (C) 2009 HPC SYSTEMS, Inc. All 2009/3/26 5 rights

6 並列化技術の歴史 マルチスレッド 1 つのプロセス内で 複数のスレッドが起動し 異なるスレッドが持つ情報に容易にアクセス出来る マルチプロセス 異なるプロセスとして起動し メモリにある情報はそれぞれ独立している 異なるプロセスのデータには 直接アクセスできない 2009/3/26 6 Copyright (C) 2009 HPC SYSTEMS, Inc. All rights

7 並列化方式の比較 メリット デメリット マルチスレッド :OpenMP 共有メモリ方式 メモリモデルが一般的 コンパイラによる自動並列 データの送受が メモリコピーの処理に置き換わる 物理的な拡張性が低い プログラムが分散メモリ環境では動作しない マルチプロセス :MPI 分散メモリ方式 大規模なシステム構成が可能 実行ファイルが共有メモリ環境でも動作 処理の分割法によってメモリモデルが複雑 プログラミングが複雑 プロセス同士の情報交換が多いと 計算全体の性能が上がらない 将来の理想象 共有メモリ型 分散メモリ型の ハイブリッド 開発は逐次で行い マルチプロセスで実行 2009/3/26 7 Copyright (C) 2009 HPC SYSTEMS, Inc. All rights

8 MPI とは (Message Passing Interface) 複数のプロセスが お互いにメッセージを送受信する仕組みを提供するための標準規格 同一 ( 単一 ) のプログラムを 複数のプロセスで同時に実行 (SPMD:Single Program Multi Data) 複数プロセス起動 プロセス0 プロセス1 プロセス2 プロセス3 a=a[0]+ +a[24] b=a[25]+ +a[49] c=a[50]+ +a[74] d=a[75]+ +a[99] Y=a+b+c+d Copyright (C) 2009 HPC SYSTEMS, Inc. All 2009/3/26 8 プロセス間通信 rights

9 1 対 1 通信 全ての通信の基本形 プロセス 0 プロセス 1 a=a[0]+ +a[24] b=a[25]+ +a[49] Y=a+b+c+d プロセス 0 送信 受信 データ データ プロセス 1 受信 送信 2009/3/26 9 Copyright (C) 2009 HPC SYSTEMS, Inc. All rights

10 1 対 1 通信を行うための処理 プロセス 0 プロセス 1 送信 データ 受信 同一のプログラムを同時に実行データ RANK により 処理を分岐 受信 送信 if(rank==0){ MPI_Send( sendbuff, 1, MPI_INT, 1, 1,MPI_COMM_WORLD); }else if(rank==1){ MPI_Recv( recvbuff, 1, MPI_INT, 0, 1,MPI_COMM_WORLD, status); } RANK1 へ sendbuffをsend RANK0 から recvbufferに Copyright (C) 2009 HPC SYSTEMS, Inc. All 2009/3/26 Recv 10 rights

11 送受信関数の概要 MPI_Send( sendbuff, 1, MPI_INT, 1, 1,MPI_COMM_WORLD); ( 送信バッファ, サイズ, 型, 宛先, タグ, コミュニケータ ) MPI_Recv( recvbuff, 1, MPI_INT, 0, 1,MPI_COMM_WORLD, status); ( 受信バッファ, サイズ, 型, 宛先, タグ, コミュニケータ コミュニケータ, ステータス ) 型 :( 付録参照 ) MPI_INT, MPI_REAL 等 送受信したいバッファの型により変える タグ : 同じプロセス同士の通信であっても 異なる処理を行うための識別子 2009/3/26 11 Copyright (C) 2009 HPC SYSTEMS, Inc. All rights

12 必須のインクルード mpi.h (Fortranの場合はmpif.h) 変数 int rank int nproc 処理 1MPI_Init 2MPI_Comm_size 3MPI_Comm_Rank 4MPI_Finalize MPI を使用するための必須事項 自ランク番号総ランク数 MPI 環境の初期化プロセスの総数取得自ランク取得 MPI 終了処理 ( 例 ) RANK0 から RANK1 へ情報を送信するプログラム 1. #include <stdio.h> 2. #include mpi.h MPIのためのインクルードファイル int main(int argc, char* argv[]){ 5. int rank, nproc, status; 6. MPI_Status status; 7. int buffer, Message=25; 8. MPI_Init(&argc, &argv); 1 9. MPI_Comm_rank(MPI_COMM_WORLD, &rank);2 10. MPI_Comm_size(MPI_COMM_WORLD, &nproc); if(rank==0){ 14. MPI_Send( Message, 1, MPI_INT, 1, 1,MPI_COMM_WORLD); 15. }else if(rank==1){ 16. MPI_Recv(buffer, 1, MPI_INT, 0, 1,MPI_COMM_WORLD, &status) ; 17. } MPI_Finalize(); return 0; 22. } Copyright (C) 2009 HPC SYSTEMS, Inc. All 2009/3/26 12 rights

13 計算の並列化 rank0 rank1 rank2 rank3 a=a[0]+ +a[24] b=a[25]+ +a[49] c=a[50]+ +a[74] d=a[75]+ +a[99] Y=a+b+c+d 2009/3/26 13 Copyright (C) 2009 HPC SYSTEMS, Inc. All rights

14 並列化プログラム 1. #include <stdio.h> 2. #include "mpi.h" 3. int main(int argc, char* argv[]){ 4. int arr[100]; 5. int itr; 6. int nproc; /* Number of proccess */ 7. int rank; /* Number of my rank */ 8. int buf[25]; 9. /* Initialize of MPI */ 10. MPI_Init(&argc, &argv); 11. MPI_Comm_rank( 12. MPI_COMM_WORLD, &rank); 13. MPI_Comm_size( 14. MPI_COMM_WORLD, &nproc); 15. /* 配列 arrにデータを格納 */ 16. for(itr=0;itr<100;itr++){ 17. arr[itr]=itr; 18. } 19. if(rank==0){ 20. /* 配列データを各ランクへ配信 */ 21. int dist; 22. for(dist=1; dist<4; dist++){ 25. } 52. int sum=0; 53. for(itr=0; itr<25; itr++){ 26. // bufに入った 25 個の 整数型を 54. sum=sum+buf[itr]; 27. // dist 番のランクに向かって 55. } 28. // 特定のタグ1を付けて 29. // 送信 MPI_Send( buf, 25, MPI_INT, dist, 1, 31. MPI_COMM_WORLD); 32. } 33. for(itr=0;itr<25;itr++){ 34. buf[itr]=arr[itr]; 35. } 36. }else{ 37. /* 0 番以外のrank 番号を持つプロセス の処理 */ 38. // buf 配列に 39. // 25 個の 40. // int 型の配列を 41. // プロセス0 番から 42. // タグ1で 43. // 受け取る 44. MPI_Recv( buf, 25, MPI_INT, 0, 1, 45. MPI_COMM_WORLD, 46. MPI_STATUS_IGNORE); 47. } printf("rank=%d,sum=%d n",rank,sum); 57. // 各 RANKの結果を集計 // 58. if(rank == 0){ 59. int sum_other=0; 60. int src; 61. for(src=1; src<4; src++){ 62. MPI_Recv( 63. &sum_other, 1, MPI_INT, src, 2, 64. MPI_COMM_WORLD, 65. MPI_STATUS_IGNORE); 66. sum=sum+sum_other; 67. } 68. printf("summation=%d n",sum); 69. }else{ 70. MPI_Send(&sum, 1, MPI_INT, 0, 2, 71. MPI_COMM_WORLD); 72. } 73. MPI_Finalize(); return 0; 76. } 48. //!!!!!!!!!!!!!!!!!!!!!!!!!! // 49. // 並列計算される部分 // 23. for(itr=0;itr<25;itr++){ 50. //!!!!!!!!!!!!!!!!!!!!!!!!!! // 24. buf[itr]=arr[dist*25+itr]; 51. Copyright 2009/3/26 /* 配列の中身を足し合わせ (C) 2009 HPC SYSTEMS, */ Inc. All rights 14

15 基本的な集団通信 集団通信関数を使用することで 複数のプロセスがメッセージ交換を一斉に行う MPI_Scatter 1 つの送信元 RANK(Root) から 全プロセスの受信バッファへ 決まったサイズのデータを RANK が小さい順に格納 MPI_Gather 全 RANK の送信バッファから 1 つの宛先 RANK(Root) の受信バッファへ 決まったサイズのデータを RANK が小さい順に格納 送信バッファ RANK 0 RANK 0 受信バッファ RANK 0 RANK 1 RANK 2 RANK 3 受信バッファ 送信バッファ Copyright (C) 2009 HPC SYSTEMS, Inc. All 2009/3/26 15 rights

16 集団通信を使った足し算プログラム 1. #include <stdio.h> 2. #include "mpi.h" 3. int main(int argc, char* argv[]){ 4. int arr[100]; 5. int itr; 6. int ansr[4]; 7. int sum=0; 8. int nproc; /* 全プロセス数 */ 9. int rank; /* 自分のランク番号 */ 10. int buf[25]; 11. MPI_Init(&argc, &argv); 12. MPI_Comm_rank(MPI_COMM_WORLD, &rank); 13. MPI_Comm_size(MPI_COMM_WORLD, &nproc); 14. if(rank==0){ 15. /* 配列 arrにデータを格納 */ 16. for(itr=0;itr<100;itr++){ 17. arr[itr]=itr; 18. } 19. } 24. sum=sum+buf[itr]; 25. } 26. printf("rank=%d,sum=%d n",rank,sum); 27. MPI_Gather(&sum, 1, MPI_INT, ansr, 1, MPI_INT, 0, 28. MPI_COMM_WORLD); 29. if(rank==0){ 30. sum=0; 31. for(itr=0; itr<4; itr++){ 32. sum=sum+ansr[itr]; 33. } 34. printf("sum=%d",sum); 35. } 36. MPI_Finalize(); 37. return 0; 38. } 20. MPI_Scatter(arr,25,MPI_INT, buf, 25, MPI_INT, 0, 21. MPI_COMM_WORLD); 22. /* 配列の中身を足し合わせ */ 23. for(itr=0; itr<25; itr++){ 2009/3/26 Copyright (C) 2009 HPC SYSTEMS, Inc. All rights 16

17 MPI_Send/Recv に慣れよう! 一対一通信を使った具体例 配列の総和 を深く理解しよう 2009/3/26 HPC システムズ新規事業企画室 ( 工学博士 ) 渡邊啓正 2009 HPC SYSTEMS, Inc. All rights 1

18 お話しすること 配列の総和 1/2 1/2 rank=0 1 1/nproc 1/nproc 1/nproc rank=0 1 nproc /3/ HPC SYSTEMS, Inc. All rights 2

19 rank=0 rank=1 main() { } 2009/3/26 MPI 初期化 Aの確保 Aの初期化 offset, numの計算 subaの確保 Aの後半をrank=1へ送信 Aの前半をsubAにコピー sumup(suba,num[0],&subtotal); answer = subtotal subtotal を rank=1 から受信 answer += subtotal 結果テスト MPI 終了処理メモリ解放 main() { } 2009 HPC SYSTEMS, Inc. All rights MPI 初期化 offset, numの計算 subaの確保 Aの後半をrank=0から受信 sumup(suba,num[1],&subtotal); subtotal を rank=0 へ送信 MPI 終了処理メモリ解放 3

20 nproc 並列版に変えるには (1/2) rank=1 から / への処理が nproc-1 倍に増える rank=0 rank=1..nproc-1 rank=1 への送信 rank=0 からの受信 rank=1..nproc-1への送信 ( 繰り返し ) rank=1 からの受信 rank=0 への送信 2009/3/26 rank=1..nproc-1からの受信 ( 繰り返し ) 2009 HPC SYSTEMS, Inc. All rights マスタワーカ型の場合 4

21 nproc 並列版に変えるには (2/2) C 言語でいうと rank=0 rank=1..nproc-1 for ( i = 1; i < nproc; i++ ) MPI_Send(A+offset[i], num[i], i ); MPI_Recv( A+offset[rank], num[rank], 0 ); for ( i = 1; i < nproc; i++ ) MPI_Recv(B+offset[i], num[i], i ); MPI_Send( B+offset[rank], num[rank], 0 ); 2009/3/ HPC SYSTEMS, Inc. All rights 5

22 rank=0 rank=1..nproc-1 main() { } 2009/3/26 MPI 初期化 Aの確保 Aの初期化 offset, numの計算 subaの確保 A の一部を rank=1..nproc-1 へ送信 A の一部を suba にコピー sumup(suba,num[0],&subtotal); answer = subtotal subtotalをrank=1..nproc-1 から受信 answer += subtotal 結果テスト MPI 終了処理メモリ解放 main() { } 2009 HPC SYSTEMS, Inc. All rights MPI 初期化 offset, numの計算 subaの確保 Aの一部をrank=0から受信 sumup(suba,num[rank],&subtotal); subtotal を rank=0 へ送信 MPI 終了処理メモリ解放 6

23 MPI プログラミング基礎編 並列プログラムづくりのイメージを掴もう! 2009/3/26 HPC システムズ新規事業企画室 ( 工学博士 ) 渡邊啓正 2009 HPC SYSTEMS, Inc. All rights 1

24 お話しすること こうやれば MPI を使った並列プログラムを作れます! チューニング ( 効果的な高速化 )+ 並列化 の技法 知識と段取りの基本セット 真似して作れる を目指す 2009/3/ HPC SYSTEMS, Inc. All rights 2

25 題材 行列積 A B = C(matmul-seq.c) 105 for (row=0; row<n; row++) { for (col=0; col<n; col++) { sum = 0.0; for (k=0; k<n; k++) sum += A[row][k] * B[k][col]; C[row][col] = sum; } } N N N 複雑な実アプリでも 並列化 の基本は同じ A B = C 2009/3/ HPC SYSTEMS, Inc. All rights 3

26 並列化の一般的な流れ 1. ホットスポットの特定 2. 計算間の並列性の把握 3. データ分割方法 粒度の検討 4. コード編集 5. コンパイル リンク 6. 実行 7. 性能評価 2009/3/ HPC SYSTEMS, Inc. All rights 4

27 1. ホットスポットの特定 どの処理に一番時間がかかっているのか? そこの高速化がアプリ全体の高速化に効果的! 2009/3/26 main( ) {.;.; ;..;.; ;.; ;..; ; ;..; } かかった時間 HPC SYSTEMS, Inc. All rights 5

28 特定方法 1( 簡単 ): gprof を使う $ gcc pg foo.c $./a.out $ gprof a.out 関数ごとの実行時間統計 % cumulative self self total time seconds seconds calls ms/call ms/call name mycompare myswap addtotable initresult mysort validateorder validatestability 何 % 占めるか 実行時間 何回呼ばれたか 関数名 2009/3/ HPC SYSTEMS, Inc. All rights 6

29 特定方法 2( 難しい ): ソースコードから考える ソースコードを読んで演算量を見積もる プログラム部位ごとの int や float の演算回数 2009/3/26 プログラム部位演算回数 ( オーダー ) 入力受付 0 計算時間計測開始 0 メモリ確保 3 初期値設定 3N 2 行列積 計算時間計測開始 0 計算時間表示 5 メモリ解放 0 8N 3 +3N HPC SYSTEMS, Inc. All rights N が大きいとき莫大な計算時間を要する 7

30 2. 計算間の並列性の把握 並列性 : 複数の CPU へ分担させて同時に実行しても正しい計算結果が得られること 行列積の場合 : 各 C[row][col] の計算は全て同時に実行して OK = = 同時実行可能! 2009/3/ HPC SYSTEMS, Inc. All rights = 8

31 並列性を考えた計算の実例 領域分割計算 熱伝導シミュレーション N 体問題 粒子シミュレーション 有限要素法の連立一次方程式解法 パラメータスウィープ計算 モンテカルロ計算 気象予測 金融リスク計算 積分 ( 面積 ) の近似解 生物データベース検索 相互作用のない or 少ない領域に分けて計算を並列に実行する形 多数の試行を並列に実行する形 2009/3/ HPC SYSTEMS, Inc. All rights 9

32 並列性で詰まったら ( その 1) データ依存性 計算の順序に依って結果が変わる場合 打開策 for (i=0;i<n;i++) X[i+1] = f(x[i]); 処理の大きさの単位 並列の粒度を変えてみる 処理の呼び出し元自体を並列化できないか? アルゴリズムを根本的に変える X[i+1] X[i+2] データ依存性が少ないアルゴリズムを誰かが作っているかもしれない 論文調査など X[i] X[i+1] 2009/3/ HPC SYSTEMS, Inc. All rights 10

33 並列性で詰まったら ( その 2) フロー依存性 前のフローに依って実行するかどうかが決まる場合 打開策 a = BEFORE(); BEFORE if (a == 0) AFTER1(); else AFTER2(); 投機的実行 AFTER1 AFTER2 aの値に依らず AFTER1(); AFTER2(); を先走って実行させる aが決まり次第 結果のどちらかを有効な値とする 2009/3/ HPC SYSTEMS, Inc. All rights 11

34 3. データ分割方法 粒度の比較検討 C[row][col] の計算達を複数の CPU でどのように分担すればいいか 時間のかかるネットワーク通信処理をできるだけ控えよう ローカルメモリアクセス時間 << ネットワーク通信時間 データと計算作業をどのように分散させたらプロセス間のデータ通信回数 通信量が最少データ通信回数 通信量が最少になるか? = = 2009/3/ HPC SYSTEMS, Inc. All rights 12

35 分割 1 1x1 分割 ( 細切れ ) 通信回数が甚大です (4N 2 )!! データ通信に対して短い計算 = 非効率 もっと大きめに分割 ( 分担 ) しましょう こりゃあかんわ = 2009/3/ HPC SYSTEMS, Inc. All rights 13

36 分割 2 A 横 B 縦ブロック分割 A を横に分割 B は縦に分割 C を横に分割 分割はプロセス数分 (=P この図では 4) A[0] C C C C A[1] A[2] B [0] B [1] B [2] B [3] = C C C C C C C C A[3] C C C C 2009/3/ HPC SYSTEMS, Inc. All rights 14

37 分割 3 A 横ブロック分割 A を横に分割 B はコピー C を横に分割 分割はプロセス数分 A[0] A[0] B=C[0] A[1] A[2] B = A[1] B=C[1] A[2] B=C[2] A[3] A[3] B=C[3] 2009/3/ HPC SYSTEMS, Inc. All rights 15

38 分割方法の比較 分割方法通信回数通信量メモリ使用量 11x1 分割 4N 2 2N 3 +N 2 2N+1 2A 横 B 縦ブロック分割 2P 2-2 N 2 (P+3)(P-1)/P N 2 (2+1/P)/P 3A 横ブロック分割 3P-3 N 2 (P+2)(P-1)/P N 2 (1+2/P) P<<N 状況に応じてなにを重視するかで最適な戦略を考えましょう 2009/3/ HPC SYSTEMS, Inc. All rights 16

39 4. MPI コード製作 1. 主計算ルーチンの切り出し 2. MPIの定型句 3. 分割データ用メモリの確保 / 開放 4. データの分配 / 収集 5. 分割データを処理する主計算ルーチン 6. 並列計算結果のテストコード 7. 実行時間を計測するコード 2009/3/ HPC SYSTEMS, Inc. All rights 17

40 /3/26 main() { } (1) MPI 初期化 (2) A, B, Cの確保 初期化 (3) 計測 1 (4) num[], offset[] の計算 (5) locala, localcの確保 (6) Aの分配 (7) Bのコピー (8) matmul_sub_parallel(locala, B, N/nproc, N, localc); (9) Cの収集 (10) locala, localcの解放 (11) num[], offset[] の解放 (12) 計測 2 (13) 計算結果のテスト (14) 2-1の表示 (15) A, B, Cの解放 (16) MPI 終了処理 2009 HPC SYSTEMS, Inc. All rights matmul-mpi.c 18

41 主計算ルーチンの切り出し 225 void matmul_sequential(const double *A, 226 const double *B, 227 const int size, 228 double *C) { 229 int row, col, k; 230 double sum; 231 for ( row = 0; row < size; row++ ) { 232 for ( col = 0; col < size; col++ ) { 233 sum = 0.0; 234 for ( k = 0; k < size; k++ ) { 235 sum += *(A + row * size + k) 236 * *(B + k * size + col); 237 } 238 *(C + row * size + col) = sum; 239 } 240 } 241 } 入出力を明確に 後でテストに使う A B size matmul_ sequential C 2009/3/ HPC SYSTEMS, Inc. All rights 19

42 MPI の定型句を入れましょう (1/2) static const int root = 0; // Rank of the master process MPI_Init(&argc, &argv); // Initialize MPI system int nproc; // The number of processes being used MPI_Comm_size(MPI_COMM_WORLD, &nproc); // Calculate nproc int rank; // My process number MPI_Comm_rank(MPI_COMM_WORLD, &rank); // Calculate rank nproc=4 P rank=0(root) P rank=1 P rank=2 P rank=3 2009/3/ HPC SYSTEMS, Inc. All rights 20

43 MPI の定型句を入れましょう (2/2) char hostname[mpi_max_processor_name]; int namelen; MPI_Get_processor_name(hostname, &namelen); // Hostname fprintf(stdout, "[%d/%d] %s n", rank, nproc, hostname); fflush(stdout); // Output immediately ( 並列コード ) nproc=4 P rank=0 on node00 (CPU0) P rank=1 on node00 (CPU1) P rank=2 on node01 (CPU0) P rank=3 on node01 (CPU1) MPI_Finalize(); // Finalize MPI system 確認 : ちゃんと複数 CPU コアを使って動かせているか? 2009/3/ HPC SYSTEMS, Inc. All rights 21

44 分割データ用メモリの確保 / 開放 int *num = (int *)calloc(sizeof(int), nproc); int *offset = (int *)calloc(sizeof(int), nproc); for ( int i = 0; i < nproc; i++ ) { num[i] = (int)(n * N / nproc); offset[i] = (int)(n * N / nproc) * i; } 管理テーブル ( 今回は割り切れる場合のみ対応 ) N/nproc 0 N*N/nproc num[0] offset[0] double *locala = (double *)calloc(sizeof(double), num[rank]); double *localc = (double *)calloc(sizeof(double), num[rank]); N A[0] N*N free(locala); free(localc); free(num); free(offset); 各プロセスは AとC を横に nproc 分割した部分配列を持つ 2009/3/ HPC SYSTEMS, Inc. All rights 22

45 A の分配 ルート (rank が 0 のプロセス ) が MPI_Send(A+offset[i], num[i], MPI_DOUBLE, i,...) を nproc 回繰返し, 各プロセスが次の受信を行う MPI_Recv(localA, num[rank], MPI_DOUBLE, root,...) MPI_Send x4 MPI_Recv rank A locala locala locala locala MPI_Recv MPI_Recv MPI_Recv A[0] 2009/3/ HPC SYSTEMS, Inc. All rights 23

46 B のコピー ルートが MPI_Send(B, N*N, MPI_DOUBLE, i,...) を nproc-1 回繰返し, 各プロセスが次の受信を行う MPI_Recv(B, N*N, MPI_DOUBLE, root,...) MPI_Send x3 rank B B B B B MPI_Recv MPI_Recv MPI_Recv 2009/3/ HPC SYSTEMS, Inc. All rights 24

47 C の収集 全プロセスが MPI_Send(localC, num[rank], MPI_DOUBLE, root,...) を送信し ルートが受信を nproc 回繰り返す MPI_Recv(C+offset[i], num[i], MPI_DOUBLE, i,...) MPI_Send rank localc localc localc localc MPI_Send MPI_Send MPI_Send A[0] B=C[0] C MPI_Recv x4 2009/3/ HPC SYSTEMS, Inc. All rights 25

48 分割データを処理する主計算ルーチン void matmul_sub_parallel(const double *A, const double *B, const int rowsize, const int size, double *C) { int row, col, k; 指定された行まで double sub; やれば OK for ( row = 0; row < rowsize; row++ ) { for ( col = 0; col < size; col++ ) { sub = 0.0; for ( k = 0; k < size; k++ ) { sub += *(A + row * size + k) * *(B + k * size + col); } *(C + row * size + col) = sub; } } } 2009/3/ HPC SYSTEMS, Inc. All rights 26

49 テストコード ( 逐次の計算結果との比較 ) double *testc = (double *)calloc(sizeof(double), N * N); matmul_sequential(a, B, N, testc); double epsiron = 1.0e-5; BOOLEAN isok = TRUE; int i; for (i = 0;i < N * N;i++) { double result = *(C + i); double test = *(testc + i); if (result > test) { if ((result - test) > epsiron) { isok = FALSE; break; } } else { if ((test - result) > epsiron) { isok = FALSE; break; } } 第三回 2009/3/26 free(testc); if (isok == FALSE) { printf("error: Result is NOT correct!! n"); } else { 2009 HPC SYSTEMS, Inc. All rights } printf("success: Result is correct!! n"); 結果が一つでも違っていたらバグあり 27

50 実行時間を計測するコード gettimeofday() で現在時刻を取得 引き算 MPI_Barrier() を使ってプロセス全体を よーいどん させてフェアに測定しよう rank 0 MPI_Barrier(MPI_COMM_WORLD); gettimeofday(&tv1, NULL); // Do something; MPI_Barrier(MPI_COMM_WORLD); gettimeofday(&tv2, NULL); double elapsed = 0.0; elapsed += (double)(tv2.tv_sec - tv1.tv_sec); elapsed += (double)((tv2.tv_usec - tv1.tv_usec) * 1e-6); /3/ HPC SYSTEMS, Inc. All rights 28

51 さらに深く知りたい人は 実践 MPI-2 メッセージパッシング インタフェースの上級者向け機能 ウイリアム グロップほか著 株式会社ピアソン エデュケーション 2002 ISBN: 一通り MPI を使って並列プログラムを書けるようになった人向け入出力の最適化 動的プロセス等 2009/3/ HPC SYSTEMS, Inc. All rights 29

52 5. コンパイル :mpicc > mpicc matmul-mpi.c MPI ライブラリが自動的にリンクされる gcc のオプション (-l や -o) をそのまま使える 2009/3/ HPC SYSTEMS, Inc. All rights 30

53 6. 実行 :mpirun > mpirun np 計算に使う CPU コア総数./a.out 並列計算の依頼 ソフト LAN ユーザ クラスタ 結果 複数 CPU を使って並列に計算 2009/3/ HPC SYSTEMS, Inc. All rights 31

54 7. 性能評価 速度向上率 並列プロセス数 vs. 速度向上 Linear matmul-mpi.c 多項式近似 /3/26 nproc top - 10:24:31 up 88 days, 12:11, 3 users, load average: 0.76, 0.26, 0.32 Tasks: 108 total, 2 running, 106 sleeping, 0 stopped, 0 zombie Cpu0 : 35.8% us, 27.5% sy, 0.0% ni, 36.7% id, 0.0% wa, 0.0% hi, 0.0% si Cpu1 : 43.9% us, 18.8% sy, 0.0% ni, 35.4% id, 0.0% wa, 0.4% hi, 1.3% si Cpu2 : 84.8% us, 15.2% sy, 0.0% ni, 0.0% id, 0.0% wa, 0.0% hi, 0.0% si Cpu3 : 33.9% us, 30.8% sy, 0.0% ni, 35.3% id, 0.0% wa, 0.0% hi, 0.0% si Mem: k total, k used, k free, 81608k buffers Swap: k total, 26192k used, k free, k cached PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND hi-wata m 30m 2876 R :03.29 matmul-mpi.exe hi-wata m S :02.45 matmul-mpi.exe hi-wata m S :02.46 matmul-mpi.exe hi-wata m S :02.44 matmul-mpi.exe 2009 HPC SYSTEMS, Inc. All rights 32

55 休憩タイム 2009/3/26 第三回MPI実践セミナー 実践セミナー Copyright (C) 第三回 2009 HPC SYSTEMS, Inc. All rights 33

56 MPI 環境の構築 MPI 環境を家で再現するには 2009/3/ HPC SYSTEMS, Inc. All rights 34

57 クラスタの機能 プロセスと通信の制御 例 : メッセージパッシングライブラリ LAN 接続 セキュリティ情報の共有 ファイルの共有 クラスタの機能プロセスと通信の制御 LAN OS NIS NFS 2009/3/ HPC SYSTEMS, Inc. All rights 35

58 MPI のソフトウェア実装 OpenMPI メリット : CentOS4 で最初から導入済み きれいにコンポーネント分けされており, チューニングや障害解析がやりやすい 複数ネットワークデバイスを自動認識する 一斉に SSH で遠隔にアプリケーションを起動し, プロセスと通信路を管理する 2009/3/ HPC SYSTEMS, Inc. All rights 36

59 Platform Manager を使うと簡単! クラスタハードウェアに OS とミドルウェアを自動的にインストール してくれるツールです 簡単! オールインワン インタフェース 200 以上のワールドワイド ユーザ企業 対応 HW: Dell, HP, IBM, SGI, Sun 対応 OS: RHEL 3,4,5, SLES 9,10, CentOS App App ミドルウェア OS 2009/3/ HPC SYSTEMS, Inc. All rights 37

60 クラスタ構築の流れ 1 Linux PCにLinux DVD.isoファイルをダウンロード 2 Linux PCにPMをインストール 3 PMを起動 4 PM: クラスタイメージを作成 5 PM: クラスタイメージをサーバへ配置 6 クラスタを運用開始! 4 1 MPI 6 5 イメージ配置 LAN 2 PM 2009/3/ HPC SYSTEMS, Inc. All rights 38 3

61 GUI で簡単クラスタ構築 ネットワーク構成 [New] ノード数クラスタ名 詳しい資料は弊社スタッフまで 2009/3/ HPC SYSTEMS, Inc. All rights 39

62 VNC: リモートデスクトップツール VNC クライアントの起動 遠隔に Linuxの GUI を使える 2009/3/ HPC SYSTEMS, Inc. All rights 40

63 コンパイル :mpicc > mpicc matmul-mpi.c MPI ライブラリが自動的にリンクされる gcc のオプション (-l や -o) をそのまま使える ホームディレクトリでコンパイル ( 推奨 ) 全ノードで共有されているため 2009/3/ HPC SYSTEMS, Inc. All rights 41

64 実行 :mpirun > mpirun --hostfile マシンファイルのパス np 計算に使う CPU コア総数./a.out マシンファイル OpenMPI で利用対象とするノードの情報 node01 slots=2 ノード上のプロセッサ数 node02 slots=2 node03 slots=2 node04 slots=2 /usr/local/openmpi1.2.8-intel91/etc/openmpi-default-hostfile 2009/3/ HPC SYSTEMS, Inc. All rights 42

65 おまけ :rank 割当て変更方法 > mpirun --hostfile マシンファイルのパス np 計算に使う CPU コア総数 --byslot./a.out --byslot 幅優先 --bynode 深さ優先 node01 node02 node03 node node01 node02 node03 node /3/ HPC SYSTEMS, Inc. All rights 43

66 画像ビューア :GQView S Slide show 2009/3/ HPC SYSTEMS, Inc. All rights 44

67 休憩タイム 2009/3/ HPC SYSTEMS, Inc. All rights 45

68 2 次元熱伝導 熱伝導は基本的な物理現象の一つ 熱伝導方程式から数値的に解析可能 T t = a 2 T 2 T ( x y ) a = λ /( ρc)[ m λ 熱伝導率 [ W ρ 密度 [ m c 比熱 [ J 3 ] 2 / s] / kgk] / mk] T 温度 [ K] t 時間 [ t] x, y 座標 [ m] ある場所と その近傍の温度を基にして 少し未来の温度を知る Copyright (C) 2009 HPC SYSTEMS, Inc. All 2009/3/26 1 rights

69 差分解法差分解法差分解法差分解法 ) (, ) (, ) ( 1, ) ( 1, ) ( 1, ) ( 1, 1) (, 2 ) (, ) ( 1, ) ( 1, 2 ) (, ) ( 1, ) ( 1, ) (, 1) (, ) 4 ( ) 2 2 ( 2 / n j i n j i n j i n j i n j i n j i n j i n j i n j i n j i n j i n j i n j i n j i n j i T T T T T T T y T T T x T T T a t T T h t h y x = = = = = γ γ とすると 格子が等間隔であることから ) ( y T x T a t T + = 差分法で用いる形に変換差分法で用いる形に変換差分法で用いる形に変換差分法で用いる形に変換 2009/3/26 2 Copyright (C) 2009 HPC SYSTEMS, Inc. All rights

70 逐次版の動作 ( n+ 1) ( n) ( n) ( n) ( n) ( n) Ti, j γ ( Ti 1, j + Ti 1, j + Ti, j 1 + Ti, j 1 4Ti, j ) + T = + + T_new[i][j] = gamma*(te + Tw + Tn + Ts - 4.0*T[i][j]) + T[i][j]; Tw = T[i-1][j]; Te = T[i+1][j]; Ts = T[i][j-1]; Tn = T[i][j+1]; 本プログラムは 大分大学工学部生産システム工学科三村泰成氏のアプリケーションを転載しました Copyright (C) 2009 HPC SYSTEMS, Inc. All 2009/3/26 3 rights

71 計算条件 格子サイズは 256x256 境界以外の領域全体は 300 境界条件 左端に幅 1 格子 高さ 128 格子の熱源 熱源の温度は 800 熱源以外の境界は 断熱条件 [ 物質の性状 ] 密度 7.8e3; /* kg / (m^3) */ 熱伝導率 420.0; /* J/(kg K) */ 比熱 50.0; /* W/(m K) */ 2009/3/26 4 Copyright (C) 2009 HPC SYSTEMS, Inc. All rights

72 逐次版実行 2009/3/26 5 Copyright (C) 2009 HPC SYSTEMS, Inc. All rights

73 差分法の並列化 RANK0 担当範囲 RANK1 担当範囲 2009/3/26 6 Copyright (C) 2009 HPC SYSTEMS, Inc. All rights

74 分割境界での計算 RANK0 担当範囲 RANK1 担当範囲 この点を計算するためのデータが 隣の領域にある 2009/3/26 7 Copyright (C) 2009 HPC SYSTEMS, Inc. All rights

75 並列版のソースコード 並列版のソースコード (pfdm2d_mpi.c 抜粋 ) 右の領域から 左の領域へ情報を送る処理 if( rank!= 0 ) { /* send to left side */ for(j=0 ; j<nh ; j++) buf[j] = T[0][j]; MPI_Send(buf, NH, MPI_DOUBLE, rank-1, 1, MPI_COMM_WORLD); } if( rank!= nproc - 1 ) { /* receive from right side */ MPI_Recv(T_Right,NH,MPI_DOUBLE,rank+1, 1, MPI_COMM_WORLD, MPI_STATUS_IGNORE); } 2009/3/26 8 Copyright (C) 2009 HPC SYSTEMS, Inc. All rights

76 穴埋め問題 左の領域から 右の領域へ情報を送る処理 if( rank!= nproc - 1) { /* send to right side */ for(j=0 ; j<nh ; j++) buf[j] = T[my_nw-1][j]; MPI_Send(, NH, MPI_DOUBLE,, 1, MPI_COMM_WORLD); } if(rank!= 0 ) { /* receive form left side */ MPI_Recv(,NH,MPI_DOUBLE,, 1, MPI_COMM_WORLD, MPI_STATUS_IGNORE); } 2009/3/26 9 Copyright (C) 2009 HPC SYSTEMS, Inc. All rights

77 アプリケーションの使い方解説 実行方法 > mpirun np N./a.out M 4 コア 4 並列設定 :N=4, M=4 8 コア 8 並列設定 :N=8, M=8 time コマンドを併用すると 全体の処理にかかる時間を計測することが可能 > time mpirun np N./a.out M 2009/3/26 10 Copyright (C) 2009 HPC SYSTEMS, Inc. All rights

78 < 実習 : コンパイル > > mpicc o pfdm2d pfdm2d_mpi.c alloc.c -o オプションは 実行ファイルの名前を指定する (-o オプションなしにした場合 デフォルト設定として 同じディレクトリに a.out という実行ファイルが生成される ) > mpirun np 2 pfdm2d 2009/3/26 11 Copyright (C) 2009 HPC SYSTEMS, Inc. All rights

79 < 実習 : 答え合わせ > if( rank!= nproc - 1) { /* send to right side */ for(j=0 ; j<nh ; j++) buf[j] = T[my_nw-1][j]; MPI_Send(buf,NH, MPI_DOUBLE, rank+1, 1, MPI_COMM_WORLD); } if( rank!= 0 ) { /* receive form left side */ MPI_Recv(T_left, NH,MPI_DOUBLE, rank-1, 1, MPI_COMM_WORLD, MPI_STATUS_IGNORE); } 2009/3/26 12 Copyright (C) 2009 HPC SYSTEMS, Inc. All rights

80 < 分割数と速度向上率 > 16 Linear 速度向上率多項式 ( 速度向上率 ) 速度向上率 nproc 2009/3/26 13 Copyright (C) 2009 HPC SYSTEMS, Inc. All rights

81 付録 1. MPI で用いる変数の型 ( 一部 ) MPI_CHAR MPI_BYTE MPI_SHORT MPI_INT MPI_LONG MPI_FLOAT MPI_DOUBLE MPI_UNSIGNED_CHAR MPI_UNSIGNED_SHORT MPI_UNSIGNED MPI_UNSIGNED_LONG char unsigned charと同様 short int long float double unsigned char unsigned short unsigned int unsigned long 2009/3/26 14 Copyright (C) 2009 HPC SYSTEMS, Inc. All rights

82 応用 実習 2:N 体問題 重力系シミュレーションを 並列化しよう 2009/3/ HPC SYSTEMS, Inc. All rights 1

83 お話しすること N 体問題を MPI を使って並列化します! 基本アルゴリズム 並列性の理解 並列解法の理解 MPI_Send/Recvを書く ( 実習 ) 実行時間測定 ( 実習 ) 2009/3/ HPC SYSTEMS, Inc. All rights 2

84 N 体問題 N 個の質点間の相互作用の力の方程式を解いて行う物理シミュレーション 一定時間後の速度と位置は? 計算量が莫大 ( 質点数の 2 乗 ) m m F= G r /3/26 銀河形成の研究等に研究等に重要 2009 HPC SYSTEMS, Inc. All rights 3

85 解説順序 並列化すると? 2 体問題逐次版 並列化前ベースを掴もう N 体問題逐次版 N 体問題並列版 2009/3/26 差分化された式って? 2009 HPC SYSTEMS, Inc. All rights 4

86 基本 :2 体問題のアルゴリズム 質点 1 の万有引力の x 成分 : fx 2 ={ 万有引力の大きさ } {x の方向余弦 } = { G m1 m2 x1 x } { 2 r r 12 運動方程式を立てて離散化 ( 差分化 ): 質点 1の速度 : vk+ 1 = vk + fx2 / m1 * t x = x + v * t + v 質点 1 の位置 : 12 2 } k+ 1 k k k / 2* [x 1,y 1 ] m 1 [x 2,y 2 ] m 2 ここから質点が増えた数だけ 万有引力が加算されると考えればよい t 2009/3/ HPC SYSTEMS, Inc. All rights 5

87 2 体 :O(2) の計算量 2009/3/ HPC SYSTEMS, Inc. All rights 6

88 逐次版 N 体問題のアルゴリズム m m F= G r b 各質点について (N 回 ) 全ての質点について (N-1 回 ) a c 座標と質量から相互作用の力を計算する d 働く力の総和を計算する 次の時刻の座標として座標を更新する 2009/3/ HPC SYSTEMS, Inc. All rights 7

89 N 体 :O(N 2 ) の計算量 2009/3/ HPC SYSTEMS, Inc. All rights 8

90 N 体 : 逐次版ソースコード概要 (1/2) void calculate_forces(void) { int i, j; coords direction; body **b = barray; double distance, magnitude; } O(N 2 ) for (i = 0; i < N; i++) { for (j = 0; j < N; j++) { if (i == j) continue; distance = sqrt( pow((b[i]->p.x - b[j]->p.x), 2.0) + pow((b[i]->p.y - b[j]->p.y), 2.0) ); magnitude = (G * b[i]->m * b[j]->m) / pow(distance, 2.0); direction.x = b[j]->p.x - b[i]->p.x; direction.y = b[j]->p.y - b[i]->p.y; b[i]->f.x = b[i]->f.x + magnitude * direction.x / distance; b[i]->f.y = b[i]->f.y + magnitude * direction.y / distance; } } 反作用の力も同時に求められるが それを並列化すると隣のプロセスを触ることになり複雑化するため今回は考えない 質点間の距離 相互作用の力 力の総和 2009/3/ HPC SYSTEMS, Inc. All rights 9

91 N 体 : 逐次版ソースコード概要 (2/2) void move_bodies(void) { int i; coords deltav; coords deltap; vk 1 body **b = barray; xk 1 for (i = 0; i < N; i++) { deltav.x = b[i]->f.x / b[i]->m * DT; deltav.y = b[i]->f.y / b[i]->m * DT; deltap.x = (b[i]->v.x + deltav.x / 2) * DT; deltap.y = (b[i]->v.y + deltav.y / 2) * DT; b[i]->v.x = b[i]->v.x + deltav.x; b[i]->v.y = b[i]->v.y + deltav.y; b[i]->p.x = b[i]->p.x + deltap.x; b[i]->p.y = b[i]->p.y + deltap.y; /* Reset force vector */ b[i]->f.x = 0.0; b[i]->f.y = 0.0; } } 第三回 deltav + = vk + fx2 / m1 * t = x + v * t + v + k k k / 2* 次の時刻での速度 次の時刻での位置 2009/3/ HPC SYSTEMS, Inc. All rights 10 t

92 N 体問題の並列性 時刻 t1: 力の計算 1: a b F= G m m r a b 2 ab 計算 1,2 間に依存性がない互いに独立して実行できる = 並列に計算できる 2009/3/26 力の計算 2: c d 2009 HPC SYSTEMS, Inc. All rights F= G m m r c d 2 cd 11

93 N 体問題の並列解法 1. 質点の配列を root から全プロセスへコピー 2. 各プロセスが担当グループの力と座標を計算 3. タイムステップ更新時に配列を root へ回収 再コピー 時刻 t1 P P P P 各プロセスは自分の色の質点についてのみ計算する rank /3/ HPC SYSTEMS, Inc. All rights 12

94 N 体 : 並列版の動作 rank 0 例 : 各 CPUはN/4 個の質点について計算する 計算通信 シミュレーションステップ 任意回 t 2009/3/ HPC SYSTEMS, Inc. All rights 13

95 MPI_BODY 型の定義 main() { } MPI 初期化 MPI_BODY 型の登録 read_input(); N の値の共有 bodies[] の確保 mystart[], myend[] の計算計測 1 run(steps); 計測 2 2-1の表示メモリ解放 MPI 終了処理 run(int steps) { N, steps の表示 for (step=0; step<steps; step++) { } } 問題 1 Broadcast calculate_forces(); move_bodies(); 問題 2 Gather ビットマップ出力 2009/3/ HPC SYSTEMS, Inc. All rights 14

96 独自型の定義 登録 double 7 個からなる MPI_BODY 型の定義 登録 Send/Recvの際 要素の型として使えるようになる= 書きやすい! typedef struct { double px, py; double vx, vy; double fx, fy; double m; } Body; // この構造体を単位として Send/Recv するため MPI_Datatype MPI_BODY; MPI_Type_contiguous(7, MPI_DOUBLE, &MPI_BODY); MPI_Type_commit(&MPI_BODY); 2009/3/ HPC SYSTEMS, Inc. All rights 15

97 デモアプリの使い方 コンパイル mpicc -o nbody nbody_mpi.c error_wrapper.c Disk.c make も使えます 入力./nbody < 入力ファイル > < ステップ数 > random5000.data 100 質点 5000 個ランダム配置 出力 標準出力 シミュレーション全体に何秒かかったか ビットマップファイル 各シミュレーションステップの質点の座標をプロット./STEP????.bmp 余りは末尾のプロセスが担当 2009/3/ HPC SYSTEMS, Inc. All rights 16

98 問題 1 Broadcast を Send/Recv で書こう // // (1) Broadcast bodies from root process to the other processes // if ( rank == root ) { // // TODO: // Send all bodies to non-root processes // } else { // // TODO: // Receive all bodies from the root process // } rank /3/ HPC SYSTEMS, Inc. All rights 17

99 問題 2 Gather を Send/Recv で書こう // // (2) Gather states of the bodies to the root process // if ( rank == root ) { // // TODO: // Receive each bodies from non-root processes // } else { // // TODO: // Send my bodies to the root process // // HINT: // All bodies are stored as bodies[]. rank 0 // Indices of my bodies are between mystart[rank] and myend[rank]. // Use MPI_BODY as element type. // } 2009/3/ HPC SYSTEMS, Inc. All rights

100 実行時間書き込みページ nproc 実行時間 [ 秒 ] 速度向上率 /3/ HPC SYSTEMS, Inc. All rights 19

101 並列版の性能スケーラビリティ Linear 速度向上率多項式近似 速度向上率 /3/ nproc 2009 HPC SYSTEMS, Inc. All rights 20

102 答え合わせ 1 if ( rank == root ) { for ( i = 1; i < nproc; i++ ) { MPI_Send(bodies, N, MPI_BODY, i, 1, MPI_COMM_WORLD); } } else { MPI_Recv(bodies, N, MPI_BODY, root, 1, MPI_COMM_WORLD, &status); } rankが1 以上のプロセスへ Send rankがrootのプロセスから Recv 2009/3/ HPC SYSTEMS, Inc. All rights 21

103 答え合わせ 2 if ( rank == root ) { rankが1 以上の for ( i = 1; i < nproc; i++ ) { プロセスから MPI_Recv(&bodies[myStart[i]], Recv myend[i] - mystart[i], MPI_BODY, i, 2, MPI_COMM_WORLD, &status); } } else { rankがrootの MPI_Send(&bodies[myStart[rank]], プロセスへ myend[rank] - mystart[rank], Send MPI_BODY, root, 2, MPI_COMM_WORLD); } 2009/3/ HPC SYSTEMS, Inc. All rights 22

104 集合通信関数を使うと MPI_Gather(&bodies[myStart[rank]], myend[rank]-mystart[rank], MPI_BODY, &bodies[root], myend[rank]-mystart[rank], root, MPI_COMM_WORLD); rank localc localc localc localc MPI_Send MPI_Send MPI_Send MPI_Send MPI_Recv x4 C 2009/3/ HPC SYSTEMS, Inc. All rights 23

105 MPI 総括 並列プログラム開発の標準的 API 基本 データを Send/Recv する rank=1 並列性の把握 データ分配 粒度がカギ とにかくネットワーク通信を控えよう 2009/3/26 rank= HPC SYSTEMS, Inc. All rights 1

106 HPCシステムズが提供していくもの セミナーでの情報提供 メニーコア 特殊アーキテクチャ 適材適所 Cell, GPU, Vectorized (Specialized) hardware 高速インターコネクト 並列向け言語とコンパイラ プロファイリング/性能解析 並列デバッグ メニーコアエキスパート育成 2009/3/26 第三回MPI実践セミナー 実践セミナー Copyright (C) 第三回 2009 HPC SYSTEMS, Inc. All rights 2

107 並列化無償代行サービス 並列化はやっぱり難しいな 誰かやってくれないかな 2009/3/ HPC SYSTEMS, Inc. All rights 3

108 御清聴ありがとうございました 質問がありましたらどうぞ アンケートご記入をお願いいたします お帰りの際 名札をご返却ください 2009/3/ HPC SYSTEMS, Inc. All rights 4

NUMAの構成

NUMAの構成 メッセージパッシング プログラミング 天野 共有メモリ対メッセージパッシング 共有メモリモデル 共有変数を用いた単純な記述自動並列化コンパイラ簡単なディレクティブによる並列化 :OpenMP メッセージパッシング 形式検証が可能 ( ブロッキング ) 副作用がない ( 共有変数は副作用そのもの ) コストが小さい メッセージパッシングモデル 共有変数は使わない 共有メモリがないマシンでも実装可能 クラスタ

More information

スライド 1

スライド 1 目次 2.MPI プログラミング入門 この資料は, スーパーコン 10 で使用したものである. ごく基本的な内容なので, 現在でも十分利用できると思われるものなので, ここに紹介させて頂く. ただし, 古い情報も含まれているので注意が必要である. 今年度版の解説は, 本選の初日に配布する予定である. 1/20 2.MPI プログラミング入門 (1) 基本 説明 MPI (message passing

More information

Microsoft PowerPoint - KHPCSS pptx

Microsoft PowerPoint - KHPCSS pptx KOBE HPC サマースクール 2018( 初級 ) 9. 1 対 1 通信関数, 集団通信関数 2018/8/8 KOBE HPC サマースクール 2018 1 2018/8/8 KOBE HPC サマースクール 2018 2 MPI プログラム (M-2):1 対 1 通信関数 問題 1 から 100 までの整数の和を 2 並列で求めなさい. プログラムの方針 プロセス0: 1から50までの和を求める.

More information

2 T 1 N n T n α = T 1 nt n (1) α = 1 100% OpenMP MPI OpenMP OpenMP MPI (Message Passing Interface) MPI MPICH OpenMPI 1 OpenMP MPI MPI (trivial p

2 T 1 N n T n α = T 1 nt n (1) α = 1 100% OpenMP MPI OpenMP OpenMP MPI (Message Passing Interface) MPI MPICH OpenMPI 1 OpenMP MPI MPI (trivial p 22 6 22 MPI MPI 1 1 2 2 3 MPI 3 4 7 4.1.................................. 7 4.2 ( )................................ 10 4.3 (Allreduce )................................. 12 5 14 5.1........................................

More information

Microsoft PowerPoint 並列アルゴリズム04.ppt

Microsoft PowerPoint 並列アルゴリズム04.ppt 並列アルゴリズム 2005 年後期火曜 2 限 青柳睦 Aoyagi@cc.kyushu-u.ac.jp http://server-500.cc.kyushu-u.ac.jp/ 11 月 8 日 ( 火 ) 5. MPI の基礎 6. 並列処理の性能評価 1 もくじ 1. 序並列計算機の現状 2. 計算方式およびアーキテクチュアの分類 3. 並列計算の目的と課題 4. 数値計算における各種の並列化

More information

Microsoft PowerPoint - 講義:片方向通信.pptx

Microsoft PowerPoint - 講義:片方向通信.pptx MPI( 片方向通信 ) 09 年 3 月 5 日 神戸大学大学院システム情報学研究科計算科学専攻横川三津夫 09/3/5 KOBE HPC Spring School 09 分散メモリ型並列計算機 複数のプロセッサがネットワークで接続されており, れぞれのプロセッサ (PE) が, メモリを持っている. 各 PE が自分のメモリ領域のみアクセス可能 特徴数千から数万 PE 規模の並列システムが可能

More information

Microsoft PowerPoint - 講義:コミュニケータ.pptx

Microsoft PowerPoint - 講義:コミュニケータ.pptx コミュニケータとデータタイプ (Communicator and Datatype) 2019 年 3 月 15 日 神戸大学大学院システム情報学研究科横川三津夫 2019/3/15 Kobe HPC Spring School 2019 1 講義の内容 コミュニケータ (Communicator) データタイプ (Datatype) 演習問題 2019/3/15 Kobe HPC Spring School

More information

about MPI

about MPI 本日 (4/16) の内容 1 並列計算の概要 並列化計算の目的 並列コンピュータ環境 並列プログラミングの方法 MPI を用いた並列プログラミング 並列化効率 2 並列計算の実行方法 Hello world モンテカルロ法による円周率計算 並列計算のはじまり 並列計算の最初の構想を イギリスの科学者リチャードソンが 1922 年に発表 < リチャードソンの夢 > 64000 人を円形の劇場に集めて

More information

スライド 1

スライド 1 本日 (4/25) の内容 1 並列計算の概要 並列化計算の目的 並列コンピュータ環境 並列プログラミングの方法 MPI を用いた並列プログラミング 並列化効率 2 並列計算の実行方法 Hello world モンテカルロ法による円周率計算 並列計算のはじまり 並列計算の最初の構想を イギリスの科学者リチャードソンが 1922 年に発表 < リチャードソンの夢 > 64000 人を円形の劇場に集めて

More information

MPI コミュニケータ操作

MPI コミュニケータ操作 コミュニケータとデータタイプ 辻田祐一 (RIKEN AICS) 講義 演習内容 MPI における重要な概念 コミュニケータ データタイプ MPI-IO 集団型 I/O MPI-IO の演習 2 コミュニケータ MPI におけるプロセスの 集団 集団的な操作などにおける操作対象となる MPI における集団的な操作とは? 集団型通信 (Collective Communication) 集団型 I/O(Collective

More information

演習準備 2014 年 3 月 5 日神戸大学大学院システム情報学研究科森下浩二 1 RIKEN AICS HPC Spring School /3/5

演習準備 2014 年 3 月 5 日神戸大学大学院システム情報学研究科森下浩二 1 RIKEN AICS HPC Spring School /3/5 演習準備 2014 年 3 月 5 日神戸大学大学院システム情報学研究科森下浩二 1 演習準備の内容 神戸大 FX10(π-Computer) 利用準備 システム概要 ログイン方法 コンパイルとジョブ実行方法 MPI 復習 1. MPIプログラムの基本構成 2. 並列実行 3. 1 対 1 通信 集団通信 4. データ 処理分割 5. 計算時間計測 2 神戸大 FX10(π-Computer) 利用準備

More information

並列計算導入.pptx

並列計算導入.pptx 並列計算の基礎 MPI を用いた並列計算 並列計算の環境 並列計算 複数の計算ユニット(PU, ore, Pなど を使用して 一つの問題 計算 を行わせる 近年 並列計算を手軽に使用できる環境が急速に整いつつある >通常のP PU(entral Processing Unit)上に計算装置であるoreが 複数含まれている Intel ore i7 シリーズ: 4つの計算装置(ore) 通常のプログラム

More information

Microsoft PowerPoint - 演習2:MPI初歩.pptx

Microsoft PowerPoint - 演習2:MPI初歩.pptx 演習 2:MPI 初歩 - 並列に計算する - 2013 年 8 月 6 日 神戸大学大学院システム情報学研究科計算科学専攻横川三津夫 MPI( メッセージ パッシング インターフェース ) を使おう! [ 演習 2 の内容 ] はじめの一歩課題 1: Hello, world を並列に出力する. 課題 2: プロセス 0 からのメッセージを受け取る (1 対 1 通信 ). 部分に分けて計算しよう課題

More information

para02-2.dvi

para02-2.dvi 2002 2 2002 4 23 : MPI MPI 1 MPI MPI(Message Passing Interface) MPI UNIX Windows Machintosh OS, MPI 2 1 1 2 2.1 1 1 1 1 1 1 Fig. 1 A B C F Fig. 2 A B F Fig. 1 1 1 Fig. 2 2.2 Fig. 3 1 . Fig. 4 Fig. 3 Fig.

More information

WinHPC ppt

WinHPC ppt MPI.NET C# 2 2009 1 20 MPI.NET MPI.NET C# MPI.NET C# MPI MPI.NET 1 1 MPI.NET C# Hello World MPI.NET.NET Framework.NET C# API C# Microsoft.NET java.net (Visual Basic.NET Visual C++) C# class Helloworld

More information

目 目 用方 用 用 方

目 目 用方 用 用 方 大 生 大 工 目 目 用方 用 用 方 用 方 MS-MPI MPI.NET MPICH MPICH2 LAM/MPI Ver. 2 2 1 2 1 C C++ Fortan.NET C# C C++ Fortan 用 行 用 用 用 行 用 言 言 言 行 生 方 方 一 行 高 行 行 文 用 行 If ( rank == 0 ) { // 0 } else if (rank == 1) {

More information

演習 II 2 つの講義の演習 奇数回 : 連続系アルゴリズム 部分 偶数回 : 計算量理論 部分 連続系アルゴリズム部分は全 8 回を予定 前半 2 回 高性能計算 後半 6 回 数値計算 4 回以上の課題提出 ( プログラム + 考察レポート ) で単位

演習 II 2 つの講義の演習 奇数回 : 連続系アルゴリズム 部分 偶数回 : 計算量理論 部分 連続系アルゴリズム部分は全 8 回を予定 前半 2 回 高性能計算 後半 6 回 数値計算 4 回以上の課題提出 ( プログラム + 考察レポート ) で単位 演習 II ( 連続系アルゴリズム ) 第 1 回 : MPI 須田研究室 M2 本谷徹 motoya@is.s.u-tokyo.ac.jp 2012/10/05 2012/10/18 補足 訂正 演習 II 2 つの講義の演習 奇数回 : 連続系アルゴリズム 部分 偶数回 : 計算量理論 部分 連続系アルゴリズム部分は全 8 回を予定 前半 2 回 高性能計算 後半 6 回 数値計算 4 回以上の課題提出

More information

memo

memo 数理情報工学演習第一 C プログラミング演習 ( 第 5 回 ) 2015/05/11 DEPARTMENT OF MATHEMATICAL INFORMATICS 1 今日の内容 : プロトタイプ宣言 ヘッダーファイル, プログラムの分割 課題 : 疎行列 2 プロトタイプ宣言 3 C 言語では, 関数や変数は使用する前 ( ソースの上のほう ) に定義されている必要がある. double sub(int

More information

44 6 MPI 4 : #LIB=-lmpich -lm 5 : LIB=-lmpi -lm 7 : mpi1: mpi1.c 8 : $(CC) -o mpi1 mpi1.c $(LIB) 9 : 10 : clean: 11 : -$(DEL) mpi1 make mpi1 1 % mpiru

44 6 MPI 4 : #LIB=-lmpich -lm 5 : LIB=-lmpi -lm 7 : mpi1: mpi1.c 8 : $(CC) -o mpi1 mpi1.c $(LIB) 9 : 10 : clean: 11 : -$(DEL) mpi1 make mpi1 1 % mpiru 43 6 MPI MPI(Message Passing Interface) MPI 1CPU/1 PC Cluster MPICH[5] 6.1 MPI MPI MPI 1 : #include 2 : #include 3 : #include 4 : 5 : #include "mpi.h" 7 : int main(int argc,

More information

Microsoft PowerPoint MPI.v...O...~...O.e.L.X.g(...Q..)

Microsoft PowerPoint MPI.v...O...~...O.e.L.X.g(...Q..) MPI プログラミング Information Initiative Center, Hokkaido Univ. MPI ライブラリを利用した分散メモリ型並列プログラミング 分散メモリ型並列処理 : 基礎 分散メモリマルチコンピュータの構成 プロセッサエレメントが専用のメモリ ( ローカルメモリ ) を搭載 スケーラビリティが高い 例 :HITACHI SR8000 Interconnection

More information

Microsoft PowerPoint _MPI-01.pptx

Microsoft PowerPoint _MPI-01.pptx 計算科学演習 Ⅰ MPI を いた並列計算 (I) 神戸大学大学院システム情報学研究科谷口隆晴 yaguchi@pearl.kobe-u.ac.jp この資料は昨年度担当の横川先生の資料を参考にさせて頂いています. 2016/06/23 MPI を用いた並列計算 (I) 1 講義概要 分散メモリ型計算機上のプログラミング メッセージ パシング インターフェイス (Message Passing Interface,MPI)

More information

<4D F736F F F696E74202D C097F B A E B93C782DD8EE682E890EA97705D>

<4D F736F F F696E74202D C097F B A E B93C782DD8EE682E890EA97705D> 並列アルゴリズム 2005 年後期火曜 2 限 青柳睦 Aoyagi@cc.kyushu-u.ac.jp http://server-500.cc.kyushu-u.ac.jp/ 10 月 18( 火 ) 4. 数値計算における各種の並列化 5. MPI の基礎 1 講義の概要 並列計算機や計算機クラスターなどの分散環境における並列処理の概論 MPI および OpenMP による並列計算 理工学分野の並列計算アルゴリズム

More information

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

Microsoft PowerPoint - 演習1:並列化と評価.pptx 講義 2& 演習 1 プログラム並列化と性能評価 神戸大学大学院システム情報学研究科横川三津夫 yokokawa@port.kobe-u.ac.jp 2014/3/5 RIKEN AICS HPC Spring School 2014: プログラム並列化と性能評価 1 2014/3/5 RIKEN AICS HPC Spring School 2014: プログラム並列化と性能評価 2 2 次元温度分布の計算

More information

コードのチューニング

コードのチューニング ハイブリッド並列 八木学 ( 理化学研究所計算科学研究機構 ) 謝辞 松本洋介氏 ( 千葉大学 ) KOBE HPC Spring School 2017 2017 年 3 月 14 日神戸大学計算科学教育センター MPI とは Message Passing Interface 分散メモリのプロセス間の通信規格(API) SPMD(Single Program Multi Data) が基本 -

More information

C/C++ FORTRAN FORTRAN MPI MPI MPI UNIX Windows (SIMD Single Instruction Multipule Data) SMP(Symmetric Multi Processor) MPI (thread) OpenMP[5]

C/C++ FORTRAN FORTRAN MPI MPI MPI UNIX Windows (SIMD Single Instruction Multipule Data) SMP(Symmetric Multi Processor) MPI (thread) OpenMP[5] MPI ( ) snozawa@env.sci.ibaraki.ac.jp 1 ( ) MPI MPI Message Passing Interface[2] MPI MPICH[3],LAM/MPI[4] (MIMDMultiple Instruction Multipule Data) Message Passing ( ) (MPI (rank) PE(Processing Element)

More information

演習準備

演習準備 演習準備 2014 年 3 月 5 日神戸大学大学院システム情報学研究科森下浩二 1 演習準備の内容 神戸大 FX10(π-Computer) 利用準備 システム概要 ログイン方法 コンパイルとジョブ実行方法 MPI 復習 1. MPIプログラムの基本構成 2. 並列実行 3. 1 対 1 通信 集団通信 4. データ 処理分割 5. 計算時間計測 2 神戸大 FX10(π-Computer) 利用準備

More information

Gfarm/MPI-IOの 概要と使い方

Gfarm/MPI-IOの 概要と使い方 MPI-IO/Gfarm のご紹介と現在の開発状況 鷹津冬将 2018/3/2 Gfarm ワークショップ 2018 1 目次 MPI-IO/Gfarm 概要 MPI-IO/Gfarm の開発状況 MVAPICH2 向け MPI-IO/Gfarm MPI-IO/Gfarm の使い方 かんたんなサンプルプログラムと動作確認の方法 既知の不具合 まとめと今後の展望 2018/3/2 Gfarm ワークショップ

More information

1.overview

1.overview 村井均 ( 理研 ) 2 はじめに 規模シミュレーションなどの計算を うためには クラスタのような分散メモリシステムの利 が 般的 並列プログラミングの現状 半は MPI (Message Passing Interface) を利 MPI はプログラミングコストが きい 標 性能と 産性を兼ね備えた並列プログラミング 語の開発 3 並列プログラミング 語 XcalableMP 次世代並列プログラミング

More information

<4D F736F F F696E74202D C097F B A E B93C782DD8EE682E890EA97705D>

<4D F736F F F696E74202D C097F B A E B93C782DD8EE682E890EA97705D> 並列アルゴリズム 2005 年後期火曜 2 限青柳睦 Aoyagi@cc.kyushu-u.ac.jp http//server-500.cc.kyushu-u.ac.jp/ 11 月 29( 火 ) 7. 集団通信 (Collective Communication) 8. 領域分割 (Domain Decomposition) 1 もくじ 1. 序並列計算機の現状 2. 計算方式およびアーキテクチュアの分類

More information

slide5.pptx

slide5.pptx ソフトウェア工学入門 第 5 回コマンド作成 1 head コマンド作成 1 早速ですが 次のプログラムを head.c という名前で作成してください #include #include static void do_head(file *f, long nlines); int main(int argc, char *argv[]) { if (argc!=

More information

第8回講義(2016年12月6日)

第8回講義(2016年12月6日) 2016/12/6 スパコンプログラミング (1) (Ⅰ) 1 行列 - 行列積 (2) 東京大学情報基盤センター准教授塙敏博 2016 年 12 月 6 日 ( 火 ) 10:25-12:10 2016/11/29 講義日程 ( 工学部共通科目 ) 1. 9 月 27 日 ( 今日 ): ガイダンス 2. 10 月 4 日 l 並列数値処理の基本演算 ( 座学 ) 3. 10 月 11 日 : スパコン利用開始

More information

main() {... } main() { main() { main() {......... } } } main() { main() { main() {......... } } } main() { if(rank==)... } main() { if(rank==)... } main() { if(rank==x)... } P(N) P(N) / P(M) * ( M / N

More information

86

86 86 86 86 main() {... } main() { main() { main() {......... } } } 86 main() { main() { main() {......... } } } main() { if(rank==)... } main() { if(rank==)... } main() { if(rank==x)... } 86 P(N) P(N) /

More information

120802_MPI.ppt

120802_MPI.ppt CPU CPU CPU CPU CPU SMP Symmetric MultiProcessing CPU CPU CPU CPU CPU CPU CPU CPU CPU CPU CPU CPU CP OpenMP MPI MPI CPU CPU CPU CPU CPU CPU CPU CPU CPU CPU MPI MPI+OpenMP CPU CPU CPU CPU CPU CPU CPU CP

More information

Microsoft PowerPoint - CproNt02.ppt [互換モード]

Microsoft PowerPoint - CproNt02.ppt [互換モード] 第 2 章 C プログラムの書き方 CPro:02-01 概要 C プログラムの構成要素は関数 ( プログラム = 関数の集まり ) 関数は, ヘッダと本体からなる 使用する関数は, プログラムの先頭 ( 厳密には, 使用場所より前 ) で型宣言 ( プロトタイプ宣言 ) する 関数は仮引数を用いることができる ( なくてもよい ) 関数には戻り値がある ( なくてもよい void 型 ) コメント

More information

chap2.ppt

chap2.ppt 2. メッセージ通信計算 2.1 メッセージ通信プログラミングの基本 プログラミングの選択肢 特別な並列プログラミング言語を設計する occam (Inmos, 1984, 1986) 既存の逐次言語の文法 / 予約語をメッセージ通信を処理できるように拡張する 既存の逐次言語を用い メッセージ通信のための拡張手続のライブラリを用意する どのプロセスを実行するのか メッセージ通信のタイミング 中身を明示的に指定する必要がある

More information

スライド 1

スライド 1 計算科学演習 MPI 基礎 学術情報メディアセンター情報学研究科 システム科学専攻中島浩 目次 プログラミングモデル SPMD 同期通信 / 非同期通信 MPI 概論 プログラム構造 Communicator & rank データ型 タグ 一対一通信関数 1 次元分割並列化 : 基本 基本的考え方 配列宣言 割付 部分領域交換 結果出力 1 次元分割並列化 : 高速化 通信 計算のオーバーラップ 通信回数削減

More information

PowerPoint プレゼンテーション

PowerPoint プレゼンテーション vsmp Foundation スケーラブル SMP システム スケーラブル SMP システム 製品コンセプト 2U サイズの 8 ソケット SMP サーバ コンパクトな筐体に多くのコアとメモリを実装し SMP システムとして利用可能 スイッチなし構成でのシステム構築によりラックスペースを無駄にしない構成 将来的な拡張性を保証 8 ソケット以上への拡張も可能 2 システム構成例 ベースシステム 2U

More information

char int float double の変数型はそれぞれ 文字あるいは小さな整数 整数 実数 より精度の高い ( 数値のより大きい より小さい ) 実数 を扱う時に用いる 備考 : 基本型の説明に示した 浮動小数点 とは数値を指数表現で表す方法である 例えば は指数表現で 3 書く

char int float double の変数型はそれぞれ 文字あるいは小さな整数 整数 実数 より精度の高い ( 数値のより大きい より小さい ) 実数 を扱う時に用いる 備考 : 基本型の説明に示した 浮動小数点 とは数値を指数表現で表す方法である 例えば は指数表現で 3 書く 変数 入出力 演算子ここまでに C 言語プログラミングの様子を知ってもらうため printf 文 変数 scanf 文 if 文を使った簡単なプログラムを紹介した 今回は変数の詳細について習い それに併せて使い方が増える入出力処理の方法を習う また 演算子についての復習と供に新しい演算子を紹介する 変数の宣言プログラムでデータを取り扱う場合には対象となるデータを保存する必要がでてくる このデータを保存する場所のことを

More information

スライド 1

スライド 1 計算科学演習 MPI 基礎 学術情報メディアセンター 情報学研究科 システム科学専攻 中島浩 目次 プログラミングモデル SPMD 同期通信 / 非同期通信 MPI 概論 プログラム構造 Communicator & rank データ型 タグ 一対一通信関数 1 次元分割並列化 : 基本 基本的考え方 配列宣言 割付 部分領域交換 結果出力 1 次元分割並列化 : 高速化 通信 計算のオーバーラップ

More information

memo

memo 計数工学プログラミング演習 ( 第 3 回 ) 2017/04/25 DEPARTMENT OF MATHEMATICAL INFORMATICS 1 内容 ポインタの続き 引数の値渡しと参照渡し 構造体 2 ポインタで指されるメモリへのアクセス double **R; 型 R[i] と *(R+i) は同じ意味 意味 R double ** ポインタの配列 ( の先頭 ) へのポインタ R[i]

More information

講義の流れ 並列プログラムの概要 通常のプログラムと並列プログラムの違い 並列プログラム作成手段と並列計算機の構造 OpenMP による並列プログラム作成 処理を複数コアに分割して並列実行する方法 MPI による並列プログラム作成 ( 午後 ) プロセス間通信による並列処理 処理の分割 + データの

講義の流れ 並列プログラムの概要 通常のプログラムと並列プログラムの違い 並列プログラム作成手段と並列計算機の構造 OpenMP による並列プログラム作成 処理を複数コアに分割して並列実行する方法 MPI による並列プログラム作成 ( 午後 ) プロセス間通信による並列処理 処理の分割 + データの ( 財 ) 計算科学振興財団 大学院 GP 大学連合による計算科学の最先端人材育成 第 1 回社会人向けスパコン実践セミナー資料 29 年 2 月 17 日 13:15~14:45 九州大学情報基盤研究開発センター 南里豪志 1 講義の流れ 並列プログラムの概要 通常のプログラムと並列プログラムの違い 並列プログラム作成手段と並列計算機の構造 OpenMP による並列プログラム作成 処理を複数コアに分割して並列実行する方法

More information

Microsoft PowerPoint - GPGPU実践基礎工学(web).pptx

Microsoft PowerPoint - GPGPU実践基礎工学(web).pptx 並列計算の概念 ( プロセスとスレッド ) 長岡技術科学大学電気電子情報工学専攻出川智啓 今回の内容 並列計算の分類 並列アーキテクチャ 並列計算機システム 並列処理 プロセスとスレッド スレッド並列化 OpenMP プロセス並列化 MPI 249 CPU の性能の変化 動作クロックを向上させることで性能を向上 http://pc.watch.impress.co.jp/docs/2003/0227/kaigai01.htm

More information

Microsoft Word - Training10_プリプロセッサ.docx

Microsoft Word - Training10_プリプロセッサ.docx Training 10 プリプロセッサ 株式会社イーシーエス出版事業推進委員会 1 Lesson1 マクロ置換 Point マクロ置換を理解しよう!! マクロ置換の機能により 文字列の置き換えをすることが出来ます プログラムの可読性と保守性 ( メンテナンス性 ) を高めることができるため よく用いられます マクロ置換で値を定義しておけば マクロの値を変更するだけで 同じマクロを使用したすべての箇所が変更ができるので便利です

More information

PowerPoint プレゼンテーション

PowerPoint プレゼンテーション 講座準備 講座資料は次の URL から DL 可能 https://goo.gl/jnrfth 1 ポインタ講座 2017/01/06,09 fumi 2 はじめに ポインタはC 言語において理解が難しいとされる そのポインタを理解することを目的とする 講座は1 日で行うので 詳しいことは調べること 3 はじめに みなさん復習はしましたか? 4 & 演算子 & 演算子を使うと 変数のアドレスが得られる

More information

memo

memo 計数工学プログラミング演習 ( 第 3 回 ) 2016/04/26 DEPARTMENT OF MATHEMATICAL INFORMATICS 1 内容 ポインタ malloc 構造体 2 ポインタ あるメモリ領域 ( アドレス ) を代入できる変数 型は一致している必要がある 定義時には値は不定 ( 何も指していない ) 実際にはどこかのメモリを指しているので, #include

More information

2007年度 計算機システム演習 第3回

2007年度 計算機システム演習 第3回 2014 年度 実践的並列コンピューティング 第 10 回 MPI による分散メモリ並列プログラミング (3) 遠藤敏夫 endo@is.titech.ac.jp 1 MPI プログラムの性能を考える 前回までは MPI プログラムの挙動の正しさを議論 今回は速度性能に注目 MPIプログラムの実行時間 = プロセス内計算時間 + プロセス間通信時間 計算量 ( プロセス内 ) ボトルネック有無メモリアクセス量

More information

RX ファミリ用 C/C++ コンパイラ V.1.00 Release 02 ご使用上のお願い RX ファミリ用 C/C++ コンパイラの使用上の注意事項 4 件を連絡します #pragma option 使用時の 1 または 2 バイトの整数型の関数戻り値に関する注意事項 (RXC#012) 共用

RX ファミリ用 C/C++ コンパイラ V.1.00 Release 02 ご使用上のお願い RX ファミリ用 C/C++ コンパイラの使用上の注意事項 4 件を連絡します #pragma option 使用時の 1 または 2 バイトの整数型の関数戻り値に関する注意事項 (RXC#012) 共用 RX ファミリ用 C/C++ コンパイラ V.1.00 Release 02 ご使用上のお願い RX ファミリ用 C/C++ コンパイラの使用上の注意事項 4 件を連絡します #pragma option 使用時の 1 または 2 バイトの整数型の関数戻り値に関する注意事項 (RXC#012) 共用体型のローカル変数を文字列操作関数で操作する場合の注意事項 (RXC#013) 配列型構造体または共用体の配列型メンバから読み出した値を動的初期化に用いる場合の注意事項

More information

<4D F736F F F696E74202D D F95C097F D834F E F93FC96E5284D F96E291E85F8DE391E52E >

<4D F736F F F696E74202D D F95C097F D834F E F93FC96E5284D F96E291E85F8DE391E52E > SX-ACE 並列プログラミング入門 (MPI) ( 演習補足資料 ) 大阪大学サイバーメディアセンター日本電気株式会社 演習問題の構成 ディレクトリ構成 MPI/ -- practice_1 演習問題 1 -- practice_2 演習問題 2 -- practice_3 演習問題 3 -- practice_4 演習問題 4 -- practice_5 演習問題 5 -- practice_6

More information

Microsoft PowerPoint ppt

Microsoft PowerPoint ppt 並列アルゴリズム 2005 年後期火曜 2 限 高見利也 ( 青柳睦 ) Aoyagi@cc.kyushu-u.ac.jp http://server-500.cc.kyushu-u.ac.jp/ 12 月 20 日 ( 火 ) 9. PC クラスタによる並列プログラミング ( 演習 ) つづき 1 もくじ 1. 序並列計算機の現状 2. 計算方式およびアーキテクチュアの分類 3. 並列計算の目的と課題

More information

program7app.ppt

program7app.ppt プログラム理論と言語第 7 回 ポインタと配列, 高階関数, まとめ 有村博紀 吉岡真治 公開スライド PDF( 情報知識ネットワーク研 HP/ 授業 ) http://www-ikn.ist.hokudai.ac.jp/~arim/pub/proriron/ 本スライドは,2015 北海道大学吉岡真治 プログラム理論と言語, に基づいて, 現著者の承諾のもとに, 改訂者 ( 有村 ) が加筆修正しています.

More information

Microsoft PowerPoint - OS07.pptx

Microsoft PowerPoint - OS07.pptx この資料は 情報工学レクチャーシリーズ松尾啓志著 ( 森北出版株式会社 ) を用いて授業を行うために 名古屋工業大学松尾啓志 津邑公暁が作成しました 主記憶管理 主記憶管理基礎 パワーポイント 27 で最終版として保存しているため 変更はできませんが 授業でお使いなる場合は松尾 (matsuo@nitech.ac.jp) まで連絡いただければ 編集可能なバージョンをお渡しする事も可能です 復習 OS

More information

プログラミング実習I

プログラミング実習I プログラミング実習 I 05 関数 (1) 人間システム工学科井村誠孝 m.imura@kwansei.ac.jp 関数とは p.162 数学的には入力に対して出力が決まるもの C 言語では入出力が定まったひとまとまりの処理 入力や出力はあるときもないときもある main() も関数の一種 何かの仕事をこなしてくれる魔法のブラックボックス 例 : printf() 関数中で行われている処理の詳細を使う側は知らないが,

More information

<4D F736F F F696E74202D C097F B A E B93C782DD8EE682E890EA97705D>

<4D F736F F F696E74202D C097F B A E B93C782DD8EE682E890EA97705D> 並列アルゴリズム 2005 年後期火曜 2 限 青柳睦 Aoyagi@cc.kyushu-u.ac.jp http://server-500.cc.kyushu-u.ac.jp/ 10 月 11 日 ( 火 ) 1. 序並列計算機の現状 2. 計算方式およびアーキテクチュアの分類 ( 途中から ) 3. 並列計算の目的と課題 4. 数値計算における各種の並列化 1 講義の概要 並列計算機や計算機クラスターなどの分散環境における並列処理の概論

More information

Microsoft PowerPoint _MPI-03.pptx

Microsoft PowerPoint _MPI-03.pptx 計算科学演習 Ⅰ ( 第 11 回 ) MPI を いた並列計算 (III) 神戸大学大学院システム情報学研究科横川三津夫 yokokawa@port.kobe-u.ac.jp 2014/07/03 計算科学演習 Ⅰ:MPI を用いた並列計算 (III) 1 2014/07/03 計算科学演習 Ⅰ:MPI を用いた並列計算 (III) 2 今週の講義の概要 1. 前回課題の解説 2. 部分配列とローカルインデックス

More information

Java講座

Java講座 ~ 第 1 回 ~ 情報科学部コンピュータ科学科 2 年竹中優 プログラムを書く上で Hello world 基礎事項 演算子 構文 2 コメントアウト (//, /* */, /** */) をしよう! インデントをしよう! 変数などにはわかりやすい名前をつけよう! 要するに 他人が見て理解しやすいコードを書こうということです 3 1. Eclipse を起動 2. ファイル 新規 javaプロジェクト

More information

MPI usage

MPI usage MPI (Version 0.99 2006 11 8 ) 1 1 MPI ( Message Passing Interface ) 1 1.1 MPI................................. 1 1.2............................... 2 1.2.1 MPI GATHER.......................... 2 1.2.2

More information

arduino プログラミング課題集 ( Ver /06/01 ) arduino と各種ボードを組み合わせ 制御するためのプログラミングを学 ぼう! 1 入出力ポートの設定と利用方法 (1) 制御( コントロール ) する とは 外部装置( ペリフェラル ) が必要とする信号をマイ

arduino プログラミング課題集 ( Ver /06/01 ) arduino と各種ボードを組み合わせ 制御するためのプログラミングを学 ぼう! 1 入出力ポートの設定と利用方法 (1) 制御( コントロール ) する とは 外部装置( ペリフェラル ) が必要とする信号をマイ arduino プログラミング課題集 ( Ver.5.0 2017/06/01 ) arduino と各種ボードを組み合わせ 制御するためのプログラミングを学 ぼう! 1 入出力ポートの設定と利用方法 (1) 制御( コントロール ) する とは 外部装置( ペリフェラル ) が必要とする信号をマイコンから伝える 外部装置の状態をマイコンで確認する 信号の授受は 入出力ポート 経由で行う (2) 入出力ポートとは?

More information

¥Ñ¥Ã¥±¡¼¥¸ Rhpc ¤Î¾õ¶·

¥Ñ¥Ã¥±¡¼¥¸ Rhpc ¤Î¾õ¶· Rhpc COM-ONE 2015 R 27 12 5 1 / 29 1 2 Rhpc 3 forign MPI 4 Windows 5 2 / 29 1 2 Rhpc 3 forign MPI 4 Windows 5 3 / 29 Rhpc, R HPC Rhpc, ( ), snow..., Rhpc worker call Rhpc lapply 4 / 29 1 2 Rhpc 3 forign

More information

Microsoft PowerPoint - 09.pptx

Microsoft PowerPoint - 09.pptx 情報処理 Ⅱ 第 9 回 2014 年 12 月 22 日 ( 月 ) 関数とは なぜ関数 関数の分類 自作関数 : 自分で定義する. ユーザ関数 ユーザ定義関数 などともいう. 本日のテーマ ライブラリ関数 : 出来合いのもの.printf など. なぜ関数を定義するのか? 処理を共通化 ( 一般化 ) する プログラムの見通しをよくする 機能分割 ( モジュール化, 再利用 ) 責任 ( あるいは不具合の発生源

More information

情報処理演習 II

情報処理演習 II 2004 年 6 月 15 日 長谷川秀彦 情報処理演習 II Parallel Computing on Distributed Memory Machine 1. 分散メモリ方式並列計算の基礎 複数の CPU がそれぞれのメモリを持ち 独立に動作するコンピュータを分散メモリ方式並列コンピュータ 正確には Distributed Memory Parallel Computer という これには複数の

More information

PowerPoint プレゼンテーション

PowerPoint プレゼンテーション 計算科学演習 I 第 8 回講義 MPI を用いた並列計算 (I) 2013 年 6 月 6 日 システム情報学研究科計算科学専攻 山本有作 今回の講義の概要 1. MPI とは 2. 簡単な MPI プログラムの例 (1) 3. 簡単な MPI プログラムの例 (2):1 対 1 通信 4. 簡単な MPI プログラムの例 (3): 集団通信 共有メモリ型並列計算機 ( 復習 ) 共有メモリ型並列計算機

More information

PowerPoint プレゼンテーション

PowerPoint プレゼンテーション Foundation アプライアンス スケーラブルシステムズ株式会社 サーバ クラスタの課題 複数のシステムを一つの だけで容易に管理することは出来ないだろうか? アプリケーションがより多くのメモリを必要とするのだけど ハードウエアの増設なしで対応出来ないだろうか? 現在の利用環境のまま 利用できるコア数やメモリサイズの増強を図ることは出来ないだろうか? 短時間で導入可能で また 必要に応じて 柔軟にシステム構成の変更が可能なソリューションは無いだろうか?...

More information

(Microsoft PowerPoint \211\211\217K3_4\201i\216R\226{_\211\272\215\342\201j.ppt [\214\335\212\267\203\202\201[\203h])

(Microsoft PowerPoint \211\211\217K3_4\201i\216R\226{_\211\272\215\342\201j.ppt [\214\335\212\267\203\202\201[\203h]) RIKEN AICS Summer School 演習 3 4 MPI による並列計算 2012 年 8 月 8 日 神戸大学大学院システム情報学研究科山本有作理化学研究所計算科学研究機構下坂健則 1 演習の目標 講義 6 並列アルゴリズム基礎 で学んだアルゴリズムのいくつかを,MPI を用いて並列化してみる これを通じて, 基本的な並列化手法と,MPI 通信関数の使い方を身に付ける 2 取り上げる例題と学習項目

More information

Microsoft PowerPoint - compsys2-06.ppt

Microsoft PowerPoint - compsys2-06.ppt 情報基盤センター天野浩文 前回のおさらい (1) 並列処理のやり方 何と何を並列に行うのか コントロール並列プログラミング 同時に実行できる多数の処理を, 多数のノードに分配して同時に処理させる しかし, 同時に実行できる多数の処理 を見つけるのは難しい データ並列プログラミング 大量のデータを多数の演算ノードに分配して, それらに同じ演算を同時に適用する コントロール並列よりも, 多数の演算ノードを利用しやすい

More information

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

±é½¬£²¡§£Í£Ð£É½éÊâ 2012 8 7 1 / 52 MPI Hello World I ( ) Hello World II ( ) I ( ) II ( ) ( sendrecv) π ( ) MPI fortran C wget http://www.na.scitec.kobe-u.ac.jp/ yaguchi/riken2012/enshu2.zip unzip enshu2.zip 2 / 52 FORTRAN

More information

研究背景 大規模な演算を行うためには 分散メモリ型システムの利用が必須 Message Passing Interface MPI 並列プログラムの大半はMPIを利用 様々な実装 OpenMPI, MPICH, MVAPICH, MPI.NET プログラミングコストが高いため 生産性が悪い 新しい並

研究背景 大規模な演算を行うためには 分散メモリ型システムの利用が必須 Message Passing Interface MPI 並列プログラムの大半はMPIを利用 様々な実装 OpenMPI, MPICH, MVAPICH, MPI.NET プログラミングコストが高いため 生産性が悪い 新しい並 XcalableMPによる NAS Parallel Benchmarksの実装と評価 中尾 昌広 李 珍泌 朴 泰祐 佐藤 三久 筑波大学 計算科学研究センター 筑波大学大学院 システム情報工学研究科 研究背景 大規模な演算を行うためには 分散メモリ型システムの利用が必須 Message Passing Interface MPI 並列プログラムの大半はMPIを利用 様々な実装 OpenMPI,

More information

パソコンシミュレータの現状

パソコンシミュレータの現状 第 2 章微分 偏微分, 写像 豊橋技術科学大学森謙一郎 2. 連続関数と微分 工学において物理現象を支配する方程式は微分方程式で表されていることが多く, 有限要素法も微分方程式を解く数値解析法であり, 定式化においては微分 積分が一般的に用いられており. 数学の基礎知識が必要になる. 図 2. に示すように, 微分は連続な関数 f() の傾きを求めることであり, 微小な に対して傾きを表し, を無限に

More information

第1回 プログラミング演習3 センサーアプリケーション

第1回 プログラミング演習3 センサーアプリケーション C プログラミング - ポインタなんて恐くない! - 藤田悟 fujita_s@hosei.ac.jp 目標 C 言語プログラムとメモリ ポインタの関係を深く理解する C 言語プログラムは メモリを素のまま利用できます これが原因のエラーが多く発生します メモリマップをよく頭にいれて ポインタの動きを理解できれば C 言語もこわくありません 1. ポインタ入門編 ディレクトリの作成と移動 mkdir

More information

NUMAの構成

NUMAの構成 共有メモリを使ったデータ交換と同期 慶應義塾大学理工学部 天野英晴 hunga@am.ics.keio.ac.jp 同期の必要性 あるプロセッサが共有メモリに書いても 別のプロセッサにはそのことが分からない 同時に同じ共有変数に書き込みすると 結果がどうなるか分からない そもそも共有メモリって結構危険な代物 多くのプロセッサが並列に動くには何かの制御機構が要る 不可分命令 同期用メモリ バリア同期機構

More information

PowerPoint Presentation

PowerPoint Presentation 工学部 6 7 8 9 10 組 ( 奇数学籍番号 ) 担当 : 長谷川英之 情報処理演習 第 7 回 2010 年 11 月 18 日 1 今回のテーマ 1: ポインタ 変数に値を代入 = 記憶プログラムの記憶領域として使用されるものがメモリ ( パソコンの仕様書における 512 MB RAM などの記述はこのメモリの量 ) RAM は多数のコンデンサの集合体 : 電荷がたまっている (1)/ いない

More information

r07.dvi

r07.dvi 19 7 ( ) 2019.4.20 1 1.1 (data structure ( (dynamic data structure 1 malloc C free C (garbage collection GC C GC(conservative GC 2 1.2 data next p 3 5 7 9 p 3 5 7 9 p 3 5 7 9 1 1: (single linked list 1

More information

スライド 1

スライド 1 Parallel Programming in MPI part 2 1 1 Today's Topic ノンブロッキング通信 Non-Blocking Communication 通信の完了を待つ間に他の処理を行う Execute other instructions while waiting for the completion of a communication. 集団通信関数の実装 Implementation

More information

AquesTalk プログラミングガイド

AquesTalk プログラミングガイド AquesTalk プログラミングガイド ( 株 ) アクエスト 1. 概要 本文書は 規則音声合成ライブラリ AquesTalk をアプリケーションに組み込んで使用するためのプログラミングに関して 方法および注意点を示したものです AquesTalk には 2 種類のライブラリがあります 音声データをメモリ上に生成するものと サウンドデバイスに出力する 2 種類があります 使用するアプリケーションに応じて選択してください

More information

AquesTalk for WinCE プログラミングガイド

AquesTalk for WinCE プログラミングガイド AquesTalk for WinCE プログラミングガイド ( 株 ) アクエスト 1. 概要 本文書は 規則音声合成ライブラリ AquesTalk for WinCE ( 以下 AquesTalk) をアプリケーションに組み込んで使用するためのプログラミングに関して 方法および注意点を示したものです AquesTalk には 2 種類のライブラリがあります 音声データをメモリ上に生成するものと

More information

ohp07.dvi

ohp07.dvi 19 7 ( ) 2019.4.20 1 (data structure) ( ) (dynamic data structure) 1 malloc C free 1 (static data structure) 2 (2) C (garbage collection GC) C GC(conservative GC) 2 2 conservative GC 3 data next p 3 5

More information

プログラミング入門1

プログラミング入門1 プログラミング入門 1 第 5 回 繰り返し (while ループ ) 授業開始前に ログオン後 不要なファイルを削除し て待機してください Java 1 第 5 回 2 参考書について 参考書は自分にあったものをぜひ手元において自習してください 授業の WEB 教材は勉強の入り口へみなさんを案内するのが目的でつくられている これで十分という訳ではない 第 1 回に紹介した本以外にも良書がたくさんある

More information

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

8 / 0 1 i++ i 1 i-- i C !!! C 2 C 2006 5 2 printf() 1 [1] 5 8 C 5 ( ) 6 (auto) (static) 7 (=) 1 8 / 0 1 i++ i 1 i-- i 1 2 2.1 C 4 5 3 13!!! C 2 2.2 C ( ) 4 1 HTML はじめ mkdir work 作業用ディレクトリーの作成 emacs hoge.c& エディターによりソースプログラム作成 gcc -o fuga

More information

Microsoft PowerPoint - OpenMP入門.pptx

Microsoft PowerPoint - OpenMP入門.pptx OpenMP 入門 須田礼仁 2009/10/30 初版 OpenMP 共有メモリ並列処理の標準化 API http://openmp.org/ 最新版は 30 3.0 バージョンによる違いはあまり大きくない サポートしているバージョンはともかく csp で動きます gcc も対応しています やっぱり SPMD Single Program Multiple Data プログラム #pragma omp

More information

PowerPoint プレゼンテーション

PowerPoint プレゼンテーション 講座を行う前に 自己紹介 僕と上回生について 1 年生同士で少しお話しよう! オリエンテーションの宿題 アルゴロジック http://home.jeita.or.jp/is/highschool/algo/index3.html どこまでできましたか? あまりできなかった人はこれから全部クリアしよう! 2016 年度 C 言語講座 第一回目 2016/6/11 fumi 今回の目標 プログラムを書いて実行するやり方を覚える

More information

Gromacsユーザーマニュアル

Gromacsユーザーマニュアル 目次 1 Gromacs について... 2 2 Gromacs インストール概要... 3 3 Gromacs 実行例... 5 4 既知の問題点... 6 付録 A... 7 A.1 HPC システムズお問い合わせ先... 7 Copyright HPC SYSTEMS Inc. All Rights Reserved. 1 1 Gromacs について Gromacs はグローニンゲン大学で開発された分子動力学シミュレーションのソフトウェアパッケージです

More information

Prog1_10th

Prog1_10th 2012 年 6 月 20 日 ( 木 ) 実施ポインタ変数と文字列前回は, ポインタ演算が用いられる典型的な例として, ポインタ変数が 1 次元配列を指す場合を挙げたが, 特に,char 型の配列に格納された文字列に対し, ポインタ変数に配列の 0 番の要素の先頭アドレスを代入して文字列を指すことで, 配列そのものを操作するよりも便利な利用法が存在する なお, 文字列リテラルは, その文字列が格納されている領域の先頭アドレスを表すので,

More information

TopSE並行システム はじめに

TopSE並行システム はじめに はじめに 平成 23 年 9 月 1 日 トップエスイープロジェクト 磯部祥尚 ( 産業技術総合研究所 ) 2 本講座の背景と目標 背景 : マルチコア CPU やクラウドコンピューティング等 並列 / 分散処理環境が身近なものになっている 複数のプロセス ( プログラム ) を同時に実行可能 通信等により複数のプロセスが協調可能 並行システムの構築 並行システム 通信 Proc2 プロセス ( プログラム

More information

<4D F736F F D20438CBE8CEA8D758DC F0939A82C282AB2E646F63>

<4D F736F F D20438CBE8CEA8D758DC F0939A82C282AB2E646F63> C 言語講座第 2 回 作成 : ハルト 前回の復習基本的に main () の中カッコの中にプログラムを書く また 変数 ( int, float ) はC 言語では main() の中カッコの先頭で宣言する 1 画面へ出力 printf() 2 キーボードから入力 scanf() printf / scanf で整数を表示 / 入力 %d 小数を表示 / 入力 %f 3 整数を扱う int 型を使う

More information

OpenFOAM(R) ソースコード入門 pt1 熱伝導方程式の解法から有限体積法の実装について考える 前編 : 有限体積法の基礎確認 2013/11/17 オープンCAE 富山富山県立大学中川慎二

OpenFOAM(R) ソースコード入門 pt1 熱伝導方程式の解法から有限体積法の実装について考える 前編 : 有限体積法の基礎確認 2013/11/17 オープンCAE 富山富山県立大学中川慎二 OpenFOAM(R) ソースコード入門 pt1 熱伝導方程式の解法から有限体積法の実装について考える 前編 : 有限体積法の基礎確認 2013/11/17 オープンCAE 勉強会 @ 富山富山県立大学中川慎二 * OpenFOAM のソースコードでは, 基礎式を偏微分方程式の形で記述する.OpenFOAM 内部では, 有限体積法を使ってこの微分方程式を解いている. どのようにして, 有限体積法に基づく離散化が実現されているのか,

More information

MPI MPI MPI.NET C# MPI Version2

MPI MPI MPI.NET C# MPI Version2 MPI.NET C# 2 2009 2 27 MPI MPI MPI.NET C# MPI Version2 MPI (Message Passing Interface) MPI MPI Version 1 1994 1 1 1 1 ID MPI MPI_Send MPI_Recv if(rank == 0){ // 0 MPI_Send(); } else if(rank == 1){ // 1

More information

かし, 異なったプロセス間でデータを共有するためには, プロセス間通信や特殊な共有メモリ領域を 利用する必要がある. このためマルチプロセッサマシンの利点を最大に引き出すことができない. こ の問題はマルチスレッドを用いることで解決できる. マルチスレッドとは,1 つのプロセスの中に複 数のスレッド

かし, 異なったプロセス間でデータを共有するためには, プロセス間通信や特殊な共有メモリ領域を 利用する必要がある. このためマルチプロセッサマシンの利点を最大に引き出すことができない. こ の問題はマルチスレッドを用いることで解決できる. マルチスレッドとは,1 つのプロセスの中に複 数のスレッド 0 並列計算について 0.1 並列プログラミングライブラリのメッセージパッシングモデル並列プログラムにはメモリモデルで分類すると, 共有メモリモデルと分散メモリモデルの 2 つに分けられる. それぞれ次のような特徴がある. 共有メモリモデル複数のプロセスやスレッドが事項する主体となり, 互いに通信や同期を取りながら計算が継続される. スレッド間の実行順序をプログラマが保証してやらないと, 思った結果が得られない.

More information

XcalableMP入門

XcalableMP入門 XcalableMP 1 HPC-Phys@, 2018 8 22 XcalableMP XMP XMP Lattice QCD!2 XMP MPI MPI!3 XMP 1/2 PCXMP MPI Fortran CCoarray C++ MPIMPI XMP OpenMP http://xcalablemp.org!4 XMP 2/2 SPMD (Single Program Multiple Data)

More information

Microsoft Word - Cプログラミング演習(12)

Microsoft Word - Cプログラミング演習(12) 第 12 回 (7/9) 4. いくつかのトピック (5)main 関数の引数を利用したファイル処理 main 関数は, 起動する環境から引数を受け取ることができる 例えば 次に示すように,main 関数に引数を用いたプログラムを作成する 01 /* sample */ 02 /* main 関数の引数 */ 03 #include 04 05 main(int argc, char

More information

ohp03.dvi

ohp03.dvi 19 3 ( ) 2019.4.20 CS 1 (comand line arguments) Unix./a.out aa bbb ccc ( ) C main void int main(int argc, char *argv[]) {... 2 (2) argc argv argc ( ) argv (C char ) ( 1) argc 4 argv NULL. / a. o u t \0

More information

Microsoft PowerPoint - kougi11.ppt

Microsoft PowerPoint - kougi11.ppt C プログラミング演習 中間まとめ 2 1 ソフトウエア開発の流れ 機能設計 外部仕様 ( プログラムの入力と出力の取り決め ) 構成設計 詳細設計 論理試験 内部データ構造や関数呼び出し方法などに関する取り決めソースプログラムの記述正しい入力データから正しい結果が得られるかテスト関数単位からテストをおこなう 耐性試験 異常な入力データに対して, 異常を検出できるかテスト異常終了することはないかテスト

More information

Microsoft Word - 3new.doc

Microsoft Word - 3new.doc プログラミング演習 II 講義資料 3 ポインタ I - ポインタの基礎 1 ポインタとは ポインタとはポインタは, アドレス ( データが格納されている場所 ) を扱うデータ型です つまり, アドレスを通してデータを間接的に処理します ポインタを使用する場合の, 処理の手順は以下のようになります 1 ポインタ変数を宣言する 2 ポインタ変数へアドレスを割り当てる 3 ポインタ変数を用いて処理 (

More information

7 ポインタ (P.61) ポインタを使うと, メモリ上のデータを直接操作することができる. 例えばデータの変更 やコピーなどが簡単にできる. また処理が高速になる. 7.1 ポインタの概念 変数を次のように宣言すると, int num; メモリにその領域が確保される. 仮にその開始のアドレスを 1

7 ポインタ (P.61) ポインタを使うと, メモリ上のデータを直接操作することができる. 例えばデータの変更 やコピーなどが簡単にできる. また処理が高速になる. 7.1 ポインタの概念 変数を次のように宣言すると, int num; メモリにその領域が確保される. 仮にその開始のアドレスを 1 7 ポインタ (P.61) ポインタを使うと, メモリ上のデータを直接操作することができる. 例えばデータの変更 やコピーなどが簡単にできる. また処理が高速になる. 7.1 ポインタの概念 変数を次のように宣言すると, int num; メモリにその領域が確保される. 仮にその開始のアドレスを 10001 番地とすると, そこから int 型のサイズ, つまり 4 バイト分の領域が確保される.1

More information

memo

memo 計数工学プログラミング演習 ( 第 6 回 ) 2016/05/24 DEPARTMENT OF MATHEMATICAL INFORMATICS 1 今日の内容 : 再帰呼び出し 2 分探索木 深さ優先探索 課題 : 2 分探索木を用いたソート 2 再帰呼び出し 関数が, 自分自身を呼び出すこと (recursive call, recursion) 再帰を使ってアルゴリズムを設計すると, 簡単になることが多い

More information

人工知能入門

人工知能入門 藤田悟 黄潤和 探索とは 探索問題 探索解の性質 探索空間の構造 探索木 探索グラフ 探索順序 深さ優先探索 幅優先探索 探索プログラムの作成 バックトラック 深さ優先探索 幅優先探索 n 個の ueen を n n のマスの中に 縦横斜めに重ならないように配置する 簡単化のために 4-ueen を考える 正解 全状態の探索プログラム 全ての最終状態を生成した後に 最終状態が解であるかどうかを判定する

More information

Microsoft PowerPoint - å®�æ−•è©¦é¨fi3ㆮ対ç�Œ.pptx

Microsoft PowerPoint - å®�æ−•è©¦é¨fi3ㆮ対ç�Œ.pptx C言語の繰り返し処理 for文と while文と do文 臼杵 潤 0) 準備 変数の加減算 int a, b=10; // a= a = 0; a = a+1; // a= a += 1; // a= // a= a ++; a = a + b; // a= a += b; // a= // a= a --; 下を1行ずつ実行すると それぞれ aの値はどう変わるか 0 1 2 3 13 23 22

More information

gengo1-2

gengo1-2 変数 プログラム中で 値を格納するには変数 variable を用いる変数は 格納する値の型によって 整数型 文字型 などの型 type をもつ変数を使うには 利用に先立って変数の宣言 declaration をしなければならない 値 変数の値はコンピュータのメモリ上に格納される 具体的にメモリのどの場所に格納されるかは言語処理系が自動的に扱うので プログラマ ( 特に初級者 ) が意識する必要はない

More information

インテル(R) Visual Fortran コンパイラ 10.0

インテル(R) Visual Fortran コンパイラ 10.0 インテル (R) Visual Fortran コンパイラー 10.0 日本語版スペシャル エディション 入門ガイド 目次 概要インテル (R) Visual Fortran コンパイラーの設定はじめに検証用ソースファイル適切なインストールの確認コンパイラーの起動 ( コマンドライン ) コンパイル ( 最適化オプションなし ) 実行 / プログラムの検証コンパイル ( 最適化オプションあり ) 実行

More information

微分方程式 モデリングとシミュレーション

微分方程式 モデリングとシミュレーション 1 微分方程式モデリングとシミュレーション 2018 年度 2 質点の運動のモデル化 粒子と粒子に働く力 粒子の運動 粒子の位置の時間変化 粒子の位置の変化の割合 速度 速度の変化の割合 加速度 力と加速度の結び付け Newtonの運動方程式 : 微分方程式 解は 時間の関数としての位置 3 Newton の運動方程式 質点の運動は Newton の運動方程式で記述される 加速度は力に比例する 2

More information

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

Microsoft Word - C.....u.K...doc C uwêííôöðöõ Ð C ÔÖÐÖÕ ÐÊÉÌÊ C ÔÖÐÖÕÊ C ÔÖÐÖÕÊ Ç Ê Æ ~ if eíè ~ for ÒÑÒ ÌÆÊÉÉÊ ~ switch ÉeÍÈ ~ while ÒÑÒ ÊÍÍÔÖÐÖÕÊ ~ 1 C ÔÖÐÖÕ ÐÊÉÌÊ uê~ ÏÒÏÑ Ð ÓÏÖ CUI Ô ÑÊ ÏÒÏÑ ÔÖÐÖÕÎ d ÈÍÉÇÊ ÆÒ Ö ÒÐÑÒ ÊÔÎÏÖÎ d ÉÇÍÊ

More information