vectorization - vectorizador - ¿Qué es "vectorización"?
vectorization python (5)
Muchas CPU tienen conjuntos de instrucciones "vector" o "SIMD" que aplican la misma operación simultáneamente a dos, cuatro o más datos. Los chips x86 modernos tienen las instrucciones SSE, muchos chips PPC tienen las instrucciones "Altivec" e incluso algunos chips ARM tienen un conjunto de instrucciones vectoriales llamado NEON.
"Vectorización" (simplificado) es el proceso de reescribir un bucle para que, en lugar de procesar un único elemento de una matriz N veces, procese (digamos) 4 elementos de la matriz simultáneamente N / 4 veces.
(Elegí 4 porque es lo que el hardware moderno es más probable que soporte directamente; el término "vectorización" también se usa para describir una transformación de software de nivel superior en la que simplemente se puede abstraer completamente el bucle y describir el funcionamiento en matrices en lugar de los elementos que los componen)
La diferencia entre la vectorización y el desenrollado de bucles: Considere el siguiente bucle muy simple que agrega los elementos de dos matrices y almacena los resultados en una tercera matriz.
for (int i=0; i<16; ++i)
C[i] = A[i] + B[i];
Desenrollar este ciclo lo transformaría en algo como esto:
for (int i=0; i<16; i+=4) {
C[i] = A[i] + B[i];
C[i+1] = A[i+1] + B[i+1];
C[i+2] = A[i+2] + B[i+2];
C[i+3] = A[i+3] + B[i+3];
}
Vectorizarlo, por otro lado, produce algo como esto:
for (int i=0; i<16; i+=4)
addFourThingsAtOnceAndStoreResult(&C[i], &A[i], &B[i]);
Donde "addFourThingsAtOnceAndStoreResult" es un marcador de posición para cualquier intrínseco (s) que use su compilador para especificar instrucciones vectoriales. Tenga en cuenta que algunos compiladores pueden auto vectorizar bucles muy simples como este, que a menudo se pueden habilitar a través de una opción de compilación. Algoritmos más complejos aún requieren la ayuda del programador para generar un buen código vectorial.
Varias veces, me he encontrado con este término en matlab, fortran ... algún otro ... pero nunca he encontrado una explicación de lo que significa, y ¿qué hace? Así que pregunto aquí, ¿qué es la vectorización y qué significa, por ejemplo, que "un bucle está vectorizado"?
Se refiere a la capacidad de hacer operaciones matemáticas simples en una lista, o "vector", de números en un solo paso. Lo ves a menudo con Fortran porque está asociado con la informática científica, que está asociada con la supercomputación, donde apareció por primera vez la aritmética vectorializada. Hoy en día, casi todas las CPU de escritorio ofrecen alguna forma de aritmética vectorizada, a través de tecnologías como la SSE de Intel. Las GPU también ofrecen una forma de aritmética vectorizada.
Vectorización es el término para convertir un programa escalar a un programa vectorial. Los programas vectorizados pueden ejecutar múltiples operaciones desde una sola instrucción, mientras que escalares solo pueden operar en pares de operandos a la vez.
De la wikipedia :
Enfoque escalar:
for (i = 0; i < 1024; i++)
{
C[i] = A[i]*B[i];
}
Enfoque vectorizado:
for (i = 0; i < 1024; i+=4)
{
C[i:i+3] = A[i:i+3]*B[i:i+3];
}
Ver las dos respuestas arriba. Solo quería agregar que la razón por la que quiero hacer la vectorización es que estas operaciones pueden realizarse fácilmente en forma paralela mediante superordenadores y multiprocesadores, produciendo una gran ganancia de rendimiento. En computadoras de un solo procesador no habrá ganancia de rendimiento.
La vectorización se utiliza en gran medida en la informática científica, donde grandes cantidades de datos deben procesarse de manera eficiente.
En la aplicación de programación real, sé que se usa en NUMPY (no estoy seguro de otro).
Numpy (paquete para informática científica en python), utiliza vectorización para una rápida manipulación de matriz n-dimensional, que generalmente es más lenta si se hace con opciones de python incorporadas para manejar matrices.
aunque hay toneladas de explicaciones disponibles, AQUÍ HAY QUE VECTORIZACIÓN SE DEFINE COMO EN LA NUMEROSA PÁGINA DE DOCUMENTACIÓN
La vectorización describe la ausencia de cualquier bucle explícito, indexación, etc., en el código; estas cosas se están produciendo, por supuesto, solo "detrás de escena" en el código C optimizado y precompilado. El código vectorizado tiene muchas ventajas, entre las que se encuentran:
el código vectorizado es más conciso y fácil de leer
menos líneas de código generalmente significan menos errores
el código se asemeja más a la notación matemática estándar (por lo que es más fácil, por lo general, codificar correctamente constructos matemáticos)
la vectorización da como resultado más código "Pythonic". Sin vectorización, nuestro código estaría plagado de bucles ineficientes y difíciles de leer.