Skip to content

Commit be7c96f

Browse files
committed
release v1.1.0
1 parent cae7a12 commit be7c96f

7 files changed

Lines changed: 131 additions & 116 deletions

File tree

.github/workflows/ci.yml

Lines changed: 0 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -43,12 +43,6 @@ jobs:
4343
cd build
4444
ctest --output-on-failure --verbose -R "^test_(features|vector_ops|thread_safe_detection|resolver_macro)$"
4545
46-
- name: Run benchmarks
47-
if: matrix.build-type == 'Release'
48-
run: |
49-
cd build/bench
50-
./benchmark_vector_mul || true
51-
5246
- name: List features
5347
run: |
5448
cmake -B build-list -DLIST_FEATURES=ON || true
@@ -131,12 +125,6 @@ jobs:
131125
cd build
132126
ctest --output-on-failure --verbose -R "^test_(features|vector_ops|thread_safe_detection|resolver_macro)$"
133127
134-
- name: Run benchmarks
135-
if: matrix.build-type == 'Release'
136-
run: |
137-
cd build/bench
138-
./benchmark_vector_mul || true
139-
140128
build-and-test-cpp-clang:
141129
name: C++ Tests (Clang ${{ matrix.clang-version }}, ${{ matrix.build-type }})
142130
runs-on: ubuntu-latest

.github/workflows/packaging.yml

Lines changed: 7 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -30,15 +30,15 @@ jobs:
3030
3131
deb:
3232
name: Build DEB packages
33-
runs-on: ubuntu-22.04
33+
runs-on: ubuntu-24.04
3434
needs: version
3535

3636
steps:
3737
- name: Install dependencies
3838
run: |
3939
sudo apt-get update
4040
sudo apt-get install -y \
41-
gcc-13 g++-13 cmake \
41+
gcc g++ cmake \
4242
dpkg-dev fakeroot
4343
4444
- name: Checkout
@@ -48,8 +48,6 @@ jobs:
4848
run: |
4949
cmake -B build \
5050
-DCMAKE_BUILD_TYPE=Release \
51-
-DCMAKE_C_COMPILER=gcc-13 \
52-
-DCMAKE_CXX_COMPILER=g++-13 \
5351
-DCMAKE_INSTALL_PREFIX=/usr
5452
cmake --build build -j$(nproc)
5553
@@ -60,18 +58,9 @@ jobs:
6058
mkdir -p "${PKG_DIR}/usr/share/doc/libdynemit"
6159
mkdir -p "${PKG_DIR}/DEBIAN"
6260
63-
# Install shared libraries (runtime)
61+
# Install shared library (runtime) - all-in-one library only
6462
cp build/libdynemit.so.${{ needs.version.outputs.version }} "${PKG_DIR}/usr/lib/"
6563
ln -s libdynemit.so.${{ needs.version.outputs.version }} "${PKG_DIR}/usr/lib/libdynemit.so.1"
66-
67-
cp build/src/libdynemit_core.so.${{ needs.version.outputs.version }} "${PKG_DIR}/usr/lib/"
68-
ln -s libdynemit_core.so.${{ needs.version.outputs.version }} "${PKG_DIR}/usr/lib/libdynemit_core.so.1"
69-
70-
find build/features -name "*.so.${{ needs.version.outputs.version }}" -exec cp {} "${PKG_DIR}/usr/lib/" \;
71-
for lib in "${PKG_DIR}"/usr/lib/*.so.${{ needs.version.outputs.version }}; do
72-
base=$(basename "$lib" .so.${{ needs.version.outputs.version }})
73-
ln -s "$(basename $lib)" "${PKG_DIR}/usr/lib/${base}.so.1"
74-
done
7564
7665
# Install documentation
7766
cp README.md "${PKG_DIR}/usr/share/doc/libdynemit/"
@@ -96,18 +85,13 @@ jobs:
9685
mkdir -p "${PKG_DIR}/usr/share/doc/libdynemit-dev"
9786
mkdir -p "${PKG_DIR}/DEBIAN"
9887
99-
# Install static libraries
88+
# Install all static libraries (all-in-one, core, and features)
10089
cp build/libdynemit.a "${PKG_DIR}/usr/lib/"
10190
cp build/src/libdynemit_core.a "${PKG_DIR}/usr/lib/"
10291
find build/features -name "*.a" -exec cp {} "${PKG_DIR}/usr/lib/" \;
10392
104-
# Install development symlinks for shared libraries
93+
# Install development symlink for shared library
10594
ln -s libdynemit.so.1 "${PKG_DIR}/usr/lib/libdynemit.so"
106-
ln -s libdynemit_core.so.1 "${PKG_DIR}/usr/lib/libdynemit_core.so"
107-
for lib in build/features/*/*.so.${{ needs.version.outputs.version }}; do
108-
base=$(basename "$lib" .so.${{ needs.version.outputs.version }})
109-
ln -s "${base}.so.1" "${PKG_DIR}/usr/lib/${base}.so"
110-
done
11195
11296
# Install headers
11397
cp include/dynemit.h "${PKG_DIR}/usr/include/"
@@ -172,12 +156,10 @@ jobs:
172156
# Copy built libraries
173157
mkdir -p ~/rpmbuild/BUILD/build
174158
175-
# Shared libraries
159+
# Shared library (all-in-one only)
176160
cp build/libdynemit.so.${{ needs.version.outputs.version }} ~/rpmbuild/BUILD/build/
177-
cp build/src/libdynemit_core.so.${{ needs.version.outputs.version }} ~/rpmbuild/BUILD/build/
178-
find build/features -name "*.so.${{ needs.version.outputs.version }}" -exec cp {} ~/rpmbuild/BUILD/build/ \;
179161
180-
# Static libraries
162+
# All static libraries (all-in-one, core, and features)
181163
cp build/libdynemit.a ~/rpmbuild/BUILD/build/
182164
cp build/src/libdynemit_core.a ~/rpmbuild/BUILD/build/
183165
find build/features -name "*.a" -exec cp {} ~/rpmbuild/BUILD/build/ \;

.github/workflows/release.yml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -141,7 +141,7 @@ jobs:
141141
REPO_URL="https://github.com/${{ github.repository }}"
142142
RELEASE_URL="${REPO_URL}/releases/download/${TAG}"
143143
144-
cat > release_notes.md << 'RELEASE_NOTES_EOF'
144+
cat > release_notes.md << RELEASE_NOTES_EOF
145145
A high-performance SIMD library that leverages ifunc resolvers for automatic runtime dispatch. Write portable code that automatically uses the best SIMD instructions available on your CPU.
146146
147147
**Key features:**

CITATION.cff

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -12,8 +12,8 @@ repository-code: "https://github.com/MuriloChianfa/libdynemit"
1212
url: "https://github.com/MuriloChianfa/libdynemit"
1313
license: "BSL-1.0"
1414
license-url: "https://www.boost.org/LICENSE_1_0.txt"
15-
version: "1.0.0"
16-
date-released: "2026-01-10"
15+
version: "1.1.0"
16+
date-released: "2026-02-15"
1717
keywords:
1818
- SIMD
1919
- AVX-512

CMakeLists.txt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
cmake_minimum_required(VERSION 3.16)
22
project(simd-dynamic-dispatch
3-
VERSION 1.0.0
3+
VERSION 1.1.0
44
DESCRIPTION "SIMD Dynamic Dispatch Library"
55
LANGUAGES C
66
)

README.md

Lines changed: 103 additions & 58 deletions
Original file line numberDiff line numberDiff line change
@@ -32,6 +32,94 @@ vector_mul_f32(a, b, result, n);
3232
![SIMD Feature Comparison](docs/img/benchmark_vector_mul_feature_compare.png)
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
85174
make
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
92182
cd build
93183
sudo 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:
547645
5. **Update main CMakeLists.txt**: Add to `dynemit` all-in-one library
548646
6. **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

605650
Contributions are welcome! Areas for improvement:

0 commit comments

Comments
 (0)