The Future of Programming
Power Your AI Applications with Unmatched Performance
Emma is a programming language specifically designed to accelerate AI and machine learning development. Inspired by the intuitive syntax of Swift and engineered for the blazing-fast performance of C, Emma delivers cutting-edge capabilities to meet the demands of modern AI workloads.
Intuitive Syntax
Enjoy a clean, readable syntax without compromising on speed. From prototype to production, your code will be easy to understand and maintain.
Native Async/Await
Effortlessly handle asynchronous operations with native support for async/await, making your code more readable and maintainable.
Builder Functions
Easily generate hardware-optimized MLIR code at compile time, to optimize performance without sacrificing developer productivity.
GPU Kernel Support
Easily generate hardware-optimized MLIR code at compile time, to optimize performance without sacrificing developer productivity.
Low-Level Control, Safe by Default
Develop low-level system software at C speed, with the safety, developer experience and productivity of high-level application development.
Gradual Migration
Easily migrate your code from other languages (including CUDA) to Emma, with a gradual migration path that makes it easy to adopt Emma's features and syntax.
AI-First Design Philosophy
Emma is purpose-built for artificial intelligence, delivering optimized performance for machine learning training, inference, and real-time applications. From neural networks to high-performance computing, Emma simplifies AI development while maximizing efficiency.
🚀 Native GPU Kernel Support for AI Acceleration
Harness full GPU potential with minimal effort:
kernel func vectorAdd(a: Float[], b: Float[], c: Float[]) {
c[id.x] = a[id.x] + b[id.x]
}
.emmaEmma automatically compiles kernels for CUDA, ROCm, or Vulkan, empowering seamless deployment across NVIDIA, AMD, and more.
Advanced Features for Serious Developers
🛠 Builder Functions for Optimized AI Pipelines
Quickly build custom, hardware-specific MLIR code:
builder func gpuBarrier() {
builder.emitOp("gpu.barrier")
}
.emmaIs emmited at compile time, to create the following MLIR code:
func.func @gpuBarrier() {
gpu.barrier
}
.mlirAllowing you to create custom assembly code for your specific use-case or hardware, and leverage the full power of your hardware, LLVM and the MLIR ecosystem.
🔥 Support for Async/Await in GPU Kernels
Async/await simplified parrallel and async operations which are all too common in GPU programming. Emma automatically creates the necessary code to support async/await in GPU kernels, without any runtime overhead.
kernel func allocateAndFill(with constant: Float) {
// The allocation will begin in the background
let mem = gpu.alloc(1024)
// do other stuff
// If the allocation is not complete, pause here until it is
await gpu.fill(await mem, constant)
}
.emmaGeneral Language Features
Emma offers powerful yet familiar general-purpose capabilities, ensuring developers transition seamlessly from traditional languages:
- Static Typing: Avoid bugs with strong, expressive static typing.
- Standard Library: Access to a rich standard library for common tasks.
- Memory Safety: Build robust, memory-safe code but access low-level memory operations if needed.
- Package Management: Effortlessly package imports and dependency management.
- Integrated Development Tooling: Excellent tooling support, from IDE integration to advanced debugging.
- Debugging: Debug both regular functions as well as GPU kernels and builder functions with ease.
CUDA Support
To allow for a smooth transition from CUDA to Emma, we support binding existing CUDA code into your Emma program, and automatically generating the necessary bindings to allow you to call your existing CUDA code from Emma the same way you would a native Emma kernel.
Work in progress: We are currently working on transpiling existing CUDA code into Emma, to allow you to translate your code to Emma to take advantage of the full power of Emma, including cross-platform support.
Low-level Engineering
Emma is usable for more than just AI. While it is designed with GPU programming and AI at the core, the language is general-purpose, and designed to be easy to use, yet give you the power to express complex ideas.
Emma is designed to allow you to use it as a low-level language with low-level access, giving you access the full power of your hardware, LLVM and the MLIR ecosystem.
We've developed everything from AI frameworks to kernels, operating systems, display drivers and embedded systems & microcontrollers.