“We’re targeting RISC-V, so inference will be fast” is a sentence that has cost more than one team a late-stage rewrite. The open, extensible ISA is not an accelerator, and treating it as one is where latency targets quietly slip before a product ever ships. RISC-V’s real relevance to client-side machine learning comes from specific extensions — the Vector extension (RVV) and the emerging matrix/AI extensions — and, more decisively, from how a given system-on-chip actually implements and exposes them. That last part varies enormously across a device fleet, and it is the part teams skip. The instruction set architecture tells you what is permitted. It does not tell you what silicon is present. A RISC-V core can be perfectly compliant while shipping a narrow vector unit, no matrix block, or an RVV implementation your model was never tuned against. When that happens, the same model that ran comfortably on your test board falls back to scalar or unaccelerated integer paths on the median device — and inference runs several times slower. The ISA did not fail. Your assumption about the ISA did. How should you think about RISC-V AI in practice? RISC-V is a base integer instruction set with a menu of standard extensions layered on top. For AI inference the two that matter are RVV — the vector extension that lets a core process many data elements per instruction — and the matrix/AI extensions still stabilising through the RISC-V International working groups. RVV is where most of the near-term acceleration lives: convolution, matrix multiply, and the elementwise operations that dominate a vision or language model map onto wide vector registers far more efficiently than onto scalar loops. The catch is that RVV is parameterised. The specification defines the programming model, but the vector length (VLEN) and the number of vector functional units are implementation choices left to the SoC designer. Two chips can both claim “RVV 1.0” while one runs 128-bit vectors and the other 512-bit. For a convolution kernel, that is a fourfold difference in elements-per-instruction before you account for pipeline depth or memory bandwidth. This is the same trap that shows up on server hardware, where a spec sheet implies a capability the deployed silicon does not sustain — the reasoning behind profiling-first hardware selection applies unchanged to the edge. So “RISC-V AI” in practice means: a workload compiled to exploit whatever vector and matrix hardware a specific SoC exposes, running through a runtime that can actually target those instructions. Miss any layer — the extension is absent, the compiler doesn’t emit it, or the runtime falls back — and the acceleration evaporates. Which extensions actually move inference latency? Not all extensions touch the hot path. The ones that decide client-side inference latency are a short list, and it helps to separate what genuinely accelerates a model from what is architectural background. Extension / block What it does Inference impact RVV (Vector, V) Wide SIMD over configurable vector length Primary lever — convolution, GEMM, activation ops vectorise here Matrix / AI extensions (emerging) Dedicated matrix-multiply instructions Large for transformer and CNN GEMM once present and supported end-to-end Zvfh / half-precision vector FP16 vector ops Enables lower-precision inference without emulation overhead Bit-manipulation (Zbb, Zba) Faster address gen, bit ops Minor for ML kernels; helps surrounding glue code Vendor NPU / accelerator block Off-core fixed-function inference engine Can dominate — but only reachable through a vendor runtime, not the base ISA The pattern worth internalising: RVV and the matrix extensions live inside the instruction stream and are reachable by a general compiler toolchain, while vendor NPU blocks sit beside the CPU and are reachable only through a proprietary driver. A model that assumes the NPU will be used may run on the CPU vector path instead if the runtime cannot bind to that block on a given device. Quantisation choices interact directly with this — targeting FP4 or other low-precision formats only pays off if the vector unit has native support for the format you picked, otherwise you inherit an emulation tax that erases the memory saving. In configurations we’ve profiled at the edge, moving a convolutional backbone from a scalar fallback onto a properly targeted RVV path produced roughly a 5–8x latency improvement (observed pattern across our device-profiling engagements; not a published benchmark and sensitive to VLEN and memory bandwidth on the specific board). That range is exactly the size of the gap you inherit if the extension you benchmarked against is missing on the deployed device. Why do two RISC-V SoCs advertising “AI support” behave so differently? Because “AI support” is a marketing phrase, not a capability contract. One SoC’s AI support is a 512-bit RVV unit plus half-precision vector ops. Another’s is a small vendor NPU reachable only through a closed runtime, with a narrow 128-bit vector unit for everything the NPU can’t handle. A third advertises AI support on the strength of matrix extensions that exist in the ISA revision but are not yet wired through the compiler you use. All three are honest claims. None of them are interchangeable for your model. This is the divergence point that decides deployments. A team benchmarks on a well-provisioned development board, sees good numbers, and commits an architecture. The median device in the field turns out to lack the vector width or the accelerator binding the benchmark relied on, and the model drops to an integer scalar path. The result is not a small regression — it is the multiplicative slowdown that turns a real-time feature into an unusable one. RISC-V does not remove the need for a device capability baseline. It widens the variance you have to profile for, because the ISA’s openness means the fleet is more heterogeneous, not less. The correct mental model is the one that governs cross-platform inference generally: the ML compiler and runtime layer is what turns a portable model into instructions a specific chip can run fast, and it can only emit what the target actually exposes. On RISC-V that mapping is looser and more variable than on the consolidated mobile SoC market, which is precisely why the profiling step matters more, not less. How do you profile a RISC-V device’s real accelerator capability? You measure, before you commit. The device capability baseline is a deliberate step that runs ahead of architecture selection, not a debugging exercise after latency targets are missed. The goal is to know, for every device tier in your target cohort, which extensions are present, which the toolchain can reach, and what the real per-op latency looks like. RISC-V capability baseline checklist Enumerate extensions on real hardware. Read the ISA string the device reports (misa, the device tree, or /proc/cpuinfo on a Linux target) and confirm RVV, half-precision vector, and any matrix extension are actually flagged — not just claimed in the datasheet. Measure VLEN, don’t assume it. A short probe kernel that reports the runtime vector length tells you the real SIMD width. Two “RVV 1.0” chips can differ 4x here. Confirm the toolchain emits the instructions. Compile a known kernel and inspect the disassembly. A compiler that silently omits vector instructions gives you scalar performance with an accelerated label. Check the runtime binds to the accelerator block. If there’s a vendor NPU, verify your runtime actually dispatches to it on this device — not that the NPU merely exists. Benchmark the hot ops, not the whole model. Per-layer latency on convolution and GEMM exposes fallback paths that an end-to-end number hides. Sample the fleet median, not the best board. Profile the device you will actually ship on, and the cheapest one in the cohort, before you trust the numbers. Catching a missing RVV implementation at this stage costs a fraction of discovering it post-deployment. The late-stage remedies — writing kernel fallback paths, requantising the model, gating features by device — are the expensive class of rewrite this baseline exists to prevent. That is the same profiling-first discipline we apply to cross-device inference setup on heterogeneous hardware: the environment tells you what it can do, and you plan around the answer instead of the spec sheet. When does a RISC-V path actually beat a mainstream mobile target? RISC-V wins on client-side latency in a narrower set of cases than the enthusiasm suggests, and it is worth being honest about them. It tends to win when the SoC pairs a wide, well-implemented RVV unit or a matrix block with a toolchain that reaches them, when the deployment context values the open ISA for supply-chain or customisation reasons — common in telecom edge equipment and industrial gateways where vendors control the whole stack — and when the model is small enough to sit comfortably in the vector path without leaning on a mobile GPU or a mature NPU. It tends to lose, today, against a mainstream mobile SoC whose NPU and vendor runtime are mature and whose developer tooling is battle-tested, simply because the software ecosystem is further along. For telecom and media-edge deployments where controlling the silicon roadmap matters — a recurring theme in our media and telecom edge work — the calculus can flip, because the value of an open, customisable ISA outweighs a modest tooling gap. But that is a decision made after the capability baseline, not a reason to skip it. The compiler and format decisions compound here too: cross-platform compiler flags that unlock vector code on one runtime may be inert on another, and the profiling step is what tells you which. FAQ How does RISC-V AI actually work? RISC-V AI means running an inference workload compiled to exploit a specific SoC’s vector (RVV) and matrix/AI extensions through a runtime that can target those instructions. The open ISA defines what extensions are permitted, not which are present on a given chip. In practice, acceleration only materialises when the extension exists on the silicon, the compiler emits the right instructions, and the runtime binds to any accelerator block — miss any layer and the model falls back to slow scalar paths. Which RISC-V extensions actually affect on-device inference latency? The Vector extension (RVV) is the primary lever, because convolution, matrix multiply, and elementwise operations vectorise onto its wide registers. The emerging matrix/AI extensions add dedicated matrix-multiply instructions that matter more for transformers and CNNs once supported end-to-end, and half-precision vector support (Zvfh) enables lower-precision inference without emulation overhead. Vendor NPU blocks can dominate performance but are reachable only through a proprietary runtime, not the base ISA. Why can two RISC-V SoCs advertising ‘AI support’ produce very different inference latency for the same model? Because “AI support” is a marketing phrase, not a capability contract. One chip’s support might be a 512-bit RVV unit, another’s a small vendor NPU behind a closed runtime with only a 128-bit vector fallback, and a third’s matrix extensions that exist in the ISA but aren’t wired through the compiler. All are honest claims, but the vector width, accelerator binding, and toolchain support differ — so the same model can run several times slower on one than the other. How do I profile a RISC-V device’s real accelerator capability before selecting a client-side ML architecture? Run a device capability baseline ahead of architecture selection: enumerate the extensions the hardware actually reports, measure the real vector length rather than assuming it, confirm the toolchain emits vector instructions by inspecting disassembly, verify the runtime binds to any accelerator block, benchmark the hot convolution and GEMM ops per-layer, and sample the fleet median device rather than the best development board. Catching a missing extension here costs a fraction of discovering it post-deployment. When does a RISC-V on-device inference path beat a mainstream mobile or edge target for latency-sensitive features? It wins when the SoC pairs a wide, well-implemented RVV unit or matrix block with a toolchain that reaches them, when supply-chain or customisation control favours the open ISA (common in telecom and industrial edge), and when the model fits comfortably in the vector path. It tends to lose against a mainstream mobile SoC with a mature NPU and battle-tested tooling, because the software ecosystem is further along — but that comparison should follow the capability baseline, not replace it. What model-format and quantization choices matter most when targeting RISC-V client-side inference? Precision choices only pay off if the vector unit has native support for the format you pick — targeting a low-precision format like FP4 or FP16 without hardware vector support inherits an emulation tax that erases the memory saving. Confirm half-precision vector support before committing to reduced precision, and verify that your compiler and runtime emit the corresponding vector instructions rather than falling back to a wider format silently. How do I detect and handle RISC-V devices that lack the vector or accelerator block I benchmarked against? Detect them at runtime by reading the reported ISA string and probing the actual vector length, then gate behaviour on the result. Handle the shortfall with explicit kernel fallback paths, model requantisation for lower-capability tiers, or device-gating features that a low-end SoC can’t sustain in real time. The cheaper alternative is to sample the fleet median during the capability baseline so you design for the variance before deployment rather than after. The question that decides the architecture The useful question is never “does this device support RISC-V AI?” It is “which extensions and accelerator blocks are present across my target cohort, and can my toolchain reach them?” That reframing turns an ISA choice into a profiling problem, which is where it belongs. The open instruction set is a starting condition, not a performance guarantee — the variance it introduces is real, and the only reliable way to design around it is to measure the median device before you commit the architecture, not after the latency contract is already broken.