63 lines
2.5 KiB
C
63 lines
2.5 KiB
C
#pragma once
|
|
|
|
#include "ggml.h"
|
|
#include "ggml-backend.h"
|
|
|
|
#ifdef __cplusplus
|
|
extern "C" {
|
|
#endif
|
|
|
|
// backend API
|
|
GGML_BACKEND_API ggml_backend_t ggml_backend_hexagon_init(void);
|
|
|
|
GGML_BACKEND_API bool ggml_backend_is_hexagon(ggml_backend_t backend);
|
|
|
|
GGML_BACKEND_API ggml_backend_reg_t ggml_backend_hexagon_reg(void);
|
|
|
|
// Mega-kernel transport self-test. Allocates 3 small FastRPC buffers
|
|
// (descriptor, ack, logits), ships a minimal-but-valid htp_mega_descriptor
|
|
// to the DSP via HTP_OP_QWEN35_COMPILE, invokes HTP_OP_QWEN35_STEP, reads
|
|
// back the stub-produced logits (should be all zeros), and verifies.
|
|
//
|
|
// Returns 0 on success, negative on failure. Logs diagnostic to stderr.
|
|
// Scope: proves the host↔DSP transport for the mega-kernel entry points
|
|
// with the skeleton stubs from qwen35-forward-ops.c. No real inference.
|
|
GGML_BACKEND_API int ggml_backend_hexagon_qwen35_selftest(ggml_backend_t backend);
|
|
|
|
// Mega-kernel graph compiler. Walks the given ggml_cgraph, emits an
|
|
// htp_mega_descriptor (ops + tensor table + buffer table), registers every
|
|
// distinct ggml_backend_buffer_t the graph touches as a persistent FastRPC
|
|
// buffer, ships everything to the DSP in a single HTP_OP_QWEN35_COMPILE
|
|
// message, and stores the descriptor in the DSP's static slot.
|
|
//
|
|
// Tensor table entries carry (buffer_id, offset_in_bytes) so the DSP
|
|
// interpreter can resolve any tensor id to a pointer in O(1). Op entries
|
|
// reference src/dst tensor ids; unsupported GGML ops are emitted as
|
|
// HTP_MEGA_NOP (the interpreter will skip them).
|
|
//
|
|
// logits_tensor identifies which tensor's data should be copied back to the
|
|
// host when a subsequent step call completes. For a real Qwen3.5 model this
|
|
// is the lm_head output tensor; for a test graph it can be any intermediate
|
|
// node. Pass NULL to default to the last cgraph node.
|
|
//
|
|
// Returns 0 on success, negative on failure.
|
|
GGML_BACKEND_API int ggml_backend_hexagon_qwen35_compile(
|
|
ggml_backend_t backend,
|
|
struct ggml_cgraph * cgraph,
|
|
struct ggml_tensor * logits_tensor);
|
|
|
|
// Invokes one forward-pass step of the compiled mega-kernel on the DSP.
|
|
// The descriptor must have been shipped via ggml_backend_hexagon_qwen35_compile.
|
|
// input_token_id + position identify the current decode input; logits_out
|
|
// receives n_logits floats (must be ≥ descriptor vocab_size).
|
|
GGML_BACKEND_API int ggml_backend_hexagon_qwen35_step(
|
|
ggml_backend_t backend,
|
|
uint32_t input_token_id,
|
|
int32_t position,
|
|
float * logits_out,
|
|
size_t n_logits);
|
|
|
|
#ifdef __cplusplus
|
|
}
|
|
#endif
|