Commit 6a98a5afa7035c2b05e0855df8839e5030abd85b

Authored by kmazouzi
0 parents
Exists in master

lab1

Showing 7 changed files with 262 additions and 0 deletions Inline Diff

lab1/Makefile View file @ 6a98a5a
File was created 1 GCC = gcc
2 MPI = mpicc
3 CFLAGS = -O3 -fopenmp
4 OMP_FLAG = -fopenmp
5 RM = rm -rf
6
7
8 EXE = pi_ser pi_omp pi_task pi_mpi
9
10 all : $(EXE)
11
12 #.PHONY: all clean purge
13
14
15 pi_ser: pi_ser.o
16 $(GCC) $(CFLAGS) -o $@ $^
17
18 pi_task: pi_task.o
19 $(GCC) $(CFLAGS) -o $@ $^
20
21 pi_omp: pi_omp.o
22 $(GCC) $(CFLAGS) $(OMP_FLAG) -o $@ $^
File was created 1 =============
2 MESOCENTRE FC
3 =============
4
5 -------------------------LAB 1----------------------------
6
7 Compute PI with numerical integration (Trapezoidal rule) of:
8
9 / 1
10 | 4
11 | --------- dx
12 | 1 + x^2
13 / 0
14
15 Provided solution
16 -----------------
17 - pi_ser : serial version
18 - pi_task : parallel array task version
19 - pi_omp : parallel OpenMP version
20 - pi_mpi : parallel MPI version
21 - pi_matlab : Matlab version
22
23 Howto?
24 ------
25 1- use Make to compile
lab1/pi_matlab.m View file @ 6a98a5a
File was created 1
2 function pi = Pi_matlab( n )
3
4 h = 1.0/n;
5 pi = 0.0;
6
7 for i=1:n
8 x = (i + 0.5)*h;
9 pi = pi+ (4.0/(1.0 + x*x));
10 end
lab1/pi_mpi.c View file @ 6a98a5a
File was created 1 #include <stdio.h>
2 #include <string.h>
3 #include "mpi/mpi.h"
4 #define N 100000000
5
6 int main (int argc, char** argv)
7 {
8 int rank;
9 int size;
10 long long int n;
11 long long int i;
12
13 double l_sum,total_sum, x, h;
14
15 MPI_Init(NULL, NULL);
16
17 MPI_Comm_size(MPI_COMM_WORLD, &size);
18 MPI_Comm_rank(MPI_COMM_WORLD, &rank);
19
20 n=N;
21
22 if(rank==0)
23 {
24 if(argc==2)
25 {
26 n = atoll(argv[1]);
27 }
28
29 printf("MPI version with process = %d\n", size);
30 printf("Number of intervals: %lld\n", n);
31 }
32
33
34 MPI_Bcast(&n, 1, MPI_INT, 0, MPI_COMM_WORLD);
35
36
37 h = 1.0/n;
38
39 l_sum = 0.0;
40
41 for (i = rank; i < n; i += size)
lab1/pi_omp.c View file @ 6a98a5a
File was created 1 #include <stdio.h>
2 #include <string.h>
3 #include <stdlib.h>
4 #include <omp.h>
5
6 #define N 100000000
7 int main (int argc, char** argv)
8 {
9 long long int n;
10 long long int i;
11
12 double l_sum, x, h;
13
14 n=N;
15
16 if(argc==2)
17 {
18 n=atol(argv[1]);
19 }
20
21
22 h = 1.0/n;
23
24 l_sum = 0.0;
25
26 #pragma omp parallel for private(i,x) reduction(+:l_sum)
27 for (i = 0; i < n; i ++)
lab1/pi_ser.c View file @ 6a98a5a
File was created 1 #include <stdio.h>
2 #include <stdlib.h>
3 #include <string.h>
4 #define N 100000000
5 int main (int argc, char** argv)
6 {
7 long long int n;
8 long long int i;
9
10 double l_sum, x, h;
11
12 n=N;
13
14 if(argc==2)
15 {
16 n=atol(argv[1]);
17 }
18
19
20 h = 1.0/n;
21
22 l_sum = 0.0;
23
24 for (i = 0; i < n; i ++)
25 {
lab1/pi_task.c View file @ 6a98a5a
File was created 1 #include <stdio.h>
2 #include <string.h>
3 #include <stdlib.h>
4
5 #define N 100000000
6
7 int main (int argc, char** argv)
8 {
9 int task_id;
10 int total_tasks;
11 long long int n;
12 long long int i;
13
14 double l_sum, x, h;
15
16 n=N;
17
18 if(argc<3)
19 {
20 fprintf(stderr,"Usage : %s task_id total_tasks [n]\n",argv[0]);
21 exit(0);
22 }
23
24 task_id = atoi(argv[1]);
25 total_tasks = atoi(argv[2]);
26
27 if(argc==4)
28 {
29 n = atoll(argv[3]);
30 }
31
32 fprintf(stderr, "task_id=%d total_tasks=%d n=%lld\n", task_id, total_tasks, n);
33
34 h = 1.0/n;
35