La computación paralela en MATLAB permite ejecutar múltiples operaciones simultáneamente, aprovechando los recursos de hardware disponibles, como múltiples núcleos de CPU o GPU. Esto puede acelerar significativamente el procesamiento de datos y la ejecución de algoritmos complejos.

Conceptos Clave

  1. Parfor (Parallel for Loops): Permite ejecutar iteraciones de un bucle for en paralelo.
  2. Spmd (Single Program Multiple Data): Permite ejecutar bloques de código en paralelo en diferentes trabajadores.
  3. Distribución de Matrices: Permite distribuir grandes matrices entre varios trabajadores para procesamiento paralelo.
  4. GPU Computing: Utiliza la GPU para acelerar cálculos intensivos.

Parfor (Parallel for Loops)

El bucle parfor es una de las formas más sencillas de paralelizar código en MATLAB. A continuación, se muestra un ejemplo básico:

% Ejemplo de parfor
n = 100;
A = zeros(n, 1);

parfor i = 1:n
    A(i) = i^2;
end

disp(A);

Explicación del Código

  • n = 100;: Define el número de iteraciones.
  • A = zeros(n, 1);: Inicializa un vector de ceros.
  • parfor i = 1:n: Ejecuta el bucle for en paralelo.
  • A(i) = i^2;: Calcula el cuadrado de i y lo almacena en A.

Spmd (Single Program Multiple Data)

El bloque spmd permite ejecutar el mismo código en diferentes trabajadores, pero cada trabajador puede operar en diferentes datos.

% Ejemplo de spmd
spmd
    labindex
end

Explicación del Código

  • spmd: Inicia un bloque de código paralelo.
  • labindex: Devuelve el índice del trabajador que ejecuta el código.

Distribución de Matrices

MATLAB permite distribuir matrices grandes entre varios trabajadores para procesamiento paralelo.

% Ejemplo de distribución de matrices
spmd
    D = codistributed(magic(4));
end

Explicación del Código

  • spmd: Inicia un bloque de código paralelo.
  • codistributed: Distribuye la matriz magic(4) entre los trabajadores.

GPU Computing

MATLAB puede utilizar la GPU para acelerar cálculos intensivos. A continuación, se muestra un ejemplo básico:

% Ejemplo de GPU Computing
A = gpuArray(rand(1000));
B = gpuArray(rand(1000));
C = A * B;
disp(gather(C));

Explicación del Código

  • gpuArray: Transfiere datos a la GPU.
  • A * B: Realiza la multiplicación de matrices en la GPU.
  • gather: Transfiere los datos de vuelta a la CPU.

Ejercicio Práctico

Ejercicio 1: Paralelizar un Bucle

Paraleliza el siguiente bucle for utilizando parfor:

n = 1000;
A = zeros(n, 1);

for i = 1:n
    A(i) = sin(i);
end

Solución

n = 1000;
A = zeros(n, 1);

parfor i = 1:n
    A(i) = sin(i);
end

Ejercicio 2: Uso de GPU para Cálculos

Utiliza la GPU para calcular la suma de dos matrices grandes:

A = rand(1000);
B = rand(1000);
C = A + B;

Solución

A = gpuArray(rand(1000));
B = gpuArray(rand(1000));
C = A + B;
disp(gather(C));

Resumen

En esta sección, hemos cubierto los conceptos básicos de la computación paralela en MATLAB, incluyendo el uso de parfor, spmd, la distribución de matrices y la computación con GPU. Estos métodos permiten aprovechar al máximo los recursos de hardware disponibles para acelerar el procesamiento de datos y la ejecución de algoritmos complejos.

© Copyright 2024. Todos los derechos reservados