Documentation
These pages describe Rake 0.7.0. The language pages define each form, starting from the syntax reference. Every Rake program in them is compiled by the documentation checks, and most also run with their stated result. Proposed GPU profiles are designs, with no implementation yet.
Language
- Syntax reference
- Rake's syntax: layout, identifiers, literals, types, statements and expressions, with the marks for uniforms, tines and fused stages explained.
- Primitives, operations, and targets
- What each Rake profile compiles: float and integer racks, bit operations, shuffles, floating-point rules, relaxed SIMD, calling conventions and checks.
- Tines, through and sweeps
- How a Rake rake chooses values lane by lane without branches: tines define masks, through blocks compute under them, and a sweep chooses each result.
- Fused bindings
- Rake's fused bindings: stages of one pure computation that the compiler may rewrite as a whole, how fused multiply-adds form, and what fma guarantees.
- Control flow
- Conditional expressions by mask or uniform, fixed-count repeat loops, counted loops and branches in runs, and the control flow of Rake's slow code.
- Reductions and scans
- Rake's float and integer reductions and inclusive scans: lane order, wrapping arithmetic, strict minimum and maximum, and supported SIMD profiles.
- Packs, stacks and runs
- Define one record as a pack, collect its fields into a stack of columns, then traverse target-sized racks with a run. Includes tails and the C ABI.
- Memory operations
- How Rake runs read and write memory: checked and unchecked accesses, masks, the WebAssembly gather, and designs for scatter, compression and expansion.
- The slow tier
- Rake's slow tier: scalar programs, records, state, embedded data and calls to C, with explicit boundaries between scalar work and vector kernels.
Learning
- Playground and tutorial
- An interactive Rake tutorial in twelve lessons, with each concept demonstrated in the result, lane trace, compiler output or diagnostic message.
- Vectors cheat sheet
- CPU and GPU vector terminology explained with diagrams: lanes, masks, gather, shuffle, splat, reductions, warps, memory access and execution costs.
- Glossary
- Rake's language and compiler terms explained: racks, packs, stacks, uniforms, tines, sweeps, bindings, SSA, register allocation and calling conventions.
Compiler
- The rakec command
- The rakec command line: its modes for checking, interpreting, emitting and verifying Rake programs, its options, its environment and its diagnostics.
- The compiler backend
- How rakec lowers native CPU and WebAssembly code, checks objects and separates its planned GPU lane mapping from NVIDIA's physical allocation.
- Testing the compiler
- How the Rake compiler is tested: the fixture manifest, the interpreter and WebAssembly differential, the C boundary tests and the checked documentation.
Project
- Language goals
- Rake's language goals and compiler checks for vector racks, marked scalars, lane masks, pure fused regions, explicit layouts and GPU execution.
- Compiler roadmap
- Rake's roadmap for native and WebAssembly coverage, language syntax, editor tooling, package releases and the release checks for each feature.
- Changelog
- What changed in each Rake release, starting with 0.4.0-beta: integer racks, runs and whole programs on WebAssembly, and checked documentation examples.
- Rake and other languages
- Rake, ISPC and Bend 2 compared: SIMD lanes, GPU warps and parallel tasks, their lowering contracts, and the performance that needs measurement.
- GPU profiles (design)
- Rake's proposed GPU contract: warp lanes, explicit costs, PTX to verified cubin, exact artifact loading, and what still needs device measurement.