C

Similar documents
double float

r07.dvi

ohp07.dvi

新版明解C言語 実践編

A/B (2018/10/19) Ver kurino/2018/soft/soft.html A/B

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

01_OpenMP_osx.indd

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

02_C-C++_osx.indd

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

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

1 4 2 EP) (EP) (EP)

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

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

橡Pro 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

mstrcpy char *mstrcpy(const char *src); mstrcpy malloc (main free ) stdio.h fgets char *fgets(char *s, int size, FILE *stream); s size ( )

超初心者用

2008 ( 13 ) C LAPACK 2008 ( 13 )C LAPACK p. 1

卒 業 研 究 報 告.PDF

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

tuat1.dvi

1.ppt

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

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)

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

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

ex01.dvi

joho07-1.ppt

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

untitled

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


導入基礎演習.ppt

lexex.dvi

yacc.dvi

[ 1] 1 Hello World!! 1 #include <s t d i o. h> 2 3 int main ( ) { 4 5 p r i n t f ( H e l l o World!! \ n ) ; 6 7 return 0 ; 8 } 1:

18 C ( ) hello world.c 1 #include <stdio.h> 2 3 main() 4 { 5 printf("hello World\n"); 6 } [ ] [ ] #include <stdio.h> % cc hello_world.c %./a.o

Microsoft PowerPoint - OpenMP入門.pptx

新・明解C言語 実践編

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

(1/2) 2/45 HPC top runner application programmer PC-9801F N88-BASIC Quick BASIC + DOS ( ) BCB Windows Percolation, Event-driven MD ActionScript Flash

kiso2-06.key

pptx

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

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

6 6.1 sound_wav_files flu00.wav.wav 44.1 khz 1/44100 spwave Text with Time spwave t T = N t N 44.1 khz t = 1 sec j t f j {f 0, f 1, f 2,, f N 1

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)* (

program.dvi

comment.dvi

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

Condition DAQ condition condition 2 3 XML key value

p = 1, 2, cos 2n + p)πj = cos 2nπj 2n + p)πj, sin = sin 2nπj 7.1) f j = a ) 0 + a p + a n+p cos 2nπj p=1 p=0 1 + ) b n+p p=0 sin 2nπj 1 2 a 0 +

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

XMPによる並列化実装2

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

I 2 tutimura/ I 2 p.1/??

slide5.pptx

プログラミング及び演習 第1回 講義概容・実行制御

新・明解C言語 ポインタ完全攻略

joho09.ppt

273? C

ex01.dvi

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

debug ( ) 1) ( ) 2) ( ) assert, printf ( ) Japan Advanced Institute of Science and Technology

num2.dvi

r08.dvi

( CUDA CUDA CUDA CUDA ( NVIDIA CUDA I

BW BW

ex14.dvi

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

ohp08.dvi


WinHPC ppt

USB ID TA DUET 24:00 DUET XXX -YY.c ( ) XXX -YY.txt() XXX ID 3 YY ID 5 () #define StudentID 231

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

untitled

enshu5_4.key

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

数値計算

コンピュータ概論

( ) ( ) 30 ( ) 27 [1] p LIFO(last in first out, ) (push) (pup) 1

Cプログラミング1(再) 第2回

AutoTuned-RB

ex12.dvi

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

DOPRI5.dvi

untitled

2 1. Ubuntu 1.1 OS OS OS ( OS ) OS ( OS ) VMware Player VMware Player jp/download/player/ URL VMware Plaeyr VMware

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

エラー処理・分割コンパイル・コマンドライン引数

kiso2-03.key

1) OOP 2) ( ) 3.2) printf Number3-2.cpp #include <stdio.h> class Number Number(); // ~Number(); // void setnumber(float n); float getnumber();

分割コンパイル (2018 年度 ) 担当 : 笹倉 佐藤 分割コンパイルとは 一つのプログラムのソースを複数のソースファイルに分けてコンパイルすること ある程度大きなプログラムの場合ソースファイルをいくつかに分割して開発するのが普通 1

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

Microsoft Word - openmp-txt.doc

Intel® Compilers Professional Editions

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 )

untitled

Python C/C++ IPMU IRAF

Transcription:

C

1 2 1.1........................... 2 1.2........................ 2 1.3 make................................................ 3 1.4....................................... 5 1.4.1 strip................................................ 5 1.4.2......................................... 6 1.4.3..................................... 7 1.4.4.......................................... 8 2 C 10 2.1................................................ 10 2.1.1 printf.......................... 10 2.1.2.................................. 12 2.2.................................................. 12 2.2.1 OpenMP............................................. 12 i

Unix OS Linux Ubuntu Ubuntu Unix OS 1

1 C Unix OS gcc gcc 1.1 (test01.c) printf("hello World!\n"); (# ) # gcc -o test01.out test01.c -o test01.out test01.out #./test01.out Hello World! sin cos (test02.c) #include <math.h> printf("cos(pi) = %lf\n", cos(m_pi)); (# ) # gcc -o test02.out test02.c -lm math.h -lm #./test02.out cos(pi) = -1.000000 1.2 (test02a.c, test02b.c) extern double func(double x); 2

double y; y = func(2.0); printf("y = %lf\n", y); extern double func(double x) return x*x; # gcc -o test03.out test03a.c test03b.c #./test03.out y = 4.000000 # gcc -c test03a.c # gcc -c test03b.c # gcc -o test03.out test03a.o test03b.o -c test03a.o test03b.o test03.out test03b.c #include <math.h> extern double func(double x) return sin(x); (test03a.c ) # gcc -c test03b.c # gcc -o test03.out test03a.o test03b.o -lm sin -lm 1.3 make 2 3

make Makefile Makefile ( Makefile ) PROG = test03.out SRCS = test03a.c test03b.c OBJS = $(SRCS:.c=.o) CC = gcc CFLAGS = -O3 LIBS = -lm all: $(PROG) $(PROG) : $(OBJS) $(CC) $(CFLAGS) -o $@ $(OBJS) $(LIBS) clean : /bin/rm $(PROG) $(OBJS) (Makefile) # make gcc -O3 -c -o test03a.o test03a.c gcc -O3 -c -o test03b.o test03b.c gcc -O3 -o test03.out test03a.o test03b.o -lm make Makefile = : make all : make ( ) all $(PROG) test03.out ( ) test03.out $(OBJS) test03a.o test03b.o test03a.o test03b.o test03a.c test03b.c make 1. test03.out test03a.o test03b.o 2. test03a.o test03a.c test03b.c test03b.o 3. 4. test03a.o test03a.c test03a.c test03a.o 5. test03b.o test03b.c test03b.c test03b.o 6. test03.out test03a.o, test03b.o test03.out 1 test03.out Makefile clean make clean clean (test03a.o, test03b.o) (test03.out) 4

# make clean /bin/rm test03.out test03a.o test03b.o Makefile OBJS = $(SRCS:.c=.o) $(SRCS).c.o test03a.o test03b.o Makefile CFLAGS = -O3 CFLAGS gcc (make ) CFLAGS CC CC $(CC) $(CFLAGS) -o $@ $(OBJS) $(LIBS) $@ $(PROG) test03.out make make make Makefile makefile makefile Makefile makefile Makefile Makefile.FreeBSD, Makefile.Linux Makefile make -f Makefile.FreeBSD 1.4 1.4.1 strip strip # ls -l test03.out -rwxr-xr-x 1 tsuji tsuji 8673 # strip test03.out # ls -l test03.out -rwxr-xr-x 1 tsuji tsuji 6288 8 20 21:55 test03.out* 8 20 22:52 test03.out* strip... (*.o)... 5

1.4.2 test05a.c test05b.c test05c.c 3 #include <test05.h> if (argv[1][0] == A ) funca(); else funcb(); extern int funca() printf("function A is used\n"); extern int funcb() printf("function B is used\n"); test05.h extern int funca(); extern int funcb(); # gcc -c test05b.c # gcc -c test05c.c # ar r libtest05bc.a test05b.o test05c.o ar: libtest05bc.a gcc -c ar libtest05bc.a # ar t libtest05bc.a test05b.o test05c.o # gcc -I. -L. -o test05 test05a.c -ltest05bc 6

-I (test05.h). -L (libtest05.a). lib.a -l (lib -l.a ) #./test05.out A Function A is used #./test05.out B Function B is used A funca B funcb 1.4.3 (test05a.o test05b.o test05c.o) (libtest05.a) # rm test05?.o libtest05bc.a #./test05.out A Function A is used #./test05.out B Function B is used test05a.c test05b.c test05c.c test05.h # gcc -shared -fpic -o libtest05b.so test05b.c # gcc -shared -fpic -o libtest05c.so test05c.c # gcc -I. -L. -o test05.out test05a.c -ltest05b -ltest05c (csh ) # setenv LD_LIBRARY_PATH. #./test05.out A Function A is used #./test05.out B Function B is used 1 libtest05c.so # rm libtest05c.so #./test05.out A./test05.out: error while loading shared libraries: libtest05c.so: cannot open shared object file: N 7

#./test05.out B./test05.out: error while loading shared libraries: libtest05c.so: cannot open shared object file: N./test05.out A libtest05c.so funcb./test05.out B funcb # gcc -shared -fpic -o libtest05bc.so test05b.c test05c.c # gcc -I. -L. -o test05.out test05a.c -ltest05bc libtest05bc.a libtest05bc.so libtest05bc.so -static # gcc -I. -L. -static -o test05.out test05a.c -ltest05bc 1.4.4 Unix OS gdb -g make CFLAGS = -g gcc -g (test05.c) ( ) int i, n = 1000; int a[5]; a[0] = 0; for (i = 0; i < n; i++) a[i] = a[i-1]+i; printf("%d\n", a[n-1]); # gcc -g -o test05.out test05.c -lm # gdb test05.out (gdb) r (r run ) (gdb) r Starting program: /home/tsuji/here/lab/test05.out 8

Program received signal SIGSEGV, Segmentation fault. 0x0000000000400569 in main (argc=1, argv=0x7fffffffe438) at test05.c:10 10 a[i] = a[i-1]+i; (gdb) test05.c 10 i print i 820 5 a[ ] (gdb) print i $1 = 820 i = 5 quit (gdb) quit 9

2 C 2.1 2.1.1 printf // test10a.c #include <math.h> printf("pi = %10.5lf\n", M_PI); 10 5 4 = 1+3 = 4 #./test10a.out pi = 3.14159 // test10b.c #include <math.h> int n1 = atoi(argv[1]); int n2 = atoi(argv[2]); char format[256]; sprintf(format, "pi = %%%d.%dlf\n", n1+n2+1, n2); printf(format, M_PI); %%d % %% 1 2 #./test10b.out 1 8 pi = 3.14159265 #./test10b.out 1 12 pi = 3.141592653590 // test10c.c #include <math.h> int i, n = 10; FILE *fp; 10

char f_name[256]; for (i = 0; i <= n; i++) sprintf(f_name, "a%d.data", i); fp = fopen(f_name, "w"); fprintf(fp, "%d\n", i); fclose(fp); # ls a0.data a10.data a3.data a5.data a7.data a9.data a1.data a2.data a4.data a6.data a8.data a1.data a10.data a00.data, a01.data, a10.data ls // test10d.c #include <math.h> #include <string.h> int i, n = atoi(argv[1]), k; FILE *fp; char f_name[256], format[256], *p; k = (int)log10(n)+1; for (i = 0; i <= n; i++) sprintf(format, "a%%%dd.data", k); sprintf(f_name, format, i); while ((p = strchr(f_name, ))!= NULL) *p = 0 ; fp = fopen(f_name, "w"); fprintf(fp, "%d\n", i); fclose(fp); k = (int)log10(n)+1 0 100 # ls a000.data a013.data a026.data a039.data a052.data a065.data a078.data a091.data a001.data a014.data a027.data a040.data a053.data a066.data a079.data a092.data a002.data a015.data a028.data a041.data a054.data a067.data a080.data a093.data a003.data a016.data a029.data a042.data a055.data a068.data a081.data a094.data a004.data a017.data a030.data a043.data a056.data a069.data a082.data a095.data a005.data a018.data a031.data a044.data a057.data a070.data a083.data a096.data a006.data a019.data a032.data a045.data a058.data a071.data a084.data a097.data 11

a007.data a020.data a033.data a046.data a059.data a072.data a085.data a098.data a008.data a021.data a034.data a047.data a060.data a073.data a086.data a099.data a009.data a022.data a035.data a048.data a061.data a074.data a087.data a100.data a010.data a023.data a036.data a049.data a062.data a075.data a088.data a011.data a024.data a037.data a050.data a063.data a076.data a089.data a012.data a025.data a038.data a051.data a064.data a077.data a090.data 2.1.2 2.2 2.2.1 OpenMP π // pi.c #include <stdlib.h> int i; int N = atoi(argv[1]); double x, dx, pi, sum = 0.0; dx = 1.0/N; #pragma omp parallel for reduction(+:sum) private(x) for (i = 0; i < N; i++) x = (i+0.5)*dx; sum += 4.0/(1.0+x*x); pi = sum*dx; printf("pi = %16.14lf\n", pi); 1 0 4 1 + x 2 dx = π π N #pragma... OpenMP for reduction(+:sum) sum for sum private(x) x OpenMP OpenMP time # gcc -O3 -o pi.out pi.c -lm # time./pi.out 1000000000 pi = 3.14159265358997 4.895u 0.003s 0:04.90 99.7% 0+0k 0+0io 0pf+0w 12

# gcc -fopenmp -O3 -o pi.out pi.c -lm # time./pi.out 1000000000 pi = 3.14159265358977 7.167u 0.000s 0:01.15 622.6% 0+0k 0+0io 0pf+0w CPU OpenMP CPU 600% OpenMP OpenMP π 4 i, x, sum[ ] // pi-1.c #include <stdlib.h> #define NUM_THREADS 4 int i; int N = atoi(argv[1]); double dx, pi, sum[num_threads]; dx = 1.0/N; omp_set_num_threads(num_threads); #pragma omp parallel int i; double x; int id = omp_get_thread_num(); sum[id] = 0.0; for (i = id; i < N; i += NUM_THREADS) x = (i+0.5)*dx; sum[id] += 4.0/(1.0+x*x); for (i = 0; i < NUM_THREADS; i++) pi += sum[i]*dx; printf("pi = %16.14lf\n", pi); # gcc -fopenmp -O3 -o pi-1.out pi-1.c -lm # time./pi-1.out 1000000000 pi = 3.14159265358977 12.655u 0.000s 0:03.55 356.3% 0+0k 0+0io 0pf+0w for // pi-2.c 13

#include <stdlib.h> #define NUM_THREADS 4 int i; int N = atoi(argv[1]); double dx, pi, sum[num_threads]; dx = 1.0/N; omp_set_num_threads(num_threads); #pragma omp parallel int i; double x; int id = omp_get_thread_num(); sum[id] = 0.0; #pragma omp for for (i = id; i < N; i += NUM_THREADS) x = (i+0.5)*dx; sum[id] += 4.0/(1.0+x*x); for (i = 0; i < NUM_THREADS; i++) pi += sum[i]*dx; printf("pi = %16.14lf\n", pi); # gcc -fopenmp -O3 -o pi-2.out pi-2.c -lm # time./pi-2.out 1000000000 pi = 0.78539816326619 4.870u 0.000s 0:01.36 358.0% 0+0k 0+0io 0pf+0w // pi-3.c #include <stdlib.h> #define NUM_THREADS 4 int i; int N = atoi(argv[1]); double dx, pi, sum; dx = 1.0/N; omp_set_num_threads(num_threads); 14

#pragma omp parallel int i; double x; int id = omp_get_thread_num(); #pragma omp parallel private (x, sum,i) id = omp_get_thread_num(); for (i = id, sum = 0.0; i < N; i += NUM_THREADS) x = (i+0.5)*dx; sum += 4.0/(1.0+x*x); #pragma omp critical pi += sum*dx; printf("pi = %16.14lf\n", pi); # gcc -fopenmp -O3 -o pi-3.out pi-3.c -lm # time./pi-3.out 1000000000 pi = 3.14159265658986 6.309u 0.003s 0:01.87 336.8% 0+0k 0+0io 0pf+0w 15