compression activar - Biblioteca de compresión usando CUDA de Nvidia




gpu wikipedia (6)

No estoy enterado de que alguien haya hecho eso y lo haya hecho público. Solo en mi humilde opinión, no suena muy prometedor.

Como Martinus señala, algunos algoritmos de compresión son altamente seriales. Los algoritmos de compresión de bloques como LZW se pueden paralelizar codificando cada bloque de forma independiente. Ziping un gran árbol de archivos se puede paralelizar en el nivel de archivo.

Sin embargo, ninguno de estos es realmente el paralelismo estilo SIMD (Single Instruction Multiple Data), y no son masivamente paralelos.

Las GPU son básicamente procesadores vectoriales, donde puedes hacer cientos o miles de instrucciones ADD todo en el paso de bloqueo, y ejecutar programas donde hay muy pocas ramas dependientes de datos.

Los algoritmos de compresión en general suenan más como un modelo de programación SPMD (Single Program Multiple Data) o MIMD (Multiple Instruction Multiple Data), que se adapta mejor a la CPU multinúcleo.

Los algoritmos de compresión de video pueden acelerarse mediante el procesamiento GPGPU como CUDA solo en la medida en que haya un gran número de bloques de píxeles que se están transformando o convolucionando coseno (para detección de movimiento) en paralelo, y las subrutinas IDCT o convolución pueden expresarse con código sin sucursales

A las GPU también les gustan los algoritmos que tienen alta intensidad numérica (la relación entre operaciones matemáticas y accesos a memoria). Los algoritmos con baja intensidad numérica (como agregar dos vectores) pueden ser masivamente paralelos y SIMD, pero aún más lentos en la GPU que la CPU porque Estoy atado a la memoria.

¿Alguien conoce un proyecto que implementa métodos de compresión estándar (como Zip, GZip, BZip2, LZMA, ...) usando la biblioteca CUDA de NVIDIA?

Me preguntaba si los algoritmos que pueden hacer uso de muchas tareas paralelas (como la compresión) no se ejecutarían mucho más rápido en una tarjeta gráfica que con una CPU dual o quadcore.

¿Qué piensas sobre los pros y los contras de tal enfoque?



El 30% es bueno, pero para aplicaciones como copias de seguridad no es suficiente por mucho.

Mi experiencia es que el flujo de datos promedio en tales casos obtiene una compresión de 1.2-1.7: 1 usando gzip y termina limitado a una tasa de salida de 30-60Mb / s (esto es a través de una amplia gama de medios modernos (circa 2010-2012) CPU de gama alta.

La limitación aquí es, por lo general, la velocidad a la que los datos se pueden alimentar a la CPU.

Desafortunadamente, para mantener feliz a una unidad de cinta LTO5, necesita una velocidad de datos en bruto (no comprimible) de alrededor de 160Mb / s. Si se alimentan datos comprimibles, se requieren velocidades de datos aún más rápidas.

La compresión LTO es claramente mucho más rápida, pero algo ineficiente (equivalente a gzip -1 - es lo suficientemente bueno para la mayoría de los propósitos). Las unidades LTO4 y hacia arriba generalmente incorporan motores de cifrado AES-256 que también pueden mantener este tipo de velocidades.

Lo que esto significa para mi caso es que necesitaría una implementación de 400% o mejor para considerar que vale la pena.

Consideraciones similares se aplican a través de LAN. A 30 Mb / s, la compresión es un obstáculo en las redes de clase Gb y la pregunta es si gastar más en redes o en compresión ... :)


Hemos finalizado la primera fase de investigación para aumentar el rendimiento de los algoritmos de compresión de datos sin pérdida. Bzip2 fue elegido para el prototipo, nuestro equipo optimizó solo una operación, la transformación Burrows-Wheeler, y obtuvimos algunos resultados: aceleración 2x-4x en buenos archivos comprimibles. El código funciona más rápido en todas nuestras pruebas.

Vamos a completar bzip2, deflate support y LZMA para algunas tareas de la vida real como: tráfico HTTP y compresión de copias de seguridad.

enlace del blog: http://www.wave-access.com/public_en/blog/2011/april/22/breakthrough-in-cuda-data-compression.aspx


Normalmente, los algoritmos de compresión no pueden hacer uso de tareas paralelas, no es fácil hacer que los algoritmos sean altamente paralelables. En sus ejemplos, TAR no es un algoritmo de compresión, y el único algoritmo que puede ser altamente paralelizable es BZIP porque es un algoritmo de compresión de bloques. Cada bloque se puede comprimir por separado, pero esto requeriría mucha y mucha memoria. LZMA no funciona en paralelo tampoco, cuando se ve 7zip usando múltiples hilos esto se debe a que 7zip divide la secuencia de datos en 2 flujos diferentes que cada uno se comprime con LZMA en una secuencia separada, por lo que el algoritmo de compresión no es paralímpico. Esta división solo funciona cuando los datos lo permiten.


El siguiente es mi enfoque del problema y debo admitir que este fue un proyecto bastante interesante para trabajar, definitivamente está fuera de mi ámbito normal de trabajo y me ha dado algo nuevo para aprender.

La idea básica detrás de la mía es la siguiente:

  1. Realice una muestra de abajo de la imagen en escala de grises de manera que haya un total de 16 tonos diferentes
  2. Preforma RLE en la imagen
  3. Empaque los resultados en los caracteres UTF-16
  4. Preforme RLE en los resultados empaquetados para eliminar cualquier duplicación de caracteres

Resulta que esto funciona, pero solo hasta cierto punto, como se puede ver en las imágenes de muestra a continuación. En términos de resultados, lo que sigue es un tweet de muestra, específicamente para la imagen de Lena que se muestra en las muestras.

乤乤儂儂企倁企倁倃2 5 企 倁

Como puedes ver, intenté restringir un poco el conjunto de caracteres; sin embargo, tuve problemas al hacer esto al almacenar los datos de color de la imagen. Además, este esquema de codificación también tiende a desperdiciar un montón de bits de datos que podrían utilizarse para obtener información adicional de la imagen.

En términos de tiempos de ejecución, para imágenes pequeñas el código es extremadamente rápido, aproximadamente 55 ms para las imágenes de muestra proporcionadas, pero el tiempo aumenta con imágenes más grandes. Para la imagen de referencia de 512x512 de Lena, el tiempo de ejecución fue de 1182 ms. Debo tener en cuenta que las probabilidades son bastante buenas de que el código en sí no esté muy optimizado para el rendimiento (p. Ej., Todo se trabaja como un Bitmap ), por lo que los tiempos podrían disminuir un poco después de algunas refactorizaciones.

No dude en ofrecerme alguna sugerencia sobre lo que podría haber hecho mejor o qué podría estar mal con el código. La lista completa de tiempos de ejecución y resultados de muestra se puede encontrar en la siguiente ubicación: http://code-zen.info/twitterimage/

Actualización uno

He actualizado el código RLE utilizado al comprimir la cadena de tweet para hacer una revisión básica y, si es así, usarlo para la salida. Esto solo funciona para los pares de valores numéricos, pero guarda un par de caracteres de datos. El tiempo de ejecución es más o menos el mismo que la calidad de imagen, pero los tweets tienden a ser un poco más pequeños. Actualizaré la tabla en el sitio web a medida que complete la prueba. Lo que sigue es una de las cadenas de tweets de ejemplo, nuevamente para la versión pequeña de Lena:

乤企 伂 쥹 皗 鞹 鐾 륶 䦽 阹 럆 䧜 椿 籫 릹 靭 욶 옷뎷 歩 㰷 歉 䴗 鑹 㞳 鞷 㬼 獴 鏙 돗 鍴 祳 㭾 뤶 殞 焻 乹 Ꮛ 靆 䍼

Actualización dos

Otra pequeña actualización, pero modifiqué el código para agrupar los tonos de color en grupos de tres en lugar de cuatro, esto usa un poco más de espacio, pero a menos que me falte algo, debería significar que los caracteres "impares" ya no aparecen donde el color los datos son. Además, actualicé la compresión un poco más para que ahora pueda actuar sobre toda la cadena en lugar de solo el bloque de recuento de colores. Todavía estoy probando los tiempos de ejecución, pero parecen estar mejorados nominalmente; Sin embargo, la calidad de la imagen sigue siendo la misma. Lo que sigue es la versión más reciente del tweet de Lena:

2 2 企企 伂 坹 坼 坶 坻 刾 啩 容 力 吹 婩 媷 劝 圿 咶 坼 妛 啭 奩 嗆 婣 冷 咛 啫 凃 奉 佶 坍 均 喳 女 媗 决 兴宗 喓 夽 兴 唹 屹 冷 圶 埫 奫 唓 坤 喝 奎 似商 嗉 乃

Logo http://code-zen.info/twitterimage/images/-logo.bmp Cornell Box http://code-zen.info/twitterimage/images/cornell-box.bmp Lena http: // code-zen .info / twitterimage / images / lena.bmp Mona Lisa http://code-zen.info/twitterimage/images/mona-lisa.bmp







cuda compression gpgpu