Frequently Asked Questions
General
What is Aicraft?
Aicraft is a complete deep-learning framework written entirely in pure C (C11). It features SIMD-optimised kernels, Vulkan GPU acceleration, automatic differentiation, and requires zero external dependencies.
Why C instead of C++ or Python?
- Portability: C compiles everywhere — from x86 servers to ARM microcontrollers
- Control: No hidden allocations, no garbage collection, deterministic memory
- Integration: Easy to embed in any language via FFI
- Simplicity: One file, one compiler, done
Is it production-ready?
Aicraft is suitable for edge inference and embedded systems. For large-scale training (millions of parameters, huge datasets), consider using GPU clusters with Python frameworks. Aicraft excels in:
- Embedded/IoT inference
- Research prototyping
- Educational purposes
- Latency-critical applications
Installation
Do I need to install anything?
No. Aicraft is header-only. Just clone and include:
#include "aicraft/aicraft.h"
What compilers are supported?
- GCC 7+ (recommended)
- Clang 6+
- MSVC 2019+
Does it work on Windows?
Yes. Use MSVC or MinGW-w64. For Vulkan, install the Vulkan SDK.
Performance
How do I enable SIMD?
Pass the appropriate compiler flag:
# AVX2 (most modern x86)
gcc -O3 -mavx2 ...
# AVX-512 (Intel Xeon, some i9)
gcc -O3 -mavx512f ...
# ARM NEON (Raspberry Pi, Apple Silicon via Rosetta)
gcc -O3 -mfpu=neon ...
Aicraft auto-detects available SIMD at compile time.
How do I use the GPU?
ac_init();
ac_vulkan_init(); // Enable Vulkan backend
// ... your code ...
ac_vulkan_cleanup();
ac_cleanup();
Requires Vulkan SDK installed on your system.
Why is my model slow?
Common issues:
- No SIMD flags: Add
-mavx2or-mfpu=neon - Debug build: Use
-O3, not-O0 - Small batch size: SIMD shines with batch ≥ 32
- Memory allocation in loop: Use
ac_mem_checkpoint()/ac_mem_restore()
Training
How do I train a model?
AcLayer *net[] = {
ac_dense(784, 128, AC_RELU),
ac_dense(128, 10, AC_SOFTMAX)
};
AcOptimizer *opt = ac_adam(net, 2, 0.001f);
for (int i = 0; i < epochs; i++) {
AcTensor *pred = ac_forward_seq(net, 2, input);
AcTensor *loss = ac_cross_entropy(pred, target);
ac_backward(loss);
ac_optimizer_step(opt);
}
See the Training Guide for details.
What optimisers are available?
ac_sgd(layers, n, lr)— Stochastic Gradient Descentac_sgd_momentum(layers, n, lr, momentum)— SGD with momentumac_adam(layers, n, lr)— Adam (recommended)ac_adamw(layers, n, lr, weight_decay)— AdamW with decoupled weight decay
What loss functions exist?
ac_mse(pred, target)— Mean Squared Errorac_cross_entropy(pred, target)— Categorical Cross-Entropyac_binary_cross_entropy(pred, target)— Binary Cross-Entropyac_huber(pred, target, delta)— Huber loss
Memory
How does memory management work?
Aicraft uses an arena allocator. All tensors are allocated from a single memory pool.
ac_mem_checkpoint(); // Mark current position
// ... allocate tensors ...
ac_mem_restore(); // Free all tensors since checkpoint
This prevents memory leaks in training loops.
My program runs out of memory
- Use
ac_mem_checkpoint()/ac_mem_restore()in your training loop - Reduce batch size
- For very large models, increase arena size:
ac_init_with_arena(1024 * 1024 * 512)// 512 MB
Deployment
How do I save/load a model?
// Save
ac_save_weights(net, num_layers, "model.bin");
// Load
ac_load_weights(net, num_layers, "model.bin");
How do I quantise to INT8?
ac_quantize_model(net, num_layers, AC_QUANT_INT8);
ac_save_weights(net, num_layers, "model_int8.bin");
See Edge Deployment for details.
Can I run on Raspberry Pi / ARM?
Yes. Compile with:
arm-linux-gnueabihf-gcc -O3 -mfpu=neon your_code.c -I./include -o program
Troubleshooting
I get NaN values during training
Common causes:
- Learning rate too high: Try
0.0001instead of0.01 - Exploding gradients: Add gradient clipping
- Bad data: Check for NaN/Inf in your input
Debug with:
ac_tensor_print(tensor); // Print tensor values
ac_tensor_has_nan(tensor); // Returns true if NaN present
Compilation errors about missing headers
Make sure you pass -I./include (path to Aicraft's include folder).
Vulkan not found
- Install Vulkan SDK from https://vulkan.lunarg.com/
- Ensure
VULKAN_SDKenvironment variable is set - Add
-lvulkanto your linker flags
Contributing
Where's the source code?
https://github.com/TobiasTesauri/Aicraft
How can I contribute?
- Fork the repo
- Create a feature branch
- Submit a pull request
See the README for coding guidelines.