diff --git a/CMakeLists.txt b/CMakeLists.txt index 71160c7..c14eb16 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -3,4 +3,5 @@ project(threads) set(CMAKE_CXX_STANDARD 17) -add_executable(threads main.cpp) +add_executable(threads matrix_main.cpp + ) diff --git a/matrix_main.cpp b/matrix_main.cpp index 781955f..592adc0 100644 --- a/matrix_main.cpp +++ b/matrix_main.cpp @@ -4,6 +4,8 @@ #include #include #include +#include + // Funktion erzeugt zwei Matrizen A und B der Größe n x n mit Zufallswerten void generateRandomMatrices(int n, @@ -49,6 +51,27 @@ std::vector> matmul(const std::vector>& return C; } +std::vector> matmul_parallel(const std::vector>& A, + const std::vector>& B) +{ + int n = A.size(); + int m = B[0].size(); + int p = B.size(); + + if (A[0].size() != B.size()) + throw std::runtime_error("Matrixgrößen passen nicht."); + + std::vector> C(n, std::vector(m, 0.0)); + +#pragma omp parallel for + for (int i = 0; i < n; ++i) + for (int j = 0; j < m; ++j) + for (int k = 0; k < p; ++k) + C[i][j] += A[i][k] * B[k][j]; + + return C; +} + int main() { int N = 500; // z.B. 500x500 @@ -62,5 +85,11 @@ int main() std::chrono::duration diff = end - start; std::cout << "Serial Took: " << diff.count() << "s\n"; + start = std::chrono::steady_clock::now(); + auto C_parallel= matmul_parallel(A, B); + end = std::chrono::steady_clock::now(); + diff = end - start; + std::cout << "Serial Took: " << diff.count() << "s\n"; + return 0; } \ No newline at end of file