A Socratic exploration of ARM v8 SIMD instructions using the NEON architecture.
This project provides a structured approach to learning and experimenting with ARM NEON SIMD programming through a Socratic method. Instead of just presenting code examples, it guides you through discovering how SIMD works on ARM architectures by asking questions and exploring implementations.
- Cross-platform support (Raspberry Pi, Apple Silicon, FreeBSD, Android)
- Comprehensive testing framework for SIMD operations
- Performance comparison between scalar and SIMD implementations
- Interactive explorer tool for experimentation
- Docker-based development environment for consistent testing
- Detailed documentation with a Socratic learning approach
- ARMv8-A compatible processor (aarch64/ARM64)
- GCC or Clang compiler with ARM NEON support
- Make for building
- (Optional) Docker for containerized development
# Clone the repository
git clone https://github.com/aygp-dr/armv8-neon-explorer.git
cd armv8-neon-explorer
# Install prerequisites
./prerequisites.sh
# Build the project
make all
# Run tests
make test
# Run examples
./bin/vector_add_example
./bin/dot_product_example# Clone the repository
git clone https://github.com/aygp-dr/armv8-neon-explorer.git
cd armv8-neon-explorer
# Build the Docker container
./container.sh build
# Start a shell in the container
./container.sh shell
# Build and run within the container
make all
make testsrc/- Core SIMD operation implementationsinclude/- Header files and utility functionsexamples/- Example programs demonstrating SIMD usagetests/- Test suite for verificationtools/- Development and helper toolsdocs/- Documentation and references
Detailed documentation is available in the docs/ directory:
The project includes an interactive tool for experimenting with NEON operations:
# Build the explorer
make -C tools
# Run the explorer
./tools/neon_explorerUse help command within the explorer for available operations.
This project follows a Socratic approach to learning:
- Start with the basic vector operations in
examples/vector_add_example.c - Progress to more complex operations like dot products
- Explore advanced image processing techniques
- Understand performance considerations and trade-offs
- Experiment with your own SIMD implementations
MIT License
Aidan Pace - apace@defrecord.com