From 4ac65d13673e2326e3f2d22b9235f8ba40985385 Mon Sep 17 00:00:00 2001
From: mfikrin <muhammad.fikrin1729@gmail.com>
Date: Sun, 6 Mar 2022 20:07:35 +0700
Subject: [PATCH] feat : add openmp for datarange and supression_op

---
 src/openmp     | Bin 0 -> 17080 bytes
 src/openmp.c   |  10 +++
 src/par        | Bin 22016 -> 22624 bytes
 src/parallel.c | 230 ++++++++++++++-----------------------------------
 4 files changed, 76 insertions(+), 164 deletions(-)
 create mode 100644 src/openmp
 create mode 100644 src/openmp.c

diff --git a/src/openmp b/src/openmp
new file mode 100644
index 0000000000000000000000000000000000000000..d5f231b0629376347e6225087d529027249e31cc
GIT binary patch
literal 17080
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
I1y51^6GZyx#Q*>R

literal 0
HcmV?d00001

diff --git a/src/openmp.c b/src/openmp.c
new file mode 100644
index 0000000..629c561
--- /dev/null
+++ b/src/openmp.c
@@ -0,0 +1,10 @@
+#include <stdio.h>
+#include <omp.h>
+
+int main(int argc, char** argv){
+    #pragma omp parallel
+    {
+        printf("Hello from process: %d\n", omp_get_thread_num());
+    }
+    return 0;
+}
\ No newline at end of file
diff --git a/src/par b/src/par
index 23fe37ce47d562518349e7e07a6fd6c375d7f3ac..8eec9384443dde2f8e203fa8a24ecd396fca2479 100644
GIT binary patch
literal 22624
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

delta 6476
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
V>N<_`k(rs=7Mt=L*pjxw{|DAv7YqOZ

diff --git a/src/parallel.c b/src/parallel.c
index d8f4649..b0ccca5 100644
--- a/src/parallel.c
+++ b/src/parallel.c
@@ -3,6 +3,7 @@
 #include <stdio.h>
 #include <stdlib.h>
 #include <mpi.h>
+#include <omp.h>
 
 #define NMAX 100
 #define DATAMAX 1000
@@ -81,17 +82,41 @@ void print_matrix(Matrix *m) {
  * element of a matrix
  * */
 int get_matrix_datarange(Matrix *m) {
-	int max = DATAMIN;
-	int min = DATAMAX;
-	for (int i = 0; i < m->row_eff; i++) {
-		for (int j = 0; j < m->col_eff; j++) {
-			int el = m->mat[i][j];
-			if (el > max) max = el;
-			if (el < min) min = el;
-		}
-	}
+	int maxLocal;
+	int minLocal;
 
-	return max - min;
+	int maxGlobal;
+	int minGlobal;
+    
+    maxGlobal = DATAMIN;
+    minGlobal = DATAMAX;
+
+	#pragma omp parallel private(maxLocal, minLocal) shared(maxGlobal, minGlobal)
+    {
+        maxLocal = maxGlobal;
+        minLocal = minGlobal;
+        #pragma omp for collapse(2) nowait
+			for (int i = 0; i < m->row_eff; i++) {
+				for (int j = 0; j < m->col_eff; j++) {
+					int el = m->mat[i][j];
+					if (el > maxLocal) maxLocal = el;
+					if (el < minLocal) minLocal = el;
+				}
+			}
+        #pragma omp critical 
+        {
+            if (minLocal < minGlobal) {
+                minGlobal = minLocal;
+            }
+
+            if (maxLocal > maxGlobal){
+                maxGlobal = maxLocal;
+            }
+        }
+    }    
+
+    printf("MAXGLOBAL : %d, MIN GLOBAL : %d",maxGlobal,minGlobal);
+	return maxGlobal - minGlobal;
 }
 
 
@@ -102,16 +127,37 @@ int get_matrix_datarange(Matrix *m) {
  * operation where kernel[0][0] corresponds to target[row][col]
  * */
 int supression_op(Matrix *kernel, Matrix *target, int row, int col) {
-	int intermediate_sum = 0;
-	for (int i = 0; i < kernel->row_eff; i++) {
-		for (int j = 0; j < kernel->col_eff; j++) {
-			intermediate_sum += kernel->mat[i][j] * target->mat[row + i][col + j];
-		}
+	int partial_Sum;
+	int total_Sum;
+    #pragma omp parallel private(partial_Sum) shared(total_Sum)
+    {
+		partial_Sum = 0;
+        total_Sum = 0;
+		#pragma omp for collapse(2)
+           for (int i = 0; i < kernel->row_eff; i++) {
+                for (int j = 0; j < kernel->col_eff; j++) {
+                    partial_Sum = kernel->mat[i][j] * target->mat[row + i][col + j];
+                }
+		   }
+
+        #pragma omp critical
+			// /add each threads partial sum to the total sum
+			total_Sum += partial_Sum;
 	}
-
-	return intermediate_sum;
+	return total_Sum;
 }
 
+// int supression_op(Matrix *kernel, Matrix *target, int row, int col) {
+// 	int intermediate_sum = 0;
+// 	for (int i = 0; i < kernel->row_eff; i++) {
+// 		for (int j = 0; j < kernel->col_eff; j++) {
+// 			intermediate_sum += kernel->mat[i][j] * target->mat[row + i][col + j];
+// 		}
+// 	}
+
+// 	return intermediate_sum;
+// }
+
 
 /* 
  * Function convolution
@@ -123,11 +169,6 @@ Matrix convolution(Matrix *kernel, Matrix *target) {
 	Matrix out;
 	int out_row_eff = target->row_eff - kernel->row_eff + 1;
 	int out_col_eff = target->col_eff - kernel->col_eff + 1;
-
-    // printf("kernel row %d",kernel->row_eff);
-    // printf("kernel col %d",kernel->col_eff);
-
-    // printf("out_row_eff %d %d",out_row_eff,out_col_eff);
 	
 	init_matrix(&out, out_row_eff, out_col_eff);
 
@@ -235,46 +276,6 @@ long get_floored_mean(int *n, int length) {
 }
 
 
-void distribute(void* data, int count, MPI_Datatype datatype, int root,
-              MPI_Comm communicator) {
-	int world_rank;
-	MPI_Comm_rank(communicator, &world_rank);
-	int world_size;
-	MPI_Comm_size(communicator, &world_size);
-
-	// Procecss 0 --> Kirim matriks inputan 1,2,3 ke prcess 1,2,3
-	// process 1,2,3 -> receive
-	// prcess 0 --> kirim matriks input 4,5,6, ke process 1,2,3
-	
-	if (world_rank == root) {
-	// If we are the root process, send our data to every process
-	int i;
-	for (i = 0; i < world_size; i++) {
-		if (i != world_rank) {
-		MPI_Send(data, count, datatype, i, 0, communicator);
-		}
-	}
-	} else {
-	// If we are a receiver process, receive the data from the root
-	MPI_Recv(data, count, datatype, root, 0, communicator,
-				MPI_STATUS_IGNORE);
-    
-
-	// Ngitung con sama data range		 
-	}
-}
-
-// void init_matrix_kernel() {
-// 	m->row_eff = 2;
-// 	m->col_eff = 2;
-
-// 	m->mat[0][0] = 1;
-//     m->mat[0][1] = 0;
-//     m->mat[1][0] = 0;
-//     m->mat[1][1] = -1;
-// }
-
-// main() driver
 int main() {
 	// OPEN MPI
 	MPI_Init(NULL, NULL);
@@ -283,11 +284,7 @@ int main() {
     MPI_Comm_rank(MPI_COMM_WORLD, &world_rank);
     int world_size;
     MPI_Comm_size(MPI_COMM_WORLD, &world_size);
-
-	const int PING_PONG_LIMIT = 3;
-    printf("HELLO WORLD\n");
 	
-    // 10 / 4 = 2 2 2 (10-6)
     int kernel_row, kernel_col, target_row, target_col, num_targets;
 	int counter_distribute = 0;
 	int counter_receiver = 0;
@@ -310,14 +307,6 @@ int main() {
 		arr_mat[i] = input_matrix(target_row, target_col);	 
 	}
 
-    print_matrix(&kernel);
-
-	
-
-    printf("HELLO OPEN MPI\n");
-
-	
-
     // --------------------------- Create the datatype ----------------------------- //
     MPI_Datatype mat_MPI;
     int lengths[3] = { NMAX * NMAX, 1, 1 };
@@ -373,7 +362,6 @@ int main() {
 					MPI_Send(&arr_mat[j], 1, mat_MPI, rank, 2+k, MPI_COMM_WORLD);
 					j++;
 				}
-				
 				printf("Checkpoint A\n");
 			}
 		}
@@ -407,6 +395,9 @@ int main() {
             }
 		}
 
+
+		// Showing the result
+		
 		// sort the data range array
 		printf("BAWAHNYA PRINT ARRAY\n");
 		print_array(arr_range,num_targets);
@@ -458,95 +449,6 @@ int main() {
 		MPI_Send(&arr_range, totalData, MPI_INT, 0, 0, MPI_COMM_WORLD);
 	}
 
-
-    // if (world_rank == 0){
-	// 	printf("BACK TO PROCESS 0");
-	// 	// Now receive the message with the allocated buffer
-    //     for (int i = 0; i < world_size; i++ ){
-	// 		if (i != root){
-    //             MPI_Status status;
-    //             // Probe for an incoming message from process zero
-    //             MPI_Probe(i, 0, MPI_COMM_WORLD, &status);
-
-    //             // When probe returns, the status object has the size and other
-    //             // attributes of the incoming message. Get the message size
-    //             int number_amount;
-    //             MPI_Get_count(&status, MPI_INT, &number_amount);
-
-    //             // Allocate a buffer to hold the incoming numbers
-    //             int* number_buf = (int*)malloc(sizeof(int) * number_amount);
-
-
-    //             MPI_Recv(number_buf, number_amount, MPI_INT, i, 0, MPI_COMM_WORLD, MPI_STATUS_IGNORE);
-    //             printf("PROCESS 0 IN RECEIVING");
-    //             print_array(number_buf,number_amount);
-    //         }
-	// 	}
-    // }
-
-
-    // while (counter_distribute < PING_PONG_LIMIT){
-    //     // distribute(arr_mat[counter_distribute],1,mat_MPI,0, MPI_COMM_WORLD)
-	// 	printf("Counter dis %d \n", counter_distribute);
-	// 	if (world_rank == root) {
-	// 		// If we are the root process, send our data to every process
-    //         int i;
-    //         for (i = 0; i < world_size; i++) {
-    //             if (i != world_rank) {
-    //                 MPI_Send(&arr_mat[counter_distribute], 1, mat_MPI, i, 1, MPI_COMM_WORLD);
-    //                 MPI_Send(&kernel, 1, mat_MPI, i, 0, MPI_COMM_WORLD);
-                    
-    //                 counter_distribute++;
-
-    //                 MPI_Send(&counter_distribute, 1, MPI_INT, i, 2, MPI_COMM_WORLD);
-    //             }
-    //         }
-			
-	// 	} else {
-	// 		// If we are a receiver process, receive the data from the root
-    //         Matrix recv_data;
-    //         MPI_Recv(&recv_data, 1, mat_MPI, root, 1, MPI_COMM_WORLD, MPI_STATUS_IGNORE);
-    //         Matrix kernel_recv;
-    //         MPI_Recv(&kernel_recv, 1, mat_MPI, root, 0, MPI_COMM_WORLD, MPI_STATUS_IGNORE);
-    //         print_matrix(&recv_data);
-    //         print_matrix(&kernel_recv);
-    //         MPI_Recv(&counter_distribute, 1, mat_MPI, root, 2, MPI_COMM_WORLD, MPI_STATUS_IGNORE);
-	// 		printf("HASILLL\n");
-	// 		arr_mat2[counter_receiver] = convolution(&kernel_recv, &recv_data);
-            
-    //         print_matrix(&arr_mat2[counter_receiver]);
-	// 		arr_range[counter_receiver] = get_matrix_datarange(&arr_mat2[counter_receiver]);
-    //         counter_distribute = counter_distribute;
-	// 		printf("Counter reciver now %d \n", counter_distribute);
-    //         printf("Counter disribute now %d \n", counter_distribute);
-            
-	// 		counter_receiver++;
-	// 	}
-    // }
-
-	// // sort the data range array
-	// printf("BAWAHNYA PRINT ARRAY\n");
-	// print_array(arr_range,num_targets);
-	// merge_sort(arr_range, 0, num_targets - 1);
-
-
-    // printf("AFTER SORT\n");
-	// print_array(arr_range,num_targets);
-	
-	// int median = get_median(arr_range, num_targets);	
-	// int floored_mean = get_floored_mean(arr_range, num_targets); 
-	// // int floored_mean = 10;
-
-	// // print the min, max, median, and floored mean of data range array
-	// printf("HASIL FINALLLL\n");
-	// printf("MIN : %d\nMAX : %d\nMedian : %d\nRata-Rata : %d\n", 
-	// 		arr_range[0], 
-	// 		arr_range[num_targets - 1], 
-	// 		median, 
-	// 		floored_mean);
-
-    // // START OPEN MP
-
 	MPI_Finalize();
 	return 0;
 }
-- 
GitLab