Gpuzip
GPUZIP est un format d'archive expérimental sans perte et un gestionnaire d'archive Windows qui combine des transformations de données réversibles, une...
Choisir une liste...
GPUZIP
GPUZIP est un produit expérimentalformat d'archive sans perte et gestionnaire d'archive Windowsqui combine des transformations de données réversibles, une sélection adaptative de transformations par bloc, la compression de Brotli, le déchargement optionnel de CUDA et le moteur 7-Zip officiel.
Le projet est conçu autour d'une idée simple:il n'y a pas de transformation de prétraitement unique qui soit la meilleure pour tous les types de données. Au lieu de forcer une méthode sur toute l'archive, GPUZIP évalue plusieurs pipelines de transformation réversibles pour chaque bloc et conserve la représentation qui produit le plus petit résultat.
État :GPUZIP et le.gpuzformat sont expérimentaux. Le choix du pipeline adaptatif décrit ci-dessous est propre au projet. Les idées sous-jacentes, la prédiction de Delta, la prédiction de XOR, le shuffling d'octets et Brotli, sont des techniques établies et sont référencées dans les documents ci-dessous.
Faits marquants
- Sans perte
.gpuzformat d'archive. - Sélection de transformations adaptativespar bloc.
- La prédiction d'octet-delta et d'octet-XOR.
- prévision de word-delta 16, 32 et 64 bits.
- 16-, 32- et 64-bit octets shuffling.
- EnsembleDelta + Shuffleles pipelines pour les données numériques structurées.
- Brotli comme dernière phase de compression entropie/LZ.
- Recul brut lorsque la compression rendrait un bloc plus grand.
- Accélération NVIDIA CUDA en option pour les candidats à la transformation.
- Renversement du processeur en tout temps; décodage faitpasbesoin de CUDA.
- Vérification par bloc SHA-256.
- Intégration 7-Zip pour
7z,zip,tar,gzip,bzip2,xzet les formats pris en charge pour l'extraction par le moteur 7-Zip groupé.
Les.gpuzpipeline de compression
GPUZIP utilise actuellement une taille de bloc par défaut de4 Mio. Chaque bloc est traité indépendamment.
Input data
|
v
Split into blocks
|
v
Generate reversible candidates
|
+--> No transform
+--> Byte Delta
+--> Byte XOR
+--> Byte Shuffle 2 / 4 / 8
+--> Word Delta 2 / 4 / 8
+--> Word Delta + matching Byte Shuffle
|
v
Fast Brotli probe of every candidate
|
v
Keep the most promising candidates
|
v
Final high-quality Brotli compression
|
v
Compare with uncompressed block
|
+--> Store smallest representation
|
v
Store transform metadata + SHA-256
La mise en œuvre se trouve dansBlockCodec.csetReversibleTransforms.cs.
Méthodes de compression
1. Prévision du delta des octets
Pour une séquence d'octets
x0, x1, x2, x3, ...
GPUZIP stocke une représentation réversible de la différence de premier ordre :
x0, x1-x0, x2-x1, x3-x2, ...
avec arithmétique effectué modulo 256.
Ceci est utile lorsque les valeurs des octets voisins changent lentement. Au lieu de présenter le compresseur moteur avec une séquence de grandes valeurs absolues, il produit souvent de nombreuses différences petites ou répétées.
Les octets originaux sont reconstruits exactement par addition cumulative, de sorte que la transformation est totalement sans perte.
2. Prévisions d'octets XOR
GPUZIP teste également un prédicteur XOR :
x0, x1 XOR x0, x2 XOR x1, x3 XOR x2, ...
La prédiction de XOR peut exposer des patrons de bits répétés lorsque les valeurs adjacentes sont similaires. De longues séries de valeurs égales ou presque égales peuvent devenir nulles ou plus régulières, ce qui peut améliorer le compresseur suivant.
La transformation est exactement réversible parce que chaque octet original est récupéré en utilisant l'octet reconstruit précédemment.
3. Prévision du delta des mots: 16 / 32 / 64 bit
Les données scientifiques, numériques et structurées binaires se composent souvent de mots entiers ou flottants multioctets plutôt que d'octets individuels indépendants.
GPUZIP interprète donc un bloc comme des mots peu endiens de:
- 2 octets / 16 bits
- 4 octets / 32 bits
- 8 octets / 64 bits
et calcule la différence modulaire entre les mots consécutifs.
Pour les mots 32 bits, conceptuellement :
w0, w1, w2, w3
|
v
w0, w1-w0, w2-w1, w3-w2
Cela préserve la corrélation des valeurs numériques dactylographiées mieux que le codage delta par octets pour de nombreux ensembles de données.
4. Shuffle d'octets: 16 / 32 / 64 bits
Le shuffling d'octets réorganise les valeurs multi-octets par position d'octets.
Pour quatre valeurs de 32 bits stockées comme:
[A0 A1 A2 A3] [B0 B1 B2 B3] [C0 C1 C2 C3] [D0 D1 D2 D3]
Le shuffle à 4 octets de GPUZIP produit :
A0 B0 C0 D0 | A1 B1 C1 D1 | A2 B2 C2 D2 | A3 B3 C3 D3
Cela ne compresse pas les données en soi. Il réorganise les octets de sorte que les octets ayant la même signification soient adjacents. Dans les tableaux d'entiers ou de nombres flottants, les voies d'octets correspondantes ont souvent des propriétés statistiques similaires, permettant au compresseur suivant de trouver des modèles plus longs et plus réguliers.
Essais GPUZIP2, 4 et 8 octets.
5. Canalisations Delta + Shuffle
GPUZIP teste également les prédicteurs combinés:
DeltaWord16 -> ByteShuffle2
DeltaWord32 -> ByteShuffle4
DeltaWord64 -> ByteShuffle8
Les deux opérations attaquent différents types de redondance:
- Deltasupprime la corrélation entre les valeurs numériques consécutives.
- Chouxgroupe les voies d'octets correspondantes des deltas résultants.
Cette combinaison peut être particulièrement efficace pour les tableaux, les données des capteurs, les mesures scientifiques, les résultats de simulation et d'autres données binaires structurées.
6. Moteur Brotli
Après chaque candidat réversible est généré, GPUZIP utiliseBrotlicomme le dernier compresseur sans perte.
La recherche approfondie effectue d'abord une sonde Brotli de faible qualité pour tous les pipelines candidats, les classe par la taille résultante, puis recompresse les meilleurs candidats à la qualité finale configurée. La qualité finale par défaut Brotli est actuellement11.
Brotli combine lui-même le codage des dictionnaires/renvois LZ avec le codage entropy. GPUZIP ne modifie pas le format Brotli; les transformations fonctionnentavantBrotli.
7. Sélection adaptative par bloc
C'est la conception centrale de la.gpuzcodec.
Une transformation qui aide un tableau à virgule flottante peut aggraver un bloc JPEG, ZIP ou crypté déjà compressé. GPUZIP ne suppose donc pas qu'une transformation soit globalement optimale.
Pour chaque bloc, il évalue plusieurs candidats et ne stocke que le meilleur résultat. L'ensemble des candidats comprend actuellement:
Un modèle prévu
-- -- -- -- -- --
Raw / no transform
AutresDeltaByteLes courants d'octets changent lentement
AutresXorByteValeurs adjacentes avec des modèles de bits similaires
AutresByteShuffle2valeurs structurées 16 bits
autresByteShuffle4valeurs structurées 32 bits
autresByteShuffle8valeurs structurées 64 bits
autresDeltaWord2Valeurs corrélées 16 bits
AutresDeltaWord4Valeurs corrélées 32 bits
AutresDeltaWord8Valeurs corrélées de 64 bits
AutresDeltaWord2 + ByteShuffle2Tableaux numériques corrélés 16 bits
AutresDeltaWord4 + ByteShuffle4Tableaux numériques corrélés 32 bits
AutresDeltaWord8 + ByteShuffle8Tableaux numériques corrélés 64 bits
Si aucun des candidats compressés ne bat le bloc original, GPUZIP stocke le bloc sans compression Brotli. Cela empêche la recherche adaptative d'élargir inutilement les données incompressibles.
Accélération CUDA
CUDA est utilisé commedéchargeur de calcul optionnel, pas pour remplacer le CPU.
Le CPU reste responsable de la structure des archives, de la sélection des candidats, du Brotli, des E/S et du flux de contrôle. Pour des blocs suffisamment grands, des transformations réversibles prises en charge peuvent être générées sur un GPU NVIDIA via l'API pilote CUDA.
L'actuel moteur CUDA accélère la génération de candidats byte-delta et byte-XOR. La mise en œuvre du CPU demeure la référence.
CPU
|-- file I/O
|-- block management
|-- candidate ranking
|-- Brotli
|
+---- large suitable transform ----> CUDA GPU
|
+--> Delta/XOR candidate
|
CPU <---------------------------------+
Cette architecture a deux conséquences importantes :
- Une machine sans GPU NVIDIA peut encore créer et extraire
.gpuzles archives. - A
.gpuzarchive créée avec CUDA peut être décodé sur un système CPU seulement parce que l'archive stocke l'identité de transformation, pas le code de sortie spécifique GPU.
Intégrité et décodage bit-exact
Chaque bloc codé stocke un digest SHA-256 du bloc non compressé original. Pendant l'extraction GPUZIP reconstruit les octets originaux et vérifie le digest.
Les transformations elles-mêmes sont des permutations entières/octets ou des prédicteurs modulaires. Aucune approximation, quantification ou arrondie des points flottants n'est utilisée par le.gpuzcodec. Le format est donc destiné à êtrebit-exact et sans perte.
Informations scientifiques et documents connexes
La combinaison adaptative des transformations candidates de GPUZIP est un projet expérimental. Les différents éléments de construction sont liés à des travaux établis en compression sans perte:
Brotli
J. Alakuijala, A. Farrugia, P. Ferragina, E. Kliuchnikov, R. Obryk, Z. Szabadka, L. Vandevenne — "Brotli: A General-Purpose Data Compressor, " ACM Transactions on Information Systems, 2019.
https://research.google/pubs/brotli-a-general-purpose-data-compressor/
Le format normalisé de données compressées Brotli est décrit dansRFC 7932:
https://www.rfc-editor.org/rfc/rfc7932.html
GPUZIP utilise Brotli comme compresseur final après ses transformations réversibles de prétraitement.
Shuffle / Bisthuffle pour données numériques dactylographiées
K. Masui et al. — Un schéma de compression pour les données radio dans le calcul haute performance, ► Astronomie et calcul 12 (2015), 181-190.
https://arxiv.org/abs/1503.00638
L'article présente le bishuffle pour les données numériques scientifiques et démontre l'avantage général de réorganiser les plans corrélés bit/byte avant un compresseur conventionnel. GPUZIP exécute actuellementniveau d'octetshuffling plutôt que l'algorithme de bithuffle de l'article, de sorte que cet article devrait être compris comme un fond étroitement lié plutôt qu'une implémentation identique.
Prévisions Delta et XOR
T. Pelkonen et consorts — Gorilla: A Fast, Scalable, In-Memory Time Series Database, (en anglais seulement) Proceedings of the VLDB Endowment 8(12), 2015.
https://doi.org/10.14778/2824032.2824078
Gorilla utilise le codage par horodatage à base de delta et le codage par point flottant à base de XOR pour exploiter la similitude entre les valeurs consécutives. Les prédicteurs octets/mots de GPUZIP sont des implémentations différentes pour les blocs binaires généraux, mais ils reposent sur le même principe général : transformer les valeurs voisines corrélées en une représentation avec une entropie apparente plus faible avant le codage final.
Manteau d'octets de style HDF5
Le filtre Shuffle HDF5 documente le même réarrangement par voie d'octets utilisé par GPUZIPByteShuffle2/4/8transforms: les octets correspondants des valeurs multioctets sont regroupés avant compression.
https://support.hdfgroup.org/documentation/hdf5/latest/group d c p l.html
Pourquoi ne pas simplement utiliser un compresseur?
Les compresseurs à usage général sont délibérément data-agnostiques. Ils ne reconnaissent pas toujours la structure de niveau supérieur comme un courant de mesures 32 bits peu endiennes.
GPUZIP ajoute une petite couche de modélisation réversible avant Brotli:
structured bytes
|
v
reversible modeling
|
v
more regular byte stream
|
v
Brotli
La partie importante est la décision d'adaptation. Un prédicteur n'est utilisé que lorsque sa représentation comprimée mesurée gagne pour ce bloc.
Compatibilité 7-Zip
GPUZIP regroupe également le moteur 7-Zip officiel. L'interface graphique peut créer des formats communs tels que:
- 7z
- ZIP
- TAR
- GZip
- BZip2
- XZ
et peut parcourir / tester / extraire des formats pris en charge par le7zz.exe, y compris l'extraction RAR/RAR5 où elle est supportée par 7-Zip.
Les.gpuzformat lui-même est indépendant de 7-Zip et est implémenté dansGpuZip.Core.
Construire
La compilation de Windows est automatisée avec GitHub Actions. Le flux de travail de sortie construit l'application WinUI 3, exécute les auto-tests du projet et le test de fumée de démarrage, crée le lanceur OneFile auto-extractible, génère une attestation Artifact GitHub et télécharge le résultatGPUZIP.exeartefact.
Pour une version locale de PowerShell :
cd CUDA
.\build-release.ps1
Présentation des sources
CUDA/
├─ src/GpuZip.Core/ .gpuz codec, transforms, CUDA backend, 7-Zip adapter
├─ src/GpuZip.Cli/ command-line interface and diagnostics
├─ src/GpuZip.App/ WinUI 3 desktop application
├─ src/GpuZip.Launcher/ self-extracting OneFile launcher
├─ tests/ self-tests and benchmarks
├─ third_party/7zip/ official upstream 7-Zip source
└─ build-release.ps1 release build script
Terminologie importante
GPUZIP ne doit pas être interprété comme affirmant que le codage Delta, le codage XOR, le shuffling octet ou Brotli sont des algorithmes nouvellement inventés. La contribution expérimentale du projet estparticulier.gpuzformat de bloc, ensemble de candidats, stratégie adaptative de sonde et de sélection, déchargement optionnel CUDA et intégration de ces composants dans un pipeline d'archives sans perte.
Licence
Le code original de GPUZIP est fourni sous la licence MIT.
La source 7-Zip groupée et les binaires conservent leurs conditions de licence LGPL/BSD/unRAR en amont. VoirCUDA/THIRD-PARTY-NOTICES.mdetCUDA/7zip-license.txt.