Introducción a la Computación Paralela

Author

George G. Vega Yon, Ph.D.

Published

August 14, 2025

WarningNota de Traducción

Esta versión del capítulo fue traducida de manera automática utilizando IA. El capítulo aún no ha sido revisado por un humano.

Introducción

Aunque la mayoría de la gente ve R como un lenguaje de programación lento, tiene características poderosas que aceleran dramáticamente tu código 1. Aunque R no fue necesariamente construido para la velocidad, hay algunas herramientas y formas en las que podemos acelerar R. Este capítulo introduce lo que entenderemos como computación de alto rendimiento en R.

Computación de Alto Rendimiento: Una visión general

Desde la perspectiva de R, podemos pensar en HPC en términos de dos o tres cosas:2 Big data, computación paralela, y código compilado.

Big Data

Cuando hablamos de big data, nos referimos a casos donde tu computadora lucha para manejar un conjunto de datos. Un ejemplo típico de esto último es cuando el número de observaciones (filas) en tu marco de datos es demasiado para ajustar un modelo de regresión lineal. En lugar de comprar una computadora más grande, hay muchas buenas soluciones para resolver problemas relacionados con la memoria:

  • Almacenamiento fuera de memoria. La idea es simple, en lugar de usar tu RAM para cargar los datos, usa otros métodos para cargar los datos. Dos alternativas notables son los paquetes R bigmemory e implyr. El paquete bigmemory proporciona métodos para usar matrices “respaldadas por archivo”. Por otro lado, implyr implementa un envoltorio para acceder a Apache Impala, un motor de consultas SQL para un clúster ejecutando Apache Hadoop.

  • Algoritmos eficientes para big data: Para evitar quedarte sin memoria con tu análisis de regresión, los paquetes R biglm y biglasso entregan alternativas altamente eficientes a glm y glmnet, respectivamente. Ahora, si tus datos caben en tu RAM, pero aún luchas con la manipulación de datos, el paquete data.table es la solución.

  • Almacénalo más eficientemente: Finalmente, cuando se trata de álgebra lineal, el paquete R Matrix brilla con sus clases formales y métodos para manejar Matrices Dispersas, es decir, matrices grandes cuyas entradas son principalmente ceros; por ejemplo, los objetos dgCMatrix. Además, Matrix viene incluido con R, lo que lo hace aún más atractivo.

Computación paralela

Nos enfocaremos en el Single Instruction stream Multiple Data stream (Flujo de Instrucción Única Flujo de Datos Múltiple).

En términos generales, un programa de computación paralela es uno en el cual usamos dos o más hilos computacionales simultáneamente. Aunque hilo computacional usualmente significa núcleo, hay múltiples niveles en los que un programa de computadora puede ser paralelizado. Para entender esto, primero necesitamos ver qué compone una computadora moderna:

Fuente: Figura original de la documentación del consorcio LUMI (LUMI consortium 2023)

Extensiones SIMD de Flujo [SSE] y Extensiones de Vector Avanzado [AVX]

Serial vs. Paralelo

Computación de alto rendimiento en R

Algo de vocabulario para HPC

En términos crudos

  • Supercomputadora: Una sola máquina grande con miles de núcleos/GPGPUs.

  • Computación de Alto Rendimiento (HPC): Múltiples máquinas dentro de una sola red.

  • Computación de Alto Rendimiento (HTC): Múltiples máquinas a través de múltiples redes.

Puede que no tengas acceso a una supercomputadora, pero ciertamente, los clústeres HPC/HTC son más accesibles hoy en día, p. ej., AWS proporciona un servicio para crear clústeres HPC a bajo costo (supuestamente, ya que nadie entiende cómo funciona la tarificación)

GPU vs. CPU

  • ¿Por qué usar OpenMP si GPU está adecuado para operaciones intensivas en cómputo? Bueno, principalmente porque OpenMP es MUY fácil de implementar (más fácil que CUDA, que es la forma más fácil de usar GPU).3

¿Cuándo es una buena idea?

¡Hazte estas preguntas antes de saltar a HPC!

Computación paralela en R

Mientras hay varias alternativas (solo echa un vistazo a la Vista de Tareas de Computación de Alto Rendimiento), nos enfocaremos en los siguientes paquetes R para paralelismo explícito:

  • parallel: Paquete R que proporciona ‘[s]oporte para computación paralela, incluyendo generación de números aleatorios’.

  • future: ‘[U]na API Future ligera y unificada para procesamiento secuencial y paralelo de expresiones R via futures.’

  • Rcpp + OpenMP: Rcpp es un paquete R para integrar R con C++ y OpenMP es una biblioteca para paralelismo de alto nivel para C/C++ y FORTRAN.

Otros pero no usados aquí

  • foreach para iterar a través de listas en paralelo.

  • Rmpi para crear clústeres MPI.

Y herramientas para paralelismo implícito (herramientas listas para usar que permiten al programador no preocuparse por la paralelización):

Una tonelada de otros tipos de recursos, notablemente las herramientas para trabajar con programadores de lotes como Slurm, y HTCondor.


  1. No obstante, esta afirmación se puede decir sobre casi cualquier lenguaje de programación; hay ejemplos notables como el paquete R data.table (Dowle and Srinivasan 2021) que ha sido demostrado que supera a la mayoría de herramientas de manipulación de datos.↩︎

  2. Asegúrate de revisar CRAN Task View on HPC.↩︎

  3. Laboratorios Nacionales Sandia comenzó el proyecto Kokkos, que proporciona una biblioteca C++ que se ajusta a todo para programación paralela. Más información en el sitio wiki de Kokkos.↩︎