Oa Library

Welcome to the Oa Library.

Oa is a cross-vendor compute library built on C++ and Vulkan. One binary runs ML, vision, audio, and general compute on NVIDIA, AMD, and Intel GPUs.

Oa Library Research Laboratory
Research Laboratory

TL;DR

Oa is a cross-vendor compute library built on C++ and Vulkan. One binary runs ML, vision, audio, and general compute on NVIDIA, AMD, and Intel GPUs without per-vendor SDK installation. The same Fashion-MNIST model that trains at 877K samples/s on an RTX 5090 trains at 22K samples/s on an Intel iGPU, with matching accuracy.

Why We Persist

The premise is simple: take everything the hardware can give. All of it. Including older silicon, including integrated graphics. Many existing frameworks require a specific vendor stack and a Python runtime, which leaves a lot of capable hardware unused. Oa takes a different path: write the model once in C++, run it on any Vulkan 1.4 device.

The Measurement

Fashion-MNIST, 2-layer MLP, 101K parameters, batch size 64. Same C++ model path across every row.

RuntimeDeviceAccuracyGPU SPSWall SPS
Oa Api2RTX 5090 Laptop86.03%1,290,323877,160
Oa Api1 AutogradRTX 5090 Laptop86.42%834,718674,080
Oa Api1Intel ARL iGPU86.53%129,43322,118
Oa Api1 AutogradIntel ARL iGPU86.19%97,00018,494
Vendor SDK 1:1RTX 5090 Laptop84.44%1,171,230707,982
Vendor SDK FusedRTX 5090 Laptop86.21%412,411309,957
Python on Vendor SDKRTX 5090 Laptop85.81%n/a104,454

Key observations:

  • Intel iGPU runs the same binary at 22K wall SPS — a useful baseline for integrated graphics.
  • RTX 5090 achieves 877K wall SPS with the hand-wired backward path.
  • Implicit autograd runs ~23% slower wall-time than hand-wired backward, with identical convergence.

For small and medium ML workloads, framework and runtime overhead is often a significant factor. A thin Vulkan-native path — one context, low object overhead — can change the throughput baseline.

Validation detail: Fashion-MNIST tutorial

What Oa Is

A foundation library for compute-intensive applications:

  • Core — types, containers, memory, threading, file I/O, matrix operations.
  • Runtime — Vulkan compute engine, device, context, allocator, streams, compute graphs.
  • Ml — layers, loss, optimizers, autograd, precision (FP32, BF16, FP16, INT8).
  • Vision — image processing, video decode/encode, color and geometric transforms.
  • Audio — signal processing, STFT, mel filterbanks, audio decode.
  • Ui — windowing, rendering, plotting, image viewer.
  • Crypto — hashing (Keccak, SHA3), post-quantum signatures (ML-DSA).
  • Network — TCP, HTTP, distributed topology, collective operations.

Quick start

Both examples dispatch the same matrix operation through the default Vulkan context.

Matmul.cpp

OaMatrix a = OaFnMatrix::RandN(OaMatrixShape{1024, 64});
OaMatrix b = OaFnMatrix::RandN(OaMatrixShape{128, 64});
OaMatrix c = OaFnMatrix::MatMulNt(a, b);
OaContext::GetDefault().Execute();
OaContext::GetDefault().Sync();

Who It Is For

Use Oa when you need GPU compute across Intel, AMD, and NVIDIA from one binary, deterministic results across vendors, performance from older or integrated GPUs, and code you can read end to end.

Reach for something else when you need a large pre-trained model zoo, maximum single-GPU throughput from a vendor-specific stack, or training across thousands of GPUs. OA exposes both C++ and Python front ends while naming those remaining tradeoffs directly.