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

Size: px
Start display at page:

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

Transcription

1 0 並列計算について 0.1 並列プログラミングライブラリのメッセージパッシングモデル並列プログラムにはメモリモデルで分類すると, 共有メモリモデルと分散メモリモデルの 2 つに分けられる. それぞれ次のような特徴がある. 共有メモリモデル複数のプロセスやスレッドが事項する主体となり, 互いに通信や同期を取りながら計算が継続される. スレッド間の実行順序をプログラマが保証してやらないと, 思った結果が得られない. 共有メモリモデルは,pthread や OpenMP などで記述する. メッセージパッシングモデル複数のプロセスがメモリ空間を独立に持ちながら計算が実行されている. そこで, プロセス間でデータ通信の必要が生じた場合には送る側 (sender) と受け取る側 (receiver) の間に通信のチャネルを開く. このとき, 双方の受信の準備ができたことを同時に確認できるので同期を記述する必要はない. メッセージパッシングモデルは,HPF や,PVM,MPI などがある. 0.2 HPF(High Performance Fortran) によるプログラミング HPF は, 構成のコンピューティング用に開発されたプログラミング言語である.Fortran 言語に最小限の指示文を付加することにより, 分散メモリ並列システムで簡単に高い性能を得ることを目視している. 分散メモリシステム上の並列化において, 最も重要となるのは処理対象データの分散メモリ上への配置を行うデータマッピング, および計算処理の各要素プロセッサへの分配を行う計算マッピングである.HPF の本質的な考え方は, データアクセスの局所性を高めるためのデータ分割をユーザが明示的に指示し, それ以外の仕事を処理系 ( コンパイラ ) に任せようというものである.HPF プログラミングの考え方は, 以下のようなものである. (1) 並列化方針の決定 プログラム全体の構造把握, 並列化可能ループの同定, 負荷集中ループの把握 (2) データ悪説の抽出 並列化すべき主要ループを選択し, 主要配列のデータ分配配置の決定 各ループの並列に必要な通信を見積もり, 主要配列以外のデータ分配配置の決定 主要ループ以外の並列化 (3) データマッピングの指示文の挿入 プロセッサ配列の宣言および指示文の挿入 (4) ループの並列化 コンパイラが自動的に並列化を判定できないループについて指示文の挿入 (5) その他の最適化冗長通信の削除, 通信効率の向上 0.3 スレッドスレッドを用いて並列処理を行うときは, マルチスレッドを用いる. マルチプロセッサでは複数のプロセスを並列に動作させることができるため, システム全体の処理能力を高めることができる. し -1-

2 かし, 異なったプロセス間でデータを共有するためには, プロセス間通信や特殊な共有メモリ領域を 利用する必要がある. このためマルチプロセッサマシンの利点を最大に引き出すことができない. こ の問題はマルチスレッドを用いることで解決できる. マルチスレッドとは,1 つのプロセスの中に複 数のスレッドが動作することをいい, マルチスレッドを用いると, 同一プロセス中の複数のプログラ ムコードを同時に実行できる. スレッドは互いに独立して動作するため, スレッドで同期を取る必要 がない限り, 他のスレッドで何をしているか気にする必要がない. スレッドによるプログラミングで は, 同期を取るのが難しく, 実行順序なども気にしなければならない. 0.4 PVM(Parallel Virtual Machine) PVM では, プログラマは問題を別々のプログラムに分解し, それぞれのプログラムを C で書いて, ネットワーク内のコンピュータで走るようにコンパイルする必要がある. プログラムの実行前に, まず問題に対して使うコンピュータの集合を定義しなければならず, その集合が仮想並列マシンを構成する. 設定方法は, 利用できるコンピュータ名のリストを PVM がリードするホストファイル中に作ることである. または,PVM の制御コマンドを用いて手動で設定する. プロセス数がプロセッサ数より多いことがある.PVM では, プロセッサ数に無関係に任意のプロセスを生成でき, プロセスはプロセッサに自動的に割り当てられる PVM のプログラムは 1 個のマスタプログラムが最初に実行され, そのマスタプロセスから残りが生み出されるマスター -スレーブ型に構成される. 実行するときにプロセスが最初にしなければならないことの一つに PVM への 登録 がある. 0.5 PVM と MPI の違い MPI は,PVM を始めとする主要メッセージ通信ライブラリの開発を行った研究者と, 並列計算機ベンダのほとんどが開発に参加している. また, 出来上がった使用が, 数多くの有用な機能を持ち, 多くの並列計算や LAN 環境で高い性能を実現できる.MPI は PVM の機能を包含した形となっている. しかし MPI にはない PVM の特徴として, 動的なプロセス管理, 資源管理, 異種機種間での通信サポートの 3 つがある. プロセス管理では, アプリケーションの中からプロセスを生成したり, 停止したりできる. 資源管理は, 利用可能なノードのグループを管理する機能である. このグループに含まれるノードを動的に増減したり, 調べたりすることができる. 異機種間での通信サポートでは, 複数の異なるアーキテクチャのマシン間の通信を, 幅広いアーキテクチャについてサポートしている. 1 MPI プログラムの枠組みすべての MPI プログラムに共通する枠組みを以下に示す. MPI ヘッダフィルの読み込み MPI の初期化 (..MPI を使う並列処理..) MPI の処理の終了最初に MPI ライブラリを使うためのヘッダファイルを読み込む必要がある. ヘッダファイルには,MPI 独自の定義済み定数や変数の宣言が入っている. 次に,MPI ライブラリを利用するために必要な準備 ( 初期化 ) を, 関数 MPI_Init を呼び出すことで行う.MPI_Init は, 他のすべての MPI 関数の呼び出しに先立って呼び出す必要がある. そして, プログラムの事項を終了する前に,MPI ライブラリの利用の後始末 ( 終了処理 ) を, 関数 MPI_Finarize を呼び出すことで行う. プログラムでは, 以下のようになる. -2-

3 #include "mpi.h" ヘッダファイルの読み込み void main(int argc, char* argv[]){ int error; error = MPI_Init(&argc, &argv); MPI ライブラリ使用の初期化 * MPI による並列処理を行う error = MPI_Finalize(); MPI ライブラリ使用の終了処理 C 言語の場合,MPI のどの関数についても, 最初の MPI の 3 文字は常に大文字で, 次の単語の先頭も大 文字で, 次の単語の先頭も大文字で, 以降はすべて小文字である. 2 MPI プログラムの実行 MPI プログラムを実行する際の注意事項!! LAN で接続された PC は同じドメインまたはワークグループに存在していなければならない. また, ユーザ名とパスワードを登録しておく. 実行ファイルは各 PC で同じ場所で事項させる ( メインマシンの C: tmp に実行ファイルを保存したら, 他のマシンでも C: tmp に実行ファイルを保存する.) 実行はコマンドプロンプトより実行する.C: tmp Keisan フォルダに存在する example.exe を 3 台のマシンで並列計算を行う場合, 以下のコマンドを入力する. C:>cd c: tmp Keisan C: tmp Keisan>mpirun np 3 example.exe 実行は mpirun コマンドを使用し,-np でマシン台数を設定し, その後実行ファイルを指定する. もし, 引数を指定したいときは実行ファイルの後に引数を指定し実行する実行すると, 初回のみユーザ名とパスワードを聞かれる. ドメイン / ユーザ名と書かれているが, ユーザ名のみ指定すればよい. 以下,MPI ライブラリを使用した並列計算プログラムの簡単なサンプルを示す. 3 送受信を行うサンプルプログラム 3.1 目的 各プロセス間でデータの送受信を行う. 3.2 処理データの送受信には, 大きく分けて, 以下の事項を指定する必要がある. 1) メッセージバッファ 2) 通信相手 3) コンテクストメッセージバッファの指定は, 送信の際には送るべきデータの所在を示し, 受信の際には受け取ったデータをどこに置けば良いかを示す.MPI ではバッファの先頭アドレス ( ポインタ ), データの個数, 単位データ型である. 通信相手は, プロセスを指定できればよいので, プロセスグループとランクの対を指定する. -3-

4 通信コンテクストとは, 通信で転送されるデータが何に関するものかを示すもので, 整数値の タ グ と コミュニケータ である. MPI で最も基本的な送信関数は MPI_Send であり, 以下の引数を持つ. MPI_Send(buffer, count, datatype, destination, tag, communicator) *buffer バッファの先頭アドレス *count データの個数 *datatype 単位データ型 *destination あて先のプロセスランク *tag タグ *communicator コミュニケータ 同様に最も基本的な受信関数は MPI_Recv であり, 以下の引数を持つ. MPI_Recv(buffer, count, datatype, destination, tag, communicator, status) *buffer バッファの先頭アドレス *count データの個数 *datatype 単位データ型 *destination あて先のプロセスランク *tag タグ *communicator コミュニケータ *status 受信したメッセージに関する情報 ここで, タグは送信側と受信側で一致していなければならない. -4-

5 次にサンプルプログラムの説明を行う. このプログラムは, 各マシンである値を dest で設定したラ ンクを持つマシンに送信し,dest で設定された rank を持つマシンは source で指定した rank を持つ マシンよりデータを受信する. rank0 rank1 rank2 1 2 マシン 図 1 送受信の例 2 データの流れ 3.3 サンプル #include <stdio.h> #include <string.h> #include "mpi.h" intmain( intargc, char * argv[]){ intmy_rank; カレントプログラムのランク intp; プロセスの数 intsource; 送信プロセスのランク intdest; 受信プロセスのランク inttag=0; メッセージのタグ intmessage = 0; 送信データ MPI_Status status; 受信の戻りステータス MPI_Init(&argc, &argv); MPI のスタートアップ MPI_Comm_rank(MPI_COMM_WORLD, カレントプロセスのランクを求める &my_rank); MPI_Comm_size(MPI_COMM_WORLD, プロセスの数を求める &p); if(my_rank!= 0){ ランクが 0 でないとき ( スレーブの処理 ) message dest=0; = my_rank+1; 送信データの設定 printf( "Greetings\n", from my_rank); process %d! printf("send \n",message); = %d MPI_Send(&message, 1, MPI_INT, dest, データを送信 tag, else { ランクが0のとき ( マスタの処理 ) for(source =1; source<p; source++){ データを受信 -5- MPI_CO MPI_Recv(&message, 1, MPI_INT, source, tag, MP printf( "Greetings\n", from my_rank); process %d! printf("receve \n", message message); = %d

6 MPI_Finalize(); ライブラリ使用の終了処理 getchar(); return 1; 3.4 結果出力結果を以下に示す. 出力結果は, 各ランク ( マシン ) ごとに出力されている. C: tmp Keisan>mpirun -np 3 greetings.exe Greetings from process 1! //rank=1 のマシンの出力結果 send message = 2 Greetings from process 2! //rank=2 のマシンの出力結果 send message = 3 Greetings from process 0! receive message = 2 Greetings from process 0! receive message = 3 //rank=0 のマシンの出力結果 4 シフト通信を行うサンプルプログラム 4.1 目的各プロセスが他のプロセスにメッセージを送信し, それと並行してさらに別のプロセスからメッセージを受信する. 4.2 処理単純なシフトとして,rank0 から n-1 までの n 個のプロセスが存在するとき,rank i (0 i n-1) のプロセスから i+1 のプロセスへのメッセージ渡しがあげられる. 各プロセスが自分の持っているデータを隣に送ると同時に, 反対側の隣のプロセスからデータを受け取る. このサンプルでは最大ランクを持つプロセスがランク 0 のプロセスにメッセージを送ることで, 環状の通信パターンになっている. シフトのように送信と受信を 1 回ずつ並行して行う処理には,MPI_Sendrecv() 関数を用いるのがよい. MPI_Sendrecv(sendbuf, scount, stype, destination, stag, recvbuf, rcount, rtype, source, rtag, comm, status) *sendbuf 送信データ *scount 送信データ数 *stype 送信データの型 *destination 送信先ランク *stag 送信タグ *recvbuf 受信データ *rcount 受信データ数 *rtype 受信データの型 *source 受信元のランク *rtag 受信タグ -6-

7 *comm *status コミュニケータ 状態 Sendrecv 関数は,comm で指定したプロセスグループ中の全プロセスが参加して環状のシフト通信 を行う. 通信相手は隣のプロセスである.( 図 2) はじめに MPI_Comm_rank により, コードを実行するプロセスのランクを取得し, MPI_Comm_size により,MPI_COMM_WORLD に含まれるプロセス数を求める. これらの値を元に, 送信先プロセスのランクを dest に, 受信しようとするメッセージの発信者のランクを source に求め る. そして,MPI_Sendrecv により, 送信と受信をまとめて起動する. アドレス sendbuf にある int がたの値を 1 つのランク dest のプロセスに送ると同時に, ランク source のプロセスが発信したメッ セージを,recvbuf を先頭とする int 型変数 1 つ分のバッファに受信する. rank0 rank1 rank マシン データの流れ r s r s r s r: 受信 s: 送信 図 2 シフトの例 4.3 プログラム #include <stdio.h> #include "mpi.h" intmain( intargc, char * argv[]){ * dest 送信先アドレス * source 受信元アドレス intmyrank, size, dest, source; intsendbuf, recvbuf; MPI_Status status; 受信状態をあらわす MPI_Init(&argc, &argv); MPI_Comm_rank(MPI_COMM_WORLD, MPI_Comm_size(MPI_COMM_WORLD, 送受信データを設定 sendbuf recvbuf -1; = = myrank; dest myrank+1; = 送信先ランクを設定 source = -1; myrank 受信先ランクを設定 -7- &myrank); &size);

8 if(myrank -1){ == size 送信先ランクを設定 dest = 0; elseif(myrank == 受信先ランクを設定 0){ source = - 1; size シフトを行う MPI_Sendrecv(&sendbuf, 1, MPI_INT, rce, dest, MPI_COMM_WOR 0, 0, &recvb &status); printf("shift: sendbuf=%d \n", sendbuf, recvbuf%d recvbuf); MPI_Finalize(); return 1; 4.4 結果 C: tmp Keisan>mpirun -np 3 shift.exe shift: sendbuf=2 recvbuf1 shift: sendbuf=0 recvbuf2 shift: sendbuf=1 recvbuf0 5 ブロードキャストを行うサンプルプログラム 5.1 目的 ブロードキャストは, ある 1 つのプロセスから, 複数のプロセスすべてに対して同じメッセージを 送るというパターンの通信である. 5.2 処理 MPI_COMM_WORLD に属するすべてのプロセスに同じデータを配る場合を扱う. ブロードキャス トの範囲をより小さなプロセスグループに絞る方法もある. rank1 のプロセスが他のすべてのプロセスに同じデータを配っている. 例では 3 つのプロセスから なるプロセスグループがあって, その中の 1 つが他の 2 つのプロセスにメッセージを送っている. ブ ロードキャストの結果, このグループのプロセスはすべて同じデータを持つようになっている. ブロ ードキャストのための MPI 関数は MPI_Bcast である. MPI_Bcast(message, count, datatype, root, comm) *sendbuf *count 送受信データ 送受信データ数 *datatype 送受信データ型 *root *comm. 送信元ランク コミュニケータ ランク root プロセスの message 中のデータのコピーをコミュニケータ comm の中の全プロセスに 送る.bcast では message が入出力パラメータはとされる.root ランクのプロセスでは入力, 他のプ ロセスでは出力である. ブロードキャストの通信例を図 3 に示す. -8-

9 rank0 rank1 rank マシン 図 3 ブロードキャストの例 5.3 プログラム #include <stdio.h> #include "mpi.h" #define MAX 10; intmain( intargc, char * argv[]){ const intmax = 10; intsendbuf[max]; 送受信データ intrank, size,root=1; ランク, プロセスのサイズ, データ送信元のランク MPI_Status status; 送受信結果 MPI_Init(&argc, 並列計算開始 &argv); MPI_Comm_rank(MPI_COMM_WORLD, ランクを求める &rank); MPI_Comm_size(MPI_COMM_WORLD, サイズを求める &size); printf("ra nk:%d size:%d \n", rank, size); 送信データ設定 for(inti=0; i<max; if(rank == 1)sendbuf[i] = i; elsesendbuf[i]=0; for(inti=0; i<max; printf("%d printf(" \n"); ブロードキャストを行う ",sendbuf[i]); MPI_Bcast(&sendbuf,, MPI_COMM_WORLD); max, MPI_INT, 1 printf( "Bcast 呼び出し \n"); 受信データ表示 for(inti=0; i<max; printf("%d ",sendbuf[i]); -9-

10 printf(" \n"); 並列計算終了 MPI_Finalize(); return 1; 5.4 出力結果 C: tmp Keisan>mpirun -np 3 bcast.exe rank:0 size: Bcast 呼び出し rank:1 size: Bcast 呼び出し rank:2 size: Bcast 呼び出し gather を行うサンプルプログラム 6.1 目的 各ノードが持っている値を 1 つのノードに集める. このノードをルートという. ルートノードは, そのランクを引数として, 渡すことで指定する. 6.2 処理 データを 1 箇所に集める関数は MPI では MPI_Gather が提供されている. MPI_Garher(sendbuf, scount, stype, recvbuf, rcount, rtype, root, comm) * sendbuf 送信データ * scount 送信データ個数 * stype 送信データの型 * recvbuf 受信データ * rcount 受信データ個数 * rtype 受信データの型 * root ルートノード * comm. コミュニケータ MPI_Gather はコミュニケータにおける各プロセスの送信データを集め, ランクの順に root プロセス の受信データにプロセスランクの順にストアする. 仕上がって, データはプロセス 0 が最初に, 次意 プロセス 1, プロセス 2 のようになる. 各プロセスの sendbuf で参照されるデータは scount 個の要 素を持ち, それぞれの型は stype である.rCount と rtype は scount と stype と同じである. それ -10-

11 らは, 各プロセスからの要素の数と要素の型を指定するが, 受け取るデータの総量については指定し ない.recv パラメータはルートプロセスでのみ意味を持つ. パラメータ root と comm はコミュニケ ータ comm の全プロセスにおいて同一でなければならない. ほとんどのケースで,sCount と stype は全プロセスで同じである. rank0 rank1 rank マシン 図 4 gather の例 コミュニケータにおける各プロセスの送信データで参照されるデータを集め, ランクの順に,root プロセス 6.3 プログラム #include <stdio.h> #include "mpi.h" intmain( intarg c, char * argv[]){ const intsmax = 5; const intrmax = 15; 送信, 受信データ intsendbuf[smax], recvbuf[rmax]; プロセスのランク, プロセス数 intrank, size; introot=0; MPI_Init(&argc, &argv); MPI_Comm_rank(MPI_COMM_WORLD, MPI_Comm_size(MP I_COMM_WORLD, 送信データ設定 for(inti=0; i<smax; sendbuf[i] 受信データ初期化 for(inti=0; i<rmax; recvbuf[i] = 0; -11- &size); = i+2*10*rank; &rank);

12 printf("rank:%d \n",rank,root); root %d for(inti=0; i<smax; printf("%d ",; sendbuf[i]) printf(" \n"); allgather を行う 受信データのサイズは各ランクから受信するデータの数である ( 全受信データ数ではない ) MPI_Gather(sendbuf, smax, MPI_INT, recvbuf, smax, 受信結果を出力 if(rank == root){ printf("gather \n"); for(inti=0; i<rmax; printf("%d MPI_Finalize(); return 1; ",recvbuf[i]); 6.4 結果 C: tmp Keisan>mpirun -np 3 gather.exe rank:1 root rank:2 root rank:0 root gather

13 7 scatter を行うサンプルプログラム 7.1 目的 1 つのノード ( これもルートと呼ぶ ) が持っているデータを各ノードに配る. ブロードキャストと の違いは, ノードごとに配るデータが異なることである. 典型的には, ルートが持っている配列を分 割して, その断片を各ノードに配る処理に使う. 7.2 処理 scatter として以下の MPI 関数が提供されている. scatter(sendbuf, scount, stype, recvbuf, rcount, rtype, root, comm) * sendbuf 送信データ * scount 送信データ個数 * stype 送信データの型 * recvbuf 受信データ * rcount 受信データ個数 * rtype 受信データの型 * root ルートノード ( 送信元ノード ) * comm. コミュニティ root プロセス上の送信データを p 個のセグメントに分割する. 各セグメントは, データ型 stype を持つ scount 個のデータからなる. 最初のセグメントはプロセス 0 に, 次のセグメントは, プロセス 1 に, など, ランクの順に送られる.send パラメータはルートプロセスのみで意味を持つ. ほとんどの場合,sCount は rcount とおなじであり,sType は rtype と同じである. rank0 rank1 rank マシン 図 5 scatter の例 7.3 プログラム #include <stdio.h> #include "mpi.h" intmain intargc, ( char * argv[]){ const intmax = 30; const intmaxr = max/3; -13-

14 送信受信データ, プロセスのランク, プロセス数, データを集めるランク intsendbuf[max], recvbuf[maxr], rank, size, root=1; MPI_Init(&argc,&argv); MPI_Comm_rank(MPI_COMM_WORLD, MPI_Comm_size(MPI_COMM_WORLD, データ初期化 if(rank == root){ for(inti=0; i<max; sendbuf[i] = i; for(inti=0; i<max; printf("%d printf(" \n"); scatter を行う ",sendbuf[i]); &rank); &size); MPI_Scatter(sendbuf, maxr, MPI_INT, recvbuf, maxr, MPI_Finalize(); printf("rank:%d \n",rank); for(inti=0; i<maxr; printf("%d printf(" \n"); return 1; ",recvbuf[i]); 7.4 出力結果 C: tmp Keisan>mpirun -np 3 scatter.exe rank: rank: rank:

15 8 allgather を行うサンプルプログラム 8.1 目的 最初に各ノードが持っている値を集めたものを, 全ノードに配る. ちょうど gather の直後にルート からブロードキャストを行ったのと同じ結果が得られる. 行列の内積などを求める際に使用される. 8.2 処理 allgather として, 以下の MPI 関数が提供されている. MPI_Allgather(sendbuf, scount, stype, recvbuf, rcount, rtype, comm) * sendbuf 送信データ * scount 送信データ個数 * stype 送信データの型 * recvbuf 受信データ * rcount 受信データ個数 * rtype 受信データの型 * comm. コミュニティ 各プロセスで送信したデータをランクの順に並べ, それを全プロセスに配布する.allgather を使 用した例を図 4 に示す. rank0 rank1 rank マシン プログラム #include <stdio.h> #include "mpi.h" 図 6 allgather の例 intmain( intargc, char * argv[]){ const intsmax = 5; const intrmax = smax*3; プロセスのランク, プロセスの数, 送受信データ intrank, size, sendbuf[smax], recvbuf[rmax]; MPI_Init(&argc, 並列計算開始 &argv); MPI_Comm_rank(MPI_COMM_WORLD, ランクを求める &rank); MPI_Comm_size(MPI_COMM_WORLD, サイズを求める &size); 送信データ作成 for(inti=0; i<smax; -15-

16 sendbuf[i] printf("rank:%d \n",rank); for(inti=0; i<smax; printf("%d printf(" \n"); allgather を行う = i+rank*10; ",sendbuf[i]); プロセスで受信する受信データは送信データの 1 smax だけ受信する MPI_Allgather(sendbuf, smax, MPI_INT, recvbuf, sma 受信データ表示 for(inti=0; i<rmax; printf("%d printf(" \n"); MPI_Finalize(); 並列計算終了 return 1; ",recvbuf[i]); 8.4 出力結果 C: tmp Keisan>mpirun -np 3 allgather.exe rank: rank: rank:

17 9 alltoall を行うサンプルプログラム 9.1 目的 すべてのノードからすべてのノードに対して, あて先ノードごとに違う値を配る. 各ノードをルー トとして scatter を繰り返しても同様の結果が得られるが,MPI_Alltoall を使用するほうが効率がよ い. 転置行列を作成する場合に効率がよい.alltoall は, 各プロセスに同量のデータを送るので, 一 見したところ使い道がないように思える. 9.2 処理 alltoall は以下の MPI 関数が提供されている. alltoall(sendbuf, scount, stype, recvbuf, rcount, rtype, comm) * sendbuf 送信データ * scount 送信データ個数 * stype 送信データの型 * recvbuf 受信データ * rcount 受信データ個数 * rtype 受信データの型 * comm. コミュニティ プロセス q 上への働きは scount 個の stype 型の要素を各プロセスへ送ることである.sCount 個の最初のブロックはプロセス 0 へ, 第 2 のブロックはプロセス 1 へ送られる. プロセス q はまた, すべてのプロセスから rcount 個の rtype 型の要素を受け取る. プロセス 0 からの要素は recfvbuf の先頭に受け取る. プロセス 1 からの要素はプロセス 0 からの要素の直後に受け取る. rank0 rank1 rank マシン プログラム #include "mpi.h" #include <stdio.h> #include <stdlib.h> 図 7 alltoall の例 intmain( intargc, char * argv[]){ intsendbuf[10]; メッセージの保存場所 intrecvbuf[10]; メッセージの保存場所 intmy_rank; カレントプログラムのランク intnumprocs; プロセス数 inttag=0; メッセージのタグ -17-

18 MPI_Status status; 受信の戻りステータス MPI_Init(&argc, &argv); MPI_Comm_rank(MPI_COMM_WORLD, カレントプロセスのランクを取得 &my_rank); MPI_Comm_size(MPI_COMM_WORLD, numprocs); プロセス数を取得 & printf("myrank:%d \n", my_rank); 送信データ設定 for(inti=0; i<numprocs; sendbuf[i]=my_rank*10+i; printf("sendbuf[%d]=%d \n", i, sendbuf[i]); alltoall を行う MPI_Alltoall(sendbuf, 1, 受信データ出力 for(inti=0; i<numprocs; printf("%d ", recvbuf[i]); printf(" \n"); MPI_Finalize(); getchar(); return 0; MPI_INT, MPI_COMM_WORLD); recvbuf, 1, MPI_ 9.4 出力結果 C: tmp Keisan>mpirun -np 3 matrix.exe Mpd needs an account to launch processes with: account (domain user): arakawa password: myrank:1 sendbuf=2 sendbuf= myrank:2 sendbuf=3 sendbuf= myrank:0 sendbuf=1 sendbuf=

19 10 reduce を行うサンプルプログラム 10.1 目的 各プロセスが持っているデータの総和がルートプロセスに得られる. 各プロセスが配列上にデータ を持っている場合には, 配列の各要素ごとの総和が得られる 処理 和を求めるために,MPI では以下の関数が提供されている. MPI_Reduce(sendbuf, recvbuf, count, datatype, operator, root, comm) * sendbuf 送信データ * recvbuf 受信データ * count 送信データ数 * datatype データ型 * operator 計算オプション * root ルートノード * comm. コミュニケータ sendbuf で参照されるメモリ中の複数のオペランドを, 演算 operator を用いて結合し, 結果をプロ セス root の recvbuf にストアする.sendbuf,recvbuf はともにデータ型 datatype により,count 個 のメモリロケーションを参照する.MPI_Reduce はコミュニケータ個 mm の中のすべてのプロセスに 呼ばれ,count,datatype,operator および root は同じでなければならない. パラメータ operator は表 1 に示す定義済みの値のうちの一つが取れる. 総和を求めるパターンを図 4 表 1 MPI の定義済みの操作 操作名 MPI_MAX MPI_MIN MPI_SUM MPI_PROD MPI_LAND MPI_BAND MPI_LOR MPI_BOR MPI_LXOR MPI_BXOR 意味 最大値 最小値 和 積 論理積 ビット論理積 論理和 ビット論理和 排他的論理和 ビット排他的論理和 MPI_MAXLOC 最大値と位置 MPI_MINLOC 最小値と位置 -19-

20 rank0 rank1 rank マシン プログラム #include <stdio.h> #include "mpi.h" 図 8 reduce の例 intmain( intargc, char * argv[]){ const intmax = 10; const intrmax = max*3; intrank, size, root プロセスのランク =1;, プロセス数, データを集めるランク intsendbuf[max], recvbuf[rmax]; 送信 受信データ MPI_Comm comm = MPI_COMM_WORLD; コミュニケータ 並列処理 MPI_Init(&argc, &argv); MPI_Comm_rank(comm, MPI_Comm_size(comm, -20- &rank); &size); printf("rank:%d \nsendbuf root:%d \n",rank,root); 送信データ設定 for(inti=0; i<max; sendbuf[i] = i + 10*rank; for(inti=0; i<max; printf("%d printf(" \n"); 受信データ初期化 for(inti=0; i<rmax; recvbuf[i] = 0; printf("reduce -sum \n"); ",sendbuf[i] ); 第 3 引数には送信データの個数を送信する MPI_Reduce(sendbuf, recvbuf, max, MPI_INT, MPI_S ランクがroot のとき if(rank==root){

21 printf("recvbuf \n"); 出力結果表示 for(inti=0; i<max; printf("%d printf(" \n"); printf("end \n"); mpi 並列計算終了 MPI_Finalize(); return 1; ",recvbuf[i]); 10.4 出力結果 C: tmp Keisan>mpirun -np 3 reduce.exe rank:2 root:1 sendbuf reduce-sum end mpi rank:1 root:1 sendbuf reduce-sum recvbuf end mpi rank:0 root:1 sendbuf reduce-sum end mpi -21-

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

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

演習準備 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

<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

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 - 演習2:MPI初歩.pptx

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

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

目 目 用方 用 用 方

目 目 用方 用 用 方 大 生 大 工 目 目 用方 用 用 方 用 方 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

コードのチューニング

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

More information

スライド 1

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

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 - 演習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

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

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

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

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

演習準備

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

More information

chap2.ppt

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

More information

about MPI

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

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

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

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 並列アルゴリズム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

課題 S1 解説 C 言語編 中島研吾 東京大学情報基盤センター

課題 S1 解説 C 言語編 中島研吾 東京大学情報基盤センター 課題 S1 解説 C 言語編 中島研吾 東京大学情報基盤センター 内容 課題 S1 /a1.0~a1.3, /a2.0~a2.3 から局所ベクトル情報を読み込み, 全体ベクトルのノルム ( x ) を求めるプログラムを作成する (S1-1) file.f,file2.f をそれぞれ参考にする 下記の数値積分の結果を台形公式によって求めるプログラムを作成する

More information

並列計算導入.pptx

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

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

<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

1.overview

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

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

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

58 7 MPI 7 : main(int argc, char *argv[]) 8 : { 9 : int num_procs, myrank; 10 : double a, b; 11 : int tag = 0; 12 : MPI_Status status; 13 : 1 MPI_Init

58 7 MPI 7 : main(int argc, char *argv[]) 8 : { 9 : int num_procs, myrank; 10 : double a, b; 11 : int tag = 0; 12 : MPI_Status status; 13 : 1 MPI_Init 57 7 MPI MPI 1 1 7.1 Bcast( ) allocate Bcast a=1 PE0 a=1 PE1 a=1 PE2 a=1 PE3 7.1: Bcast 58 7 MPI 7 : main(int argc, char *argv[]) 8 : { 9 : int num_procs, myrank; 10 : double a, b; 11 : int tag = 0; 12

More information

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

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

More information

Microsoft PowerPoint - compsys2-06.ppt

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

More information

DKA ( 1) 1 n i=1 α i c n 1 = 0 ( 1) 2 n i 1 <i 2 α i1 α i2 c n 2 = 0 ( 1) 3 n i 1 <i 2 <i 3 α i1 α i2 α i3 c n 3 = 0. ( 1) n 1 n i 1 <i 2 < <i

DKA ( 1) 1 n i=1 α i c n 1 = 0 ( 1) 2 n i 1 <i 2 α i1 α i2 c n 2 = 0 ( 1) 3 n i 1 <i 2 <i 3 α i1 α i2 α i3 c n 3 = 0. ( 1) n 1 n i 1 <i 2 < <i 149 11 DKA IEEE754 11.1 DKA n p(x) = a n x n + a n 1 x n 1 + + a 0 (11.1) p(x) = 0 (11.2) p n (x) q n (x) = x n + c n 1 x n 1 + + c 1 x + c 0 q n (x) = 0 (11.3) c i = a i a n (i = 0, 1,..., n 1) (11.3)

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

MPI コミュニケータ操作

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

More information

memo

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

More information

Microsoft PowerPoint - S1-ref-F.ppt [互換モード]

Microsoft PowerPoint - S1-ref-F.ppt [互換モード] 課題 S1 解説 Fortran 言語編 RIKEN AICS HPC Summer School 2014 中島研吾 ( 東大 情報基盤センター ) 横川三津夫 ( 神戸大 計算科学教育センター ) MPI Programming 課題 S1 (1/2) /a1.0~a1.3, /a2.0~a2.3 から局所ベクトル情報を読み込み, 全体ベクトルのノルム ( x ) を求めるプログラムを作成する

More information

Microsoft PowerPoint - 計算機言語 第7回.ppt

Microsoft PowerPoint - 計算機言語 第7回.ppt 計算機言語第 7 回 長宗高樹 目的 関数について理解する. 入力 X 関数 f 出力 Y Y=f(X) 関数の例 関数の型 #include int tasu(int a, int b); main(void) int x1, x2, y; x1 = 2; x2 = 3; y = tasu(x1,x2); 実引数 printf( %d + %d = %d, x1, x2, y);

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

スライド 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

MPI

MPI 筑波大学計算科学研究センター CCS HPC サマーセミナー MPI 建部修見 tatebe@cs.tsukuba.ac.jp 筑波大学大学院システム情報工学研究科計算科学研究センター 分散メモリ型並列計算機 (PC クラスタ ) 計算ノードはプロセッサとメモリで構成され, 相互結合網で接続 ノード内のメモリは直接アクセス 他ノードとはネットワーク通信により情報交換 いわゆるPCクラスタ 相互結合網

More information

コードのチューニング

コードのチューニング MPI による並列化実装 ~ ハイブリッド並列 ~ 八木学 ( 理化学研究所計算科学研究センター ) KOBE HPC Spring School 2019 2019 年 3 月 14 日 MPI とは Message Passing Interface 分散メモリのプロセス間の通信規格(API) SPMD(Single Program Multi Data) が基本 - 各プロセスが 同じことをやる

More information

プログラミング実習I

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

More information

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

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

More information

untitled

untitled RIKEN AICS Summer School 3 4 MPI 2012 8 8 1 6 MPI MPI 2 allocatable 2 Fox mpi_sendrecv 3 3 FFT mpi_alltoall MPI_PROC_NULL 4 FX10 /home/guest/guest07/school/ 5 1 A (i, j) i+j x i i y = Ax A x y y 1 y i

More information

gengo1-11

gengo1-11 関数の再帰定義 自然数 n の階乗 n! を計算する関数を定義してみる 引数は整数 返却値も整数 n! = 1*2*3*... * (n 1)*n である ただし 0! = 1 とする int factorial(int n) int i, tmp=1; if( n>0 ) for(i=1; i

More information

情報処理演習 II

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

More information

MPI () MPIMessage Passing Interface MPI MPI OpenMP 7 ( ) 1

MPI () MPIMessage Passing Interface MPI MPI OpenMP 7 ( ) 1 7 MPI / 7 (2014 05 21 ) MPI () MPIMessage Passing Interface MPI MPI OpenMP 7 (2014 05 21 ) 1 (MPI) 7 (2014 05 21 ) 2 (OpenMP) 7 (2014 05 21 ) 3 (MPI + OpenMP) 7 (2014 05 21 ) 4 MPI (1) MPI1 OpenMP 1 pragma

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

スライド 1

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

More information

コマンドラインから受け取った文字列の大文字と小文字を変換するプログラムを作成せよ 入力は 1 バイトの表示文字とし アルファベット文字以外は変換しない 1. #include <stdio.h> 2. #include <ctype.h> /*troupper,islower,isupper,tol

コマンドラインから受け取った文字列の大文字と小文字を変換するプログラムを作成せよ 入力は 1 バイトの表示文字とし アルファベット文字以外は変換しない 1. #include <stdio.h> 2. #include <ctype.h> /*troupper,islower,isupper,tol コマンドラインから受け取った文字列の大文字と小文字を変換するプログラムを作成せよ 入力は 1 バイトの表示文字とし アルファベット文字以外は変換しない 1. #include 2. #include /*troupper,islower,isupper,tolowerを使うため宣言*/ 3. 4. int get_n(char *); 5. void replace(char

More information

Prog1_6th

Prog1_6th 2012 年 5 月 24 日 ( 木 ) 実施 多分岐のプログラム 前回は多段階の 2 分岐を組み合わせて 3 種類以上の場合分けを実現したが, 式の値の評価によって, 一度に多種類の場合分けを行う多分岐の利用によって見通しのよいプログラムを作成できる場合がある ( 流れ図は右図 ) 式の評価 : 値 1 : 値 2 : 値 n : 該当値無し 処理 1 処理 2 処理 n 既定の処理 switch

More information

C プログラミング演習 1( 再 ) 2 講義では C プログラミングの基本を学び 演習では やや実践的なプログラミングを通して学ぶ

C プログラミング演習 1( 再 ) 2 講義では C プログラミングの基本を学び 演習では やや実践的なプログラミングを通して学ぶ C プログラミング演習 1( 再 ) 2 講義では C プログラミングの基本を学び 演習では やや実践的なプログラミングを通して学ぶ 今回のプログラミングの課題 次のステップによって 徐々に難易度の高いプログラムを作成する ( 参照用の番号は よくわかる C 言語 のページ番号 ) 1. キーボード入力された整数 10 個の中から最大のものを答える 2. 整数を要素とする配列 (p.57-59) に初期値を与えておき

More information

Microsoft PowerPoint - exp2-02_intro.ppt [互換モード]

Microsoft PowerPoint - exp2-02_intro.ppt [互換モード] 情報工学実験 II 実験 2 アルゴリズム ( リスト構造とハッシュ ) 実験を始める前に... C 言語を復習しよう 0. プログラム書ける? 1. アドレスとポインタ 2. 構造体 3. 構造体とポインタ 0. プログラム書ける? 講義を聴いているだけで OK? 言語の要素技術を覚えれば OK? 目的のプログラム? 要素技術 データ型 配列 文字列 関数 オブジェクト クラス ポインタ 2 0.

More information

スライド 1

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

Microsoft PowerPoint - kougi7.ppt

Microsoft PowerPoint - kougi7.ppt C プログラミング演習 第 7 回メモリ内でのデータの配置 例題 1. 棒グラフを描く 整数の配列から, その棒グラフを表示する ループの入れ子で, 棒グラフの表示を行う ( 参考 : 第 6 回授業の例題 3) 棒グラフの1 本の棒を画面に表示する機能を持った関数を補助関数として作る #include "stdafx.h" #include void draw_bar( int

More information

プログラミングI第10回

プログラミングI第10回 プログラミング 1 第 10 回 構造体 (3) 応用 リスト操作 この資料にあるサンプルプログラムは /home/course/prog1/public_html/2007/hw/lec/sources/ 下に置いてありますから 各自自分のディレクトリにコピーして コンパイル 実行してみてください Prog1 2007 Lec 101 Programming1 Group 19992007 データ構造

More information

Fundamental MPI 1 概要 MPI とは MPI の基礎 :Hello World 全体データと局所データ グループ通信 (Collective Communication) 1 対 1 通信 (Point-to-Point Communication)

Fundamental MPI 1 概要 MPI とは MPI の基礎 :Hello World 全体データと局所データ グループ通信 (Collective Communication) 1 対 1 通信 (Point-to-Point Communication) MPI 超 入門 (C 言語編 ) 東京大学情報基盤センター FORTRAN 編は以下 http://www.cspp.cc.u-tokyo.ac.jp /ohshima/seminars/t2k201111/ (MPI による並列アプリケーション開発入門 2) Fundamental MPI 1 概要 MPI とは MPI の基礎 :Hello World 全体データと局所データ グループ通信 (Collective

More information

115 9 MPIBNCpack 9.1 BNCpack 1CPU X = , B =

115 9 MPIBNCpack 9.1 BNCpack 1CPU X = , B = 115 9 MPIBNCpack 9.1 BNCpack 1CPU 1 2 3 4 5 25 24 23 22 21 6 7 8 9 10 20 19 18 17 16 X = 11 12 13 14 15, B = 15 14 13 12 11 16 17 18 19 20 10 9 8 7 6 21 22 23 24 25 5 4 3 2 1 C = XB X dmat1 B dmat2 C dmat

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

課題 S1 解説 Fortran 編 中島研吾 東京大学情報基盤センター

課題 S1 解説 Fortran 編 中島研吾 東京大学情報基盤センター 課題 S1 解説 Fortran 編 中島研吾 東京大学情報基盤センター 内容 課題 S1 /a1.0~a1.3, /a2.0~a2.3 から局所ベクトル情報を読み込み, 全体ベクトルのノルム ( x ) を求めるプログラムを作成する (S1-1) file.f,file2.f をそれぞれ参考にする 下記の数値積分の結果を台形公式によって求めるプログラムを作成する

More information

Prog1_10th

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

More information

Microsoft PowerPoint ppt

Microsoft PowerPoint ppt 基礎演習 3 C 言語の基礎 (5) 第 05 回 (20 年 07 月 07 日 ) メモリとポインタの概念 ビットとバイト 計算機内部では データは2 進数で保存している 計算機は メモリにデータを蓄えている bit 1bit 0 もしくは 1 のどちらかを保存 byte 1byte 1bitが8つ集まっている byte が メモリの基本単位として使用される メモリとアドレス メモリは 1byte

More information

Microsoft PowerPoint - 09.pptx

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

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

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

Microsoft PowerPoint - MPIprog-C1.ppt [互換モード] MPI によるプログラミング概要 ( その 1) C 言語編 RIKEN AICS HPC Summer School 2015 中島研吾 ( 東大 情報基盤センター ) 横川三津夫 ( 神戸大 計算科学教育センター ) 1 本 school の目的 並列計算機の使用によって, より大規模で詳細なシミュレーションを高速に実施することが可能になり, 新しい科学の開拓が期待される 並列計算の目的 高速

More information

PowerPoint Presentation

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

More information

バイオプログラミング第 1 榊原康文 佐藤健吾 慶應義塾大学理工学部生命情報学科

バイオプログラミング第 1 榊原康文 佐藤健吾 慶應義塾大学理工学部生命情報学科 バイオプログラミング第 1 榊原康文 佐藤健吾 慶應義塾大学理工学部生命情報学科 ポインタ変数の扱い方 1 ポインタ変数の宣言 int *p; double *q; 2 ポインタ変数へのアドレスの代入 int *p; と宣言した時,p がポインタ変数 int x; と普通に宣言した変数に対して, p = &x; は x のアドレスのポインタ変数 p への代入 ポインタ変数の扱い方 3 間接参照 (

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

(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

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

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

More information

Fundamental MPI 1 概要 MPI とは MPI の基礎 :Hello World 全体データと局所データタ グループ通信 (Collective Communication) 1 対 1 通信 (Point-to-Point Communication)

Fundamental MPI 1 概要 MPI とは MPI の基礎 :Hello World 全体データと局所データタ グループ通信 (Collective Communication) 1 対 1 通信 (Point-to-Point Communication) MPI 超 入門 (C 言語編 ) 東京大学情報基盤センター FOTRAN 編は以下 http://nkl.cc.u-tokyo.ac.jp/seminars/t2kfvm/mpiprogf.pdf tokyo pdf Fundamental MPI 1 概要 MPI とは MPI の基礎 :Hello World 全体データと局所データタ グループ通信 (Collective Communication)

More information

Microsoft PowerPoint - lec10.ppt

Microsoft PowerPoint - lec10.ppt 今日の内容, とポインタの組み合わせ, 例題 1. 住所録例題 2. と関数とは. を扱う関数. 例題 3. のリスト とポインタの組み合わせ 今日の到達目標 自分で を定義する 自分で定義したについて, 配列やポインタを作成する データ型 基本データ型 char 文字 (1 文字 ) int 整数 double 浮動小数など その他のデータ型配列 データの並び ( 文字列も, 文字の並び ) ポインタ

More information

02: 変数と標準入出力

02: 変数と標準入出力 C プログラミング入門 基幹 7 ( 水 5) 12: コマンドライン引数 Linux にログインし 以下の講義ページを開いておくこと http://www-it.sci.waseda.ac.jp/ teachers/w483692/cpr1/ 2016-06-29 1 まとめ : ポインタを使った処理 内容呼び出し元の変数を書き換える文字列を渡す 配列を渡すファイルポインタ複数の値を返す大きな領域を確保する

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

gengo1-12

gengo1-12 外部変数 関数の外で定義される変数を外部変数 ( 大域変数 ) と呼ぶ 外部変数のスコープは広域的 ( プログラム全体 ) 全ての関数で参照可能 int a=10; double x=3.14159; printf( a = %d\n, a); sample(); printf( %f\n, x); void sample(void) printf( %f\n, x); x += 1.0; 外部変数

More information

Microsoft Word - no202.docx

Microsoft Word - no202.docx 1.4 ポインタと配列 ポインタ変数は前回説明したように 値の入っているアドレスを示す変数です では 配列はどの ようにメモリ上に格納されるか調べてみましょう ex07.c /* ポインタと配列の関係 */ int a[3]={1, 2, 3; /* int 型の大きさ 3 の配列として宣言 */ int *i; /* int 型へのポインタとして宣言 */ double x[3] = {1.0,

More information

gengo1-12

gengo1-12 外部変数 関数の外で定義される変数を外部変数 ( 大域変数 ) と呼ぶ 外部変数のスコープは広域的 ( プログラム全体 ) 全ての関数で参照可能 int a=10; double x=3.14159; printf( a = %d\n, a); sample(); printf( %f\n, x); void sample(void) printf( %f\n, x); x += 1.0; 外部変数

More information

講習No.12

講習No.12 前回までの関数のまとめ 関数は main() 関数または他の関数から呼び出されて実行される. 関数を呼び出す側の実引数の値が関数内の仮引数 ( 変数 ) にコピーされる. 関数内で定義した変数は, 関数の外からは用いることができない ( ローカル変数 ). 一般に関数内で仮引数を変化しても, 呼び出し側の変数は変化しない ( 値渡し ). 関数内で求めた値は return 文によって関数値として呼び出し側に戻される.

More information

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

Microsoft PowerPoint - MPIprog-C1.ppt [互換モード] MPI によるプログラミング概要 ( その 1) C 言語編 RIKEN AICS HPC Summer School 2014 中島研吾 ( 東大 情報基盤センター ) 横川三津夫 ( 神戸大 計算科学教育センター ) 1 本 school の目的 並列計算機の使用によって, より大規模で詳細なシミュレーションを高速に実施することが可能になり, 新しい科学の開拓が期待される 並列計算の目的 高速

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

演算増幅器

演算増幅器 構造体 ここまでに char int doulbe などの基本的なデータ型に加えて 同じデータ型が連続している 配列についてのデータ構造について習った これ以外にも もっと複雑なデータ型をユーザが定義 することが可能である それが構造体と呼ばれるもので 異なる型のデータをひとかたまりのデー タとして扱うことができる 異なるデータをまとめて扱いたい時とはどんな場合だろうか 例えば 住民データを管理したい

More information

情報処理Ⅰ演習

情報処理Ⅰ演習 C プログラミング Ⅱ の基礎 アドレス 変数のために用意されたメモリ領域の位置 アドレス 0x1000 0x1001 0x100 0x1003 0x1004 0x100 0x1006 0x1007 0x1008 0x1009 0x100A 0x100B メモリ 整数型の変数を宣言 int ; アドレス 0x1000 0x1001 0x100 0x1003 0x1004 0x100 0x1006 0x1007

More information

02: 変数と標準入出力

02: 変数と標準入出力 C プログラミング入門 基幹 2 ( 月 4) 09: ポインタ 文字列 Linux にログインし 以下の講義ページを開いておくこと http://www-it.sci.waseda.ac.jp/ teachers/w483692/cpr1/ 2014-06-09 1 関数できなかったこと 配列を引数として渡す, 戻り値として返す 文字列を扱う 呼び出し元の変数を直接書き換える 例 : 2 つの変数の値を入れ替える関数

More information

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

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

More information

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

Microsoft PowerPoint - MPIprog-F1.ppt [互換モード] MPI によるプログラミング概要 ( その 1) Fortran 言語編 RIKEN AICS HPC Summer School 2015 中島研吾 ( 東大 情報基盤センター ) 横川三津夫 ( 神戸大 計算科学教育センター ) 1 本 school の目的 並列計算機の使用によって, より大規模で詳細なシミュレーションを高速に実施することが可能になり, 新しい科学の開拓が期待される 並列計算の目的

More information

cp-7. 配列

cp-7. 配列 cp-7. 配列 (C プログラムの書き方を, パソコン演習で学ぶシリーズ ) https://www.kkaneko.jp/cc/adp/index.html 金子邦彦 1 本日の内容 例題 1. 月の日数配列とは. 配列の宣言. 配列の添え字. 例題 2. ベクトルの内積例題 3. 合計点と平均点例題 4. 棒グラフを描く配列と繰り返し計算の関係例題 5. 行列の和 2 次元配列 2 今日の到達目標

More information

Taro-再帰関数Ⅲ(公開版).jtd

Taro-再帰関数Ⅲ(公開版).jtd 0. 目次 1 1. ソート 1 1. 1 挿入ソート 1 1. 2 クイックソート 1 1. 3 マージソート - 1 - 1 1. ソート 1 1. 1 挿入ソート 挿入ソートを再帰関数 isort を用いて書く 整列しているデータ (a[1] から a[n-1] まで ) に a[n] を挿入する操作を繰り返す 再帰的定義 isort(a[1],,a[n]) = insert(isort(a[1],,a[n-1]),a[n])

More information

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

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

More information

02: 変数と標準入出力

02: 変数と標準入出力 C プログラミング入門 基幹 7 ( 水 5) 09: ポインタ 文字列 Linux にログインし 以下の講義ページを開いておくこと http://www-it.sci.waseda.ac.jp/ teachers/w483692/cpr1/ 2016-06-08 1 関数できなかったこと 配列を引数として渡す, 戻り値として返す 文字列を扱う 呼び出し元の変数を直接書き換える 例 : 2 つの変数の値を入れ替える関数

More information

演算増幅器

演算増幅器 ネットワークプログラミングの続き前回はチャットを行うプログラムを作成し ネットワークを利用したプログラミングの基本について学んだ 本日は 前回作成したプログラムを改良していく 具体的には 以下の2つの項目について習っていく ホスト名や IP アドレスの取得の方法 fork() システムコールを使い 子プロセスを作成する方法 チャットプログラムの改良 前回のプログラムを以下のように改良していく 太字部分が変更部分である

More information

プログラミング基礎

プログラミング基礎 C プログラミング Ⅰ 授業ガイダンス C 言語の概要プログラム作成 実行方法 授業内容について 授業目的 C 言語によるプログラミングの基礎を学ぶこと 学習内容 C 言語の基礎的な文法 入出力, 変数, 演算, 条件分岐, 繰り返し, 配列,( 関数 ) C 言語による簡単な計算処理プログラムの開発 到達目標 C 言語の基礎的な文法を理解する 簡単な計算処理プログラムを作成できるようにする 授業ガイダンス

More information

program7app.ppt

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

More information

Microsoft PowerPoint - MPIprog-C [互換モード]

Microsoft PowerPoint - MPIprog-C [互換モード] MPI によるプログラミング概要 課題 S1 S2 出題 C 言語編 2012 年夏季集中講義中島研吾 並列計算プログラミング (616-2057) 先端計算機演習 (616-4009) 1 本授業の理念 より 並列計算機の使用によって, より大規模で詳細なシミュレーションを高速に実施することが可能になり, 新しい科学の開拓が期待される 並列計算の目的 高速 大規模 大規模 の方が 新しい科学 という観点からのウェイトとしては高い

More information

MPI 超 入門 (FORTRAN 編 ) 東京大学情報基盤センター C 言語編は以下 /ohshima/seminars/t2k201111/ (MPI による並列アプリケーション開発入門 2)

MPI 超 入門 (FORTRAN 編 ) 東京大学情報基盤センター C 言語編は以下   /ohshima/seminars/t2k201111/ (MPI による並列アプリケーション開発入門 2) MPI 超 入門 (FORTRAN 編 ) 東京大学情報基盤センター C 言語編は以下 http://www.cspp.cc.u-tokyo.ac.jp /ohshima/seminars/t2k201111/ (MPI による並列アプリケーション開発入門 2) Fundamental MPI 1 概要 MPI とは MPI の基礎 :Hello World 全体データと局所データ グループ通信 (Collective

More information