mirror of
https://github.com/guzba/nimsimd
synced 2026-01-08 07:21:05 +00:00
No description
|
|
||
|---|---|---|
| .github/workflows | ||
| examples | ||
| src | ||
| tests | ||
| .gitignore | ||
| LICENSE | ||
| nimsimd.nimble | ||
| README.md | ||
nimsimd
nimble install nimsimd
This repo provides pleasant Nim bindings for various SIMD instructions.
Each SIMD instruction set is in its own file for importing.
x86
| Instruction Set | Bindings |
|---|---|
| SSE | ✅ |
| SSE2 | ✅ |
| SSE3 | ✅ |
| SSSE3 | ✅ |
| SSE4.1 | ✅ |
| SSE4.2 | ✅ |
| AVX | ✅ |
| AVX2 | ✅ |
| PCLMULQDQ | ✅ |
| BMI1 | ✅ |
| BMI2 | ✅ |
| F16C | ✅ |
| MOVBE | ✅ |
| MOVBE | ✅ |
| POPCNT | ✅ |
| FMA | ✅ |
Compiler flags
Some instruction sets require additional compiler flags to compile. I suggest
putting any code that uses these instructions into its own .nim file and adding a localPassc pragma to the top of that file as needed, such as:
import nimsimd/sse42
when defined(gcc) or defined(clang):
{.localPassc: "-msse4.2".}
...
Runtime check
You can also check if instruction sets are available at runtime:
import nimsimd/runtimecheck
echo checkInstructionSets({SSE41, PCLMULQDQ})
ARM
NEON bindings are started but experimental. Much to learn here about versioning and compilers.
Uses of nimsimd
- Pixie uses SIMD for faster 2D drawing.
- Crunchy uses SIMD for faster hashing and checksums.
- Noisy uses SIMD to accelerate generating coherent noise.
Testing
nimble test