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

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

86 8 MPIBNCpack 15 : int n, myid, numprocs, i; 16 : double pi, start_x, end_x; 17 : double startwtime = 0.0, endwtime; 18 : int namelen; 19 : char pro

Krylov (b) x k+1 := x k + α k p k (c) r k+1 := r k α k Ap k ( := b Ax k+1 ) (d) β k := r k r k 2 2 (e) : r k 2 / r 0 2 < ε R (f) p k+1 :=

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

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

XMPによる並列化実装2

£Ã¥×¥í¥°¥é¥ß¥ó¥°(2018) - Âè11²ó – ½ÉÂꣲ¤Î²òÀ⡤±é½¬£² –

para02-2.dvi

£Ã¥×¥í¥°¥é¥ß¥ó¥°ÆþÌç (2018) - Â裵²ó ¨¡ À©¸æ¹½Â¤¡§¾ò·ïʬ´ô ¨¡

スライド 1

目 目 用方 用 用 方

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

WinHPC ppt

MPI usage

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

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

chap2.ppt

NUMAの構成

tuat1.dvi

£Ã¥×¥í¥°¥é¥ß¥ó¥°ÆþÌç (2018) - Â裱£²²ó ¡Ý½ÉÂꣲ¤Î²òÀ⡤±é½¬£²¡Ý

MPI

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

[1] #include<stdio.h> main() { printf("hello, world."); return 0; } (G1) int long int float ± ±

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

ex01.dvi

£Ã¥×¥í¥°¥é¥ß¥ó¥°ÆþÌç (2018) - Â裶²ó ¨¡ À©¸æ¹½Â¤¡§·«¤êÊÖ¤· ¨¡

9 8 7 (x-1.0)*(x-1.0) *(x-1.0) (a) f(a) (b) f(a) Figure 1: f(a) a =1.0 (1) a 1.0 f(1.0)

XACC講習会

C 2 / 21 1 y = x 1.1 lagrange.c 1 / Laglange / 2 #include <stdio.h> 3 #include <math.h> 4 int main() 5 { 6 float x[10], y[10]; 7 float xx, pn, p; 8 in

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

XcalableMP入門

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

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

ex14.dvi

comment.dvi

ex01.dvi

Copyright c Tomonori Kouya BNCpack LGPL3

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

joho07-1.ppt

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

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

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

コードのチューニング

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

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

実際の株価データを用いたオプション料の計算

スライド 1

r07.dvi

file"a" file"b" fp = fopen("a", "r"); while(fgets(line, BUFSIZ, fp)) {... fclose(fp); fp = fopen("b", "r"); while(fgets(line, BUFSIZ, fp)) {... fclose

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

j x j j j + 1 l j l j = x j+1 x j, n x n x 1 = n 1 l j j=1 H j j + 1 l j l j E

ohp07.dvi

Microsoft PowerPoint - KHPCSS pptx

II ( ) prog8-1.c s1542h017%./prog8-1 1 => 35 Hiroshi 2 => 23 Koji 3 => 67 Satoshi 4 => 87 Junko 5 => 64 Ichiro 6 => 89 Mari 7 => 73 D

file:///D|/C言語の擬似クラス.txt

Original : Hello World! (0x0xbfab85e0) Copy : Hello World! (0x0x804a050) fgets mstrcpy malloc mstrcpy (main ) mstrcpy malloc free fgets stream 1 ( \n

1.3 ( ) ( ) C


GNU開発ツール

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

1 4 2 EP) (EP) (EP)

untitled

新・明解C言語 実践編

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

/ SCHEDULE /06/07(Tue) / Basic of Programming /06/09(Thu) / Fundamental structures /06/14(Tue) / Memory Management /06/1

r08.dvi

BW BW

joho09.ppt

II 3 yacc (2) 2005 : Yacc 0 ~nakai/ipp2 1 C main main 1 NULL NULL for 2 (a) Yacc 2 (b) 2 3 y

卒 業 研 究 報 告.PDF

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

新版明解C言語 実践編


C

ohp03.dvi

x h = (b a)/n [x i, x i+1 ] = [a+i h, a+ (i + 1) h] A(x i ) A(x i ) = h 2 {f(x i) + f(x i+1 ) = h {f(a + i h) + f(a + (i + 1) h), (2) 2 a b n A(x i )

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

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

‚æ4›ñ

untitled

CM-3G 周辺モジュール拡張技術文書 MS5607センサ(温度、気圧)

lexex.dvi

ohp08.dvi

情報処理演習 II

: CR (0x0d) LF (0x0a) line separator CR Mac LF UNIX CR+LF MS-DOS WINDOWS Japan Advanced Institute of Science and Technology

Minimum C Minimum C Minimum C BNF T okenseq W hite Any D

2004

programmingII2019-v01

PowerPoint プレゼンテーション

1 (bit ) ( ) PC WS CPU IEEE754 standard ( 24bit) ( 53bit)

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

I. Backus-Naur BNF : N N 0 N N N N N N 0, 1 BNF N N 0 11 (parse tree) 11 (1) (2) (3) (4) II. 0(0 101)* (

1.overview

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

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

AutoTuned-RB

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

第7章 有限要素法のプログラミング

2017 p vs. TDGL 4 Metropolis Monte Carlo equation of continuity s( r, t) t + J( r, t) = 0 (79) J s flux (67) J (79) J( r, t) = k δf δs s( r,

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

Transcription:

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) n α 1, α 2,..., α n

150 11 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 n 1 α i1 α i2 α in 1 c 1 = 0 ( 1) n α 1 α 2 α n c 0 = 0 (11.4) n (11.4) (11.3) Newton DKA (Durand-Kerner-Aberth ) 1 1. z (0) i (i = 1, 2,..., n) 2. k = 0, 1, 2,... z (k+1) i := z (k) i q n (z (k) i ) n j=1, j i(z (k) i z (k) j ) (11.5) Aberth z (0) i := c ( n 1 2(i 1)π n + r exp + 1 3 ) n 2n (11.6) r z + c n 1 n r [11] x n c n 2 x n 2 c n 3 x n 3 c 1 x c 0 = 0 (11.7) r 1 [10] Durand Newton Kerner Aberth

11.2. 151 11.2 (11.1) 20 i=1 (x i) = x 20 210x 19 + 20615x 18 1256850x 17 + 53327946x 16 1672280820x 15 + 40171771630x 14 756111184500x 13 + 11310276995381x 12 135585182899530x 11 + 1307535010540395x 10 10142299865511450x 9 + 63030812099294896x 8 311333643161390640x 7 + 1206647803780373360x 6 3599979517947607200x 5 + 8037811822645051776x 4 12870931245150988800x 3 + 13803759753640704000x 2 8752948036761600000x 1 + 2432902008176640000 (11.8) polycoef20.dat DKA dka.c 1 : #include <stdio.h> 2 : #include <stdlib.h> 3 : #include <math.h> 4 : 5 : #include "bnc.h" 6 : 7 : #define MAX_LENGTH 1024 8 : 9 : #define DEG 20 10 : 11 : int main(int argc, char *argv[]) 12 : { 13 : long int i, dtimes; 14 : FILE *dcoef; 15 : 16 : CDArray cdans, cdinit; 17 : DPoly df; 18 : double dabs_eps, drel_eps; 19 : double start, endtime;

152 11 DKA 20 : 21 : /* init */ 22 : dabs_eps = 1.0e-100; 23 : drel_eps = 1.0e-7; 24 : df = init_dpoly(max_length); 25 : 26 : cdans = init_cdarray(deg); 27 : cdinit = init_cdarray(deg); 28 : 29 : /* Input coefficients */ 30 : dcoef = fopen("polycoef20.dat", "r"); 31 : fread_dpolycoef(dcoef, df, DEG); 32 : fclose(dcoef); 33 : 34 : print_dpoly(df); 35 : 36 : /* set Aberth s initial value */ 37 : ddka_init(cdinit, df); 38 : // print_cdarray(cdinit); 39 : 40 : /* DKA method */ 41 : start = get_secv(); 42 : dtimes = ddka(cdans, cdinit, df, 1000, dabs_eps, drel_eps); 43 : endtime = get_secv() - start; 44 : 45 : /* print answer */ 46 : printf("iterative times: %d\n", dtimes); 47 : print_cdarray(cdans); 48 : 49 : /* clear */ 50 : free_dpoly(df); 51 : free_cdarray(cdans); 52 : free_cdarray(cdinit); 53 : 54 : printf("double_dka : %f sec\n", endtime); 55 : 56 : return EXIT_SUCCESS; 57 : } dka-gmp.c 1 : #include <stdio.h> 2 : #include <stdlib.h> 3 : #include <math.h>

11.2. 153 4 : 5 : #define USE_GMP 6 : #define USE_MPFR 7 : #include "bnc.h" 8 : 9 : #define MAX_LENGTH 1024 10 : 11 : #define MPFDEG 20 12 : 13 : int main(int argc, char *argv[]) 14 : { 15 : long int i, mpftimes; 16 : FILE * mpfcoef; 17 : 18 : double start, endtime; 19 : CMPFArray cmpfans, cmpfinit; 20 : MPFPoly mpff; 21 : mpf_t mpfabs_eps, mpfrel_eps; 22 : 23 : #define PREC 128 24 : set_bnc_default_prec(prec); 25 : 26 : /* init */ 27 : mpf_init_set_d(mpfabs_eps, 1.0e-100); 28 : mpf_init_set_d(mpfrel_eps, 1.0e-7); 29 : 30 : mpff = init_mpfpoly(max_length); 31 : cmpfans = init_cmpfarray(mpfdeg); 32 : cmpfinit = init_cmpfarray(mpfdeg); 33 : 34 : cmpfans = init_cmpfarray(mpfdeg); 35 : cmpfinit = init_cmpfarray(mpfdeg); 36 : 37 : 38 : mpfcoef = fopen("polycoef20.dat", "r"); 39 : fread_mpfpolycoef(mpfcoef, mpff, MPFDEG); 40 : fclose(mpfcoef); 41 : 42 : print_mpfpoly(mpff); 43 : 44 : /* set Aberth s initial value */ 45 : mpf_dka_init(cmpfinit, mpff); 46 : // print_cmpfarray(local_cmpfinit); 47 : 48 : /* DKA method */ 49 : start = get_secv();

154 11 DKA 50 : mpftimes = mpf_dka(cmpfans, cmpfinit, mpff, 1000, mpfabs_eps, mpfrel_eps); 51 : endtime = get_secv() - start; 52 : 53 : /* print answer */ 54 : printf("iterative times: %d\n", mpftimes); 55 : print_cmpfarray(cmpfans); 56 : 57 : /* clear */ 58 : free_mpfpoly(mpff); 59 : free_cmpfarray(cmpfans); 60 : free_cmpfarray(cmpfinit); 61 : 62 : printf("mpf_dka(%dbits): %f sec\n", PREC, endtime); 63 : 64 : return EXIT_SUCCESS; 65 : } 11.3 DKA PE (11.5) z ( k + 1) i (i = 1, 2,..., n) Allgather PE mpi-dka.c 1 : #include <stdio.h> 2 : #include <stdlib.h> 3 : #include <math.h> 4 : 5 : #include "mpi.h" 6 : 7 : #include "mpi_bnc.h" 8 : 9 : #define MAX_LENGTH 1024 10 : 11 : #define DEG 20 12 : 13 : int main(int argc, char *argv[]) 14 : { 15 : long int i, dtimes, mpftimes; 16 : FILE * dcoef, * mpfcoef; 17 :

11.3. 155 18 : long int local_dim, dd_dim[mpi_gmp_maxprocs]; 19 : CDArray cdans, cdinit, local_cdans, local_cdinit; 20 : DPoly df; 21 : double dabs_eps, drel_eps; 22 : double startwtime[2], endwtime[2]; 23 : int myrank, num_procs; 24 : 25 : /* for MPI */ 26 : MPI_Init(&argc, &argv); 27 : MPI_Comm_rank(MPI_COMM_WORLD, &myrank); 28 : MPI_Comm_size(MPI_COMM_WORLD, &num_procs); 29 : 30 : /* double */ 31 : 32 : /* init */ 33 : dabs_eps = 1.0e-100; 34 : drel_eps = 1.0e-7; 35 : df = init_dpoly(max_length); 36 : 37 : local_dim = _mpi_divide_dim(dd_dim, DEG, num_procs); 38 : if(myrank == 0) 39 : { 40 : // for(i = 0; i < DEG; i++) 41 : // printf("%d d_dim[%d]: %d\n", local_dim, i, dd_dim[i ]); 42 : } 43 : local_cdans = init_cdarray(local_dim); 44 : local_cdinit = init_cdarray(local_dim); 45 : 46 : cdans = init_cdarray(deg); 47 : cdinit = init_cdarray(deg); 48 : if(myrank == 0) 49 : { 50 : dcoef = fopen("polycoef20.dat", "r"); 51 : fread_dpolycoef(dcoef, df, DEG); 52 : fclose(dcoef); 53 : } 54 : 55 : /* Bcast dpoly */ 56 : _mpi_bcast_dpoly(df, MPI_COMM_WORLD); 57 : if(myrank == 0) 58 : { 59 : printf("rank: %d\n", myrank); 60 : print_dpoly(df); 61 : } 62 :

156 11 DKA 63 : /* set Aberth s initial value */ 64 : _mpi_ddka_init(local_cdinit, df, MPI_COMM_WORLD); 65 : // print_cdarray(local_cdinit); 66 : 67 : /* DKA method */ 68 : if(myrank == 0) startwtime[0] = MPI_Wtime(); 69 : _mpi_ddka(&dtimes, cdans, local_cdans, cdinit, local_cdinit, df, 1000, dabs_eps, drel_eps, MPI_COMM_WORLD); 70 : if(myrank == 0) endwtime[0] = MPI_Wtime(); 71 : 72 : /* print answer */ 73 : if(myrank == 0) printf("iterative times: %d\n", dtimes); 74 : _mpi_collect_cdarray(cdans, dd_dim, local_cdans, MPI_COMM_WOR LD); 75 : if(myrank == 0) print_cdarray(cdans); 76 : 77 : /* clear */ 78 : free_dpoly(df); 79 : free_cdarray(cdans); 80 : free_cdarray(cdinit); 81 : 82 : MPI_Finalize(); 83 : if(myrank == 0) 84 : { 85 : printf("double_dka : %f sec\n", endwtime[0] - startwt ime[0]); 86 : } 87 : 88 : return EXIT_SUCCESS; 89 : } mpi-dka-gmp.c 1 : #include <stdio.h> 2 : #include <stdlib.h> 3 : #include <math.h> 4 : 5 : #include "mpi.h" 6 : 7 : #define USE_GMP 8 : #define USE_MPFR 9 : #include "mpi_bnc.h" 10 : 11 : #define MAX_LENGTH 1024

11.3. 157 12 : 13 : #define DEG 20 14 : 15 : int main(int argc, char *argv[]) 16 : { 17 : long int i, dtimes, mpftimes; 18 : FILE * dcoef, * mpfcoef; 19 : 20 : long int local_dim, dd_dim[mpi_gmp_maxprocs]; 21 : double startwtime[2], endwtime[2]; 22 : CMPFArray cmpfans, cmpfinit, local_cmpfans, local_cmpfinit; 23 : MPFPoly mpff; 24 : mpf_t mpfabs_eps, mpfrel_eps; 25 : int myrank, num_procs; 26 : 27 : /* for MPI */ 28 : MPI_Init(&argc, &argv); 29 : MPI_Comm_rank(MPI_COMM_WORLD, &myrank); 30 : MPI_Comm_size(MPI_COMM_WORLD, &num_procs); 31 : 32 : #define PREC 128 33 : //#define PREC 256 34 : //#define PREC 512 35 : //#define PREC 1024 36 : #define MPFDEG 20 37 : // set_bnc_default_prec(prec); 38 : _mpi_set_bnc_default_prec(prec, MPI_COMM_WORLD); 39 : commit_mpf(&(mpi_mpf), PREC, MPI_COMM_WORLD); 40 : commit_mpi_mpfcmplx(&(mpi_bnc_mpfcmplx), PREC, MPI_COMM_WORLD ); 41 : 42 : /* init */ 43 : mpf_init_set_d(mpfabs_eps, 1.0e-100); 44 : mpf_init_set_d(mpfrel_eps, 1.0e-7); 45 : 46 : mpff = init_mpfpoly(max_length); 47 : cmpfans = init_cmpfarray(mpfdeg); 48 : cmpfinit = init_cmpfarray(mpfdeg); 49 : 50 : local_dim = _mpi_divide_dim(dd_dim, MPFDEG, num_procs); 51 : if(myrank == 0) 52 : { 53 : // for(i = 0; i < num_procs; i++) 54 : // printf("%d d_dim[%d]: %d\n", local_dim, i, dd_dim[i ]); 55 : }

158 11 DKA 56 : local_cmpfans = init_cmpfarray(local_dim); 57 : local_cmpfinit = init_cmpfarray(local_dim); 58 : 59 : cmpfans = init_cmpfarray(mpfdeg); 60 : cmpfinit = init_cmpfarray(mpfdeg); 61 : if(myrank == 0) 62 : { 63 : mpfcoef = fopen("polycoef20.dat", "r"); 64 : fread_mpfpolycoef(mpfcoef, mpff, DEG); 65 : print_mpfpoly(mpff);fflush(stdout); 66 : fclose(mpfcoef); 67 : } 68 : // goto end; 69 : 70 : /* Bcast mpfpoly */ 71 : _mpi_bcast_mpfpoly(mpff, MPI_COMM_WORLD); 72 : if(myrank == 0) 73 : { 74 : printf("rank: %d\n", myrank); 75 : print_mpfpoly(mpff);fflush(stdout); 76 : } 77 : 78 : /* set Aberth s initial value */ 79 : _mpi_mpf_dka_init(local_cmpfinit, mpff, MPI_COMM_WORLD); 80 : // print_cmpfarray(local_cmpfinit); 81 : 82 : /* DKA method */ 83 : if(myrank == 0) startwtime[1] = MPI_Wtime(); 84 : _mpi_mpf_dka(&mpftimes, cmpfans, local_cmpfans, cmpfinit, loc al_cmpfinit, mpff, 1000, mpfabs_eps, mpfrel_eps, MPI_COMM_WORLD); 85 : if(myrank == 0) endwtime[1] = MPI_Wtime(); 86 : 87 : /* print answer */ 88 : if(myrank == 0) printf("iterative times: %d\n", mpftimes); 89 : _mpi_collect_cmpfarray(cmpfans, dd_dim, local_cmpfans, MPI_CO MM_WORLD); 90 : // print_cmpfarray(local_cmpfans); 91 : if(myrank == 0) print_cmpfarray(cmpfans); 92 : 93 : /* clear */ 94 : free_mpfpoly(mpff); 95 : free_cmpfarray(local_cmpfans); 96 : free_cmpfarray(local_cmpfinit); 97 : free_cmpfarray(cmpfans); 98 : free_cmpfarray(cmpfinit);

11.3. 159 99 : 100 : free_mpi_mpfcmplx(&(mpi_bnc_mpfcmplx)); 101 : free_mpf(&(mpi_mpf)); 102 : 103 : end: 104 : MPI_Finalize(); 105 : if(myrank == 0) 106 : { 107 : printf("mpf_dka(%dbits): %f sec\n", PREC, endwtime[1] - s tartwtime[1]); 108 : } 109 : 110 : return EXIT_SUCCESS; 111 : 112 : } 113 : 1. (11.8) 2. 30 i=1 (x i) 3. p(x) 10