Browse Source

Added OpenMP Support

Adam Kelly 5 years ago
parent
commit
94c72ec823
7 changed files with 33 additions and 6 deletions
  1. 2 1
      CMakeLists.txt
  2. 1 1
      example.c
  3. 9 2
      tangle/CMakeLists.txt
  4. 7 2
      tangle/src/CMakeLists.txt
  5. 0 0
      tangle/src/cpu.c
  6. 0 0
      tangle/src/mpi.c
  7. 14 0
      tangle/src/omp.c

+ 2 - 1
CMakeLists.txt

@@ -1,4 +1,4 @@
-cmake_minimum_required(VERSION 3.0)
+cmake_minimum_required(VERSION 3.9)
 
 project(tangle_project)
 
@@ -8,6 +8,7 @@ set(USER_SOURCE "example.c")
 set(OUTPUT_EXE "example")
 
 option(DISTRIBUTED "Use MPI" OFF)
+option(MULTITHREADED "Use OpenMP" ON)
 
 # END EDIT
 

+ 1 - 1
example.c

@@ -11,4 +11,4 @@ int main() {
   // MPI_Finalize();
 
   return 0;
-}
+}

+ 9 - 2
tangle/CMakeLists.txt

@@ -1,11 +1,14 @@
 # option(DISTRIBUTED "Use MPI" OFF)
-
+# option(MULTITHREADED "Use OpenMP" OFF)
 
 if (DISTRIBUTED)
     find_package(MPI REQUIRED)
     include_directories(${MPI_INCLUDE_PATH})
+elseif (MULTITHREADED)
+    find_package(OpenMP REQUIRED)
 endif()
 
+
 set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -O3")
 
 
@@ -15,9 +18,13 @@ add_library(tangle SHARED ${TANGLE_SRC})
 
 # Header files & linking
 target_include_directories(tangle PRIVATE src PUBLIC include)
-target_link_libraries(tangle ${MPI_C_LIBRARIES})
 
 
 if (DISTRIBUTED)
+    target_link_libraries(tangle ${MPI_C_LIBRARIES})
     add_compile_definitions(_DISTRIBUTED)
+elseif (MULTITHREADED)
+    target_link_libraries(tangle PUBLIC OpenMP::OpenMP_CXX)
+    add_compile_definitions(_MULTITHREADED)
+
 endif()

+ 7 - 2
tangle/src/CMakeLists.txt

@@ -1,11 +1,16 @@
 if (DISTRIBUTED)
     set(TANGLE_SRC
-        ${CMAKE_CURRENT_SOURCE_DIR}/impl_mpi.c
+        ${CMAKE_CURRENT_SOURCE_DIR}/mpi.c
+        PARENT_SCOPE
+    )
+elseif (MULTITHREADED)
+    set(TANGLE_SRC
+        ${CMAKE_CURRENT_SOURCE_DIR}/omp.c
         PARENT_SCOPE
     )
 else()
     set(TANGLE_SRC
-        ${CMAKE_CURRENT_SOURCE_DIR}/impl.c
+        ${CMAKE_CURRENT_SOURCE_DIR}/cpu.c
         PARENT_SCOPE
     )
 endif()

tangle/src/impl.c → tangle/src/cpu.c


tangle/src/impl_mpi.c → tangle/src/mpi.c


+ 14 - 0
tangle/src/omp.c

@@ -0,0 +1,14 @@
+#include "tangle.h"
+#include <stdio.h>
+#include <omp.h>
+
+void count_to(int i) {
+  #pragma omp parallel num_threads(2)
+  {
+    int i = omp_get_thread_num();
+
+    for (int j = 1; j <= i; j++) {
+        printf("MP %d: %d\n", i, j);
+    }
+  }
+}