Download src/ds4_gpu.h from julianmb/ds4fa: direct link, hf CLI and curl.
- Browser
- Download file 118 kB
-
https://huggingface.co/julianmb/ds4fa/resolve/main/src/ds4_gpu.h
- Command line
-
hf download hf://julianmb/ds4fa/src/ds4_gpu.h
-
curl -L -o ds4_gpu.h https://huggingface.co/julianmb/ds4fa/resolve/main/src/ds4_gpu.h
118 kB
| extern "C" { | |
| /* ========================================================================= | |
| * GPU Tensor and Command Lifetime. | |
| * ========================================================================= | |
| * | |
| * Opaque device tensor used by the DS4-specific GPU executor. | |
| * | |
| * The public GPU API is tensor-resident: activations, KV state, and scratch | |
| * buffers stay device-owned across the whole prefill/decode command sequence. | |
| */ | |
| typedef struct ds4_gpu_tensor ds4_gpu_tensor; | |
| typedef struct { | |
| uint64_t raw_kv; | |
| uint64_t comp_kv; | |
| uint64_t topk; | |
| uint32_t pos; | |
| uint32_t n_raw; | |
| uint32_t raw_cap; | |
| uint32_t raw_start; | |
| uint32_t n_comp; | |
| uint32_t top_k; | |
| uint32_t window; | |
| uint32_t ratio; | |
| uint32_t indexed; | |
| } ds4_gpu_attention_decode_row; | |
| int ds4_gpu_init(void); | |
| void ds4_gpu_cleanup(void); | |
| ds4_gpu_tensor *ds4_gpu_tensor_alloc(uint64_t bytes); | |
| ds4_gpu_tensor *ds4_gpu_tensor_alloc_managed(uint64_t bytes); | |
| ds4_gpu_tensor *ds4_gpu_tensor_view(const ds4_gpu_tensor *base, uint64_t offset, uint64_t bytes); | |
| void ds4_gpu_tensor_free(ds4_gpu_tensor *tensor); | |
| uint64_t ds4_gpu_tensor_bytes(const ds4_gpu_tensor *tensor); | |
| void *ds4_gpu_tensor_contents(ds4_gpu_tensor *tensor); | |
| int ds4_gpu_tensor_fill_f32(ds4_gpu_tensor *tensor, float value, uint64_t count); | |
| int ds4_gpu_tensor_write(ds4_gpu_tensor *tensor, uint64_t offset, const void *data, uint64_t bytes); | |
| int ds4_gpu_tensor_read(const ds4_gpu_tensor *tensor, uint64_t offset, void *data, uint64_t bytes); | |
| int ds4_gpu_tensor_copy(ds4_gpu_tensor *dst, uint64_t dst_offset, | |
| const ds4_gpu_tensor *src, uint64_t src_offset, | |
| uint64_t bytes); | |
| int ds4_gpu_tensor_copy_f32_to_f16(ds4_gpu_tensor *dst, uint64_t dst_offset, | |
| const ds4_gpu_tensor *src, uint64_t src_offset, | |
| uint64_t count); | |
| int ds4_gpu_moe_handoff_pack_tensor( | |
| ds4_gpu_tensor *packed, | |
| const ds4_gpu_tensor *ffn_norm, | |
| const ds4_gpu_tensor *selected, | |
| const ds4_gpu_tensor *weights, | |
| uint32_t n_embd, | |
| uint32_t n_expert); | |
| int ds4_gpu_pack_slot_rows_f32_tensor( | |
| ds4_gpu_tensor *out, | |
| const ds4_gpu_tensor *slots, | |
| uint32_t n_rows, | |
| uint32_t width, | |
| uint32_t n_slots, | |
| uint32_t slot_cap); | |
| int ds4_gpu_begin_commands(void); | |
| int ds4_gpu_flush_encoder(void); | |
| int ds4_gpu_flush_commands(void); | |
| int ds4_gpu_commands_active(void); | |
| int ds4_gpu_parallel_ffn_finish(void); | |
| void ds4_gpu_parallel_ffn_abort(void); | |
| int ds4_gpu_parallel_ffn_start( | |
| ds4_gpu_tensor *gate, | |
| ds4_gpu_tensor *up, | |
| ds4_gpu_tensor *mid, | |
| ds4_gpu_tensor *shared_out, | |
| const void *model_map, | |
| uint64_t model_size, | |
| uint64_t gate_offset, | |
| uint64_t up_offset, | |
| uint64_t down_offset, | |
| uint32_t model_dim, | |
| uint32_t shared_dim, | |
| const ds4_gpu_tensor *x, | |
| float clamp); | |
| int ds4_gpu_signal_selected_readback_ready(uint64_t *event_value); | |
| int ds4_gpu_commit_and_wait_selected_readback(uint64_t event_value, const char *label); | |
| int ds4_gpu_wait_selected_readback_ready(uint64_t event_value, const char *label); | |
| int ds4_gpu_tensor_read_after_selected_event(const ds4_gpu_tensor *tensor, | |
| uint64_t offset, | |
| void *data, | |
| uint64_t bytes, | |
| uint64_t event_value, | |
| const char *label); | |
| int ds4_gpu_end_commands(void); | |
| int ds4_gpu_synchronize(void); | |
| int ds4_gpu_set_model_map(const void *model_map, uint64_t model_size); | |
| int ds4_gpu_set_model_fd(int fd); | |
| int ds4_gpu_set_model_fd_for_map(int fd, const void *model_map); | |
| int ds4_gpu_build_derived_artifacts(const void *model_map, uint64_t model_size, | |
| const char *model_path); | |
| int ds4_gpu_model_range_replaced(const void *model_map, uint64_t offset, | |
| uint64_t bytes); | |
| int ds4_gpu_set_model_map_range(const void *model_map, uint64_t model_size, uint64_t map_offset, uint64_t map_size, uint64_t max_tensor_bytes); | |
| int ds4_gpu_set_model_map_spans(const void *model_map, uint64_t model_size, const uint64_t *offsets, const uint64_t *sizes, uint32_t count, uint64_t max_tensor_bytes); | |
| int ds4_gpu_cache_model_range(const void *model_map, uint64_t model_size, uint64_t offset, uint64_t bytes, const char *label); | |
| int ds4_gpu_cache_q8_f16_range(const void *model_map, uint64_t model_size, uint64_t offset, uint64_t bytes, uint64_t in_dim, uint64_t out_dim, const char *label); | |
| int ds4_gpu_q8_cache_suppressed(void); | |
| void ds4_gpu_set_q8_cache_suppressed(int suppressed); | |
| void ds4_gpu_release_q8_f16_cache(void); | |
| /* Model-file ranges assigned to CUDA devices by the multi-GPU placement | |
| * planner. Metal keeps these declarations for the shared engine interface. */ | |
| typedef struct { | |
| uint64_t source_offset; | |
| uint64_t bytes; | |
| int target_device; | |
| } ds4_tensor_range; | |
| int ds4_gpu_device_cache_tensors(int device_id, | |
| const ds4_tensor_range *ranges, | |
| int n_ranges); | |
| int ds4_gpu_register_support_map(const void *map, uint64_t size, uint64_t bias); | |
| int ds4_gpu_device_cache_support_tensors(int device_id, | |
| int entry_device_id, | |
| const ds4_tensor_range *ranges, | |
| int n_ranges, | |
| int from_main_map); | |
| uint64_t ds4_gpu_tier_free_vram(int logical_tier); | |
| int ds4_gpu_lookup_cache(uint64_t source_offset, uint64_t bytes, | |
| int *out_device_id, void **out_device_ptr); | |
| int ds4_gpu_lookup_cache_device(uint64_t source_offset, uint64_t bytes); | |
| int ds4_gpu_pro_q4_expert_table_auto_available(void); | |
| int ds4_gpu_preload_q4_expert_tables(const void *model_map, uint64_t model_size, | |
| uint64_t gate_offset, uint64_t up_offset, uint64_t down_offset, | |
| uint64_t gate_expert_bytes, uint64_t down_expert_bytes, | |
| uint32_t n_total_expert); | |
| int ds4_gpu_should_use_managed_kv_cache(uint64_t kv_cache_bytes, uint64_t context_bytes); | |
| void ds4_gpu_set_quality(bool quality); | |
| void ds4_gpu_set_glm_model(bool enabled); | |
| void ds4_gpu_set_ssd_streaming(bool enabled); | |
| void ds4_gpu_set_glm_streaming_prefill_full_layer(bool enabled); | |
| int ds4_gpu_device_is_pre_m5_apple_silicon(void); | |
| int ds4_gpu_device_is_m5_apple_silicon(void); | |
| int ds4_gpu_set_decode_pipeline_fast_lookup(int enabled); | |
| /* Strict test oracle for the fixed decode mul_mv pipeline lookup cache. */ | |
| int ds4_gpu_test_decode_pipeline_fast_lookup(void); | |
| /* Strict test oracle for the extended decode mul_mv_ext (nsg + nxpsg) cache. */ | |
| int ds4_gpu_test_decode_pipeline_fast_lookup_ext(void); | |
| /* Strict test oracle for the generated resident-prefill MXFP4 half LUT. */ | |
| int ds4_gpu_test_mxfp4_down_half_lut(uint16_t *legacy_bits, | |
| uint16_t *lut_bits); | |
| enum { | |
| DS4_GPU_TEST_MXFP4_PAIR_TAIL_CULL = 1u << 0, | |
| DS4_GPU_TEST_MXFP4_PAIR_COMPACT_TILE = 1u << 1, | |
| DS4_GPU_TEST_MXFP4_MAP_SCATTER = 1u << 2, | |
| DS4_GPU_TEST_MXFP4_DOWN_TAIL_CULL = 1u << 3, | |
| DS4_GPU_TEST_MXFP4_DOWN_HALF_LUT = 1u << 4, | |
| DS4_GPU_TEST_OUTPUT_HC_WEIGHTS4 = 1u << 5, | |
| DS4_GPU_TEST_HC_RMS_SCALE_PROJ = 1u << 6, | |
| }; | |
| void ds4_gpu_test_set_flags(uint32_t flags); | |
| void ds4_gpu_release_zero_prefix_prefill_mask_cache(void); | |
| static inline int ds4_gpu_device_is_pre_m5_apple_silicon(void) { return 0; } | |
| static inline int ds4_gpu_device_is_m5_apple_silicon(void) { return 0; } | |
| void ds4_gpu_set_streaming_expert_cache_budget(uint32_t experts); | |
| void ds4_gpu_set_streaming_expert_cache_expert_bytes(uint64_t bytes); | |
| uint64_t ds4_gpu_recommended_working_set_size(void); | |
| uint32_t ds4_gpu_stream_expert_cache_configured_count(void); | |
| uint32_t ds4_gpu_stream_expert_cache_current_count(void); | |
| typedef struct ds4_gpu_stream_expert_table { | |
| const void *model_map; | |
| uint64_t model_size; | |
| uint32_t layer; | |
| uint32_t n_total_expert; | |
| uint64_t gate_offset; | |
| uint64_t up_offset; | |
| uint64_t down_offset; | |
| uint64_t gate_expert_bytes; | |
| uint64_t down_expert_bytes; | |
| } ds4_gpu_stream_expert_table; | |
| /* Reset only the prompt-local eviction heuristic. The resident SSD expert | |
| * cache itself is intentionally kept warm across sessions. */ | |
| void ds4_gpu_stream_expert_cache_reset_route_hotness(void); | |
| void ds4_gpu_stream_expert_cache_release_resident(void); | |
| uint32_t ds4_gpu_stream_expert_cache_budget_for_expert_size( | |
| uint64_t gate_expert_bytes, | |
| uint64_t down_expert_bytes); | |
| int ds4_gpu_stream_expert_cache_seed_selected( | |
| const ds4_gpu_stream_expert_table *table, | |
| const int32_t *selected_ids, | |
| uint32_t n_selected); | |
| int ds4_gpu_stream_expert_cache_begin_selected_load( | |
| const ds4_gpu_stream_expert_table *table, | |
| const int32_t *selected_ids, | |
| uint32_t n_selected); | |
| int ds4_gpu_glm_stream_expert_cache_begin_selected_load_tensor( | |
| const ds4_gpu_stream_expert_table *table, | |
| const ds4_gpu_tensor *selected, | |
| uint32_t n_selected); | |
| /* The async selected-load worker registers itself so Metal cache paths never | |
| * wait on command buffers from that thread (they fail the load instead and | |
| * the caller retries synchronously). */ | |
| void ds4_gpu_stream_expert_cache_note_service_thread(void); | |
| int ds4_gpu_stream_expert_cache_prepare_selected_batch( | |
| const ds4_gpu_stream_expert_table *table, | |
| const int32_t *selected_ids, | |
| uint32_t n_tokens, | |
| uint32_t n_selected); | |
| int ds4_gpu_stream_expert_cache_load_layer( | |
| const ds4_gpu_stream_expert_table *table); | |
| int ds4_gpu_stream_expert_cache_seed_from_layer_selected( | |
| const ds4_gpu_stream_expert_table *table, | |
| const ds4_gpu_tensor *selected, | |
| uint32_t n_tokens, | |
| uint32_t n_seed_tokens, | |
| uint32_t n_selected); | |
| int ds4_gpu_stream_expert_cache_finish_pending_batch(void); | |
| int ds4_gpu_stream_expert_cache_release_layer_cache(void); | |
| int ds4_gpu_stream_expert_cache_seed_experts( | |
| const ds4_gpu_stream_expert_table *table, | |
| const int32_t *expert_ids, | |
| const uint32_t *expert_priorities, | |
| uint32_t n_experts); | |
| /* Seed from mapped weights with blits appended to the active command buffer. */ | |
| int ds4_gpu_stream_expert_cache_seed_experts_gpu_copy( | |
| const ds4_gpu_stream_expert_table *table, | |
| const int32_t *expert_ids, | |
| const uint32_t *expert_priorities, | |
| uint32_t n_experts); | |
| void ds4_gpu_print_memory_report(const char *label); | |
| /* Number of WARNING-level Strix Halo diagnostics emitted this process. Used by | |
| * the ROCm smoke test's strict mode. Always defined; returns 0 on non-ROCm | |
| * builds. */ | |
| int ds4_rocm_warning_count(void); | |
| /* Per-model residency verdict, populated by ds4_gpu_set_model_map. Tooling | |
| * can query it to warn about near-OOM loads without re-reading the kernel. | |
| * Always defined; returns zeros on non-ROCm builds or before any model map. */ | |
| typedef struct ds4_rocm_model_load_estimate { | |
| uint64_t model_bytes; | |
| uint64_t ttm_limit_bytes; | |
| uint64_t headroom_bytes; /* ttm_limit - model_bytes, 0 if would OOM */ | |
| int would_have_oomed; | |
| int headroom_below_8g; | |
| char gguf_magic[8]; | |
| uint64_t gguf_tensor_count; | |
| } ds4_rocm_model_load_estimate; | |
| const ds4_rocm_model_load_estimate *ds4_rocm_last_model_load_estimate(void); | |
| /* HIP-visible free memory in bytes, via hipMemGetInfo. Returns 0 on non-ROCm | |
| * builds or when the device is not initialized. Used by the smoke test to | |
| * detect accidental device-memory leaks across alloc/free cycles. */ | |
| size_t ds4_gpu_hip_free_bytes(void); | |
| /* Tensor-parallel per-layer gates (Metal only). The encoder calls | |
| * ds4_gpu_tp_gate_encode() right after the kernels that produce a partial | |
| * block output in the TP slab: it closes the current encoder, makes the GPU | |
| * signal a shared event, queues the exchange on a service thread, and makes | |
| * the GPU wait for the CPU-signaled release before the combine kernel runs. | |
| * Sequence values are assigned internally and increase monotonically; both | |
| * ranks encode the identical gate sequence so values pair up by | |
| * construction. The exchange callback runs on the service thread and must | |
| * return nonzero on success. */ | |
| typedef int (*ds4_gpu_tp_exchange_fn)(void *ud, uint32_t layer, uint32_t gate, uint64_t seq); | |
| /* Bind one rank of the two-way split. slab is the transport slab tensor and | |
| * gpu_flags_off is the offset of its GPU-written gate-ready flag words. */ | |
| int ds4_gpu_tp_init(uint32_t rank, | |
| ds4_gpu_tensor *slab, uint64_t gpu_flags_off, | |
| ds4_gpu_tp_exchange_fn fn, void *ud); | |
| void ds4_gpu_tp_shutdown(void); | |
| /* Multi-session TP reuses slab slots across several encoded graph tapes. | |
| * Shared-event arrival is required in that mode to make each partial vector | |
| * CPU-visible before the transport thread reads it. */ | |
| void ds4_gpu_tp_set_session_batch_mode(int enabled); | |
| /* The coordinator-only DSpark support model does not participate in TP. | |
| * Suspend ownership only while encoding it; base-model verification remains | |
| * split across both ranks. */ | |
| void ds4_gpu_tp_suspend_expert_sharding(int suspend); | |
| int ds4_gpu_tp_gate_encode(uint32_t layer, uint32_t gate); | |
| /* Verify-block batch gates: one exchange per layer moving `rows` partial | |
| * rows at once (speculative verify). The callback runs on the gate service | |
| * thread with the same ud as the row-gate exchange fn. */ | |
| typedef int (*ds4_gpu_tp_batch_exchange_fn)(void *ud, uint32_t layer, | |
| uint32_t rows, uint64_t seq); | |
| void ds4_gpu_tp_set_batch_exchange(ds4_gpu_tp_batch_exchange_fn fn); | |
| int ds4_gpu_tp_batch_gate_encode(uint32_t layer, uint32_t rows); | |
| /* Prefill batch gates: the service thread exchanges `bytes` between two | |
| * CPU-visible bounce tensors directly (payloads far beyond slab slots). */ | |
| typedef int (*ds4_gpu_tp_big_exchange_fn)(void *ud, uint32_t layer, | |
| uint64_t seq, const void *out, | |
| void *in, uint64_t bytes); | |
| void ds4_gpu_tp_set_big_exchange(ds4_gpu_tp_big_exchange_fn fn); | |
| int ds4_gpu_tp_big_gate_encode(uint32_t layer, uint32_t rows, | |
| const ds4_gpu_tensor *out_t, | |
| ds4_gpu_tensor *in_t, | |
| uint64_t bytes); | |
| /* Split big gate: kick publishes the GPU arrival marker (batch shared | |
| * event, whose completion semantics make the bounce payload visible to | |
| * the exchange thread) and queues the exchange, returning the gate seq | |
| * (0 on failure); wait encodes the release. Multiple kicks may be in | |
| * flight; waiting on the last seq covers all earlier kicks (monotonic | |
| * release event, in-order service thread). */ | |
| uint64_t ds4_gpu_tp_big_gate_kick(uint32_t layer, uint32_t rows, | |
| const ds4_gpu_tensor *out_t, | |
| ds4_gpu_tensor *in_t, | |
| uint64_t bytes); | |
| int ds4_gpu_tp_big_gate_wait(uint64_t seq); | |
| /* Pause/resume the DVFS keep-alive around work that keeps the GPU busy. | |
| * No-op when TP is not bound. */ | |
| void ds4_gpu_tp_keepalive_pause(int paused); | |
| /* Split attention heads across the two TP ranks in the GLM batch-prefill | |
| * attention kernels (qk-low, attention-lora, value-project). The caller | |
| * zeroes the unowned head range of the heads buffer and combines the | |
| * attn-output partials over the TP big-gate exchange. */ | |
| void ds4_gpu_tp_set_attn_head_split(int enabled); | |
| /* Skip the whole-file model residency set (TP sharding: only the | |
| * owned ranges are warmed; the rest must never be paged in). Call before | |
| * the model is mapped. */ | |
| void ds4_gpu_model_residency_skip(int skip); | |
| /* Nonzero after any gate exchange failed; the eval must abort. */ | |
| int ds4_gpu_tp_failed(void); | |
| /* Tensor-parallel sliced projections (Metal decode path only). | |
| * | |
| * ds4_gpu_matmul_q8_0_kslice_tensor computes a k-range partial matvec: | |
| * out[out_dim] = W[:, k_off : k_off + k_cnt] @ x[x_elem_off : +k_cnt] where | |
| * W rows span full_in_dim quantized Q8_0 elements. k offsets/counts must be | |
| * multiples of 32 (Q8_0 block). Partial results from both ranks sum to the | |
| * full projection. | |
| * | |
| * ds4_gpu_attention_output_q8_tp_tensor is the group-sliced attention output | |
| * pair: low projection for groups [group0, group0+group_cnt) plus the | |
| * matching k-slice of the expand projection, producing this rank's partial | |
| * attention block output (n_tokens == 1 only). */ | |
| int ds4_gpu_matmul_q8_0_kslice_tensor( | |
| ds4_gpu_tensor *out, | |
| const void *model_map, | |
| uint64_t model_size, | |
| uint64_t weight_offset, | |
| uint64_t full_in_dim, | |
| uint64_t k_off, | |
| uint64_t k_cnt, | |
| uint64_t out_dim, | |
| const ds4_gpu_tensor *x, | |
| uint64_t x_elem_off); | |
| /* CUDA multi-row variant. Each input row contains only the owned contiguous | |
| * K slice, while each output row spans the full projection width. */ | |
| int ds4_gpu_matmul_q8_0_kslice_rows_tensor( | |
| ds4_gpu_tensor *out, | |
| const void *model_map, | |
| uint64_t model_size, | |
| uint64_t weight_offset, | |
| uint64_t full_in_dim, | |
| uint64_t out_dim, | |
| uint64_t k_off, | |
| uint64_t k_cnt, | |
| const ds4_gpu_tensor *x, | |
| uint64_t n_rows); | |
| int ds4_gpu_matmul_quant_kslice_tensor( | |
| ds4_gpu_tensor *out, | |
| const void *model_map, | |
| uint64_t model_size, | |
| uint64_t weight_offset, | |
| uint32_t weight_type, | |
| uint64_t full_in_dim, | |
| uint64_t k_off, | |
| uint64_t k_cnt, | |
| uint64_t out_dim, | |
| const ds4_gpu_tensor *x, | |
| uint64_t x_elem_off); | |
| int ds4_gpu_attention_output_q8_tp_tensor( | |
| ds4_gpu_tensor *out, | |
| ds4_gpu_tensor *low, | |
| const void *model_map, | |
| uint64_t model_size, | |
| uint64_t out_a_offset, | |
| uint64_t out_b_offset, | |
| uint64_t group_dim, | |
| uint64_t rank, | |
| uint32_t n_groups_total, | |
| uint32_t group0, | |
| uint32_t group_cnt, | |
| uint64_t out_dim, | |
| const ds4_gpu_tensor *heads); | |
| /* ========================================================================= | |
| * Embeddings and Indexer Helpers. | |
| * ========================================================================= | |
| * | |
| * These kernels seed HC state from token embeddings and implement the ratio-4 | |
| * compressed-attention indexer that chooses visible compressed rows. | |
| */ | |
| int ds4_gpu_embed_token_hc_tensor( | |
| ds4_gpu_tensor *out_hc, | |
| const void *model_map, | |
| uint64_t model_size, | |
| uint64_t weight_offset, | |
| uint32_t n_vocab, | |
| uint32_t token, | |
| uint32_t n_embd, | |
| uint32_t n_hc); | |
| int ds4_gpu_embed_tokens_hc_tensor( | |
| ds4_gpu_tensor *out_hc, | |
| const ds4_gpu_tensor *tokens, | |
| const void *model_map, | |
| uint64_t model_size, | |
| uint64_t weight_offset, | |
| uint32_t n_vocab, | |
| uint32_t n_tokens, | |
| uint32_t n_embd, | |
| uint32_t n_hc); | |
| int ds4_gpu_embed_token_q8_0_tensor( | |
| ds4_gpu_tensor *out, | |
| const void *model_map, | |
| uint64_t model_size, | |
| uint64_t weight_offset, | |
| uint32_t n_vocab, | |
| uint32_t token, | |
| uint32_t n_embd); | |
| int ds4_gpu_embed_tokens_q8_0_tensor( | |
| ds4_gpu_tensor *out, | |
| const ds4_gpu_tensor *tokens, | |
| const void *model_map, | |
| uint64_t model_size, | |
| uint64_t weight_offset, | |
| uint32_t n_vocab, | |
| uint32_t n_tokens, | |
| uint32_t n_embd); | |
| int ds4_gpu_embed_token_quant_tensor( | |
| ds4_gpu_tensor *out, | |
| const void *model_map, | |
| uint64_t model_size, | |
| uint64_t weight_offset, | |
| uint32_t weight_type, | |
| uint32_t n_vocab, | |
| uint32_t token, | |
| uint32_t n_embd); | |
| int ds4_gpu_embed_tokens_quant_tensor( | |
| ds4_gpu_tensor *out, | |
| const ds4_gpu_tensor *tokens, | |
| const void *model_map, | |
| uint64_t model_size, | |
| uint64_t weight_offset, | |
| uint32_t weight_type, | |
| uint32_t n_vocab, | |
| uint32_t n_tokens, | |
| uint32_t n_embd); | |
| int ds4_gpu_indexer_score_one_tensor( | |
| ds4_gpu_tensor *scores, | |
| const ds4_gpu_tensor *q, | |
| const ds4_gpu_tensor *weights, | |
| const ds4_gpu_tensor *index_comp, | |
| uint32_t n_comp, | |
| uint32_t n_head, | |
| uint32_t head_dim, | |
| float scale); | |
| int ds4_gpu_indexer_scores_prefill_tensor( | |
| ds4_gpu_tensor *scores, | |
| const ds4_gpu_tensor *q, | |
| const ds4_gpu_tensor *weights, | |
| const ds4_gpu_tensor *index_comp, | |
| uint32_t n_comp, | |
| uint32_t n_tokens, | |
| uint32_t n_head, | |
| uint32_t head_dim, | |
| uint32_t ratio, | |
| float scale); | |
| int ds4_gpu_indexer_scores_decode_batch_tensor( | |
| ds4_gpu_tensor *scores, | |
| const ds4_gpu_tensor *q, | |
| const ds4_gpu_tensor *weights, | |
| const ds4_gpu_tensor *index_comp, | |
| uint32_t n_comp, | |
| uint32_t n_tokens, | |
| uint32_t pos0, | |
| uint32_t n_head, | |
| uint32_t head_dim, | |
| uint32_t ratio, | |
| float scale); | |
| int ds4_gpu_dspark_markov_argmax_tensor(ds4_gpu_tensor *out_idx, | |
| const ds4_gpu_tensor *logits_row, | |
| const void *model_map, | |
| uint64_t model_size, | |
| uint64_t w1_offset, | |
| uint64_t w2_offset, | |
| uint32_t prev_token, | |
| uint32_t vocab, | |
| uint32_t rank); | |
| int ds4_gpu_indexer_topk_tensor( | |
| ds4_gpu_tensor *selected, | |
| const ds4_gpu_tensor *scores, | |
| uint32_t n_comp, | |
| uint32_t n_tokens, | |
| uint32_t top_k); | |
| int ds4_gpu_indexer_top1_value_tensor( | |
| ds4_gpu_tensor *selected, | |
| ds4_gpu_tensor *values, | |
| const ds4_gpu_tensor *scores, | |
| uint32_t n_comp, | |
| uint32_t n_tokens, | |
| uint32_t index_offset); | |
| int ds4_gpu_matmul_q8_0_top1_tensor( | |
| ds4_gpu_tensor *selected, | |
| ds4_gpu_tensor *values, | |
| const void *model_map, | |
| uint64_t model_size, | |
| uint64_t weight_offset, | |
| uint64_t in_dim, | |
| uint64_t out_dim, | |
| const ds4_gpu_tensor *x, | |
| uint32_t index_offset); | |
| int ds4_gpu_set_decode_fast_attention(int enabled); | |
| int ds4_gpu_set_decode_score_vec4(int enabled); | |
| /* GPU argmax over n_vocab F32 logits. Writes the winning index as int32 at | |
| * out_idx[0]. Tie-break: lower index wins (matches host sample_argmax). */ | |
| int ds4_gpu_argmax_tensor( | |
| ds4_gpu_tensor *out_idx, | |
| const ds4_gpu_tensor *logits, | |
| uint32_t n_vocab); | |
| int ds4_gpu_dsv4_topk_mask_tensor( | |
| ds4_gpu_tensor *mask, | |
| const ds4_gpu_tensor *topk, | |
| uint32_t n_comp, | |
| uint32_t n_tokens, | |
| uint32_t top_k); | |
| /* ========================================================================= | |
| * Dense Projections, Norms, RoPE, and KV Rounding. | |
| * ========================================================================= | |
| * | |
| * The graph uses these primitives for Q/KV projections, HC/output projections, | |
| * attention output projections, and DS4's tail-only RoPE. | |
| */ | |
| int ds4_gpu_matmul_q8_0_tensor( | |
| ds4_gpu_tensor *out, | |
| const void *model_map, | |
| uint64_t model_size, | |
| uint64_t weight_offset, | |
| uint64_t in_dim, | |
| uint64_t out_dim, | |
| const ds4_gpu_tensor *x, | |
| uint64_t n_tok); | |
| int ds4_gpu_matmul_q8_0_decode_mpp_tensor( | |
| ds4_gpu_tensor *out, | |
| const void *model_map, | |
| uint64_t model_size, | |
| uint64_t weight_offset, | |
| uint64_t in_dim, | |
| uint64_t out_dim, | |
| const ds4_gpu_tensor *x, | |
| uint64_t n_tok); | |
| int ds4_gpu_matmul_q8_0_decode_mpp_model_view_tensor( | |
| ds4_gpu_tensor *out, | |
| const void *model_map, | |
| uint64_t model_size, | |
| uint64_t weight_offset, | |
| uint64_t in_dim, | |
| uint64_t out_dim, | |
| const ds4_gpu_tensor *x, | |
| uint64_t n_tok); | |
| int ds4_gpu_matmul_q8_0_rows_scalar_tensor( | |
| ds4_gpu_tensor *out, | |
| const void *model_map, | |
| uint64_t model_size, | |
| uint64_t weight_offset, | |
| uint64_t in_dim, | |
| uint64_t out_dim, | |
| const ds4_gpu_tensor *x, | |
| uint64_t n_tok); | |
| int ds4_gpu_matmul_q4_k_tensor( | |
| ds4_gpu_tensor *out, | |
| const void *model_map, | |
| uint64_t model_size, | |
| uint64_t weight_offset, | |
| uint64_t in_dim, | |
| uint64_t out_dim, | |
| const ds4_gpu_tensor *x, | |
| uint64_t n_tok); | |
| int ds4_gpu_matmul_quant_tensor( | |
| ds4_gpu_tensor *out, | |
| const void *model_map, | |
| uint64_t model_size, | |
| uint64_t weight_offset, | |
| uint32_t weight_type, | |
| uint64_t in_dim, | |
| uint64_t out_dim, | |
| const ds4_gpu_tensor *x, | |
| uint64_t n_tok); | |
| int ds4_gpu_matmul_quant_decode_mpp_model_view_tensor( | |
| ds4_gpu_tensor *out, | |
| const void *model_map, | |
| uint64_t model_size, | |
| uint64_t weight_offset, | |
| uint32_t weight_type, | |
| uint64_t in_dim, | |
| uint64_t out_dim, | |
| const ds4_gpu_tensor *x, | |
| uint64_t n_tok); | |
| int ds4_gpu_matmul_quant_rows_scalar_tensor( | |
| ds4_gpu_tensor *out, | |
| const void *model_map, | |
| uint64_t model_size, | |
| uint64_t weight_offset, | |
| uint32_t weight_type, | |
| uint64_t in_dim, | |
| uint64_t out_dim, | |
| const ds4_gpu_tensor *x, | |
| uint64_t n_tok); | |
| /* Optional fused GPU operations. | |
| * | |
| * These are acceleration hooks, not required backend primitives. A backend | |
| * that does not provide the fused kernel must still define the symbol and | |
| * return 0. Callers then use the portable sequence of required primitives. | |
| * Backends that return nonzero from a fused half-output operation must also | |
| * implement the matching half-input HC expansion helpers below. | |
| */ | |
| int ds4_gpu_matmul_q8_0_pair_tensor( | |
| ds4_gpu_tensor *out0, | |
| ds4_gpu_tensor *out1, | |
| const void *model_map, | |
| uint64_t model_size, | |
| uint64_t weight0_offset, | |
| uint64_t weight1_offset, | |
| uint64_t in_dim, | |
| uint64_t out0_dim, | |
| uint64_t out1_dim, | |
| const ds4_gpu_tensor *x, | |
| uint64_t n_tok); | |
| /* Multi-row decode projections that preserve the one-row reduction order. */ | |
| int ds4_gpu_matmul_q8_0_decode_rows_exact_tensor( | |
| ds4_gpu_tensor *out, | |
| const void *model_map, | |
| uint64_t model_size, | |
| uint64_t weight_offset, | |
| uint64_t in_dim, | |
| uint64_t out_dim, | |
| const ds4_gpu_tensor *x, | |
| uint32_t n_rows); | |
| int ds4_gpu_matmul_q8_0_pair_decode_rows_exact_tensor( | |
| ds4_gpu_tensor *out0, | |
| ds4_gpu_tensor *out1, | |
| const void *model_map, | |
| uint64_t model_size, | |
| uint64_t weight0_offset, | |
| uint64_t weight1_offset, | |
| uint64_t in_dim, | |
| uint64_t out0_dim, | |
| uint64_t out1_dim, | |
| const ds4_gpu_tensor *x, | |
| uint32_t n_rows); | |
| int ds4_gpu_matmul_q8_0_f16_out_tensor( | |
| ds4_gpu_tensor *out_h, | |
| const void *model_map, | |
| uint64_t model_size, | |
| uint64_t weight_offset, | |
| uint64_t in_dim, | |
| uint64_t out_dim, | |
| const ds4_gpu_tensor *x, | |
| uint64_t n_tok); | |
| int ds4_gpu_shared_gate_up_swiglu_q8_0_tensor( | |
| ds4_gpu_tensor *gate, | |
| ds4_gpu_tensor *up, | |
| ds4_gpu_tensor *mid, | |
| const void *model_map, | |
| uint64_t model_size, | |
| uint64_t gate_offset, | |
| uint64_t up_offset, | |
| uint64_t in_dim, | |
| uint64_t out_dim, | |
| const ds4_gpu_tensor *x, | |
| float clamp); | |
| int ds4_gpu_router_shared_gate_up_q8_0_tensor( | |
| ds4_gpu_tensor *router_logits, | |
| ds4_gpu_tensor *gate, | |
| ds4_gpu_tensor *up, | |
| ds4_gpu_tensor *mid, | |
| const void *model_map, | |
| uint64_t model_size, | |
| uint64_t router_weight_offset, | |
| uint64_t gate_offset, | |
| uint64_t up_offset, | |
| uint64_t in_dim, | |
| uint64_t router_out_dim, | |
| uint64_t out_dim, | |
| const ds4_gpu_tensor *x, | |
| float clamp, | |
| bool router_only); | |
| int ds4_gpu_router_project_select_fused_tensor( | |
| ds4_gpu_tensor *router_logits, | |
| ds4_gpu_tensor *probs, | |
| ds4_gpu_tensor *selected, | |
| ds4_gpu_tensor *weights, | |
| const void *model_map, | |
| uint64_t model_size, | |
| uint64_t router_weight_offset, | |
| uint64_t bias_offset, | |
| bool has_bias, | |
| const ds4_gpu_tensor *x); | |
| int ds4_gpu_shared_mid_swiglu_q8_0_decode_exact_tensor( | |
| ds4_gpu_tensor *mid, | |
| const void *model_map, | |
| uint64_t model_size, | |
| uint64_t gate_offset, | |
| uint64_t up_offset, | |
| uint64_t in_dim, | |
| uint64_t out_dim, | |
| const ds4_gpu_tensor *x, | |
| float clamp, | |
| const ds4_gpu_tensor *selected, | |
| const ds4_gpu_tensor *prequant, | |
| uint32_t expert_split, | |
| bool home_rank); | |
| int ds4_gpu_shared_mid_swiglu_q8_0_tensor( | |
| ds4_gpu_tensor *mid, | |
| const void *model_map, | |
| uint64_t model_size, | |
| uint64_t gate_offset, | |
| uint64_t up_offset, | |
| uint64_t in_dim, | |
| uint64_t out_dim, | |
| const ds4_gpu_tensor *x, | |
| float clamp); | |
| int ds4_gpu_shared_gate_up_swiglu_q8_0_model_view_tensor( | |
| ds4_gpu_tensor *gate, | |
| ds4_gpu_tensor *up, | |
| ds4_gpu_tensor *mid, | |
| const void *model_map, | |
| uint64_t model_size, | |
| uint64_t gate_offset, | |
| uint64_t up_offset, | |
| uint64_t in_dim, | |
| uint64_t out_dim, | |
| const ds4_gpu_tensor *x, | |
| float clamp); | |
| int ds4_gpu_shared_gate_up_swiglu_q8_0_rows_tensor( | |
| ds4_gpu_tensor *gate, | |
| ds4_gpu_tensor *up, | |
| ds4_gpu_tensor *mid, | |
| const void *model_map, | |
| uint64_t model_size, | |
| uint64_t gate_offset, | |
| uint64_t up_offset, | |
| uint64_t in_dim, | |
| uint64_t out_dim, | |
| const ds4_gpu_tensor *x, | |
| uint64_t n_tok, | |
| float clamp); | |
| int ds4_gpu_shared_gate_up_swiglu_q8_0_rows_scalar_tensor( | |
| ds4_gpu_tensor *gate, | |
| ds4_gpu_tensor *up, | |
| ds4_gpu_tensor *mid, | |
| const void *model_map, | |
| uint64_t model_size, | |
| uint64_t gate_offset, | |
| uint64_t up_offset, | |
| uint64_t in_dim, | |
| uint64_t out_dim, | |
| const ds4_gpu_tensor *x, | |
| uint64_t n_tok, | |
| float clamp); | |
| int ds4_gpu_matmul_f16_tensor( | |
| ds4_gpu_tensor *out, | |
| const void *model_map, | |
| uint64_t model_size, | |
| uint64_t weight_offset, | |
| uint64_t in_dim, | |
| uint64_t out_dim, | |
| const ds4_gpu_tensor *x, | |
| uint64_t n_tok); | |
| /* CUDA batch path: fold an input RMS normalization into the FP16 activation | |
| * conversion used by the following projection. Returns 0 without touching | |
| * out when the optimized path is unavailable. */ | |
| int ds4_gpu_matmul_f16_rms_fold_tensor( | |
| ds4_gpu_tensor *out, | |
| const void *model_map, | |
| uint64_t model_size, | |
| uint64_t weight_offset, | |
| uint64_t in_dim, | |
| uint64_t out_dim, | |
| const ds4_gpu_tensor *x, | |
| uint64_t n_tok, | |
| float norm_eps); | |
| /* Exact multi-row form of the DeepSeek 4096x256 F16 router projection. */ | |
| int ds4_gpu_matmul_f16_router_rows_exact_tensor( | |
| ds4_gpu_tensor *out, | |
| const void *model_map, | |
| uint64_t model_size, | |
| uint64_t weight_offset, | |
| const ds4_gpu_tensor *x, | |
| uint32_t n_rows); | |
| int ds4_gpu_matmul_f16_pair_tensor( | |
| ds4_gpu_tensor *out_a, | |
| ds4_gpu_tensor *out_b, | |
| const void *model_map, | |
| uint64_t model_size, | |
| uint64_t weight_a_offset, | |
| uint64_t weight_b_offset, | |
| uint64_t in_dim, | |
| uint64_t out_dim, | |
| const ds4_gpu_tensor *x, | |
| uint64_t n_tok); | |
| /* Optional Metal decode fusion. Returns 1 when the paired projection and | |
| * recurrent compressor-state store were encoded, 0 when the optimized path | |
| * is unavailable, and -1 on an attempted-path error. */ | |
| int ds4_gpu_matmul_f16_pair_compressor_store_tensor( | |
| ds4_gpu_tensor *out_kv, | |
| ds4_gpu_tensor *out_score, | |
| ds4_gpu_tensor *state_kv, | |
| ds4_gpu_tensor *state_score, | |
| const void *model_map, | |
| uint64_t model_size, | |
| uint64_t weight_kv_offset, | |
| uint64_t weight_score_offset, | |
| uint64_t ape_offset, | |
| uint32_t ape_type, | |
| uint64_t in_dim, | |
| uint32_t width, | |
| const ds4_gpu_tensor *x, | |
| uint32_t ratio, | |
| uint32_t pos); | |
| int ds4_gpu_matmul_f16_quad_compressor_store_tensor( | |
| ds4_gpu_tensor *out0_kv, | |
| ds4_gpu_tensor *out0_score, | |
| ds4_gpu_tensor *out1_kv, | |
| ds4_gpu_tensor *out1_score, | |
| ds4_gpu_tensor *state0_kv, | |
| ds4_gpu_tensor *state0_score, | |
| ds4_gpu_tensor *state1_kv, | |
| ds4_gpu_tensor *state1_score, | |
| const void *model_map, | |
| uint64_t model_size, | |
| uint64_t weight0_kv_offset, | |
| uint64_t weight0_score_offset, | |
| uint64_t weight1_kv_offset, | |
| uint64_t weight1_score_offset, | |
| uint64_t ape0_offset, | |
| uint32_t ape0_type, | |
| uint64_t ape1_offset, | |
| uint32_t ape1_type, | |
| uint64_t in_dim, | |
| uint32_t width0, | |
| uint32_t width1, | |
| const ds4_gpu_tensor *x, | |
| uint32_t ratio, | |
| uint32_t pos); | |
| /* Decode-only M5 fusion: emit-path compressor row finalize (norm + rope + | |
| * fp8/commit + indexer qat) in one dispatch. Bit-exact vs the separate | |
| * dispatches. Returns 1 when fused, 0 to fall back. */ | |
| int ds4_gpu_dsv4_comp_row_finalize_tensor( | |
| ds4_gpu_tensor *attn_stage, | |
| ds4_gpu_tensor *attn_cache, | |
| uint32_t attn_comp_row, | |
| uint64_t attn_norm_offset, | |
| ds4_gpu_tensor *index_cache, | |
| uint32_t index_comp_row, | |
| uint64_t index_norm_offset, | |
| ds4_gpu_tensor *attn_state_kv, | |
| ds4_gpu_tensor *attn_state_score, | |
| ds4_gpu_tensor *index_state_kv, | |
| ds4_gpu_tensor *index_state_score, | |
| const void *model_map, | |
| uint64_t model_size, | |
| uint32_t pos, | |
| uint32_t n_rot, | |
| uint32_t n_ctx_orig, | |
| float freq_base, | |
| float freq_scale, | |
| float ext_factor, | |
| float attn_factor, | |
| float beta_fast, | |
| float beta_slow, | |
| float rms_eps); | |
| /* Decode-only M5 fusion: q_a/kv Q8 pair projection + F16 quad compressor | |
| * projection/store in one dispatch. Bit-exact vs the separate dispatches. | |
| * Returns 1 when fused, 0 to fall back, -1 on error. */ | |
| int ds4_gpu_qkv_pair_quad_compressor_store_tensor( | |
| ds4_gpu_tensor *qr, | |
| ds4_gpu_tensor *kv_raw, | |
| ds4_gpu_tensor *out0_kv, | |
| ds4_gpu_tensor *out0_score, | |
| ds4_gpu_tensor *out1_kv, | |
| ds4_gpu_tensor *out1_score, | |
| ds4_gpu_tensor *state0_kv, | |
| ds4_gpu_tensor *state0_score, | |
| ds4_gpu_tensor *state1_kv, | |
| ds4_gpu_tensor *state1_score, | |
| const void *model_map, | |
| uint64_t model_size, | |
| uint64_t q_a_offset, | |
| uint64_t kv_offset, | |
| uint64_t weight0_kv_offset, | |
| uint64_t weight0_score_offset, | |
| uint64_t weight1_kv_offset, | |
| uint64_t weight1_score_offset, | |
| uint64_t ape0_offset, | |
| uint32_t ape0_type, | |
| uint64_t ape1_offset, | |
| uint32_t ape1_type, | |
| uint32_t in_dim, | |
| uint32_t q_rank, | |
| uint32_t kv_dim, | |
| uint32_t width0, | |
| uint32_t width1, | |
| const ds4_gpu_tensor *x, | |
| uint32_t ratio, | |
| uint32_t pos); | |
| int ds4_gpu_matmul_f32_tensor( | |
| ds4_gpu_tensor *out, | |
| const void *model_map, | |
| uint64_t model_size, | |
| uint64_t weight_offset, | |
| uint64_t in_dim, | |
| uint64_t out_dim, | |
| const ds4_gpu_tensor *x, | |
| uint64_t n_tok); | |
| int ds4_gpu_matmul_bf16_tensor( | |
| ds4_gpu_tensor *out, | |
| const void *model_map, | |
| uint64_t model_size, | |
| uint64_t weight_offset, | |
| uint64_t in_dim, | |
| uint64_t out_dim, | |
| const ds4_gpu_tensor *x, | |
| uint64_t n_tok); | |
| int ds4_gpu_repeat_hc_tensor( | |
| ds4_gpu_tensor *out, | |
| const ds4_gpu_tensor *row, | |
| uint32_t n_embd, | |
| uint32_t n_hc); | |
| int ds4_gpu_repeat_hc_rows_tensor( | |
| ds4_gpu_tensor *out, | |
| const ds4_gpu_tensor *rows, | |
| uint32_t n_tokens, | |
| uint32_t n_embd, | |
| uint32_t n_hc); | |
| int ds4_gpu_rms_norm_plain_tensor( | |
| ds4_gpu_tensor *out, | |
| const ds4_gpu_tensor *x, | |
| uint32_t n, | |
| float eps); | |
| int ds4_gpu_rms_norm_plain_rows_tensor( | |
| ds4_gpu_tensor *out, | |
| const ds4_gpu_tensor *x, | |
| uint32_t n, | |
| uint32_t rows, | |
| float eps); | |
| int ds4_gpu_rms_norm_weight_tensor( | |
| ds4_gpu_tensor *out, | |
| const ds4_gpu_tensor *x, | |
| const void *model_map, | |
| uint64_t model_size, | |
| uint64_t weight_offset, | |
| uint32_t n, | |
| float eps); | |
| int ds4_gpu_rms_norm_weight_rows_tensor( | |
| ds4_gpu_tensor *out, | |
| const ds4_gpu_tensor *x, | |
| const void *model_map, | |
| uint64_t model_size, | |
| uint64_t weight_offset, | |
| uint32_t n, | |
| uint32_t rows, | |
| float eps); | |
| int ds4_gpu_add_rms_norm_weight_tensor( | |
| ds4_gpu_tensor *norm_out, | |
| ds4_gpu_tensor *sum_out, | |
| const ds4_gpu_tensor *a, | |
| const ds4_gpu_tensor *b, | |
| const void *model_map, | |
| uint64_t model_size, | |
| uint64_t weight_offset, | |
| uint32_t n, | |
| float eps); | |
| int ds4_gpu_dsv4_qkv_rms_norm_rows_tensor( | |
| ds4_gpu_tensor *q_out, | |
| const ds4_gpu_tensor *q, | |
| const void *model_map, | |
| uint64_t model_size, | |
| uint64_t q_weight_offset, | |
| uint32_t q_n, | |
| ds4_gpu_tensor *kv_out, | |
| const ds4_gpu_tensor *kv, | |
| uint64_t kv_weight_offset, | |
| uint32_t kv_n, | |
| uint32_t rows, | |
| float eps); | |
| int ds4_gpu_dsv4_qkv_rms_norm_kv_rope_fp8_store_tensor( | |
| ds4_gpu_tensor *q_out, | |
| const ds4_gpu_tensor *q, | |
| const void *model_map, | |
| uint64_t model_size, | |
| uint64_t q_weight_offset, | |
| uint32_t q_n, | |
| ds4_gpu_tensor *kv_out, | |
| const ds4_gpu_tensor *kv, | |
| uint64_t kv_weight_offset, | |
| uint32_t kv_n, | |
| ds4_gpu_tensor *raw_cache, | |
| uint64_t raw_cap, | |
| uint32_t raw_row, | |
| uint32_t n_rot, | |
| uint32_t pos0, | |
| uint32_t n_ctx_orig, | |
| float freq_base, | |
| float freq_scale, | |
| float ext_factor, | |
| float attn_factor, | |
| float beta_fast, | |
| float beta_slow, | |
| float eps); | |
| int ds4_gpu_dsv4_qkv_rms_norm_rows_kv_rope_tensor( | |
| ds4_gpu_tensor *q_out, | |
| const ds4_gpu_tensor *q, | |
| const void *model_map, | |
| uint64_t model_size, | |
| uint64_t q_weight_offset, | |
| uint32_t q_n, | |
| ds4_gpu_tensor *kv_out, | |
| const ds4_gpu_tensor *kv, | |
| uint64_t kv_weight_offset, | |
| uint32_t kv_n, | |
| uint32_t rows, | |
| uint32_t kv_n_head, | |
| uint32_t kv_head_dim, | |
| uint32_t n_rot, | |
| uint32_t pos0, | |
| uint32_t n_ctx_orig, | |
| bool inverse, | |
| float freq_base, | |
| float freq_scale, | |
| float ext_factor, | |
| float attn_factor, | |
| float beta_fast, | |
| float beta_slow, | |
| float eps); | |
| int ds4_gpu_head_rms_norm_tensor( | |
| ds4_gpu_tensor *x, | |
| uint32_t n_tok, | |
| uint32_t n_head, | |
| uint32_t head_dim, | |
| float eps); | |
| int ds4_gpu_head_rms_norm_rope_tail_tensor( | |
| ds4_gpu_tensor *x, | |
| uint32_t n_tok, | |
| uint32_t n_head, | |
| uint32_t head_dim, | |
| uint32_t n_rot, | |
| uint32_t pos0, | |
| uint32_t n_ctx_orig, | |
| bool inverse, | |
| float freq_base, | |
| float freq_scale, | |
| float ext_factor, | |
| float attn_factor, | |
| float beta_fast, | |
| float beta_slow, | |
| float eps); | |
| int ds4_gpu_attn_q_b_f16_head_rms_rope_tail_tensor( | |
| ds4_gpu_tensor *out, | |
| ds4_gpu_tensor *q_half, | |
| const void *model_map, | |
| uint64_t model_size, | |
| uint64_t weight_offset, | |
| uint64_t in_dim, | |
| uint64_t out_dim, | |
| const ds4_gpu_tensor *x, | |
| uint32_t n_tok, | |
| uint32_t n_head, | |
| uint32_t head_dim, | |
| uint32_t n_rot, | |
| uint32_t pos0, | |
| uint32_t n_ctx_orig, | |
| bool inverse, | |
| float freq_base, | |
| float freq_scale, | |
| float ext_factor, | |
| float attn_factor, | |
| float beta_fast, | |
| float beta_slow, | |
| float eps); | |
| int ds4_gpu_dsv4_fp8_kv_quantize_tensor( | |
| ds4_gpu_tensor *x, | |
| uint32_t n_tok, | |
| uint32_t head_dim, | |
| uint32_t n_rot); | |
| int ds4_gpu_dsv4_indexer_qat_tensor( | |
| ds4_gpu_tensor *x, | |
| uint32_t n_rows, | |
| uint32_t head_dim); | |
| int ds4_gpu_rope_tail_tensor( | |
| ds4_gpu_tensor *x, | |
| uint32_t n_tok, | |
| uint32_t n_head, | |
| uint32_t head_dim, | |
| uint32_t n_rot, | |
| uint32_t pos0, | |
| uint32_t n_ctx_orig, | |
| bool inverse, | |
| float freq_base, | |
| float freq_scale, | |
| float ext_factor, | |
| float attn_factor, | |
| float beta_fast, | |
| float beta_slow); | |
| int ds4_gpu_glm_rope_tail_tensor( | |
| ds4_gpu_tensor *x, | |
| uint32_t n_tokens, | |
| uint32_t n_head, | |
| uint32_t head_dim, | |
| uint32_t rot_dim, | |
| uint32_t pos0, | |
| uint32_t n_ctx_orig, | |
| float freq_base, | |
| float freq_scale, | |
| float ext_factor, | |
| float attn_factor, | |
| float beta_fast, | |
| float beta_slow); | |
| int ds4_gpu_glm_kv_lora_rms_norm_tensor( | |
| ds4_gpu_tensor *out, | |
| const ds4_gpu_tensor *kv_raw, | |
| const void *model_map, | |
| uint64_t model_size, | |
| uint64_t weight_offset, | |
| uint32_t n_tokens, | |
| uint32_t kv_raw_dim, | |
| uint32_t kv_lora_dim, | |
| float eps); | |
| int ds4_gpu_glm_k_b_project_tensor( | |
| ds4_gpu_tensor *out, | |
| const ds4_gpu_tensor *kv_norm, | |
| const void *model_map, | |
| uint64_t model_size, | |
| uint64_t weight_offset, | |
| uint32_t n_tokens, | |
| uint32_t kv_lora_dim, | |
| uint32_t qk_nope, | |
| uint32_t n_head); | |
| int ds4_gpu_glm_k_b_project_typed_tensor( | |
| ds4_gpu_tensor *out, | |
| const ds4_gpu_tensor *kv_norm, | |
| const void *model_map, | |
| uint64_t model_size, | |
| uint64_t weight_offset, | |
| uint32_t weight_type, | |
| uint32_t n_tokens, | |
| uint32_t kv_lora_dim, | |
| uint32_t qk_nope, | |
| uint32_t n_head); | |
| int ds4_gpu_glm_store_compact_kv_tensor( | |
| ds4_gpu_tensor *kv_lora_cache, | |
| ds4_gpu_tensor *k_rope_cache, | |
| const ds4_gpu_tensor *kv_norm, | |
| const ds4_gpu_tensor *kv_raw, | |
| uint32_t pos0, | |
| uint32_t n_tokens, | |
| uint32_t cache_cap, | |
| uint32_t kv_raw_dim, | |
| uint32_t kv_lora_dim, | |
| uint32_t qk_rope, | |
| bool cache_f16); | |
| int ds4_gpu_glm_qkv_norm_store_compact_kv_tensor( | |
| ds4_gpu_tensor *q_out, | |
| const ds4_gpu_tensor *q, | |
| const void *model_map, | |
| uint64_t model_size, | |
| uint64_t q_weight_offset, | |
| uint32_t q_n, | |
| ds4_gpu_tensor *kv_lora_cache, | |
| ds4_gpu_tensor *k_rope_cache, | |
| const ds4_gpu_tensor *kv_raw, | |
| uint64_t kv_weight_offset, | |
| uint32_t pos0, | |
| uint32_t n_tokens, | |
| uint32_t cache_cap, | |
| uint32_t kv_raw_dim, | |
| uint32_t kv_lora_dim, | |
| uint32_t qk_rope, | |
| bool cache_f16, | |
| float eps); | |
| int ds4_gpu_glm_store_indexer_k_tensor( | |
| ds4_gpu_tensor *indexer_key_cache, | |
| const ds4_gpu_tensor *raw_k, | |
| const void *model_map, | |
| uint64_t model_size, | |
| uint64_t weight_offset, | |
| uint64_t bias_offset, | |
| uint32_t pos0, | |
| uint32_t n_tokens, | |
| uint32_t cache_cap, | |
| uint32_t head_dim, | |
| uint32_t rot_dim, | |
| uint32_t n_ctx_orig, | |
| float eps, | |
| float freq_base, | |
| float freq_scale, | |
| float ext_factor, | |
| float attn_factor, | |
| float beta_fast, | |
| float beta_slow, | |
| bool cache_f16); | |
| int ds4_gpu_glm_build_kv_cache_tensor( | |
| ds4_gpu_tensor *key_cache, | |
| ds4_gpu_tensor *value_cache, | |
| const ds4_gpu_tensor *kv_raw, | |
| const ds4_gpu_tensor *k_nope, | |
| const ds4_gpu_tensor *value, | |
| uint32_t pos0, | |
| uint32_t n_tokens, | |
| uint32_t cache_cap, | |
| uint32_t n_head, | |
| uint32_t kv_raw_dim, | |
| uint32_t kv_lora_dim, | |
| uint32_t qk_nope, | |
| uint32_t qk_rope, | |
| uint32_t value_dim, | |
| uint32_t n_ctx_orig, | |
| float freq_base, | |
| float freq_scale, | |
| float ext_factor, | |
| float attn_factor, | |
| float beta_fast, | |
| float beta_slow, | |
| bool cache_f16); | |
| int ds4_gpu_glm_build_kv_cache_flash_tensor( | |
| ds4_gpu_tensor *key_cache, | |
| ds4_gpu_tensor *value_cache, | |
| const ds4_gpu_tensor *kv_raw, | |
| const ds4_gpu_tensor *k_nope, | |
| const ds4_gpu_tensor *value, | |
| uint32_t pos0, | |
| uint32_t n_tokens, | |
| uint32_t cache_cap, | |
| uint32_t n_head, | |
| uint32_t kv_raw_dim, | |
| uint32_t kv_lora_dim, | |
| uint32_t qk_nope, | |
| uint32_t qk_rope, | |
| uint32_t value_dim, | |
| uint32_t n_ctx_orig, | |
| float freq_base, | |
| float freq_scale, | |
| float ext_factor, | |
| float attn_factor, | |
| float beta_fast, | |
| float beta_slow, | |
| bool cache_f16); | |
| int ds4_gpu_glm_attention_full_tensor( | |
| ds4_gpu_tensor *heads, | |
| const ds4_gpu_tensor *q, | |
| const ds4_gpu_tensor *key_cache, | |
| const ds4_gpu_tensor *value_cache, | |
| uint32_t pos0, | |
| uint32_t n_tokens, | |
| uint32_t cache_len, | |
| uint32_t cache_cap, | |
| uint32_t n_head, | |
| uint32_t qk_dim, | |
| uint32_t value_dim, | |
| bool cache_f16); | |
| int ds4_gpu_glm_fill_selected_range_tensor( | |
| ds4_gpu_tensor *selected, | |
| uint32_t n_selected); | |
| int ds4_gpu_glm_fill_selected_range_batch_tensor( | |
| ds4_gpu_tensor *selected, | |
| uint32_t n_tokens, | |
| uint32_t pos0, | |
| uint32_t n_selected, | |
| uint32_t pad_row); | |
| int ds4_gpu_glm_indexer_rope_tail_tensor( | |
| ds4_gpu_tensor *x, | |
| uint32_t n_tokens, | |
| uint32_t n_head, | |
| uint32_t head_dim, | |
| uint32_t rot_dim, | |
| uint32_t pos0, | |
| uint32_t n_ctx_orig, | |
| float freq_base, | |
| float freq_scale, | |
| float ext_factor, | |
| float attn_factor, | |
| float beta_fast, | |
| float beta_slow); | |
| int ds4_gpu_glm_indexer_score_one_tensor( | |
| ds4_gpu_tensor *scores, | |
| const ds4_gpu_tensor *q, | |
| const ds4_gpu_tensor *weights, | |
| const ds4_gpu_tensor *indexer_key_cache, | |
| uint32_t n_rows, | |
| uint32_t n_head, | |
| uint32_t head_dim, | |
| float scale, | |
| bool cache_f16); | |
| int ds4_gpu_glm_indexer_scores_batch_tensor( | |
| ds4_gpu_tensor *scores, | |
| const ds4_gpu_tensor *q, | |
| const ds4_gpu_tensor *weights, | |
| const ds4_gpu_tensor *indexer_key_cache, | |
| uint32_t n_rows, | |
| uint32_t n_tokens, | |
| uint32_t pos0, | |
| uint32_t n_head, | |
| uint32_t head_dim, | |
| float scale, | |
| bool cache_f16); | |
| int ds4_gpu_glm_qk_lowrank_q8_0_tensor( | |
| ds4_gpu_tensor *qk_low, | |
| const ds4_gpu_tensor *q, | |
| const void *model_map, | |
| uint64_t model_size, | |
| uint64_t weight_offset, | |
| uint32_t n_head, | |
| uint32_t kv_lora_dim, | |
| uint32_t qk_nope, | |
| uint32_t qk_dim); | |
| int ds4_gpu_glm_qk_lowrank_q8_0_batch_tensor( | |
| ds4_gpu_tensor *qk_low, | |
| const ds4_gpu_tensor *q, | |
| const void *model_map, | |
| uint64_t model_size, | |
| uint64_t weight_offset, | |
| uint32_t n_tokens, | |
| uint32_t n_head, | |
| uint32_t kv_lora_dim, | |
| uint32_t qk_nope, | |
| uint32_t qk_dim); | |
| int ds4_gpu_glm_qk_lowrank_typed_tensor( | |
| ds4_gpu_tensor *qk_low, | |
| const ds4_gpu_tensor *q, | |
| const void *model_map, | |
| uint64_t model_size, | |
| uint64_t weight_offset, | |
| uint32_t weight_type, | |
| uint32_t n_head, | |
| uint32_t kv_lora_dim, | |
| uint32_t qk_nope, | |
| uint32_t qk_dim); | |
| int ds4_gpu_glm_qk_lowrank_typed_batch_tensor( | |
| ds4_gpu_tensor *qk_low, | |
| const ds4_gpu_tensor *q, | |
| const void *model_map, | |
| uint64_t model_size, | |
| uint64_t weight_offset, | |
| uint32_t weight_type, | |
| uint32_t n_tokens, | |
| uint32_t n_head, | |
| uint32_t kv_lora_dim, | |
| uint32_t qk_nope, | |
| uint32_t qk_dim); | |
| int ds4_gpu_glm_value_project_q8_0_batch_heads_tensor( | |
| ds4_gpu_tensor *heads, | |
| const ds4_gpu_tensor *lora, | |
| const void *model_map, | |
| uint64_t model_size, | |
| uint64_t weight_offset, | |
| uint32_t n_tokens, | |
| uint32_t n_head, | |
| uint32_t kv_lora_dim, | |
| uint32_t value_dim); | |
| int ds4_gpu_glm_value_project_typed_batch_heads_tensor( | |
| ds4_gpu_tensor *heads, | |
| const ds4_gpu_tensor *lora, | |
| const void *model_map, | |
| uint64_t model_size, | |
| uint64_t weight_offset, | |
| uint32_t weight_type, | |
| uint32_t n_tokens, | |
| uint32_t n_head, | |
| uint32_t kv_lora_dim, | |
| uint32_t value_dim); | |
| int ds4_gpu_glm_attention_indexed_decode_tensor( | |
| ds4_gpu_tensor *heads, | |
| const ds4_gpu_tensor *q, | |
| const ds4_gpu_tensor *qk_low, | |
| const ds4_gpu_tensor *kv_lora_cache, | |
| const ds4_gpu_tensor *k_rope_cache, | |
| const void *model_map, | |
| uint64_t model_size, | |
| uint64_t value_weight_offset, | |
| const ds4_gpu_tensor *selected, | |
| uint32_t n_selected, | |
| uint32_t cache_cap, | |
| bool cache_f16, | |
| uint32_t n_head, | |
| uint32_t kv_lora_dim, | |
| uint32_t qk_nope, | |
| uint32_t qk_rope, | |
| uint32_t value_dim, | |
| uint32_t n_ctx_orig, | |
| float freq_base, | |
| float freq_scale, | |
| float ext_factor, | |
| float attn_factor, | |
| float beta_fast, | |
| float beta_slow); | |
| int ds4_gpu_rope_tail_decode_rows_tensor( | |
| ds4_gpu_tensor *x, | |
| const ds4_gpu_attention_decode_row *rows, | |
| uint32_t n_rows, | |
| uint32_t n_head, | |
| uint32_t head_dim, | |
| uint32_t n_rot, | |
| uint32_t n_ctx_orig, | |
| bool inverse, | |
| float freq_base, | |
| float freq_scale, | |
| float ext_factor, | |
| float attn_factor, | |
| float beta_fast, | |
| float beta_slow); | |
| int ds4_gpu_glm_attention_indexed_decode_typed_tensor( | |
| ds4_gpu_tensor *heads, | |
| const ds4_gpu_tensor *q, | |
| const ds4_gpu_tensor *qk_low, | |
| const ds4_gpu_tensor *kv_lora_cache, | |
| const ds4_gpu_tensor *k_rope_cache, | |
| const void *model_map, | |
| uint64_t model_size, | |
| uint64_t value_weight_offset, | |
| uint32_t value_weight_type, | |
| const ds4_gpu_tensor *selected, | |
| uint32_t n_selected, | |
| uint32_t cache_cap, | |
| bool cache_f16, | |
| uint32_t n_head, | |
| uint32_t kv_lora_dim, | |
| uint32_t qk_nope, | |
| uint32_t qk_rope, | |
| uint32_t value_dim, | |
| uint32_t n_ctx_orig, | |
| float freq_base, | |
| float freq_scale, | |
| float ext_factor, | |
| float attn_factor, | |
| float beta_fast, | |
| float beta_slow); | |
| int ds4_gpu_glm_attention_indexed_decode_split_group8_tensor( | |
| ds4_gpu_tensor *heads, | |
| ds4_gpu_tensor *partial_lora, | |
| ds4_gpu_tensor *partial_ms, | |
| const ds4_gpu_tensor *q, | |
| const ds4_gpu_tensor *qk_low, | |
| const ds4_gpu_tensor *kv_lora_cache, | |
| const ds4_gpu_tensor *k_rope_cache, | |
| const void *model_map, | |
| uint64_t model_size, | |
| uint64_t value_weight_offset, | |
| const ds4_gpu_tensor *selected, | |
| uint32_t n_selected, | |
| bool selected_rows_valid, | |
| uint32_t cache_cap, | |
| bool cache_f16, | |
| uint32_t n_head, | |
| uint32_t kv_lora_dim, | |
| uint32_t qk_nope, | |
| uint32_t qk_rope, | |
| uint32_t value_dim, | |
| uint32_t n_ctx_orig, | |
| uint32_t block_rows, | |
| uint32_t n_blocks, | |
| float freq_base, | |
| float freq_scale, | |
| float ext_factor, | |
| float attn_factor, | |
| float beta_fast, | |
| float beta_slow); | |
| int ds4_gpu_glm_attention_indexed_decode_split_group8_typed_tensor( | |
| ds4_gpu_tensor *heads, | |
| ds4_gpu_tensor *partial_lora, | |
| ds4_gpu_tensor *partial_ms, | |
| const ds4_gpu_tensor *q, | |
| const ds4_gpu_tensor *qk_low, | |
| const ds4_gpu_tensor *kv_lora_cache, | |
| const ds4_gpu_tensor *k_rope_cache, | |
| const void *model_map, | |
| uint64_t model_size, | |
| uint64_t value_weight_offset, | |
| uint32_t value_weight_type, | |
| const ds4_gpu_tensor *selected, | |
| uint32_t n_selected, | |
| bool selected_rows_valid, | |
| uint32_t cache_cap, | |
| bool cache_f16, | |
| uint32_t n_head, | |
| uint32_t kv_lora_dim, | |
| uint32_t qk_nope, | |
| uint32_t qk_rope, | |
| uint32_t value_dim, | |
| uint32_t n_ctx_orig, | |
| uint32_t block_rows, | |
| uint32_t n_blocks, | |
| float freq_base, | |
| float freq_scale, | |
| float ext_factor, | |
| float attn_factor, | |
| float beta_fast, | |
| float beta_slow); | |
| int ds4_gpu_glm_attention_indexed_batch_tensor( | |
| ds4_gpu_tensor *heads, | |
| const ds4_gpu_tensor *q, | |
| const ds4_gpu_tensor *qk_low, | |
| const ds4_gpu_tensor *kv_lora_cache, | |
| const ds4_gpu_tensor *k_rope_cache, | |
| const void *model_map, | |
| uint64_t model_size, | |
| uint64_t value_weight_offset, | |
| const ds4_gpu_tensor *selected, | |
| uint32_t n_tokens, | |
| uint32_t n_selected, | |
| uint32_t cache_cap, | |
| bool cache_f16, | |
| uint32_t n_head, | |
| uint32_t kv_lora_dim, | |
| uint32_t qk_nope, | |
| uint32_t qk_rope, | |
| uint32_t value_dim, | |
| uint32_t n_ctx_orig, | |
| float freq_base, | |
| float freq_scale, | |
| float ext_factor, | |
| float attn_factor, | |
| float beta_fast, | |
| float beta_slow); | |
| int ds4_gpu_glm_attention_indexed_batch_typed_tensor( | |
| ds4_gpu_tensor *heads, | |
| const ds4_gpu_tensor *q, | |
| const ds4_gpu_tensor *qk_low, | |
| const ds4_gpu_tensor *kv_lora_cache, | |
| const ds4_gpu_tensor *k_rope_cache, | |
| const void *model_map, | |
| uint64_t model_size, | |
| uint64_t value_weight_offset, | |
| uint32_t value_weight_type, | |
| const ds4_gpu_tensor *selected, | |
| uint32_t n_tokens, | |
| uint32_t n_selected, | |
| uint32_t cache_cap, | |
| bool cache_f16, | |
| uint32_t n_head, | |
| uint32_t kv_lora_dim, | |
| uint32_t qk_nope, | |
| uint32_t qk_rope, | |
| uint32_t value_dim, | |
| uint32_t n_ctx_orig, | |
| float freq_base, | |
| float freq_scale, | |
| float ext_factor, | |
| float attn_factor, | |
| float beta_fast, | |
| float beta_slow); | |
| int ds4_gpu_sort_i32_rows_asc_tensor( | |
| ds4_gpu_tensor *dst, | |
| const ds4_gpu_tensor *src, | |
| uint32_t row_width, | |
| uint32_t n_rows); | |
| int ds4_gpu_glm_attention_indexed_batch_lora_tensor( | |
| ds4_gpu_tensor *lora_out, | |
| const ds4_gpu_tensor *q, | |
| const ds4_gpu_tensor *qk_low, | |
| const ds4_gpu_tensor *kv_lora_cache, | |
| const ds4_gpu_tensor *k_rope_cache, | |
| const ds4_gpu_tensor *selected, | |
| uint32_t n_tokens, | |
| uint32_t n_selected, | |
| uint32_t cache_cap, | |
| bool cache_f16, | |
| uint32_t n_head, | |
| uint32_t kv_lora_dim, | |
| uint32_t qk_nope, | |
| uint32_t qk_rope, | |
| uint32_t n_ctx_orig, | |
| float freq_base, | |
| float freq_scale, | |
| float ext_factor, | |
| float attn_factor, | |
| float beta_fast, | |
| float beta_slow); | |
| int ds4_gpu_glm_attention_indexed_batch_lora_causal_tensor( | |
| ds4_gpu_tensor *lora_out, | |
| const ds4_gpu_tensor *q, | |
| const ds4_gpu_tensor *qk_low, | |
| const ds4_gpu_tensor *kv_lora_cache, | |
| const ds4_gpu_tensor *k_rope_cache, | |
| uint32_t n_tokens, | |
| uint32_t pos0, | |
| uint32_t n_selected, | |
| uint32_t cache_cap, | |
| bool cache_f16, | |
| uint32_t n_head, | |
| uint32_t kv_lora_dim, | |
| uint32_t qk_nope, | |
| uint32_t qk_rope, | |
| uint32_t n_ctx_orig, | |
| float freq_base, | |
| float freq_scale, | |
| float ext_factor, | |
| float attn_factor, | |
| float beta_fast, | |
| float beta_slow); | |
| int ds4_gpu_glm_attention_indexed_batch_lora_valid_tensor( | |
| ds4_gpu_tensor *lora_out, | |
| const ds4_gpu_tensor *q, | |
| const ds4_gpu_tensor *qk_low, | |
| const ds4_gpu_tensor *kv_lora_cache, | |
| const ds4_gpu_tensor *k_rope_cache, | |
| const ds4_gpu_tensor *selected, | |
| uint32_t n_tokens, | |
| uint32_t n_selected, | |
| uint32_t cache_cap, | |
| bool cache_f16, | |
| uint32_t n_head, | |
| uint32_t kv_lora_dim, | |
| uint32_t qk_nope, | |
| uint32_t qk_rope, | |
| uint32_t n_ctx_orig, | |
| float freq_base, | |
| float freq_scale, | |
| float ext_factor, | |
| float attn_factor, | |
| float beta_fast, | |
| float beta_slow); | |
| int ds4_gpu_glm_attention_flash_staged_tensor( | |
| ds4_gpu_tensor *heads, | |
| const ds4_gpu_tensor *q, | |
| const ds4_gpu_tensor *key_cache, | |
| const ds4_gpu_tensor *value_cache, | |
| uint32_t pos0, | |
| uint32_t n_tokens, | |
| uint32_t cache_len, | |
| uint32_t cache_cap, | |
| uint32_t n_head, | |
| uint32_t qk_dim, | |
| uint32_t value_dim, | |
| bool cache_f16); | |
| int ds4_gpu_glm_attention_flash_tensor( | |
| ds4_gpu_tensor *heads, | |
| const ds4_gpu_tensor *q, | |
| const ds4_gpu_tensor *key_cache, | |
| const ds4_gpu_tensor *value_cache, | |
| uint32_t pos0, | |
| uint32_t n_tokens, | |
| uint32_t cache_len, | |
| uint32_t cache_cap, | |
| uint32_t n_head, | |
| uint32_t qk_dim, | |
| uint32_t value_dim, | |
| bool cache_f16); | |
| /* Release decode fused KV finalizer: after the standalone RoPE kernel, this | |
| * performs DS4's FP8 non-RoPE KV round trip and writes the F16-rounded raw | |
| * attention cache row in one dispatch. */ | |
| int ds4_gpu_kv_fp8_store_raw_tensor( | |
| ds4_gpu_tensor *kv, | |
| ds4_gpu_tensor *raw_cache, | |
| uint32_t raw_cap, | |
| uint32_t row, | |
| uint32_t head_dim, | |
| uint32_t n_rot); | |
| /* Exact multi-session form of the decode KV finalizer. KV rows are | |
| * contiguous, while each output row is written to its session-private cache. */ | |
| int ds4_gpu_kv_fp8_store_raw_decode_rows_tensor( | |
| ds4_gpu_tensor *kv, | |
| ds4_gpu_tensor *const *raw_caches, | |
| const uint32_t *raw_caps, | |
| const uint32_t *raw_rows, | |
| uint32_t n_rows, | |
| uint32_t head_dim, | |
| uint32_t n_rot); | |
| /* Reference/raw-cache primitive kept for prefill and diagnostics. Decode uses | |
| * ds4_gpu_kv_fp8_store_raw_tensor unless a diagnostic reference path is | |
| * explicitly selected by the graph driver. */ | |
| int ds4_gpu_store_raw_kv_tensor( | |
| ds4_gpu_tensor *raw_cache, | |
| const ds4_gpu_tensor *kv, | |
| uint32_t raw_cap, | |
| uint32_t row, | |
| uint32_t head_dim); | |
| int ds4_gpu_store_raw_kv_batch_tensor( | |
| ds4_gpu_tensor *raw_cache, | |
| const ds4_gpu_tensor *kv, | |
| uint32_t raw_cap, | |
| uint32_t pos0, | |
| uint32_t n_tokens, | |
| uint32_t head_dim); | |
| /* ========================================================================= | |
| * KV Compression and Attention. | |
| * ========================================================================= | |
| * | |
| * Compressed layers maintain rolling score/KV state and append pooled rows at | |
| * ratio boundaries. Attention kernels consume raw SWA rows, compressed rows, | |
| * and optional indexer masks. | |
| */ | |
| int ds4_gpu_compressor_update_tensor( | |
| const ds4_gpu_tensor *kv_cur, | |
| const ds4_gpu_tensor *sc_cur, | |
| ds4_gpu_tensor *state_kv, | |
| ds4_gpu_tensor *state_score, | |
| ds4_gpu_tensor *comp_cache, | |
| const void *model_map, | |
| uint64_t model_size, | |
| uint64_t ape_offset, | |
| uint32_t ape_type, | |
| uint64_t norm_offset, | |
| uint32_t norm_type, | |
| uint32_t head_dim, | |
| uint32_t ratio, | |
| uint32_t pos, | |
| uint32_t comp_row, | |
| uint32_t n_rot, | |
| uint32_t n_ctx_orig, | |
| float freq_base, | |
| float freq_scale, | |
| float ext_factor, | |
| float attn_factor, | |
| float beta_fast, | |
| float beta_slow, | |
| float rms_eps, | |
| bool state_already_stored, | |
| bool decode_one_token, | |
| bool defer_finalize); | |
| int ds4_gpu_compressor_store_batch_tensor( | |
| const ds4_gpu_tensor *kv, | |
| const ds4_gpu_tensor *sc, | |
| ds4_gpu_tensor *state_kv, | |
| ds4_gpu_tensor *state_score, | |
| const void *model_map, | |
| uint64_t model_size, | |
| uint64_t ape_offset, | |
| uint32_t ape_type, | |
| uint32_t head_dim, | |
| uint32_t ratio, | |
| uint32_t pos0, | |
| uint32_t n_tokens); | |
| int ds4_gpu_compressor_prefill_tensor( | |
| ds4_gpu_tensor *comp_cache, | |
| ds4_gpu_tensor *state_kv, | |
| ds4_gpu_tensor *state_score, | |
| const ds4_gpu_tensor *kv, | |
| const ds4_gpu_tensor *sc, | |
| const void *model_map, | |
| uint64_t model_size, | |
| uint64_t ape_offset, | |
| uint32_t ape_type, | |
| uint64_t norm_offset, | |
| uint32_t norm_type, | |
| uint32_t head_dim, | |
| uint32_t ratio, | |
| uint32_t pos0, | |
| uint32_t n_tokens, | |
| uint32_t n_rot, | |
| uint32_t n_ctx_orig, | |
| bool quantize_fp8, | |
| float freq_base, | |
| float freq_scale, | |
| float ext_factor, | |
| float attn_factor, | |
| float beta_fast, | |
| float beta_slow, | |
| float rms_eps); | |
| int ds4_gpu_compressor_prefill_ratio4_replay_tensor( | |
| ds4_gpu_tensor *comp_cache, | |
| ds4_gpu_tensor *state_kv, | |
| ds4_gpu_tensor *state_score, | |
| const ds4_gpu_tensor *kv, | |
| const ds4_gpu_tensor *sc, | |
| const void *model_map, | |
| uint64_t model_size, | |
| uint64_t ape_offset, | |
| uint32_t ape_type, | |
| uint64_t norm_offset, | |
| uint32_t norm_type, | |
| uint32_t head_dim, | |
| uint32_t pos0, | |
| uint32_t n_tokens, | |
| uint32_t n_rot, | |
| uint32_t n_ctx_orig, | |
| bool quantize_fp8, | |
| float freq_base, | |
| float freq_scale, | |
| float ext_factor, | |
| float attn_factor, | |
| float beta_fast, | |
| float beta_slow, | |
| float rms_eps); | |
| int ds4_gpu_compressor_prefill_state_ratio4_tensor( | |
| ds4_gpu_tensor *state_kv, | |
| ds4_gpu_tensor *state_score, | |
| const ds4_gpu_tensor *kv_tail, | |
| const ds4_gpu_tensor *sc_tail, | |
| const void *model_map, | |
| uint64_t model_size, | |
| uint64_t ape_offset, | |
| uint32_t ape_type, | |
| uint32_t head_dim, | |
| uint32_t pos0); | |
| int ds4_gpu_attention_decode_heads_tensor( | |
| ds4_gpu_tensor *heads, | |
| const void *model_map, | |
| uint64_t model_size, | |
| uint64_t sinks_offset, | |
| const ds4_gpu_tensor *q, | |
| const ds4_gpu_tensor *raw_kv, | |
| uint32_t n_raw, | |
| uint32_t raw_cap, | |
| uint32_t raw_start, | |
| const ds4_gpu_tensor *comp_kv, | |
| uint32_t comp_kv_f16, | |
| uint32_t n_comp, | |
| const ds4_gpu_tensor *comp_mask, | |
| uint32_t use_mask, | |
| uint32_t n_head, | |
| uint32_t head_dim); | |
| int ds4_gpu_attention_decode_heads_rope_tensor( | |
| ds4_gpu_tensor *heads, | |
| const void *model_map, | |
| uint64_t model_size, | |
| uint64_t sinks_offset, | |
| const ds4_gpu_tensor *q, | |
| const ds4_gpu_tensor *raw_kv, | |
| uint32_t n_raw, | |
| uint32_t raw_cap, | |
| uint32_t raw_start, | |
| const ds4_gpu_tensor *comp_kv, | |
| uint32_t comp_kv_f16, | |
| uint32_t n_comp, | |
| const ds4_gpu_tensor *comp_mask, | |
| uint32_t use_mask, | |
| uint32_t n_head, | |
| uint32_t head_dim, | |
| uint32_t n_rot, | |
| uint32_t pos0, | |
| uint32_t n_ctx_orig, | |
| float freq_base, | |
| float freq_scale, | |
| float ext_factor, | |
| float attn_factor, | |
| float beta_fast, | |
| float beta_slow, | |
| int *fused_inv_rope); | |
| /* Multi-session decode over contiguous Q/head rows and private KV caches. | |
| * The row table is copied into CUDA launch parameters, so no device-side | |
| * descriptor upload or synchronization is required. */ | |
| int ds4_gpu_attention_decode_rows_rope_tensor( | |
| ds4_gpu_tensor *heads, | |
| const void *model_map, | |
| uint64_t model_size, | |
| uint64_t sinks_offset, | |
| const ds4_gpu_tensor *q, | |
| const ds4_gpu_attention_decode_row *rows, | |
| uint32_t n_rows, | |
| uint32_t n_head, | |
| uint32_t head_dim, | |
| uint32_t n_rot, | |
| uint32_t n_ctx_orig, | |
| float freq_base, | |
| float freq_scale, | |
| float ext_factor, | |
| float attn_factor, | |
| float beta_fast, | |
| float beta_slow); | |
| /* Diagnostic/public form of the dk=512 gathered decode-attention KV staging | |
| * step. The compressed source must be F16; dst writes chronological raw-ring | |
| * rows followed by compressed rows and must not overlap either source. */ | |
| int ds4_gpu_flash_kv_stage_f16_tensor( | |
| ds4_gpu_tensor *dst, | |
| const ds4_gpu_tensor *raw, | |
| uint32_t raw_cap, | |
| uint32_t raw_start, | |
| uint32_t n_raw, | |
| const ds4_gpu_tensor *comp, | |
| uint32_t comp_is_f16, | |
| uint32_t n_comp, | |
| uint32_t head_dim); | |
| int ds4_gpu_attention_prefill_raw_heads_tensor( | |
| ds4_gpu_tensor *heads, | |
| const void *model_map, | |
| uint64_t model_size, | |
| uint64_t sinks_offset, | |
| const ds4_gpu_tensor *q, | |
| const ds4_gpu_tensor *raw_kv, | |
| uint32_t n_tokens, | |
| uint32_t window, | |
| uint32_t n_head, | |
| uint32_t head_dim); | |
| /* Rectangular raw prefill attention: q is a view of the n_q query rows at | |
| * token positions [q_row0, q_row0 + n_q) of the chunk, raw_kv keeps all | |
| * n_kv rows, heads receives n_q output rows. Used by the TP prefill row | |
| * split; the square entry above is the q_row0 = 0, n_q = n_kv case. */ | |
| int ds4_gpu_attention_prefill_raw_heads_range_tensor( | |
| ds4_gpu_tensor *heads, | |
| const void *model_map, | |
| uint64_t model_size, | |
| uint64_t sinks_offset, | |
| const ds4_gpu_tensor *q, | |
| const ds4_gpu_tensor *raw_kv, | |
| uint32_t q_row0, | |
| uint32_t n_q, | |
| uint32_t n_kv, | |
| uint32_t window, | |
| uint32_t n_head, | |
| uint32_t head_dim); | |
| int ds4_gpu_attention_decode_raw_batch_heads_tensor( | |
| ds4_gpu_tensor *heads, | |
| const void *model_map, | |
| uint64_t model_size, | |
| uint64_t sinks_offset, | |
| const ds4_gpu_tensor *q, | |
| const ds4_gpu_tensor *raw_kv, | |
| uint32_t n_tokens, | |
| uint32_t pos0, | |
| uint32_t n_raw, | |
| uint32_t raw_cap, | |
| uint32_t raw_start, | |
| uint32_t window, | |
| uint32_t n_head, | |
| uint32_t head_dim); | |
| int ds4_gpu_attention_noncausal_raw_batch_heads_tensor( | |
| ds4_gpu_tensor *heads, | |
| const void *model_map, | |
| uint64_t model_size, | |
| uint64_t sinks_offset, | |
| const ds4_gpu_tensor *q, | |
| const ds4_gpu_tensor *raw_kv, | |
| uint32_t n_tokens, | |
| uint32_t n_raw, | |
| uint32_t raw_cap, | |
| uint32_t raw_start, | |
| uint32_t n_head, | |
| uint32_t head_dim); | |
| int ds4_gpu_attention_decode_mixed_batch_heads_tensor( | |
| ds4_gpu_tensor *heads, | |
| const void *model_map, | |
| uint64_t model_size, | |
| uint64_t sinks_offset, | |
| const ds4_gpu_tensor *q, | |
| const ds4_gpu_tensor *raw_kv, | |
| const ds4_gpu_tensor *comp_kv, | |
| uint32_t comp_kv_f16, | |
| const ds4_gpu_tensor *comp_mask, | |
| uint32_t use_comp_mask, | |
| uint32_t n_tokens, | |
| uint32_t pos0, | |
| uint32_t n_raw, | |
| uint32_t raw_cap, | |
| uint32_t raw_start, | |
| uint32_t n_comp, | |
| uint32_t window, | |
| uint32_t ratio, | |
| uint32_t n_head, | |
| uint32_t head_dim); | |
| int ds4_gpu_attention_indexed_mixed_batch_heads_tensor( | |
| ds4_gpu_tensor *heads, | |
| const void *model_map, | |
| uint64_t model_size, | |
| uint64_t sinks_offset, | |
| const ds4_gpu_tensor *q, | |
| const ds4_gpu_tensor *raw_kv, | |
| const ds4_gpu_tensor *comp_kv, | |
| uint32_t comp_kv_f16, | |
| const ds4_gpu_tensor *topk, | |
| uint32_t n_tokens, | |
| uint32_t pos0, | |
| uint32_t n_raw, | |
| uint32_t raw_cap, | |
| uint32_t raw_start, | |
| uint32_t n_comp, | |
| uint32_t top_k, | |
| uint32_t window, | |
| uint32_t ratio, | |
| uint32_t n_head, | |
| uint32_t head_dim); | |
| int ds4_gpu_attention_prefill_static_mixed_heads_tensor( | |
| ds4_gpu_tensor *heads, | |
| const void *model_map, | |
| uint64_t model_size, | |
| uint64_t sinks_offset, | |
| const ds4_gpu_tensor *q, | |
| const ds4_gpu_tensor *raw_kv, | |
| const ds4_gpu_tensor *comp_kv, | |
| uint32_t comp_kv_f16, | |
| uint32_t n_tokens, | |
| uint32_t n_comp, | |
| uint32_t window, | |
| uint32_t ratio, | |
| uint32_t n_head, | |
| uint32_t head_dim); | |
| /* Rectangular static-mixed prefill attention: q is a view of the n_q query | |
| * rows at token positions [q_row0, q_row0 + n_q) of the chunk, while raw_kv | |
| * keeps all n_tokens rows and comp_kv all n_comp compressed keys. Used by | |
| * the TP prefill row split; the square entry above is q_row0 = 0, | |
| * n_q = n_tokens. */ | |
| int ds4_gpu_attention_prefill_static_mixed_heads_range_tensor( | |
| ds4_gpu_tensor *heads, | |
| const void *model_map, | |
| uint64_t model_size, | |
| uint64_t sinks_offset, | |
| const ds4_gpu_tensor *q, | |
| const ds4_gpu_tensor *raw_kv, | |
| const ds4_gpu_tensor *comp_kv, | |
| uint32_t comp_kv_f16, | |
| uint32_t q_row0, | |
| uint32_t n_q, | |
| uint32_t n_tokens, | |
| uint32_t n_comp, | |
| uint32_t window, | |
| uint32_t ratio, | |
| uint32_t n_head, | |
| uint32_t head_dim); | |
| int ds4_gpu_attention_prefill_masked_mixed_heads_tensor( | |
| ds4_gpu_tensor *heads, | |
| const void *model_map, | |
| uint64_t model_size, | |
| uint64_t sinks_offset, | |
| const ds4_gpu_tensor *q, | |
| const ds4_gpu_tensor *raw_kv, | |
| const ds4_gpu_tensor *comp_kv, | |
| uint32_t comp_kv_f16, | |
| const ds4_gpu_tensor *comp_mask, | |
| uint32_t n_tokens, | |
| uint32_t n_comp, | |
| uint32_t window, | |
| uint32_t ratio, | |
| uint32_t n_head, | |
| uint32_t head_dim); | |
| int ds4_gpu_attention_output_q8_batch_tensor( | |
| ds4_gpu_tensor *out, | |
| ds4_gpu_tensor *low, | |
| ds4_gpu_tensor *group_tmp, | |
| ds4_gpu_tensor *low_tmp, | |
| const void *model_map, | |
| uint64_t model_size, | |
| uint64_t out_a_offset, | |
| uint64_t out_b_offset, | |
| uint64_t group_dim, | |
| uint64_t rank, | |
| uint32_t n_groups, | |
| uint64_t out_dim, | |
| const ds4_gpu_tensor *heads, | |
| uint32_t n_tokens); | |
| int ds4_gpu_attention_output_q4_K_batch_tensor( | |
| ds4_gpu_tensor *out, | |
| ds4_gpu_tensor *low, | |
| ds4_gpu_tensor *group_tmp, | |
| ds4_gpu_tensor *low_tmp, | |
| const void *model_map, | |
| uint64_t model_size, | |
| uint64_t out_a_offset, | |
| uint64_t out_b_offset, | |
| uint32_t out_b_type, | |
| uint64_t group_dim, | |
| uint64_t rank, | |
| uint32_t n_groups, | |
| uint64_t out_dim, | |
| const ds4_gpu_tensor *heads, | |
| uint32_t n_tokens); | |
| int ds4_gpu_attention_output_q8_batch_f16_tensor( | |
| ds4_gpu_tensor *out_h, | |
| ds4_gpu_tensor *low, | |
| const void *model_map, | |
| uint64_t model_size, | |
| uint64_t out_a_offset, | |
| uint64_t out_b_offset, | |
| uint64_t group_dim, | |
| uint64_t rank, | |
| uint32_t n_groups, | |
| uint64_t out_dim, | |
| const ds4_gpu_tensor *heads, | |
| uint32_t n_tokens); | |
| int ds4_gpu_attention_output_low_q8_tensor( | |
| ds4_gpu_tensor *low, | |
| const void *model_map, | |
| uint64_t model_size, | |
| uint64_t out_a_offset, | |
| uint64_t group_dim, | |
| uint64_t rank, | |
| uint32_t n_groups, | |
| const ds4_gpu_tensor *heads); | |
| int ds4_gpu_attention_output_low_q4_K_slice_tensor( | |
| ds4_gpu_tensor *low, | |
| const void *model_map, | |
| uint64_t model_size, | |
| uint64_t out_a_offset, | |
| uint64_t group_dim, | |
| uint64_t rank, | |
| uint32_t group0, | |
| uint32_t group_cnt, | |
| const ds4_gpu_tensor *heads); | |
| int ds4_gpu_attention_output_low_q8_rows_exact_tensor( | |
| ds4_gpu_tensor *low, | |
| const void *model_map, | |
| uint64_t model_size, | |
| uint64_t out_a_offset, | |
| uint64_t group_dim, | |
| uint64_t rank, | |
| uint32_t n_groups_total, | |
| uint32_t group0, | |
| uint32_t group_cnt, | |
| const ds4_gpu_tensor *heads, | |
| uint32_t n_rows); | |
| int ds4_gpu_attention_output_q8_tp_tensor( | |
| ds4_gpu_tensor *out, | |
| ds4_gpu_tensor *low, | |
| const void *model_map, | |
| uint64_t model_size, | |
| uint64_t out_a_offset, | |
| uint64_t out_b_offset, | |
| uint64_t group_dim, | |
| uint64_t rank, | |
| uint32_t n_groups_total, | |
| uint32_t group0, | |
| uint32_t group_cnt, | |
| uint64_t out_dim, | |
| const ds4_gpu_tensor *heads); | |
| /* ========================================================================= | |
| * Router, Shared Expert, and Routed MoE. | |
| * ========================================================================= | |
| * | |
| * These kernels implement the FFN body: router probabilities/top-k or hash | |
| * routing, shared SwiGLU, and the IQ2_XXS/Q2_K/Q4_K routed experts. | |
| */ | |
| int ds4_gpu_swiglu_tensor( | |
| ds4_gpu_tensor *out, | |
| const ds4_gpu_tensor *gate, | |
| const ds4_gpu_tensor *up, | |
| uint32_t n, | |
| float clamp, | |
| float weight); | |
| int ds4_gpu_add_tensor( | |
| ds4_gpu_tensor *out, | |
| const ds4_gpu_tensor *a, | |
| const ds4_gpu_tensor *b, | |
| uint32_t n); | |
| int ds4_gpu_add3_tensor( | |
| ds4_gpu_tensor *out, | |
| const ds4_gpu_tensor *a, | |
| const ds4_gpu_tensor *b, | |
| const ds4_gpu_tensor *c, | |
| uint32_t n); | |
| int ds4_gpu_directional_steering_project_tensor( | |
| ds4_gpu_tensor *x, | |
| const ds4_gpu_tensor *directions, | |
| uint32_t layer, | |
| uint32_t width, | |
| uint32_t rows, | |
| float scale); | |
| int ds4_gpu_router_select_tensor( | |
| ds4_gpu_tensor *selected, | |
| ds4_gpu_tensor *weights, | |
| ds4_gpu_tensor *probs, | |
| const void *model_map, | |
| uint64_t model_size, | |
| uint64_t bias_offset, | |
| uint64_t hash_offset, | |
| uint32_t hash_rows, | |
| uint32_t token, | |
| uint32_t n_expert, | |
| uint32_t n_expert_used, | |
| float expert_weight_scale, | |
| uint32_t n_expert_groups, | |
| uint32_t n_group_used, | |
| bool has_bias, | |
| bool hash_mode, | |
| const ds4_gpu_tensor *logits); | |
| int ds4_gpu_router_select_batch_tensor( | |
| ds4_gpu_tensor *selected, | |
| ds4_gpu_tensor *weights, | |
| ds4_gpu_tensor *probs, | |
| const void *model_map, | |
| uint64_t model_size, | |
| uint64_t bias_offset, | |
| uint64_t hash_offset, | |
| uint32_t hash_rows, | |
| uint32_t n_expert_groups, | |
| uint32_t n_group_used, | |
| bool has_bias, | |
| bool hash_mode, | |
| const ds4_gpu_tensor *logits, | |
| const ds4_gpu_tensor *tokens, | |
| uint32_t n_expert, | |
| uint32_t n_expert_used, | |
| float expert_weight_scale, | |
| uint32_t n_tokens); | |
| int ds4_gpu_glm_router_select_tensor( | |
| ds4_gpu_tensor *selected, | |
| ds4_gpu_tensor *weights, | |
| ds4_gpu_tensor *probs, | |
| const void *model_map, | |
| uint64_t model_size, | |
| uint64_t bias_offset, | |
| const ds4_gpu_tensor *logits, | |
| uint32_t n_expert, | |
| uint32_t n_expert_used, | |
| float expert_weight_scale); | |
| int ds4_gpu_glm_router_select_batch_tensor( | |
| ds4_gpu_tensor *selected, | |
| ds4_gpu_tensor *weights, | |
| ds4_gpu_tensor *probs, | |
| const void *model_map, | |
| uint64_t model_size, | |
| uint64_t bias_offset, | |
| const ds4_gpu_tensor *logits, | |
| uint32_t n_expert, | |
| uint32_t n_expert_used, | |
| float expert_weight_scale, | |
| uint32_t n_tokens); | |
| int ds4_gpu_glm_routed_moe_one_tensor( | |
| ds4_gpu_tensor *out, | |
| ds4_gpu_tensor *mid, | |
| const void *model_map, | |
| uint64_t model_size, | |
| uint64_t gate_offset, | |
| uint64_t up_offset, | |
| uint64_t down_offset, | |
| uint32_t gate_type, | |
| uint32_t up_type, | |
| uint32_t down_type, | |
| uint64_t gate_expert_bytes, | |
| uint64_t gate_row_bytes, | |
| uint64_t up_expert_bytes, | |
| uint64_t up_row_bytes, | |
| uint64_t down_expert_bytes, | |
| uint64_t down_row_bytes, | |
| uint32_t expert_in_dim, | |
| uint32_t expert_mid_dim, | |
| uint32_t out_dim, | |
| const ds4_gpu_tensor *selected, | |
| const ds4_gpu_tensor *weights, | |
| uint32_t n_total_expert, | |
| uint32_t n_expert, | |
| uint32_t layer_index, | |
| const ds4_gpu_tensor *x, | |
| bool force_resident); | |
| int ds4_gpu_glm_routed_moe_batch_tensor( | |
| ds4_gpu_tensor *out, | |
| ds4_gpu_tensor *mid, | |
| const void *model_map, | |
| uint64_t model_size, | |
| uint64_t gate_offset, | |
| uint64_t up_offset, | |
| uint64_t down_offset, | |
| uint32_t gate_type, | |
| uint32_t up_type, | |
| uint32_t down_type, | |
| uint64_t gate_expert_bytes, | |
| uint64_t gate_row_bytes, | |
| uint64_t up_expert_bytes, | |
| uint64_t up_row_bytes, | |
| uint64_t down_expert_bytes, | |
| uint64_t down_row_bytes, | |
| uint32_t expert_in_dim, | |
| uint32_t expert_mid_dim, | |
| uint32_t out_dim, | |
| const ds4_gpu_tensor *selected, | |
| const ds4_gpu_tensor *weights, | |
| uint32_t n_total_expert, | |
| uint32_t n_expert, | |
| uint32_t layer_index, | |
| const ds4_gpu_tensor *x, | |
| uint32_t n_tokens, | |
| uint32_t mid_token_stride, | |
| bool force_resident); | |
| int ds4_gpu_glm_routed_moe_batch_direct_scalar_q4_tensor( | |
| ds4_gpu_tensor *out, | |
| ds4_gpu_tensor *mid, | |
| const void *model_map, | |
| uint64_t model_size, | |
| uint64_t gate_offset, | |
| uint64_t up_offset, | |
| uint64_t down_offset, | |
| uint32_t gate_type, | |
| uint32_t up_type, | |
| uint32_t down_type, | |
| uint64_t gate_expert_bytes, | |
| uint64_t gate_row_bytes, | |
| uint64_t up_expert_bytes, | |
| uint64_t up_row_bytes, | |
| uint64_t down_expert_bytes, | |
| uint64_t down_row_bytes, | |
| uint32_t expert_in_dim, | |
| uint32_t expert_mid_dim, | |
| uint32_t out_dim, | |
| const ds4_gpu_tensor *selected, | |
| const ds4_gpu_tensor *weights, | |
| uint32_t n_total_expert, | |
| uint32_t n_expert, | |
| uint32_t layer_index, | |
| const ds4_gpu_tensor *x, | |
| uint32_t n_tokens, | |
| uint32_t mid_token_stride); | |
| int ds4_gpu_routed_moe_set_selected_override(const int32_t *selected, uint32_t n_selected); | |
| void ds4_gpu_set_glm_mtp_verify_mode(bool enabled); | |
| int ds4_gpu_matmul_q8_0_kslice_hc_expand_add_tensor( | |
| ds4_gpu_tensor *out_hc, | |
| ds4_gpu_tensor *block_out, | |
| const void *model_map, | |
| uint64_t model_size, | |
| uint64_t weight_offset, | |
| uint64_t in_dim, | |
| uint64_t out_dim, | |
| uint64_t in_start, | |
| uint64_t in_count, | |
| const ds4_gpu_tensor *x, | |
| const ds4_gpu_tensor *block_add, | |
| const ds4_gpu_tensor *residual_hc, | |
| const ds4_gpu_tensor *split, | |
| uint32_t n_embd, | |
| uint32_t n_hc); | |
| int ds4_gpu_routed_moe_one_owned_tensor( | |
| ds4_gpu_tensor *out, | |
| ds4_gpu_tensor *gate, | |
| ds4_gpu_tensor *up, | |
| ds4_gpu_tensor *mid, | |
| ds4_gpu_tensor *experts, | |
| const void *model_map, | |
| uint64_t model_size, | |
| uint64_t gate_offset, | |
| uint64_t up_offset, | |
| uint64_t down_offset, | |
| uint32_t gate_type, | |
| uint32_t down_type, | |
| uint64_t gate_expert_bytes, | |
| uint64_t gate_row_bytes, | |
| uint64_t down_expert_bytes, | |
| uint64_t down_row_bytes, | |
| uint32_t expert_in_dim, | |
| uint32_t expert_mid_dim, | |
| uint32_t out_dim, | |
| const ds4_gpu_tensor *selected, | |
| const ds4_gpu_tensor *weights, | |
| uint32_t n_total_expert, | |
| uint32_t n_expert, | |
| uint32_t resident_expert_base, | |
| uint32_t resident_expert_count, | |
| float clamp, | |
| const ds4_gpu_tensor *x, | |
| ds4_gpu_tensor *down_output, | |
| bool pack_fixed3, | |
| ds4_gpu_tensor *shared_prequant); | |
| int ds4_gpu_routed_moe_batch_owned_tensor( | |
| ds4_gpu_tensor *out, | |
| ds4_gpu_tensor *gate, | |
| ds4_gpu_tensor *up, | |
| ds4_gpu_tensor *mid, | |
| ds4_gpu_tensor *experts, | |
| const void *model_map, | |
| uint64_t model_size, | |
| uint64_t gate_offset, | |
| uint64_t up_offset, | |
| uint64_t down_offset, | |
| uint32_t gate_type, | |
| uint32_t down_type, | |
| uint64_t gate_expert_bytes, | |
| uint64_t gate_row_bytes, | |
| uint64_t down_expert_bytes, | |
| uint64_t down_row_bytes, | |
| uint32_t expert_in_dim, | |
| uint32_t expert_mid_dim, | |
| uint32_t out_dim, | |
| ds4_gpu_tensor *selected, | |
| ds4_gpu_tensor *weights, | |
| uint32_t n_total_expert, | |
| uint32_t n_expert, | |
| uint32_t resident_expert_base, | |
| uint32_t resident_expert_count, | |
| float clamp, | |
| const ds4_gpu_tensor *x, | |
| uint32_t layer_index, | |
| uint32_t n_tokens, | |
| bool *mid_is_f16); | |
| int ds4_gpu_routed_moe_owned_slots_combine_tensor( | |
| ds4_gpu_tensor *out, | |
| const ds4_gpu_tensor *home_slots, | |
| const ds4_gpu_tensor *peer_slots, | |
| const ds4_gpu_tensor *selected, | |
| uint32_t out_dim, | |
| uint32_t expert_split); | |
| int ds4_gpu_routed_moe_owned_slots_combine_rows_tensor( | |
| ds4_gpu_tensor *out, | |
| const ds4_gpu_tensor *home_slots, | |
| const ds4_gpu_tensor *peer_slots, | |
| const ds4_gpu_tensor *selected, | |
| uint32_t out_dim, | |
| uint32_t expert_split, | |
| uint32_t rows); | |
| int ds4_gpu_routed_moe_owned_packed_combine_tensor( | |
| ds4_gpu_tensor *out, | |
| const ds4_gpu_tensor *home_slots, | |
| const ds4_gpu_tensor *peer_packed, | |
| const ds4_gpu_tensor *selected, | |
| uint32_t out_dim, | |
| uint32_t expert_split); | |
| int ds4_gpu_routed_moe_one_tensor( | |
| ds4_gpu_tensor *out, | |
| ds4_gpu_tensor *gate, | |
| ds4_gpu_tensor *up, | |
| ds4_gpu_tensor *mid, | |
| ds4_gpu_tensor *experts, | |
| const void *model_map, | |
| uint64_t model_size, | |
| uint64_t gate_offset, | |
| uint64_t up_offset, | |
| uint64_t down_offset, | |
| uint32_t gate_type, | |
| uint32_t down_type, | |
| uint64_t gate_expert_bytes, | |
| uint64_t gate_row_bytes, | |
| uint64_t down_expert_bytes, | |
| uint64_t down_row_bytes, | |
| uint32_t expert_in_dim, | |
| uint32_t expert_mid_dim, | |
| uint32_t out_dim, | |
| const ds4_gpu_tensor *selected, | |
| const ds4_gpu_tensor *weights, | |
| uint32_t n_total_expert, | |
| uint32_t n_expert, | |
| float clamp, | |
| const ds4_gpu_tensor *x, | |
| const ds4_gpu_tensor *add_in, | |
| uint32_t layer_index, | |
| bool force_resident); | |
| int ds4_gpu_routed_moe_batch_tensor( | |
| ds4_gpu_tensor *out, | |
| ds4_gpu_tensor *gate, | |
| ds4_gpu_tensor *up, | |
| ds4_gpu_tensor *mid, | |
| ds4_gpu_tensor *experts, | |
| const void *model_map, | |
| uint64_t model_size, | |
| uint64_t gate_offset, | |
| uint64_t up_offset, | |
| uint64_t down_offset, | |
| uint32_t gate_type, | |
| uint32_t down_type, | |
| uint64_t gate_expert_bytes, | |
| uint64_t gate_row_bytes, | |
| uint64_t down_expert_bytes, | |
| uint64_t down_row_bytes, | |
| uint32_t expert_in_dim, | |
| uint32_t expert_mid_dim, | |
| uint32_t out_dim, | |
| const ds4_gpu_tensor *selected, | |
| const ds4_gpu_tensor *weights, | |
| uint32_t n_total_expert, | |
| uint32_t n_expert, | |
| float clamp, | |
| const ds4_gpu_tensor *x, | |
| uint32_t layer_index, | |
| uint32_t n_tokens, | |
| bool *mid_is_f16, | |
| bool force_resident); | |
| /* ========================================================================= | |
| * Hyper-Connection Kernels. | |
| * ========================================================================= | |
| * | |
| * HC kernels reduce four residual streams before a sublayer and expand the | |
| * sublayer output back into four streams afterward. | |
| */ | |
| int ds4_gpu_hc_split_sinkhorn_tensor( | |
| ds4_gpu_tensor *out, | |
| const ds4_gpu_tensor *mix, | |
| const void *model_map, | |
| uint64_t model_size, | |
| uint64_t scale_offset, | |
| uint64_t base_offset, | |
| uint32_t n_hc, | |
| uint32_t sinkhorn_iters, | |
| float eps); | |
| int ds4_gpu_hc_weighted_sum_tensor( | |
| ds4_gpu_tensor *out, | |
| const ds4_gpu_tensor *residual_hc, | |
| const ds4_gpu_tensor *weights, | |
| uint32_t n_embd, | |
| uint32_t n_hc); | |
| int ds4_gpu_hc_weighted_sum_split_tensor( | |
| ds4_gpu_tensor *out, | |
| const ds4_gpu_tensor *residual_hc, | |
| const ds4_gpu_tensor *split, | |
| uint32_t n_embd, | |
| uint32_t n_hc); | |
| /* Release decode fused HC pre-sublayer operation: split the HC mixer and | |
| * immediately reduce four HC streams into the active 4096-wide sublayer row. */ | |
| int ds4_gpu_hc_split_weighted_sum_tensor( | |
| ds4_gpu_tensor *out, | |
| ds4_gpu_tensor *split, | |
| const ds4_gpu_tensor *mix, | |
| const ds4_gpu_tensor *residual_hc, | |
| const void *model_map, | |
| uint64_t model_size, | |
| uint64_t scale_offset, | |
| uint64_t base_offset, | |
| uint32_t n_embd, | |
| uint32_t n_hc, | |
| uint32_t sinkhorn_iters, | |
| float eps); | |
| int ds4_gpu_hc_split_weighted_sum_norm_tensor( | |
| ds4_gpu_tensor *out, | |
| ds4_gpu_tensor *norm_out, | |
| ds4_gpu_tensor *split, | |
| const ds4_gpu_tensor *mix, | |
| const ds4_gpu_tensor *residual_hc, | |
| const void *model_map, | |
| uint64_t model_size, | |
| uint64_t scale_offset, | |
| uint64_t base_offset, | |
| uint64_t norm_weight_offset, | |
| uint32_t n_embd, | |
| uint32_t n_hc, | |
| uint32_t sinkhorn_iters, | |
| float eps, | |
| float norm_eps); | |
| int ds4_gpu_hc_rms_norm_mix_f16_available(void); | |
| int ds4_gpu_hc_rms_norm_mix_f16_tensor( | |
| ds4_gpu_tensor *out, | |
| const ds4_gpu_tensor *x, | |
| const void *model_map, | |
| uint64_t model_size, | |
| uint64_t weight_offset, | |
| uint32_t n, | |
| uint32_t out_dim, | |
| float eps); | |
| /* Batched HC RMSNorm followed by its narrow F16 mixer projection. On the | |
| * tuned Metal path, scale_scratch stores one float per row instead of the | |
| * full normalized HC tensor; other shapes retain the established fallback. */ | |
| int ds4_gpu_hc_rms_scale_project_f16_tensor( | |
| ds4_gpu_tensor *out, | |
| ds4_gpu_tensor *scale_scratch, | |
| const void *model_map, | |
| uint64_t model_size, | |
| uint64_t weight_offset, | |
| uint32_t in_dim, | |
| uint32_t out_dim, | |
| const ds4_gpu_tensor *x, | |
| uint32_t n_rows, | |
| float eps); | |
| int ds4_gpu_hc_rms_norm_mix_split_norm_f16_tensor( | |
| ds4_gpu_tensor *mix, | |
| ds4_gpu_tensor *out, | |
| ds4_gpu_tensor *norm_out, | |
| ds4_gpu_tensor *split, | |
| const ds4_gpu_tensor *residual_hc, | |
| const void *model_map, | |
| uint64_t model_size, | |
| uint64_t mix_weight_offset, | |
| uint64_t scale_offset, | |
| uint64_t base_offset, | |
| uint64_t norm_weight_offset, | |
| uint32_t n, | |
| uint32_t mix_dim, | |
| uint32_t n_embd, | |
| uint32_t n_hc, | |
| uint32_t sinkhorn_iters, | |
| float eps, | |
| float hc_eps, | |
| float norm_eps); | |
| int ds4_gpu_output_hc_weights_tensor( | |
| ds4_gpu_tensor *out, | |
| const ds4_gpu_tensor *pre, | |
| const void *model_map, | |
| uint64_t model_size, | |
| uint64_t scale_offset, | |
| uint64_t base_offset, | |
| uint32_t n_hc, | |
| float eps); | |
| int ds4_gpu_hc_expand_tensor( | |
| ds4_gpu_tensor *out_hc, | |
| const ds4_gpu_tensor *block_out, | |
| const ds4_gpu_tensor *residual_hc, | |
| const ds4_gpu_tensor *post, | |
| const ds4_gpu_tensor *comb, | |
| uint32_t n_embd, | |
| uint32_t n_hc); | |
| int ds4_gpu_hc_expand_add_tensor( | |
| ds4_gpu_tensor *out_hc, | |
| const ds4_gpu_tensor *block_out, | |
| const ds4_gpu_tensor *block_add, | |
| const ds4_gpu_tensor *residual_hc, | |
| const ds4_gpu_tensor *post, | |
| const ds4_gpu_tensor *comb, | |
| uint32_t n_embd, | |
| uint32_t n_hc); | |
| int ds4_gpu_hc_expand_add_tensor( | |
| ds4_gpu_tensor *out_hc, | |
| const ds4_gpu_tensor *block_out, | |
| const ds4_gpu_tensor *block_add, | |
| const ds4_gpu_tensor *residual_hc, | |
| const ds4_gpu_tensor *post, | |
| const ds4_gpu_tensor *comb, | |
| uint32_t n_embd, | |
| uint32_t n_hc); | |
| int ds4_gpu_hc_expand_split_tensor( | |
| ds4_gpu_tensor *out_hc, | |
| const ds4_gpu_tensor *block_out, | |
| const ds4_gpu_tensor *residual_hc, | |
| const ds4_gpu_tensor *split, | |
| uint32_t n_embd, | |
| uint32_t n_hc); | |
| int ds4_gpu_hc_expand_split_half_tensor( | |
| ds4_gpu_tensor *out_hc, | |
| const ds4_gpu_tensor *block_out_h, | |
| const ds4_gpu_tensor *residual_hc, | |
| const ds4_gpu_tensor *split, | |
| uint32_t n_embd, | |
| uint32_t n_hc); | |
| int ds4_gpu_hc_expand_add_split_tensor( | |
| ds4_gpu_tensor *out_hc, | |
| const ds4_gpu_tensor *block_out, | |
| const ds4_gpu_tensor *block_add, | |
| const ds4_gpu_tensor *residual_hc, | |
| const ds4_gpu_tensor *split, | |
| uint32_t n_embd, | |
| uint32_t n_hc); | |
| int ds4_gpu_hc_expand_add_split_half_add_tensor( | |
| ds4_gpu_tensor *out_hc, | |
| const ds4_gpu_tensor *block_out, | |
| const ds4_gpu_tensor *block_add_h, | |
| const ds4_gpu_tensor *residual_hc, | |
| const ds4_gpu_tensor *split, | |
| uint32_t n_embd, | |
| uint32_t n_hc); | |
| int ds4_gpu_shared_down_hc_expand_q8_0_tensor( | |
| ds4_gpu_tensor *out_hc, | |
| ds4_gpu_tensor *shared_out, | |
| const void *model_map, | |
| uint64_t model_size, | |
| uint64_t weight_offset, | |
| uint64_t in_dim, | |
| uint64_t out_dim, | |
| const ds4_gpu_tensor *shared_mid, | |
| const ds4_gpu_tensor *routed_out, | |
| const ds4_gpu_tensor *residual_hc, | |
| const ds4_gpu_tensor *split, | |
| uint32_t n_embd, | |
| uint32_t n_hc); | |
| int ds4_gpu_shared_down_hc_expand_add_q8_0_tensor( | |
| ds4_gpu_tensor *out_hc, | |
| ds4_gpu_tensor *shared_out, | |
| const void *model_map, | |
| uint64_t model_size, | |
| uint64_t weight_offset, | |
| uint64_t in_dim, | |
| uint64_t out_dim, | |
| const ds4_gpu_tensor *shared_mid, | |
| const ds4_gpu_tensor *routed_out, | |
| const ds4_gpu_tensor *routed_add, | |
| const ds4_gpu_tensor *residual_hc, | |
| const ds4_gpu_tensor *split, | |
| uint32_t n_embd, | |
| uint32_t n_hc); | |
| int ds4_gpu_shared_down_hc_expand_owned_q8_0_tensor( | |
| ds4_gpu_tensor *out_hc, | |
| ds4_gpu_tensor *shared_out, | |
| const void *model_map, | |
| uint64_t model_size, | |
| uint64_t weight_offset, | |
| uint64_t in_dim, | |
| uint64_t out_dim, | |
| const ds4_gpu_tensor *shared_mid, | |
| const ds4_gpu_tensor *home_slots, | |
| const ds4_gpu_tensor *peer_packed, | |
| const ds4_gpu_tensor *selected, | |
| uint32_t expert_split, | |
| const ds4_gpu_tensor *residual_hc, | |
| const ds4_gpu_tensor *split, | |
| uint32_t n_embd, | |
| uint32_t n_hc); | |
| int ds4_gpu_matmul_q8_0_hc_expand_tensor( | |
| ds4_gpu_tensor *out_hc, | |
| ds4_gpu_tensor *block_out, | |
| const void *model_map, | |
| uint64_t model_size, | |
| uint64_t weight_offset, | |
| uint64_t in_dim, | |
| uint64_t out_dim, | |
| const ds4_gpu_tensor *x, | |
| const ds4_gpu_tensor *residual_hc, | |
| const ds4_gpu_tensor *split, | |
| uint32_t n_embd, | |
| uint32_t n_hc); | |
| /* Decode-island CUDA graph capture (CUDA backend; Metal/ROCm/CPU stub it | |
| * out and stay eager). Design ported from the Entrpi/ds4 batched-serving | |
| * fork's per-layer decode graph capture. The key identifies a captured | |
| * island: layer, island index, and the activation buffers whose addresses | |
| * the captured kernels bake in. ds4_cuda.cu mirrors this struct | |
| * byte-for-byte (it does not include this header); keep both in sync. */ | |
| typedef struct ds4_decode_graph_key { | |
| uint32_t il; | |
| uint32_t island; /* 0: layer top to pre-rope; 1: attn-out to layer end */ | |
| uint32_t variant; | |
| uint32_t _pad; | |
| void *cur_hc; | |
| void *after_attn_hc; | |
| void *after_ffn_hc; | |
| void *attn_norm; | |
| } ds4_decode_graph_key; | |
| int ds4_gpu_decode_graphs_supported(void); | |
| /* 1: replayed (island already executed; skip encoding it) | |
| * 0: capturing (encode the island, then call _end) | |
| * -1: run eagerly */ | |
| int ds4_gpu_decode_graph_begin(const ds4_decode_graph_key *key); | |
| /* 0: capture committed and launched; -1: capture failed (entry retired; | |
| * the caller must re-encode the island eagerly -- no work was executed). */ | |
| int ds4_gpu_decode_graph_end(const ds4_decode_graph_key *key); | |
| void ds4_gpu_decode_graph_abort(const ds4_decode_graph_key *key); | |
| void ds4_gpu_decode_graphs_invalidate(void); | |
| } | |