sem1 homework
This commit is contained in:
		
							parent
							
								
									d82d9189fb
								
							
						
					
					
						commit
						149ce4231c
					
				
					 3 changed files with 89 additions and 0 deletions
				
			
		
							
								
								
									
										13
									
								
								sem1/homework/task1/hello.c
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										13
									
								
								sem1/homework/task1/hello.c
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,13 @@ | |||
| #include <mpi.h>  | ||||
| #include <stdio.h> | ||||
| int main(int argc, char *argv[]) {   | ||||
|     int commsize, my_rank; | ||||
| 
 | ||||
|     MPI_Init(&argc, &argv);   | ||||
|      | ||||
|     MPI_Comm_size(MPI_COMM_WORLD, &commsize); | ||||
|     MPI_Comm_rank(MPI_COMM_WORLD, &my_rank); | ||||
|     printf ("Communicator size = %d; My rank = %d\n", commsize,my_rank);   | ||||
|      | ||||
|     MPI_Finalize(); | ||||
| } | ||||
							
								
								
									
										46
									
								
								sem1/homework/task2/sum.c
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										46
									
								
								sem1/homework/task2/sum.c
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,46 @@ | |||
| #include <mpi.h>  | ||||
| #include <stdio.h> | ||||
| int main(int argc, char *argv[]) {   | ||||
| 	int N, k; | ||||
| 	int my_rank, commsize; | ||||
| 	double result, buf = 0; | ||||
| 
 | ||||
| 	MPI_Init(&argc,&argv); | ||||
| 
 | ||||
| 	MPI_Comm_size(MPI_COMM_WORLD, &commsize); | ||||
| 	MPI_Comm_rank(MPI_COMM_WORLD, &my_rank); | ||||
| 
 | ||||
| 	/* Головной процесс */ | ||||
| 	if (my_rank == 0) {  | ||||
| 		scanf("%d", &N); | ||||
| 		k = N / commsize; | ||||
| 
 | ||||
| 		for (int i = 1; i < commsize; ++i) | ||||
| 			MPI_Send(&k, 1, MPI_INT, i, 0, MPI_COMM_WORLD); | ||||
| 
 | ||||
| 		/* Считаем члены суммы, оставшиеся после распределения (в случае commsize < N - считаем всю сумму тут) */	 | ||||
| 		for (int i = k * (commsize - 1) + 1; i <= N; i++) | ||||
| 			result += 1 / (double)i; | ||||
| 		 | ||||
| 		/* Получаем результаты подсчета от всех процессов */ | ||||
| 		printf("[0] result = %f\n", result); | ||||
| 		for (int i = 1; i < commsize; ++i) { | ||||
| 			MPI_Recv(&buf, 1, MPI_DOUBLE, i, 0, MPI_COMM_WORLD, NULL); | ||||
| 			printf("[%d] result = %f\n", i, buf); | ||||
| 			result += buf; | ||||
| 		} | ||||
| 		 | ||||
| 		printf("result = %f\n", result); | ||||
| 
 | ||||
| 	} | ||||
| 	else { | ||||
| 		MPI_Recv(&k, 1, MPI_INT, 0, 0, MPI_COMM_WORLD, NULL); | ||||
| 	 | ||||
| 		for (int i = (my_rank - 1) * k + 1; i < my_rank * k + 1; ++i) | ||||
| 			result += 1 / (double)i; | ||||
| 
 | ||||
| 		MPI_Send(&result, 1, MPI_DOUBLE, 0, 0, MPI_COMM_WORLD); | ||||
| 	} | ||||
| 
 | ||||
| 	MPI_Finalize(); | ||||
| } | ||||
							
								
								
									
										30
									
								
								sem1/homework/task3/send.c
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										30
									
								
								sem1/homework/task3/send.c
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,30 @@ | |||
| #include <mpi.h>  | ||||
| #include <stdio.h> | ||||
| int main(int argc, char *argv[]){   | ||||
| 	int commsize, my_rank; | ||||
| 	int msg = 0; | ||||
| 
 | ||||
| 	MPI_Init(&argc,&argv);   | ||||
| 	MPI_Comm_size(MPI_COMM_WORLD, &commsize); | ||||
| 	MPI_Comm_rank(MPI_COMM_WORLD, &my_rank); | ||||
| 	 | ||||
| 	if (my_rank == 0) { | ||||
| 		printf("[%d] msg = %d\n", my_rank, msg); | ||||
| 		if (commsize == 1) | ||||
| 			goto finalize; | ||||
| 		MPI_Send(&msg, 1, MPI_INT, 1, 0, MPI_COMM_WORLD); | ||||
| 		MPI_Recv(&msg, 1, MPI_INT, commsize - 1, 0, MPI_COMM_WORLD, NULL); | ||||
| 		printf("[%d] msg = %d\n", my_rank, ++msg); | ||||
| 	} | ||||
| 	else { | ||||
| 		MPI_Recv(&msg, 1, MPI_INT, my_rank - 1, 0, MPI_COMM_WORLD, NULL);	 | ||||
| 		printf("[%d] msg = %d\n", my_rank, ++msg); | ||||
| 		if (my_rank + 1 < commsize) | ||||
| 			MPI_Send(&msg, 1, MPI_INT, my_rank + 1, 0, MPI_COMM_WORLD); | ||||
| 		else | ||||
| 			MPI_Send(&msg, 1, MPI_INT, 0, 0, MPI_COMM_WORLD); | ||||
| 	} | ||||
| 	 | ||||
| finalize: | ||||
| 	MPI_Finalize(); | ||||
| } | ||||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue