Download Latest Version rspchecksum-code_3.2.8.7z (12.2 kB)
Email in envelope

Get an email when there's a new version of RSPchecksum

Home
Name Modified Size InfoDownloads / Week
readme.txt 2026-05-22 6.0 kB
rspchecksum-code_3.2.8.7z 2026-05-22 12.2 kB
juliete_rsp_checksum_dll_3.2.7 build_00233.7z 2024-12-20 1.6 MB
juliete_rsp_checksum_dll_3.2.6 build_00232.7z 2024-09-28 1.8 MB
juliete_rsp_checksum_dll_3.2.5 build_00231.7z 2024-03-18 1.7 MB
juliete_rsp_checksum_dll_3.2.2 build_00228.7z 2024-03-06 1.7 MB
juliete_rsp_checksum_dll_3.2.0 build_00226.7z 2024-03-02 1.6 MB
juliete_rsp_checksum_dll_2.6.7 build_00173.zip 2022-07-27 3.0 MB
juliete_rsp_checksum_dll_2.6.6 build_00172.zip 2022-05-15 2.8 MB
juliete_rsp_checksum_dll_2.6.5 build_00171_debug_version.zip 2021-10-05 1.5 MB
juliete_rsp_checksum_dll_1.8.5 build_00091_debug_version.zip 2021-10-05 1.5 MB
juliete_rsp_checksum_dll_1.8.4 build_00090.zip 2021-10-03 1.4 MB
juliete_rsp_checksum_dll_1.8.1_build_00087.zip 2020-12-21 1.9 MB
juliete_rsp_checksum_dll_1.5.9_build_00065.zip 2020-12-08 1.8 MB
juliete_rsp_checksum_dll_1.5.2_build_00058.zip 2020-12-07 1.9 MB
rsp_checksum_dll_1.0.0_build_0006.rar 2018-08-06 454.4 kB
rsp_checksum_dll_021_build_0005_src.7z 2011-05-20 173.2 kB
rsp_checksum_dll_020_build_0004_src.zip 2011-04-10 286.5 kB
rsp_checksum_ocx_284_alladin_special_release.zip 2010-03-10 323.2 kB
rsp_checksum_dll_011_build_0003_src.zip 2010-03-10 325.2 kB
rsp_checksum_dll_001_bild_0002_src.zip 2009-09-26 322.8 kB
Totals: 21 Items   25.9 MB 0
# rspchecksum-linux (v1.2.0)

## ?? Resumo
Este repositório apresenta as implementações oficiais dos algoritmos de checksum **RSP32, DS32 e DS64**, desenvolvidos e consolidados desde 2011 no projeto **rspchecksum** hospedado no SourceForge. O código-fonte nativo e otimizado para o ecossistema Linux encontra-se no diretório `files_linux`.

---

## ??? Notas de Engenharia e Arquitetura

### 1. Decisão Estratégica: Abandono do `io_uring`
Após testes rigorosos de estresse em hardware de desenvolvimento (PC doméstico/WSL 2), a implementação experimental de I/O assíncrono via `io_uring` proposta por agentes automatizados foi **desativada e removida**. 
* **Motivo:** O *overhead* de sincronização de filas (*Submission/Completion Queues*), disputas de threads do Kernel e trocas de contexto (*context switching*) causaram uma degradação intermitente de performance de **até 20x** em hardwares convencionais.
* **Solução:** O projeto mantém o foco exclusivo em I/O síncrono POSIX puro com gerenciamento de buffer via `glibc`, garantindo linearidade, estabilidade e previsibilidade.

### 2. Refatoração Crítica do Algoritmo DS32 Original
O motor do `ds32` foi atualizado para eliminar comportamentos indefinidos (*Undefined Behavior*) e otimizar a portabilidade cruzada entre o ambiente clássico do Windows e o Linux moderno:
* **Remoção de Efeitos Colaterais:** A inicialização da semente matemática (`0x63817989`) foi movida estritamente para **fora** da função. Isso eliminou um desvio condicional (`if`) redundante executado bilhões de vezes e blindou o algoritmo contra o "Bug do Zero Acidental", onde um hash intermediário legítimo igual a `0` resetava erroneamente o cálculo em processamentos por blocos (*streaming*).
* **Segurança de Alinhamento e Strict Aliasing (Endereço vs. Tamanho):** 
  O algoritmo foi desenhado sob duas premissas físicas de memória:
  1. *O Tamanho (`len`):* Pode assumir qualquer valor (par, ímpar ou fracionado). A lógica de cauda (`remaining_bytes`) gerencia e limpa com segurança restos de 1 a 3 bytes via buffer temporário estável. Tamanhos múltiplos de 4 oferecem ganho passivo de velocidade por pularem o desvio condicional da cauda.
  2. *O Endereço do Ponteiro (`buf`):* Para performance máxima da CPU, o buffer deve iniciar em um endereço alinhado na RAM (múltiplo de 4 bytes) para evitar cruzamento de linhas de cache.
  
  Substituiu-se o *cast* direto de ponteiros `(const uint32_t *)buf` por cópias de tamanho fixo via `memcpy`. Em compiladores modernos (GCC/Clang com `-O3`), o `memcpy` estático é fagocitado pelo otimizador e convertido em instruções nativas de registradores (`MOV/ADD`). Caso o ponteiro de entrada venha desalinhado por um fluxo externo, o compilador emite instruções seguras de leitura desalinhada (`MOVDQU`), impedindo um **Crash instantâneo (Alignment Fault)** no Linux e mantendo o binário estável.
* **Isolamento de Endianness:** Implementação de diretivas de pré-processador para arquiteturas de hardware (`__BYTE_ORDER__`). O código executa somas puras e diretas na velocidade máxima do silício em máquinas *Little Endian* (Intel/AMD), mas mantém a portabilidade determinística caso seja compilado em servidores *Big Endian*.

### 2.1. Introdução do Algoritmo DS64

Importante: O tamanho do buffer tem que ser sempre multiplo de 8

O **DS64** foi integrado como evolução natural do DS32, trazendo suporte nativo a registradores de 64 bits e maior robustez em cenários de dados extensos:
* **Compatibilidade:** Mantém a mesma lógica fundamental do DS32, garantindo hashes determinísticos e consistentes.
* **Performance:** Em testes sem otimização (`-O0`), o DS64 demonstrou até **100% de ganho de velocidade** em relação ao DS32. Com otimização (`-O3`), ambos atingem tempos equivalentes (~0.148s), provando estabilidade e ausência de regressão.
* **Hash Diferenciado:** O DS64 gera assinaturas distintas (ex.: `28091d2447539101`), confirmando operação em 64 bits sem perda de integridade.
* **Aplicações Futuras:** Ideal para cenários que exigem manipulação de grandes blocos de dados, alinhamento de memória em 64 bits e potencial integração com instruções vetoriais (SIMD/AVX).

### 3. Análise de Pipeline e Restrições do Algoritmo RSP32

Se o tamanho dos dados for multiplo de 256 e os dados forem o mesmo caracter seja ele qual seja o reultado sempre será o seed, ok, só fiquei sabendo disso hoje graças ao Copilot, se pra você isso é um problema então não use este checksum.

### 4. Resultados de Benchmark (Massa de Dados Aleatórios: ~15 GB na RAM)
Testes controlados utilizando dados puramente caóticos/aleatórios revelaram a eficiência da simplicidade matemática linear do `ds32` e `ds64` contra as outras soluções sob estresse severo:
* **[DS32 Otimizado]:** **0.155 segundos**  
* **[DS64 Otimizado]:** **0.148 segundos** (mesmo desempenho do DS32, mas com hash 64 bits distinto)  
* **[CRC32 Hardware SSE4.2]:** **3.040 segundos**  
* **[Adler32 Software]:** **7.470 segundos**  
* **[RSP32 Serial]:** **10.427 segundos**

---

## ?? Changelog

### - 2026-05-21 (v1.2.0)
#### Alterado
* **`ds32`:** Refatorada a assinatura da função para receber a semente externamente.
* **`ds64`:** Adicionado oficialmente ao projeto, com documentação de benchmarks e comportamento em 64 bits.
* **`rsp32`:** Integrada a assinatura da função com `restrict`.
* **Documentação:** Expandido o `README.md` para incluir o DS64 e seus resultados comparativos.

#### Removido
* **I/O:** Removida por completo a camada experimental do `io_uring`.

---

## ??? Roadmap

- [x] Benchmarks comparativos analíticos (Adler32 vs. CRC32 vs. DS32 vs. DS64 vs. RSP32)
- [ ] Configuração do Makefile automatizado
- [ ] Suporte oficial a Linux (`.so` com `-fPIC`)
- [ ] Multithread otimizado até 128 threads
- [ ] Escalar para até 512 threads
- [ ] Integração com instruções SHA aceleradas em hardware
- [ ] Documentação expandida com exemplos em CMake e POSIX
Source: readme.txt, updated 2026-05-22