diff --git a/CMakeLists.txt b/CMakeLists.txt index d30ec3e..efeaba9 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -19,6 +19,8 @@ set(SRC_FILES ${CMAKE_CURRENT_LIST_DIR}/src/main.cpp ${CMAKE_CURRENT_LIST_DIR}/src/gamecube.cpp src/gamematrix.cpp + parallel/parallel_measurements.cpp + parallel/matrizenmultiplikation.cpp ) ##Tom: prev: ${CMAKE_CURRENT_LIST_DIR}/linux -> now /include diff --git a/parallel/matrizenmultiplikation.cpp b/parallel/matrizenmultiplikation.cpp new file mode 100644 index 0000000..2093cc2 --- /dev/null +++ b/parallel/matrizenmultiplikation.cpp @@ -0,0 +1,69 @@ + +#include +#include +#include + + +// Funktion erzeugt zwei Matrizen A und B der Größe n x n mit Zufallswerten +void generateRandomMatrices(int n, + std::vector>& A, + std::vector>& B, + double min_val = 0.0, + double max_val = 10.0) +{ + // Zufallsgenerator initialisieren + std::srand(static_cast(std::time(nullptr))); + + A.resize(n, std::vector(n)); + B.resize(n, std::vector(n)); + + for (int i = 0; i < n; ++i) + for (int j = 0; j < n; ++j) + { + double r1 = static_cast(std::rand()) / RAND_MAX; // 0..1 + double r2 = static_cast(std::rand()) / RAND_MAX; // 0..1 + A[i][j] = min_val + r1 * (max_val - min_val); + B[i][j] = min_val + r2 * (max_val - min_val); + } +} + +// Matrizenmultiplikation +std::vector> matmul(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)); + + 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; + std::vector> A, B; + + generateRandomMatrices(N, A, B); + + auto start = std::chrono::high_resolution_clock::now(); + auto C_serial = matmul(A, B); + auto end = std::chrono::high_resolution_clock::now(); + + std::chrono::duration duration = end - start; + + std::cout << "Serielle Laufzeit bei " << N << "x" << N + << ": " << duration.count() << " Sekunden\n"; + + return 0; + +} \ No newline at end of file