Navegando por
Etiqueta: compresor

PAQCompress v0.3.47 ya está disponible

PAQCompress v0.3.47 ya está disponible

Hola a todos,

Hoy he publicado la versión 0.3.47 de PAQCompress:

PAQCompress v0.3.47

Esta versión arregla los siguientes problemas:

  • Arreglado un problema en donde el programa no funcionaba si la opción «Show Command Prompt» estaba marcada y el programa estaba puesta en una localización que contenía espacios.
  • Arreglado la generación de los «Batch files» si el programa estaba puesto en una localización que contenía espacios.

Puedes descargar esta nueva versión en GitHub haciendo click aquí.

¡Disfruten!

PAQ8PX ahora corre en procesadores ARM

PAQ8PX ahora corre en procesadores ARM

Hola a todos,

En los pasados días, trabajé para lograr que el compresor PAQ8PX funcione en procesadores ARM. Inicialmente el programa no quería compilar porque dependía de unas instrucciones SSE2/SSSE3 que no existen en la arquitectura ARM. Esto requirió de añadir código NEON, que es el equivalente para esta arquitectura. Una vez logrado, el programa compiló y ejecutó sin problemas en los procesadores Snapdragon 845 y 865 CPU’s de mis celulares Samsung Galaxy S9+ y S20 Ultra:

paq8px_v187
paq8px_v186fix1 running on ARM

Probé el programa usando la aplicación Termux y corriendo ubuntu del proyecto AndroNix.

Los cambios que fueron hechos incluyeron añadir unas directrices #elif para ver si estabamos compilando en procesadores ARM. Esto fue añadido debajo de la directríz #id que verifica si estamos compilando en un procesador i386 o x86_64. Estas directrices verifican y añaden los archivos immintrin.h y arm_neon.h, respectivamente.

Hubieron 2 archivos principales que requirieron portar el código de SSE3/SSSE3 a NEON. En realidad, estos cambios no eran necesarios, pero al hacerlos, nos permite usar el procesador al máximo, usando estas instrucciones nativas.

Comencé modificando el archivo Mixer.hpp, que ya tenía código para SSE2 y AVX2.

Podemos ver que añadí 2 funciones principales y 2 de ayuda de la traducción:

Los archivos SimdMixer.hpp y MixerFactory.cpp requirieron añadir unos else if y otra condición para soportar los nuevos cambios:

SimdMixer.hpp

MixerFactory.cpp

El otro archivo que requirió portar código fue Bucket.hpp. También refactoricé el código para que ejecute código correspondiente a la arquitectura que estamos usando y que es especificada o detectada al ejecutar el programa:

También porté el código de SSSE3 a AVX2:

La función que tenía el código SSSE3 ahora se llama findSsse3:

Y aquí tenemos el código NEON:

Si no se detecta ningun SIMD o se especifica uno al ejecutar el programa, se ejecuta el código de la función findNone:

Finalmente, aquí está la función find original. Esta fue extendida para aceptar un segundo argumento con el SIMD a usar:

Este cambió también requirió modificar la función find en los archivos ContextMap.cpp y ContextMap2.cpp para que acepten este argumento.

simd.hpp

Este archivo requirió añadir unas directrices #ifdef:

Y si estamos compilando en ARM, devolvemos el valor 11:

Finalmente, en el archivo paq8px.cpp, actualicé el parametro -simd para que acepte el argumento neon:

Y esos fueron los cambios que realicé.

La última versión en estos momentos es paq8px v187. Esta versión es complatible con procesadores ARM e incluyen algunos arreglos.

Puedes seguir el progreso del programa en el foro encode.su haciendo click aquí.