@@ -32,6 +32,94 @@ vector_mul_f32(a, b, result, n);
3232
3333*Performance scaling comparison of different SIMD instruction sets on the same CPU (AMD Ryzen 9 9950X3D). This benchmark demonstrates the progressive performance improvements from Scalar → SSE2 → SSE4.2 → AVX → AVX2 → AVX-512F. Each implementation was built and tested separately to isolate the impact of each SIMD level. The chart shows ~1.8x speedup from AVX-512F compared to scalar code for large arrays. Lower execution time indicates better performance. Each data point represents the median of 10 trials, with error bars showing ±1 standard deviation.*
3434
35+ ## Installation
36+
37+ ### Option 1: Pre-built Packages
38+
39+ Download pre-built packages from [GitHub Releases](https://github.com/MuriloChianfa/libdynemit/releases).
40+
41+ <details open>
42+ <summary><b>Debian/Ubuntu</b></summary>
43+
44+ ```bash
45+ wget https://github.com/MuriloChianfa/libdynemit/releases/download/v1.1.0/libdynemit_1.1.0_amd64.deb
46+ sudo dpkg -i libdynemit_1.1.0_amd64.deb
47+ ```
48+
49+ </details >
50+
51+ <details >
52+ <summary ><b >Fedora/RHEL</b ></summary >
53+
54+ ** Runtime package** :
55+
56+ ``` bash
57+ wget https://github.com/MuriloChianfa/libdynemit/releases/download/v1.1.0/libdynemit-1.1.0-1.fc40.x86_64.rpm
58+ sudo dnf install libdynemit-1.1.0-1.fc40.x86_64.rpm
59+ ```
60+
61+ </details >
62+
63+ #### Verify GPG Signatures
64+
65+ All packages are cryptographically signed with GPG for authenticity verification.
66+
67+ ** Import the maintainer's public key:**
68+
69+ ``` bash
70+ gpg --keyserver keys.openpgp.org --recv-keys 3E1A1F401A1C47BC77D1705612D0D82387FC53B0
71+ ```
72+
73+ <details >
74+ <summary ><b >Alternative key import options</b ></summary >
75+
76+ Using the shorter key ID:
77+
78+ ``` bash
79+ gpg --keyserver keys.openpgp.org --recv-keys 12D0D82387FC53B0
80+ ```
81+
82+ ** Alternative keyserver** (if ` keys.openpgp.org ` is unavailable):
83+
84+ ``` bash
85+ gpg --keyserver hkp://keyserver.ubuntu.com --recv-keys 3E1A1F401A1C47BC77D1705612D0D82387FC53B0
86+ ```
87+
88+ </details >
89+
90+ You should see output confirming the key was imported:
91+ ```
92+ gpg: key 12D0D82387FC53B0: public key "MuriloChianfa <murilo.chianfa@outlook.com>" imported
93+ gpg: Total number processed: 1
94+ gpg: imported: 1
95+ ```
96+
97+ ** Verify a package signature:**
98+
99+ ``` bash
100+ gpg --verify libdynemit_1.1.0_amd64.deb.asc libdynemit_1.1.0_amd64.deb
101+ ```
102+
103+ If the signature is valid, you should see:
104+ ```
105+ gpg: Signature made [date and time]
106+ gpg: using EDDSA key 3E1A1F401A1C47BC77D1705612D0D82387FC53B0
107+ gpg: Good signature from "MuriloChianfa <murilo.chianfa@outlook.com>"
108+ ```
109+
110+ If you see "BAD signature", ** do not use** the binary - it may have been tampered with or corrupted.
111+
112+ #### Verify Checksums
113+
114+ ``` bash
115+ curl -LO https://github.com/MuriloChianfa/libdynemit/releases/download/v1.1.0/SHA256SUMS
116+ curl -LO https://github.com/MuriloChianfa/libdynemit/releases/download/v1.1.0/SHA256SUMS.asc
117+ gpg --verify SHA256SUMS.asc SHA256SUMS
118+ sha256sum -c SHA256SUMS --ignore-missing
119+ ```
120+
121+ ### Option 2: Build from Source
122+
35123## Requirements
36124
37125<details open >
@@ -70,6 +158,7 @@ sudo pacman -S gcc cmake
70158
71159</details >
72160
161+
73162## Build Instructions
74163
75164``` bash
@@ -85,31 +174,40 @@ cmake .. -DCMAKE_BUILD_TYPE=Release
85174make
86175```
87176
88- ## Installation
177+ ### Installing from Source
178+
179+ After building, install the library and headers system-wide:
89180
90181``` bash
91- # Install library and headers
92182cd build
93183sudo make install
94184```
95185
96186<details >
97187<summary >View installed files</summary >
98188
99- ** Libraries** (6 options available):
189+ ** Shared library** :
190+ - ` /usr/local/lib/libdynemit.so.1.1.0 ` (versioned shared library)
191+ - ` /usr/local/lib/libdynemit.so.1 ` (SONAME symlink)
192+ - ` /usr/local/lib/libdynemit.so ` (development symlink)
193+
194+ ** Static libraries** :
100195- ` /usr/local/lib/libdynemit.a ` (all-in-one, includes all features)
101196- ` /usr/local/lib/libdynemit_core.a ` (just CPU detection)
102197- ` /usr/local/lib/libdynemit_vector_add.a ` (single feature)
103198- ` /usr/local/lib/libdynemit_vector_mul.a ` (single feature)
104- - ... and more
199+ - ` /usr/local/lib/libdynemit_vector_sub.a ` (single feature)
105200
106201** Headers:**
107202- ` /usr/local/include/dynemit.h ` (umbrella header)
108203- ` /usr/local/include/dynemit/core.h ` (CPU detection, SIMD levels)
109204- ` /usr/local/include/dynemit/err.h ` (safe IFUNC resolver utilities)
110205- ` /usr/local/include/dynemit/vector_add.h `
111206- ` /usr/local/include/dynemit/vector_mul.h `
112- - ... and more
207+ - ` /usr/local/include/dynemit/vector_sub.h `
208+
209+ ** Build system support:**
210+ - ` /usr/local/lib/pkgconfig/libdynemit.pc ` (pkg-config file)
113211
114212</details >
115213
@@ -547,59 +645,6 @@ Quick summary:
5476455 . ** Update main CMakeLists.txt** : Add to ` dynemit ` all-in-one library
5486466 . ** Update umbrella header** : Add ` #include <dynemit/your_feature.h> ` in ` include/dynemit.h `
549647
550- ## Verifying Binary Signatures
551-
552- libdynemit binaries are cryptographically signed with GPG for authenticity verification. To verify a downloaded binary:
553-
554- ### 1. Import the Public Key
555-
556- Import the maintainer's public key directly from the keyserver using the key fingerprint:
557-
558- ``` bash
559- gpg --keyserver keys.openpgp.org --recv-keys 3E1A1F401A1C47BC77D1705612D0D82387FC53B0
560- ```
561-
562- <details >
563- <summary ><b >Alternative options</b ></summary >
564-
565- Using the shorter key ID:
566-
567- ``` bash
568- gpg --keyserver keys.openpgp.org --recv-keys 12D0D82387FC53B0
569- ```
570-
571- ** Alternative keyserver** (if ` keys.openpgp.org ` is unavailable):
572-
573- ``` bash
574- gpg --keyserver hkp://keyserver.ubuntu.com --recv-keys 3E1A1F401A1C47BC77D1705612D0D82387FC53B0
575- ```
576-
577- </details >
578-
579- You should see output confirming the key was imported:
580- ```
581- gpg: key 12D0D82387FC53B0: public key "MuriloChianfa <murilo.chianfa@outlook.com>" imported
582- gpg: Total number processed: 1
583- gpg: imported: 1
584- ```
585-
586- ### 2. Verify the Signature
587-
588- Assuming you have downloaded both the binary (` libdynemit.a ` ) and its signature file (` libdynemit.a.asc ` ):
589-
590- ``` bash
591- gpg --verify libdynemit.a.asc libdynemit.a
592- ```
593-
594- If the signature is valid, you should see:
595- ```
596- gpg: Signature made [date and time]
597- gpg: using EDDSA key 3E1A1F401A1C47BC77D1705612D0D82387FC53B0
598- gpg: Good signature from "MuriloChianfa <murilo.chianfa@outlook.com>"
599- ```
600-
601- If you see "BAD signature", ** do not use** the binary - it may have been tampered with or corrupted.
602-
603648## Contributing
604649
605650Contributions are welcome! Areas for improvement:
0 commit comments