Vergonzosamente paralelo
# Vergonzosamente paralelo

En computación paralela, una carga de trabajo o problema vergonzosamente paralelo (también llamado vergonzosamente paralelizable, perfectamente paralelo, deliciosamente paralelo o placenteramente paralelo) es aquel en el que se necesita poco o ningún esfuerzo para separar el problema en varias tareas paralelas. Este suele ser el caso cuando hay poca o ninguna dependencia o necesidad de comunicación entre esas tareas paralelas, o de resultados entre ellas.

Por tanto, son diferentes de los problemas de computación distribuida que necesitan comunicación entre tareas, especialmente comunicación de resultados intermedios. Son fáciles de realizar en granjas de servidores que carecen de la infraestructura especial utilizada en un verdadero cluster de supercomputadoras. Por tanto, se adaptan bien a las grandes plataformas de computación voluntaria basadas en Internet, como BOINC, y no sufren de ralentización paralela. Lo contrario de los problemas vergonzosamente paralelos son los problemas inherentemente seriales, que no pueden paralelizarse en absoluto.

Un ejemplo común de un problema vergonzosamente paralelo es el renderizado de vídeo 3D manejado por una unidad de procesamiento gráfico, donde cada fotograma (método de avance) o píxel (método de trazado de rayos) se puede manejar sin interdependencia. Algunas formas de descifrado de contraseñas son otra tarea vergonzosamente paralela que se distribuye fácilmente en unidades centrales de procesamiento, núcleos de CPU o clústers.

## Etimología

"Vergonzosamente" se utiliza aquí para referirse a problemas de paralelización que son "vergonzosamente fáciles". El término puede implicar vergüenza por parte de los desarrolladores o compiladores: "Dado que muchos problemas importantes siguen sin resolverse debido principalmente a su complejidad computacional intrínseca, sería vergonzoso no desarrollar implementaciones paralelas de métodos de continuación de homotopía polinómica". El término aparece por primera vez en la literatura en un libro de 1986 sobre multiprocesadores escrito por Cleve Moler, creador de MATLAB, quien afirma haber inventado el término.

Un término alternativo, agradablemente paralelo, ha ganado cierto uso, quizá para evitar las connotaciones negativas de la vergüenza en favor de una reflexión positiva sobre la paralelizabilidad de los problemas: "Por supuesto, estos programas no tienen nada de vergonzoso".

## Ejemplos

Algunos ejemplos de problemas vergonzosamente paralelos son:

* Análisis Monte Carlo
* Consultas distribuidas a bases de datos relacionales mediante procesamiento distribuido de conjuntos.
* Integración numérica
* Servir archivos estáticos en un servidor web a varios usuarios a la vez
* Procesamiento masivo de archivos no relacionados de naturaleza similar en general, como redimensionamiento y conversión de galerías de fotos.
* El conjunto de Mandelbrot, el ruido Perlin e imágenes similares, en las que cada punto se calcula de forma independiente.
* Renderizado de gráficos por computadora. En animación por computadora, cada fotograma o píxel puede renderizarse independientemente (véase renderización paralela).
* Algunas búsquedas de fuerza bruta en criptografía. Ejemplos notables en el mundo real incluyen los sistemas distributed.net y proof-of-work utilizados en criptodivisas.
* Búsquedas BLAST en bioinformática con bases de datos divididas.
* Sistemas de reconocimiento facial a gran escala que comparan miles de rostros adquiridos arbitrariamente (por ejemplo, un vídeo de seguridad o de vigilancia a través de un circuito cerrado de televisión) con un número similar de rostros almacenados previamente (por ejemplo, una galería de pícaros o una lista de vigilancia similar).
* Simulaciones por ordenador que comparan muchos escenarios independientes.
* Algoritmos genéticos.
* Cálculos conjuntos de predicción meteorológica numérica.
* Simulación y reconstrucción de eventos en física de partículas.
* El algoritmo de los cuadrados móviles.
* El algoritmo de tamizado cuadrático y del tamiz de campo numérico.
* Etapa de crecimiento del árbol de la técnica de aprendizaje automático de bosque aleatorio.
* Transformada discreta de Fourier en la que cada armónico se calcula de forma independiente.
* Redes neuronales convolucionales ejecutadas en GPU.
* Búsqueda de hiperparámetros en el aprendizaje automático
* Búsqueda paralela en la programación con restricciones

## Aplicaciones

* En R (lenguaje de programación) - El paquete Simple Network of Workstations (SNOW) implementa un mecanismo sencillo para utilizar un conjunto de estaciones de trabajo o un clúster Beowulf para cálculos vergonzosamente paralelos. Paquetes similares de R incluyen "future", "parallel" y otros.
