Current section
Files
Jump to
Current section
Files
lib/nx_vulkan/native.ex
defmodule Nx.Vulkan.Native do
@moduledoc """
Rustler NIF bindings for the Vulkan compute backend.
All functions in this module are NIF stubs that fail with
`:nif_not_loaded` if the native library wasn't compiled. They get
replaced at module-load time by the real Rust implementations.
Don't call these directly from application code — use `Nx.Vulkan`
or the `Nx.Vulkan.Backend` module instead. This module exists
only to give Rustler a place to bind into.
"""
use Rustler, otp_app: :nx_vulkan, crate: :nx_vulkan_native
@doc false
def init(), do: :erlang.nif_error(:nif_not_loaded)
@doc false
def device_name(), do: :erlang.nif_error(:nif_not_loaded)
@doc false
def has_f64(), do: :erlang.nif_error(:nif_not_loaded)
@doc "H3 dispatch timing — reset accumulators."
def timing_reset(), do: :erlang.nif_error(:nif_not_loaded)
@doc "H3 dispatch timing — read {count, dispatch_ns, submit_ns, wait_ns, record_ns}."
def timing_get(), do: :erlang.nif_error(:nif_not_loaded)
@doc "Phase 2 W5 — load on-disk pipeline cache blob into the spirit context."
def pipeline_cache_load(_path), do: :erlang.nif_error(:nif_not_loaded)
@doc "Phase 2 W5 — atomically write spirit's current pipeline cache to disk."
def pipeline_cache_persist(_path), do: :erlang.nif_error(:nif_not_loaded)
@doc "Phase 2 W5 — read the device's pipelineCacheUUID as a 16-byte binary."
def device_uuid(), do: :erlang.nif_error(:nif_not_loaded)
@doc false
def upload_binary(_data), do: :erlang.nif_error(:nif_not_loaded)
@doc "Upload a binary into an existing GPU buffer (no alloc)."
def upload_binary_into(_tensor, _data), do: :erlang.nif_error(:nif_not_loaded)
@doc "Batched upload of 2 binaries into 2 existing GPU buffers in one round-trip."
def upload_binary_into_batch2(_t1, _d1, _t2, _d2),
do: :erlang.nif_error(:nif_not_loaded)
@doc false
def download_binary(_tensor, _n_bytes), do: :erlang.nif_error(:nif_not_loaded)
@doc "Batched download of 4 GPU tensors in a single submit/wait round-trip."
def download_binary_batch4(_t1, _t2, _t3, _t4),
do: :erlang.nif_error(:nif_not_loaded)
@doc false
def byte_size(_tensor), do: :erlang.nif_error(:nif_not_loaded)
@doc false
def apply_binary(_a, _b, _op, _spv_path), do: :erlang.nif_error(:nif_not_loaded)
@doc false
def apply_unary(_a, _op, _spv_path), do: :erlang.nif_error(:nif_not_loaded)
@doc false
def reduce_scalar(_a, _op, _spv_path), do: :erlang.nif_error(:nif_not_loaded)
@doc false
def matmul(_a, _b, _m, _n, _k, _spv_path), do: :erlang.nif_error(:nif_not_loaded)
@doc false
def random(_n, _seed, _dist, _spv_path), do: :erlang.nif_error(:nif_not_loaded)
@doc false
def transpose(_a, _m, _n, _spv_path), do: :erlang.nif_error(:nif_not_loaded)
@doc false
def cast(_a, _n, _out_elem_bytes, _spv_path), do: :erlang.nif_error(:nif_not_loaded)
@doc false
def reduce_axis(_a, _outer, _reduce, _inner, _op, _spv_path),
do: :erlang.nif_error(:nif_not_loaded)
@doc false
def fused_chain(_a, _b, _ops, _spv_path), do: :erlang.nif_error(:nif_not_loaded)
@doc false
def fused_chain_4(_a, _b, _c, _d, _ops, _buf_idx, _spv_path),
do: :erlang.nif_error(:nif_not_loaded)
@doc false
def kinetic_energy(_p, _inv_mass, _spv_path), do: :erlang.nif_error(:nif_not_loaded)
@doc false
def normal_logpdf(_x, _mu, _sigma, _spv_path), do: :erlang.nif_error(:nif_not_loaded)
@doc false
def apply_binary_broadcast(_a, _b, _op, _ndim, _out_shape, _a_strides, _b_strides, _spv_path),
do: :erlang.nif_error(:nif_not_loaded)
@doc false
def matmul_v(_a, _b, _m, _n, _k, _tile_m, _tile_n, _spv_path),
do: :erlang.nif_error(:nif_not_loaded)
@doc false
def apply_binary_f64(_a, _b, _op, _spv_path), do: :erlang.nif_error(:nif_not_loaded)
@doc false
def apply_unary_f64(_a, _op, _spv_path), do: :erlang.nif_error(:nif_not_loaded)
@doc false
def reduce_axis_f64(_a, _outer, _reduce, _inner, _op, _spv_path),
do: :erlang.nif_error(:nif_not_loaded)
@doc false
def apply_binary_broadcast_f64(_a, _b, _op, _ndim, _out_shape, _a_strides, _b_strides, _spv_path),
do: :erlang.nif_error(:nif_not_loaded)
@doc false
def logsumexp(_a, _outer, _reduce, _inner, _spv_path),
do: :erlang.nif_error(:nif_not_loaded)
@doc false
def pool_clear(), do: :erlang.nif_error(:nif_not_loaded)
@doc false
def pool_stats(), do: :erlang.nif_error(:nif_not_loaded)
@doc false
def leapfrog_normal(_q, _p, _inv_mass, _eps, _mu, _sigma, _spv_path),
do: :erlang.nif_error(:nif_not_loaded)
@doc """
Generic K-step leapfrog chain for synthesized shaders.
`push` is a raw binary assembled by the Elixir-side codegen (max 128 bytes).
Returns `{:ok, {q_chain, p_chain, grad_chain, logp_chain}}`.
"""
def leapfrog_chain_synth(_q, _p, _inv_mass, _push, _k, _spv_path),
do: :erlang.nif_error(:nif_not_loaded)
@doc false
def leapfrog_chain_normal(_q, _p, _inv_mass, _k, _eps, _mu, _sigma, _spv_path),
do: :erlang.nif_error(:nif_not_loaded)
@doc false
def leapfrog_chain_normal_lg(_q, _p, _inv_mass, _k, _eps, _mu, _sigma, _spv_path),
do: :erlang.nif_error(:nif_not_loaded)
@doc false
def leapfrog_chain_exponential(_q, _p, _inv_mass, _k, _eps, _lambda, _spv_path),
do: :erlang.nif_error(:nif_not_loaded)
@doc false
def leapfrog_chain_studentt(_q, _p, _inv_mass, _k, _eps, _mu, _sigma, _nu, _logp_const, _spv_path),
do: :erlang.nif_error(:nif_not_loaded)
@doc false
def leapfrog_chain_cauchy(_q, _p, _inv_mass, _k, _eps, _loc, _scale, _log_pi_scale, _spv_path),
do: :erlang.nif_error(:nif_not_loaded)
@doc false
def leapfrog_chain_halfnormal(_q, _p, _inv_mass, _k, _eps, _sigma, _log_const, _spv_path),
do: :erlang.nif_error(:nif_not_loaded)
@doc false
def leapfrog_chain_normal_f64(_q, _p, _inv_mass, _k, _eps, _mu, _sigma, _spv_path),
do: :erlang.nif_error(:nif_not_loaded)
@doc false
def leapfrog_chain_weibull(_q, _p, _inv_mass, _k, _eps, _weibull_k, _lambda, _logp_const, _spv_path),
do: :erlang.nif_error(:nif_not_loaded)
end