並列計算導入.pptx

Similar documents
NUMAの構成

演習準備

about MPI

Microsoft PowerPoint _MPI-01.pptx

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

コードのチューニング

Microsoft PowerPoint - KHPCSS pptx

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

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

スライド 1

120802_MPI.ppt

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

スライド 1

PowerPoint プレゼンテーション

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

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

Total View Debugger 利用の手引 東京工業大学学術国際情報センター version 1.0

Microsoft PowerPoint _MPI-03.pptx

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

MPI usage

演習1: 演習準備

para02-2.dvi

書式に示すように表示したい文字列をダブルクォーテーション (") の間に書けば良い ダブルクォーテーションで囲まれた文字列は 文字列リテラル と呼ばれる プログラム中では以下のように用いる プログラム例 1 printf(" 情報処理基礎 "); printf("c 言語の練習 "); printf

目次 LS-DYNA 利用の手引き 1 1. はじめに 利用できるバージョン 概要 1 2. TSUBAME での利用方法 使用可能な LS-DYNA の実行 4 (1) TSUBAMEにログイン 4 (2) バージョンの切り替え 4 (3) インタラ

並列計算プログラミング超入門

Microsoft Word - appli_SMASH_tutorial_2.docx

PowerPoint プレゼンテーション

appli_HPhi_install

chap2.ppt

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

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

コードのチューニング

nakao

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

コードのチューニング

スライド 1

$ cmake --version $ make --version $ gcc --version 環境が無いあるいはバージョンが古い場合は yum などを用いて導入 最新化を行う 4. 圧縮ファイルを解凍する $ tar xzvf gromacs tar.gz 5. cmake を用

プログラミング実習I

memo

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

OpenFOAM 勉強会 C++ プログラム相談 のご案内 オープン CAE シンポジウム 2012 金田誠 (OpenFOAM 勉強会 for 関東 ) 1

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

Windows 版 SAS 9.3 ライセンス適用の手引き

情報処理概論(第二日目)

Microsoft PowerPoint - 第10回講義(2015年12月22日)-1 .pptx

Fujitsu Standard Tool

Microsoft PowerPoint - 講義10改.pptx

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

テキストファイルの入出力1

ユーティリティ 管理番号 内容 対象バージョン 157 管理情報バッチ登録コマンド (utliupdt) のメッセージ出力に対し リダイレクトまたはパイプを使用すると メッセージが途中までしか出 力されないことがある 267 転送集計コマンド (utllogcnt) でファイル ID とホスト名の組

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

CS-3000/5000 用 LabView ドライバ 取扱説明書 第 1 版 2014/7/28 岩通計測株式会社 1. 使用条件 a. 装置 : 岩通計測製 CS-3000/CS-5000 シリーズ b. 動作確認 PC/OS:IBM PC/AT 互換機 マイクロソフト Windows7 c.p

WebSAM System Navigator JNS isadmin SNMP Trap 連携設定手順書 NEC 2012 年 12 月

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

演習1

Maser - User Operation Manual

Microsoft Word - appli_OpenMX_install.docx

Microsoft PowerPoint - compsys2-06.ppt

電子紊品チェックシステム利用マニュアル

2/15 1. Office365 へのリンク サインインについて 1) ホームページ 在学生の方へ のリンクをクリック 2) 在学生の方へ のページに記載されている Office365( メールシス

インストーラー 管理番号 内容 対象バージョン 230 HULFT がすでにインストールされているパスに対してサイレントインストールを実行すると インストールされていた HULFT の動作環境が不正な状態になる 7.3.0~7.3.1 ユーティリティ 管理番号 内容 対象バージョン 231 管理情報

Microsoft PowerPoint - OpenMP入門.pptx

TFTP serverの実装

PowerPoint プレゼンテーション

電子納品チェックシステム利用マニュアル

演習問題の構成 ディレクトリ構成 MPI/ --practice_1 演習問題 1 --practice_2 演習問題 2 --practice_3 演習問題 3 --practice_4 演習問題 4 --practice_5 演習問題 5 --practice_6 演習問題 6 --sample

Sae x Sae x 1: 1. {x (i) 0 0 }N i=1 (x (i) 0 0 p(x 0) ) 2. = 1,, T a d (a) i (i = 1,, N) I, II I. v (i) II. x (i) 1 = f (x (i) 1 1, v(i) (b) i (i = 1,

RTC_STM32F4 の説明 2013/10/20 STM32F4 内蔵 RTC の日付 時刻の設定および読み込みを行うプログラムです UART2( 非同期シリアル通信ポート 2) を使用して RTC の設定および読み込みを行います 無料の開発ツール Atollic TrueSTUDIO for

OpenCAE-GIFU _pptx

POWER EGG2.0 Ver2.8 スタートアップガイド ~Webデータベース 応用編~

TopSE並行システム はじめに

untitled

Time Server Pro. TS-2910 リリースノート お客様各位 2019/09/13 セイコーソリューションズ株式会社 Time Server Pro.(TS-2910/TS-2912) システムソフトウェアリリースノート Ver2.1.1 V2.2 変更点 Version 2.2 (

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

4th XcalableMP workshop 目的 n XcalableMPのローカルビューモデルであるXMPのCoarray機能を用 いて Fiberミニアプリ集への実装と評価を行う PGAS(Pertitioned Global Address Space)言語であるCoarrayのベ ンチマ

スパコンに通じる並列プログラミングの基礎

2006年10月5日(木)実施

ヘルスアップWeb 簡単操作ガイド

目次 はじめに 4 概要 4 背景 4 対象 5 スケジュール 5 目標点 6 使用機材 6 第 1 章 C# 言語 7 C# 言語の歴史 7 基本構文 8 C 言語との違い 9 Java 言語との違い 10.Netフレームワーク 10 開発資料 10 第 2 章 Mono 11 Monoの歴史 1

Microsoft Word - Scratch編_プログラム見本-Web用.docx

スパコンに通じる並列プログラミングの基礎

ガイダンス

< 中略 > 24 0 NNE 次に 指定した日時の時間降水量と気温を 観測地点の一覧表に載っているすべての地点について出力するプログラムを作成してみます 観測地点の一覧表は index.txt というファイルで与えられています このファイルを読みこむためのサブルーチンが AMD

Microsoft Word _001b_hecmw_PC_cluster_201_howtodevelop.doc

目次 1. はじめに 本書対象者 PALRO のアプリケーションについて Ubuntu 8.04LTS の入手について Linux 上での開発環境の構築 事前準備 Ubuntu のインストール..

Micro Focus Enterprise Developer チュートリアル メインフレーム COBOL 開発 : MQ メッセージ連携 1. 目的 本チュートリアルでは CICS から入力したメッセージを MQ へ連携する方法の習得を目的としています 2. 前提 使用した OS : Red H

ヘルスアップWeb 簡単操作ガイド

Source Insight

東北大学金属材料研究所 並列計算 インフォマティクスサーバ マニュアル 2019 年 10 月 3 日 東北大学金属材料研究所計算材料学センター

Viewgo波形の連続格納ソフト

受付代行 設定マニュアル このマニュアルでは 恵比寿ボイスプロダクションが Google アシスタントアプリで公開している 受付代行 ( ) を使って Google

2 /83

PowerPoint Presentation

C#の基本

スパコンに通じる並列プログラミングの基礎

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

内容に関するご質問は まで お願いします [Oakforest-PACS(OFP) 編 ] 第 85 回お試しアカウント付き並列プログラミング講習会 ライブラリ利用 : 科学技術計算の効率化入門 スパコンへのログイン テストプログラム起動 東京大学情報基盤セ

マニュアル訂正連絡票

Microsoft Word - ユーザ向け利用の手引き_v0.3.doc

Transcription:

並列計算の基礎 MPI を用いた並列計算

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

通常のプログラム ( 非並列 ) 通常のプログラミングは非並列 一つの問題を一つの計算装置 (ore) で計算 計算装置 (4 ores) 計算 : F = 400 i i=1 ore 0 ore 1 ore 2 ore 3 時間 F = 400 i i=1 i=1 400 の計算 何もしていない

並列プログラム 一つの問題を一つの計算装置 (ore) で計算 ore0 : i=1 100, ore1: 101 200, ore2: 201 300, ore3: 301 400 F 0 = 100 i i=1 F 1 = 最後に, F = F 0 + F 1 + F 2 + F 3 200 300 i F 2 = i i=101 i=201 ore 0 ore 1 ore 2 ore 3 400 F 3 = i i=301 4ores を使用した場合 使用した ore 数 ( 並列数 ) に比例して計算を高速化 非並列計算の時間 F 0 = 100 i 400 i=1 i F = 200 F 1 = 合算 i=1 i i=101 300 i=1 400 F = F 0 + F 1 + F 2 + F 3 F 2 の計算 = i i=201 F 1 F 2 データを転送 F 3 F 3 = 400 i i=301 データ転送など並列計算に伴う, 計算以外の処理に時間が必要 並列数に比例することはない

並列プログラムの実現方法 言語,FORTRN 言語で並列計算を実現するライブラリを使用して拡張する. ライブラリ 付加的な幾つかの関数等を予め用意したパッケージ 代表的な並列プログラミング環境 OpenMP 非並列プログラム中に幾つかの文を書き加えるのみ. ネットワークで結合された並列計算は出来ない. (1 台の P, コンピュータ上でのみ OK) MPI (Message Passing Interface) PVM (Parallel Virtual Machine) ネットワーク結合環境でも OK

ネットワーク結合環境 計算機クラスター, P クラスター 複数の計算機,P( ノード ) をネットワークでつなげる TSUME2.0 1407 6 9,000ores 1407 ノード PU0 Xeon X5670 12ores PU1 Node 0 Node 1 Node 2 Node 3 Node 4 Infini and(gb Ether でも OK)

MPI (Message Passing Interface) ライブラリ 並列計算に必要な関数の種類と仕様を規定したもの ( 設計書 ) 現在の最新仕様 :MPI 2.0 実際のライブラリは, ベンダーや各種団体にて実装されている. 無料のライブラリが幾つか開発されており, 定評がある. 代表 Open MPI : hwp://www.open-mpi.org MPIH : hwp://www.mpich.org 何れのライブラリを使用しても, 関数は MPI 仕様書に従った形をしており, MPI を使用したプログラムは何れのライブラリをインストールしているかに関係無く実行可能となる.

MPI で使用する代表的な関数 基本的なプログラミングは 6 関数で実現可能! MPI 計算の管理に関するもの MPI_INIT MPI_FINLIZE MPI_OMM_SIZE MPI_OMM_RNK データの通信 ( 受け渡し ) に関するもの MPI_SEND MPI_REV

プログラミングの実際 基本スタンス :SPMD (Single Program, Mulaple Data) 同一のプログラムが異なる計算装置 (ore) 上で複数実行される. ore0 上の は別の場所にあるので,ore1 から直接参照することは出来ない (MPI_REV, MPI_SEND などの通信関数を使用する ) ore0 ore1 ore2 ore3 RNK=0 RNK=1 RNK=2 RNK=3 通信で持ってくる それぞれが, N のデータを持つ. 読込んで実行 REL*8 INTEGER N.. MPI で書かれたプログラム 各プログラムは RNK と呼ばれる番号 (0,1,2,3, ) が付けられ 他と区別される

プログラム例 処理 : F=1/2+1/3+1/4 を行い, 出力するプログラム REL*8,, REL*8 F 非並列 =1.0/2.0 =1.0/3.0 =1.0/4.0 F=++ WRITE(*,*) F END

MPI を用いた並列プログラム INLUDE mpif.h INTEGER ierr INTEGER istat INTEGER rank INTEGER total_process REL*8,, REL*8 F LL MPI_INIT(ierr) LL MPI_OMM_SIZE(MPI_OMM_WORLD, total_process, ierr) LL MPI_OMM_RNK(MPI_OMM_WORLD, rank, ierr) rank=0 rank=1 rank=2 =1/2 =1/3 =1/4 IF(rank.eq. 0) =1.0/2.0 IF(rank.eq. 1) =1.0/3.0 IF(rank.eq. 2) =1.0/4.0 IF(rank.eq. 1) THEN LL MPI_SEND(, 1, MPI_DOULE_PREISION, 0, 10, MPI_OMM_WORLD, ierr) LL MPI_REV(, 1, MPI_DOULE_PREISION, 1, 10, MPI_OMM_WORLD, istat, ierr) =1/2 を転送 を転送 IF(rank.eq. 2) THEN LL MPI_SEND(, 1, MPI_DOULE_PREISION, 0, 20, MPI_OMM_WORLD, ierr) LL MPI_REV(, 1, MPI_DOULE_PREISION, 2, 20, MPI_OMM_WORLD, istat, ierr) F=++ F=++ WRITE(*,*) F WRITE F LL MPI_FINLIZE(ierr) END

MPI を用いた並列プログラム INLUDE mpif.h INTEGER ierr INTEGER istat INTEGER rank INTEGER total_process REL*8,, REL*8 F LL MPI_INIT(ierr) LL MPI_OMM_SIZE(MPI_OMM_WORLD, total_process, ierr) LL MPI_OMM_RNK(MPI_OMM_WORLD, rank, ierr) IF(rank.eq. 0) =1.0/2.0 IF(rank.eq. 1) =1.0/3.0 IF(rank.eq. 2) =1.0/4.0 IF(rank.eq. 1) THEN LL MPI_SEND(, 1, MPI_DOULE_PREISION, 0, 10, MPI_OMM_WORLD, ierr) LL MPI_REV(, 1, MPI_DOULE_PREISION, 1, 10, MPI_OMM_WORLD, istat, ierr) IF(rank.eq. 2) THEN LL MPI_SEND(, 1, MPI_DOULE_PREISION, 0, 20, MPI_OMM_WORLD, ierr) LL MPI_REV(, 1, MPI_DOULE_PREISION, 2, 20, MPI_OMM_WORLD, istat, ierr) F=++ WRITE(*,*) F LL MPI_FINLIZE(ierr) END MPI の関数を使用する場合に必要なおまじない. (MPI_... 関数の定義が mpif.h というファイルに書かれている )

MPI を用いた並列プログラム INLUDE mpif.h INTEGER ierr INTEGER istat INTEGER rank INTEGER total_process REL*8,, REL*8 F LL MPI_INIT(ierr) LL MPI_OMM_SIZE(MPI_OMM_WORLD, total_process, ierr) LL MPI_OMM_RNK(MPI_OMM_WORLD, rank, ierr) IF(rank.eq. 0) =1.0/2.0 IF(rank.eq. 1) =1.0/3.0 IF(rank.eq. 2) =1.0/4.0 IF(rank.eq. 1) THEN LL MPI_SEND(, 1, MPI_DOULE_PREISION, 0, 10, MPI_OMM_WORLD, ierr) LL MPI_REV(, 1, MPI_DOULE_PREISION, 1, 10, MPI_OMM_WORLD, istat, ierr) IF(rank.eq. 2) THEN LL MPI_SEND(, 1, MPI_DOULE_PREISION, 0, 20, MPI_OMM_WORLD, ierr) LL MPI_REV(, 1, MPI_DOULE_PREISION, 2, 20, MPI_OMM_WORLD, istat, ierr) F=++ WRITE(*,*) F LL MPI_FINLIZE(ierr) END MPI の関数を使用する場合に必要なおまじない. ( 他の MPI_... 関数を使用する前に, 必ず書くこと ) 書式 MPI_INIT( integer ierr) ierr : Integer 型の変数, 正しく実行されたのかを判定する値が代入される.

MPI を用いた並列プログラム INLUDE mpif.h INTEGER ierr INTEGER istat INTEGER rank INTEGER total_process REL*8,, REL*8 F total_process=3 LL MPI_INIT(ierr) LL MPI_OMM_SIZE(MPI_OMM_WORLD, total_process, ierr) LL MPI_OMM_RNK(MPI_OMM_WORLD, rank, ierr) IF(rank.eq. 0) =1.0/2.0 IF(rank.eq. 1) =1.0/3.0 IF(rank.eq. 2) =1.0/4.0 IF(rank.eq. 1) THEN LL MPI_SEND(, 1, MPI_DOULE_PREISION, 0, 10, MPI_OMM_WORLD, ierr) LL MPI_REV(, 1, MPI_DOULE_PREISION, 1, 10, MPI_OMM_WORLD, istat, ierr) IF(rank.eq. 2) THEN LL MPI_SEND(, 1, MPI_DOULE_PREISION, 0, 20, MPI_OMM_WORLD, ierr) LL MPI_REV(, 1, MPI_DOULE_PREISION, 2, 20, MPI_OMM_WORLD, istat, ierr) F=++ WRITE(*,*) F LL MPI_FINLIZE(ierr) END 並列計算のプロセス (rank) の総数を取得 ( プログラムの起動時に使用するプロセスを変更できる ) MPI_OMM_SIZE(MPI_OMM_WORLD, total_process, ierr) MPI_OMM_WORLD : おまじない INTEGER total_process : ランクの総数 ( 例では 3 が代入 ) INTEGER ierr : 正しく実行できたかのフラグ

MPI を用いた並列プログラム INLUDE mpif.h INTEGER ierr INTEGER istat INTEGER rank INTEGER total_process REL*8,, REL*8 F total_process=3 rank=0 rank=1 rank=2 LL MPI_INIT(ierr) LL MPI_OMM_SIZE(MPI_OMM_WORLD, total_process, ierr) LL MPI_OMM_RNK(MPI_OMM_WORLD, rank, ierr) IF(rank.eq. 0) =1.0/2.0 IF(rank.eq. 1) =1.0/3.0 IF(rank.eq. 2) =1.0/4.0 IF(rank.eq. 1) THEN LL MPI_SEND(, 1, MPI_DOULE_PREISION, 0, 10, MPI_OMM_WORLD, ierr) LL MPI_REV(, 1, MPI_DOULE_PREISION, 1, 10, MPI_OMM_WORLD, istat, ierr) IF(rank.eq. 2) THEN LL MPI_SEND(, 1, MPI_DOULE_PREISION, 0, 20, MPI_OMM_WORLD, ierr) LL MPI_REV(, 1, MPI_DOULE_PREISION, 2, 20, MPI_OMM_WORLD, istat, ierr) F=++ WRITE(*,*) F LL MPI_FINLIZE(ierr) END プロセス自身のrank 数を取得 (0 total_process-1 番まで個々のプロセスに番号がつく ) MPI_OMM_RNK(MPI_OMM_WORLD, rank, ierr) MPI_OMM_WORLD : おまじない INTEGER rank : 自身のランク数が代入される INTEGER ierr : 正しく実行できたかのフラグ

MPI を用いた並列プログラム INLUDE mpif.h INTEGER ierr INTEGER istat INTEGER rank INTEGER total_process REL*8,, REL*8 F LL MPI_INIT(ierr) LL MPI_OMM_SIZE(MPI_OMM_WORLD, total_process, ierr) LL MPI_OMM_RNK(MPI_OMM_WORLD, rank, ierr) rank=0 rank=1 rank=2 =1/2 =1/3 =1/4 IF(rank.eq. 0) =1.0/2.0 IF(rank.eq. 1) =1.0/3.0 IF(rank.eq. 2) =1.0/4.0 IF(rank.eq. 1) THEN LL MPI_SEND(, 1, MPI_DOULE_PREISION, 0, 10, MPI_OMM_WORLD, ierr) Rank=0: の計算 LL MPI_REV(, 1, MPI_DOULE_PREISION, 1, 10, MPI_OMM_WORLD, istat, ierr) IF(rank.eq. 2) THEN LL MPI_SEND(, 1, MPI_DOULE_PREISION, 0, 20, MPI_OMM_WORLD, ierr) LL MPI_REV(, 1, MPI_DOULE_PREISION, 2, 20, MPI_OMM_WORLD, istat, ierr) F=++ WRITE(*,*) F LL MPI_FINLIZE(ierr) END 自身のランク (rank) 数に応じて, 動作を切り替える. Rank=1: の計算 Rank=2: の計算

MPI を用いた並列プログラム INLUDE mpif.h INTEGER ierr INTEGER istat INTEGER rank INTEGER total_process REL*8,, REL*8 F LL MPI_INIT(ierr) LL MPI_OMM_SIZE(MPI_OMM_WORLD, total_process, ierr) LL MPI_OMM_RNK(MPI_OMM_WORLD, rank, ierr) rank=0 rank=1 rank=2 =1/2 =1/3 =1/4 IF(rank.eq. 0) =1.0/2.0 IF(rank.eq. 1) =1.0/3.0 IF(rank.eq. 2) =1.0/4.0 IF(rank.eq. 1) THEN LL MPI_SEND(, 1, MPI_DOULE_PREISION, 0, 10, MPI_OMM_WORLD, ierr) を rank=1 から rank=0 へ転送 LL MPI_REV(, 1, MPI_DOULE_PREISION, 1, 10, MPI_OMM_WORLD, istat, ierr) =1/2 を転送 を転送 IF(rank.eq. 2) THEN LL MPI_SEND(, 1, MPI_DOULE_PREISION, 0, 20, MPI_OMM_WORLD, ierr) をrank=2からrank=0へ転送 LL MPI_REV(, 1, MPI_DOULE_PREISION, 2, 20, MPI_OMM_WORLD, istat, ierr) F=++ WRITE(*,*) F LL MPI_FINLIZE(ierr) END

を rank=1 から rank=0 へ転送 rank=0 rank=1 MPI でのデータの転送の基本 : 送信 (Send) & 受信 (Recv) の組み合わせ 送信側 (rank=1) では, 宛先 (rank=0) と通信を区別する タグ を付けて相手に送る. =1/3 rank=0 に向けて tag=10 の通信 IF(rank.eq. 1) THEN LL MPI_SEND(, 1, MPI_DOULE_PREISION, 0, 10, MPI_OMM_WORLD, ierr) MPI_SEND( SentValue, SizeOfValue, MPI_DT_TYPE, Dest, Tag, MPI_OMM_WORLD, ierr) SentValue : 送信される変数 ( ) SizeOfValue : 送信する変数の大きさ ( 今は 1 ) MPI_DT_TYPE : 送信する変数の型 (MPI_DOULE_PREISION, MPI_INTEGER, ) Dest : 送信先の rank 数 Tag : タグ ( 任意の整数 ) MPI_OMM_WORLD : おまじない ierr : エラー識別用

を rank=1 から rank=0 へ転送 rank=0 rank=1 MPIでのデータの転送の基本 : 送信 (Send) & 受信 (Recv) の組み合わせ rank=1からの, tag=10のみ受信受信側 (rank=0) では, 送信元 (rank=1) と通信を区別する タグ によって受信するメッセージを選択. =1/3 rank=0 に向けて tag=10 の通信 LL MPI_REV(, 1, MPI_DOULE_PREISION, 1, 10, MPI_OMM_WORLD, istat, ierr) MPI_REV( RecvValue, SizeOfValue, MPI_DT_TYPE, Dept, Tag, MPI_OMM_WORLD, istat, ierr) RecvValue : 受信結果を格納する変数 ( ) SizeOfValue : 格納する変数の大きさ ( 今は 1 ) MPI_DT_TYPE : 変数の型 (MPI_DOULE_PREISION, MPI_INTEGER, ) Dept : 送信元の rank 数 Tag : タグ ( 任意の整数 ) MPI_OMM_WORLD : おまじない istat : 受信が完了したかなどの情報 ( おまじない ) ierr : エラー識別用

MPI を用いた並列プログラム INLUDE mpif.h INTEGER ierr INTEGER istat INTEGER rank INTEGER total_process REL*8,, REL*8 F LL MPI_INIT(ierr) LL MPI_OMM_SIZE(MPI_OMM_WORLD, total_process, ierr) LL MPI_OMM_RNK(MPI_OMM_WORLD, rank, ierr) rank=0 rank=1 rank=2 =1/2 =1/3 =1/4 IF(rank.eq. 0) =1.0/2.0 IF(rank.eq. 1) =1.0/3.0 IF(rank.eq. 2) =1.0/4.0 IF(rank.eq. 1) THEN LL MPI_SEND(, 1, MPI_DOULE_PREISION, 0, 10, MPI_OMM_WORLD, ierr) LL MPI_REV(, 1, MPI_DOULE_PREISION, 1, 10, MPI_OMM_WORLD, istat, ierr) rank=0 のプロセスでのみ, IF(rank.eq. 2) THEN LL MPI_SEND(, F=++ 1, MPI_DOULE_PREISION, を計算して 0, 20,, MPI_OMM_WORLD, 出力する ierr) LL MPI_REV(, 1, MPI_DOULE_PREISION, 2, 20, MPI_OMM_WORLD, istat, ierr) =1/2 F=++ を転送 を転送 F=++ WRITE(*,*) F WRITE F LL MPI_FINLIZE(ierr) END

MPI を用いた並列プログラム INLUDE mpif.h INTEGER ierr INTEGER istat INTEGER rank INTEGER total_process REL*8,, REL*8 F LL MPI_INIT(ierr) LL MPI_OMM_SIZE(MPI_OMM_WORLD, total_process, ierr) LL MPI_OMM_RNK(MPI_OMM_WORLD, rank, ierr) rank=0 rank=1 rank=2 =1/2 =1/3 =1/4 IF(rank.eq. 0) =1.0/2.0 IF(rank.eq. 1) =1.0/3.0 IF(rank.eq. 2) =1.0/4.0 IF(rank.eq. 1) THEN LL MPI_SEND(, 1, MPI_DOULE_PREISION, 0, 10, MPI_OMM_WORLD, ierr) LL MPI_REV(, 1, MPI_DOULE_PREISION, 1, 10, MPI_OMM_WORLD, istat, ierr) MPI を使用した場合には, 必ず =1/2 を転送 を転送 IF(rank.eq. 2) THEN LL MPI_SEND(, 1, MPI_DOULE_PREISION, 0, 20, MPI_OMM_WORLD, ierr) MPI_FINLIZE(ierr) LL MPI_REV(, 1, MPI_DOULE_PREISION, 2, 20, MPI_OMM_WORLD, istat, ierr) を書くこと. F=++ F=++ WRITE(*,*) F WRITE F LL MPI_FINLIZE(ierr) END

MPI を使用したプログラムのコンパイル方法 gfortran や gcc に代えて, > mpif90 -o run sample.f > mpicc -o run sample.c などの用に, mpif90 や mpicc を用いる

MPI を使用したプログラムの実行方法 MPI を使用したプログラムの実行は, 以下のように行う. > mpirun -np 総ランク数 実行するプログラム 例えば run というプログラムを,3 個の総ランク数で実行する場合には, > mpirun -np 3 run となる

プログラムの実行に要した時間の測定方法 プログラムの実行に費やした時間は, 以下のように ame コマンドで計測できる > ame -p プログラム 結果は, real, user, sys の 3 種類が出力されるが, real の値が実際に経過した 秒数 である. 例えば run というプログラムを,3 個の総ランク数で実行する場合の経過秒を計測する場合には, > ame -p mpirun -np 3 run となる

TSUME の利用方法 TSUME へはネットワーク越しにログインして利用する. ターミナル を起動して, > ssh username@login-t2.g.gsic.atech.ac.jp と打ち込む (username は各自の教育システムへのログイン名 ) パスワー認証ののち,TSUME へログイン完了となる