3#if defined(PULP_GPU_RUNTIME)
7#include <gpu_runtime/gpu_compute.hpp>
15using gpu_runtime::GpuCompute;
134 uint32_t num_bins) = 0;
146 uint32_t bins_per_frame, uint32_t num_frames) = 0;
165 virtual bool fft_forward(
const float* complex_in,
float* complex_out, uint32_t n) = 0;
170 virtual bool fft_inverse(
const float* complex_in,
float* complex_out, uint32_t n) = 0;
180 uint32_t n,
double* gpu_compute_us) = 0;
200 virtual bool convolve(
const float* in_complex,
float* out_complex, uint32_t n) = 0;
210 uint32_t n, uint32_t batch) = 0;
230 uint32_t num_ir) = 0;
239 const float* pan_r,
float* out_lr, uint32_t n,
240 uint32_t num_ir) = 0;
252 const float* pan_r,
float* out_lr, uint32_t n,
253 uint32_t num_ir,
double* gpu_compute_us) = 0;
273 uint32_t num_ir, uint32_t num_part) = 0;
283 const float* pan_r,
float* out_block,
284 uint32_t n, uint32_t num_ir) = 0;
310 uint32_t num_layers) = 0;
318 const float* phase, uint32_t n,
319 uint32_t num_layers) = 0;
329 uint32_t num_layers,
float smear,
330 float jitter, uint32_t rng_seed,
331 float* frame_out, uint32_t n) = 0;
339 virtual bool matmul(
const float* a,
const float* b,
float* c,
340 uint32_t m, uint32_t k, uint32_t n) = 0;
351 uint32_t num_partials, uint32_t num_samples,
352 float sample_rate,
float t0_samples) = 0;
359 virtual bool modal_strike(
const float* modes,
float* out, uint32_t num_modes,
360 uint32_t num_samples,
float sample_rate,
float t0_samples) = 0;
367 virtual bool granular_cloud(
const float* grains,
const float* source,
float* out,
368 uint32_t num_grains, uint32_t source_len,
369 uint32_t num_samples) = 0;
379 virtual bool dense_tanh(
const float* input,
const float* weights,
const float* bias,
380 float* output, uint32_t in_dim, uint32_t out_dim) = 0;
406 const uint32_t* dilations, uint32_t num_layers,
407 const float* weights, uint32_t weights_len,
408 uint32_t block_size,
float head_scale) = 0;
417 uint32_t block_size) = 0;
478 const float* weights, uint32_t weights_len,
479 uint32_t block_size,
float head_scale,
480 uint32_t instance = 0) = 0;
490 uint32_t block_size, uint32_t instance = 0) = 0;
505 uint32_t ,
const float*
const* ,
506 uint32_t ,
const float* ,
507 uint32_t , uint32_t ,
520 float*
const* , uint32_t ,
521 uint32_t , uint32_t ,
522 double* gpu_busy_us =
nullptr) {
544 const uint32_t* instances, uint32_t count,
545 uint32_t block_size,
double* gpu_busy_us =
nullptr) {
548 if (!in_blocks || !out_blocks || !instances || count == 0)
550 for (uint32_t i = 0; i < count; ++i)
551 for (uint32_t j = i + 1; j < count; ++j)
552 if (instances[i] == instances[j])
554 for (uint32_t i = 0; i < count; ++i)
555 if (!
wavenet_forward(in_blocks[i], out_blocks[i], block_size, instances[i]))
615 float* magnitudes, uint32_t num_bins,
616 std::chrono::microseconds deadline,
635 uint32_t n, uint32_t batch,
636 std::chrono::microseconds deadline,
793 const std::vector<uint32_t>& sizes,
int iterations = 10) = 0;
797 const std::vector<uint32_t>& sizes,
int iterations = 10) = 0;
799 static std::unique_ptr<GpuCompute>
create();
806 virtual void set_bench_counters(bench::PerfCounters* counters) = 0;
GPU compute pipeline for non-rendering workloads (e.g.
Definition gpu_compute.hpp:48
virtual std::size_t readbacks_in_flight() const =0
Requests submitted whose completion has not fired yet.
virtual bool multi_convolve(const float *in_complex, const float *pan_l, const float *pan_r, float *out_lr, uint32_t n, uint32_t num_ir)=0
Run the multi-IR convolution for a prepared (n, num_ir).
virtual bool prepare_wavenet(const WavenetLayerArraySpec *arrays, uint32_t num_arrays, const float *weights, uint32_t weights_len, uint32_t block_size, float head_scale, uint32_t instance=0)=0
Build the WaveNet plan: upload weights (flat, length weights_len, head_scale is the trailing scalar p...
virtual bool multi_fdl_convolve(const float *in_block, const float *pan_l, const float *pan_r, float *out_block, uint32_t n, uint32_t num_ir)=0
Run one block of partitioned-FDL convolution for a prepared (n, num_ir).
virtual bool wavenet_forward(const float *in_block, float *out_block, uint32_t block_size, uint32_t instance=0)=0
Run the fused WaveNet forward for one mono block (block_size in/out): the per-array rechannel,...
virtual double last_gpu_busy_ns() const
The most recent GPU-busy time of the async convolution shader, in nanoseconds (EMA-smoothed),...
Definition gpu_compute.hpp:696
virtual bool batch_magnitude(const float *complex_frames, float *magnitude_frames, uint32_t bins_per_frame, uint32_t num_frames)=0
Batch spectral magnitude: processes multiple FFT frames in one dispatch.
virtual void notify_device_lost(std::uint64_t generation)
Definition gpu_compute.hpp:111
virtual bool fft_inverse(const float *complex_in, float *complex_out, uint32_t n)=0
Inverse DFT, normalized by 1/N (so ifft(fft(x)) == x within tolerance).
virtual bool prepare_spectral_stack(uint32_t n, uint32_t hop, uint32_t num_layers)=0
Build the spectral-stack plan for FFT size n (power of two), STFT hop hop, and num_layers resident la...
virtual bool initialize_from_device(void *wgpu_device)=0
Initialize by adopting an already-created WebGPU device.
virtual bool prepare_multi_fdl(uint32_t n, const float *ir_part_specs, uint32_t num_ir, uint32_t num_part)=0
Build the partitioned-FDL plan for n = 2*block.
virtual bool fft_forward_timed(const float *complex_in, float *complex_out, uint32_t n, double *gpu_compute_us)=0
Forward FFT that also reports the TRUE GPU compute time (microseconds) of the transform passes,...
virtual std::vector< BenchmarkResult > benchmark_complex_multiply(const std::vector< uint32_t > &sizes, int iterations=10)=0
Benchmark complex multiply at various sizes.
ReadbackStatus
Definition gpu_compute.hpp:595
@ Expired
Deadline passed before the map resolved; dest untouched.
Definition gpu_compute.hpp:597
@ Success
dest holds the full payload.
Definition gpu_compute.hpp:596
@ Failed
Map error, or the device went away before the map landed.
Definition gpu_compute.hpp:598
virtual uint64_t convolve_batch_async(const float *in_complex, float *out_complex, uint32_t n, uint32_t batch, std::chrono::microseconds deadline, ReadbackCallback on_complete)=0
Non-blocking counterpart of convolve_batch().
virtual bool prepare_convolution(uint32_t n, const float *ir_spec)=0
Build the resident convolution plan for size n (power of two) and upload ir_spec — the interleaved-co...
static std::unique_ptr< GpuCompute > create()
virtual bool initialize_from_surface(GpuSurface &surface)=0
Initialize from an existing GpuSurface's device (device sharing).
virtual std::vector< BenchmarkResult > benchmark_magnitude(const std::vector< uint32_t > &sizes, int iterations=10)=0
Benchmark magnitude computation at various sizes.
virtual AsyncStats async_stats() const =0
virtual bool modal_strike(const float *modes, float *out, uint32_t num_modes, uint32_t num_samples, float sample_rate, float t0_samples)=0
GPU struck modal synthesis: out[s] = Σ_m amp_m·exp(-decay_m·t)· sin(2π·freq_m·t + phase_m),...
virtual bool dense_tanh(const float *input, const float *weights, const float *bias, float *output, uint32_t in_dim, uint32_t out_dim)=0
GPU dense (fully-connected) layer with tanh activation: out[j] = tanh(Σ_i W[j][i]·x[i] + b[j]),...
virtual DeviceSharingReport verify_device_sharing(GpuSurface &surface)=0
Test device sharing between Skia Graphite and compute pipelines.
virtual bool spectral_stack_render(const float *layer_weights, uint32_t num_layers, float smear, float jitter, uint32_t rng_seed, float *frame_out, uint32_t n)=0
Advance + smear + weighted-sum all resident layers and inverse-FFT to one real frame.
virtual bool override_kernel_source(const char *label, const char *wgsl)=0
Replace the WGSL of a named pipeline.
virtual bool convolve(const float *in_complex, float *out_complex, uint32_t n)=0
Run the fused convolution for a prepared n.
virtual bool fft_forward(const float *complex_in, float *complex_out, uint32_t n)=0
Forward DFT: X[k] = sum_n x[n] exp(-2*pi*i*k*n/N).
virtual bool additive_synth(const float *partials, float *out, uint32_t num_partials, uint32_t num_samples, float sample_rate, float t0_samples)=0
GPU additive synthesis: out[s] = Σ_p amp_p · sin(2π·freq_p·(t0+s)/sr + phase_p), one thread per outpu...
virtual bool initialize_standalone()=0
Initialize standalone (creates its own device, no rendering surface).
bool is_initialized() const
Definition gpu_compute.hpp:82
virtual bool convolve_batch(const float *in_complex, float *out_complex, uint32_t n, uint32_t batch)=0
virtual const char * kernel_source(const char *label) const =0
Built-in WGSL for a named pipeline (e.g.
virtual bool compute_magnitude(const float *complex_pairs, float *magnitudes, uint32_t num_bins)=0
Compute magnitude spectrum from interleaved complex float pairs.
virtual bool prepare_convolution_batch(uint32_t n, const float *ir_spec, uint32_t batch)=0
Batched fused convolution: batch independent length-n blocks convolved with the same resident IR,...
std::function< void(const ReadbackResult &)> ReadbackCallback
Definition gpu_compute.hpp:607
virtual uint64_t compute_magnitude_async(const float *complex_pairs, float *magnitudes, uint32_t num_bins, std::chrono::microseconds deadline, ReadbackCallback on_complete)=0
Non-blocking counterpart of compute_magnitude().
virtual bool granular_cloud(const float *grains, const float *source, float *out, uint32_t num_grains, uint32_t source_len, uint32_t num_samples)=0
GPU granular synthesis ("grain cloud"): sum many Hann-windowed, pitch-shifted snippets of source into...
virtual void set_max_readbacks_in_flight(std::size_t max_in_flight)=0
Cap on concurrently in-flight async readbacks (default 4).
virtual bool multi_convolve_timed(const float *in_complex, const float *pan_l, const float *pan_r, float *out_lr, uint32_t n, uint32_t num_ir, double *gpu_compute_us)=0
Same as multi_convolve, but also reports the true GPU-busy time of the fused pass sequence (forward F...
virtual ~GpuCompute()=default
virtual bool prepare_multi_convolution(uint32_t n, const float *ir_specs, uint32_t num_ir)=0
Build the multi-IR plan for size n (power of two) and upload ir_specs — num_ir back-to-back interleav...
virtual CapabilityReport capabilities() const =0
Query the compute device's backend, optional features, and limits.
virtual bool wavenet_forward_batch(const float *const *in_blocks, float *const *out_blocks, const uint32_t *instances, uint32_t count, uint32_t block_size, double *gpu_busy_us=nullptr)
Run one block for count independent WaveNet instances at once.
Definition gpu_compute.hpp:543
virtual void notify_device_lost()=0
Report that an ADOPTED device (initialize_from_device / initialize_from_surface) has been lost.
virtual bool matmul(const float *a, const float *b, float *c, uint32_t m, uint32_t k, uint32_t n)=0
Dense matrix multiply C[M×N] = A[M×K] · B[K×N], all row-major f32.
virtual bool prepare_conv_stack(uint32_t channels, uint32_t kernel, const uint32_t *dilations, uint32_t num_layers, const float *weights, uint32_t weights_len, uint32_t block_size, float head_scale)=0
Build the conv-stack plan: upload weights, allocate the per-layer device-resident activation buffers ...
std::atomic< bool > initialized_
Definition gpu_compute.hpp:810
virtual bool complex_multiply(const float *a, const float *b, float *result, uint32_t count)=0
Element-wise complex multiply (frequency-domain convolution step).
virtual bool conv_stack_forward(const float *in_block, float *out_block, uint32_t block_size)=0
Run the fused forward for one mono block (block_size samples in/out): input projection,...
virtual void post_device_lost(std::uint64_t generation)
Publish a loss from a backend callback without touching readback queues or invoking user completions.
Definition gpu_compute.hpp:123
virtual bool wavenet_forward_group(const float *const *, float *const *, uint32_t, uint32_t, uint32_t, double *gpu_busy_us=nullptr)
Run one block for every instance of a prepared group: in_blocks[i] / out_blocks[i] are instance i's b...
Definition gpu_compute.hpp:519
virtual bool spectral_stack_set_layer(uint32_t layer, const float *mag, const float *phase, uint32_t n, uint32_t num_layers)=0
Upload one captured layer's magnitude (mag, n reals) and initial phase (phase, n reals) into the resi...
virtual std::size_t poll_readbacks()=0
Pump the device event queue once and fire the completions that are ready or past their deadline.
virtual bool prepare_wavenet_group(const WavenetLayerArraySpec *, uint32_t, const float *const *, uint32_t, const float *, uint32_t, uint32_t, uint32_t)
Prepare a group of count independent WaveNet instances that share one shape (arrays) and run as one u...
Definition gpu_compute.hpp:504
virtual bool device_lost() const =0
True once the WebGPU device has been lost.
virtual void set_async_timing_enabled(bool)
Opt the ASYNC convolution path into GPU-busy timing (default OFF).
Definition gpu_compute.hpp:690
virtual std::uint64_t device_generation() const
Monotonic device generation.
Definition gpu_compute.hpp:96
Abstract GPU surface — a presentable rendering target backed by a native window/view.
Definition gpu_surface.hpp:112
Definition gpu_fwd.hpp:31
Benchmark perf counters for copy/upload/readback costs.
Counters for the async path, incremented where the work actually happens: submits at the queue submit...
Definition gpu_compute.hpp:666
uint64_t write_buffer_bytes
Definition gpu_compute.hpp:672
uint64_t write_buffer_calls
Definition gpu_compute.hpp:671
uint64_t mapped_readback_memcpy_bytes
Definition gpu_compute.hpp:677
uint64_t map_async_calls
Definition gpu_compute.hpp:675
uint64_t mapped_readback_memcpy_calls
Definition gpu_compute.hpp:676
uint64_t failed
Definition gpu_compute.hpp:670
uint64_t expired
Definition gpu_compute.hpp:669
uint64_t output_copy_calls
Definition gpu_compute.hpp:673
uint64_t submits
Definition gpu_compute.hpp:667
uint64_t map_resolves
Definition gpu_compute.hpp:668
uint64_t output_copy_bytes
Definition gpu_compute.hpp:674
Definition gpu_compute.hpp:780
double readback_us
Definition gpu_compute.hpp:784
double dispatch_us
Definition gpu_compute.hpp:783
bool gpu_faster
Definition gpu_compute.hpp:787
double upload_us
Definition gpu_compute.hpp:782
double cpu_baseline_us
Definition gpu_compute.hpp:786
double total_us
Definition gpu_compute.hpp:785
uint32_t num_elements
Definition gpu_compute.hpp:781
Runtime GPU capability/limit report for the compute device.
Definition gpu_compute.hpp:726
uint32_t max_compute_workgroup_storage_size
Definition gpu_compute.hpp:753
bool available
True when a usable compute device and queue are ready.
Definition gpu_compute.hpp:728
std::string name
Dawn-provided device name; empty when authentic identity is unavailable.
Definition gpu_compute.hpp:736
std::string adapter_type
Stable class: "discrete-gpu", "integrated-gpu", "cpu", or "unknown".
Definition gpu_compute.hpp:734
uint32_t max_compute_workgroup_size_x
Definition gpu_compute.hpp:752
bool timestamp_query
Definition gpu_compute.hpp:747
bool shader_f16
Definition gpu_compute.hpp:748
std::string description
Dawn-provided adapter description; empty when unavailable.
Definition gpu_compute.hpp:742
uint32_t max_fft_size
Definition gpu_compute.hpp:756
uint32_t vendor_id
PCI-style vendor identifier, or zero when unavailable.
Definition gpu_compute.hpp:744
uint32_t device_id
PCI-style device identifier, or zero when unavailable.
Definition gpu_compute.hpp:746
bool adapter_info_authentic
True only when Dawn returned this adapter's own AdapterInfo.
Definition gpu_compute.hpp:730
uint64_t max_storage_buffer_binding_size
Definition gpu_compute.hpp:749
uint32_t max_compute_invocations_per_workgroup
Definition gpu_compute.hpp:751
std::string backend
Backend family, for example "Metal", "D3D12", "Vulkan", or "shared".
Definition gpu_compute.hpp:732
std::string vendor
Dawn-provided vendor name; empty when unavailable.
Definition gpu_compute.hpp:738
uint64_t max_buffer_size
Definition gpu_compute.hpp:750
std::string architecture
Dawn-provided architecture; empty when unavailable.
Definition gpu_compute.hpp:740
Definition gpu_compute.hpp:764
std::string notes
Definition gpu_compute.hpp:770
bool concurrent_submission_ok
Definition gpu_compute.hpp:767
bool second_consumer_works
Definition gpu_compute.hpp:766
bool memory_pressure_ok
Definition gpu_compute.hpp:768
bool device_obtained
Definition gpu_compute.hpp:765
std::string backend_name
Definition gpu_compute.hpp:769
Definition gpu_compute.hpp:601
ReadbackStatus status
Definition gpu_compute.hpp:603
uint32_t bytes
written to dest (0 unless Success)
Definition gpu_compute.hpp:604
One WaveNet layer-array's static shape.
Definition gpu_compute.hpp:448
uint32_t kernel
Definition gpu_compute.hpp:452
uint32_t condition_size
Definition gpu_compute.hpp:450
uint32_t head_size
Definition gpu_compute.hpp:453
uint32_t channels
Definition gpu_compute.hpp:451
uint32_t head_bias
Definition gpu_compute.hpp:455
uint32_t gated
Definition gpu_compute.hpp:454
uint32_t input_size
Definition gpu_compute.hpp:449
const uint32_t * dilations
Definition gpu_compute.hpp:456
uint32_t num_layers
Definition gpu_compute.hpp:457