parllel programming lab

profilerohitroyemmanuel
lab-2-master.zip

lab-2-master/.gitignore

# Created by .ignore support plugin (hsz.mobi) ### C template # Prerequisites *.d # Object files *.o *.ko *.obj *.elf # Linker output *.ilk *.map *.exp # Precompiled Headers *.gch *.pch # Libraries *.lib *.a *.la *.lo # Shared objects (inc. Windows DLLs) *.dll *.so *.so.* *.dylib # Executables *.exe *.out *.app *.i*86 *.x86_64 *.hex # Debug files *.dSYM/ *.su *.idb *.pdb # Kernel Module Compile Results *.mod* *.cmd .tmp_versions/ modules.order Module.symvers Mkfile.old dkms.conf ### CMake template CMakeCache.txt CMakeFiles CMakeScripts Testing Makefile cmake_install.cmake install_manifest.txt compile_commands.json CTestTestfile.cmake # CMake cmake-build-debug/ cmake-build-release/ # Mongo Explorer plugin .idea/**/mongoSettings.xml # File-based project format *.iws # IntelliJ out/ # mpeltonen/sbt-idea plugin .idea_modules/ # JIRA plugin atlassian-ide-plugin.xml # Cursive Clojure plugin .idea/replstate.xml # Crashlytics plugin (for Android Studio and IntelliJ) com_crashlytics_export_strings.xml crashlytics.properties crashlytics-build.properties fabric.properties .idea/

lab-2-master/CMakeLists.txt

cmake_minimum_required(VERSION 3.9) project(Lab2_Sum) set(CMAKE_C_STANDARD 11) set(SOURCE_FILES main.c main.c) add_executable(Lab2_Sum ${SOURCE_FILES} main.c) find_package(OpenMP) set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} ${OpenMP_C_FLAGS}") set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${OpenMP_CXX_FLAGS}") set (CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} ${OpenMP_EXE_LINKER_FLAGS}")

lab-2-master/main.c

#include <stdlib.h> #include <stdio.h> #include <omp.h> #include <time.h> #include <sys/time.h> static const long Num_To_Add = 1000000000; static const double Scale = 10.0 / RAND_MAX; long add_serial(const char *numbers) { long sum = 0; for (long i = 0; i < Num_To_Add; i++) { sum += numbers[i]; } return sum; } long add_parallel(const char *numbers) { long sum = 0; return sum; } int main() { char *numbers = malloc(sizeof(long) * Num_To_Add); long chunk_size = Num_To_Add / omp_get_max_threads(); #pragma omp parallel num_threads(omp_get_max_threads()) { int p = omp_get_thread_num(); unsigned int seed = (unsigned int) time(NULL) + (unsigned int) p; long chunk_start = p * chunk_size; long chunk_end = chunk_start + chunk_size; for (long i = chunk_start; i < chunk_end; i++) { numbers[i] = (char) (rand_r(&seed) * Scale); } } struct timeval start, end; printf("Timing sequential...\n"); gettimeofday(&start, NULL); long sum_s = add_serial(numbers); gettimeofday(&end, NULL); printf("Took %f seconds\n\n", end.tv_sec - start.tv_sec + (double) (end.tv_usec - start.tv_usec) / 1000000); printf("Timing parallel...\n"); gettimeofday(&start, NULL); long sum_p = add_parallel(numbers); gettimeofday(&end, NULL); printf("Took %f seconds\n\n", end.tv_sec - start.tv_sec + (double) (end.tv_usec - start.tv_usec) / 1000000); printf("Sum serial: %ld\nSum parallel: %ld", sum_s, sum_p); free(numbers); return 0; }