Ejemplo_3.cpp

Multiplicacion de matrices en paralelo con hilos
 avatar
TomasOrtellado
c_cpp
3 days ago
1.6 kB
1
Indexable
// Multiplicacion de matrices en paralelo con hilos
#include <iostream>
#include <thread>
#include <vector>

// define tama�o de las matrices
const int N = 4;

// matrices de entrada para la multiplicacion
int matriz1[N][N] = {{1, 2, 3, 4}, {5, 6, 7, 8}, {9, 10, 11, 12}, {13, 14, 15, 16}};
int matriz2[N][N] = {{1, 1, 1, 1}, {2, 2, 2, 2}, {3, 3, 3, 3}, {4, 4, 4, 4}};

// matriz resultado (inicia con todos 0)
int resultado[N][N] = {0};

// Funci�n para multiplicar una fila de la primera matriz con la segunda matriz
void multiplicarFila(int fila) {
    // escanea las columnas de la matriz resultado
    for (int col = 0; col < N; ++col) {
        // calcula el valor de la posici�n resultado [fila][col]
        for (int k = 0; k < N; ++k) {
            resultado[fila][col] += matriz1[fila][k] * matriz2[k][col];
        }
    }
}

int main() {
    // crea un vector para almacenar los hilos
    std::vector<std::thread> hilos;

    // lanza un hilo para cada fila de la matriz resultado
    for (int i = 0; i < N; ++i) {
        hilos.push_back(std::thread(multiplicarFila, i)); // cada hilo calcula una fila
    }

    // espera a que todos los hilos terminen su ejecuci�n
    for (auto& hilo : hilos) {
        hilo.join();
    }

    std::cout << "Matriz resultado:\n";
    for (int i = 0; i < N; ++i) {
        for (int j = 0; j < N; ++j) {
            std::cout << resultado[i][j] << " "; // muestra cada valor de la matriz resultado
        }
        std::cout << "\n";
    }

    return 0;
}

Leave a Comment