Files
sgl-project--sglang/python/sglang/jit_kernel/include/sgl_kernel/ffi.h
T
wehub-resource-sync 94057c3d3e
PR Test (NPU) / check-changes (push) Has been cancelled
PR Test (NPU) / pr-gate (push) Has been cancelled
PR Test (NPU) / set-image-config (push) Has been cancelled
PR Test (NPU) / stage-b-test-1-npu-a2 (0) (push) Has been cancelled
PR Test (NPU) / stage-b-test-1-npu-a2 (1) (push) Has been cancelled
PR Test (NPU) / stage-b-test-2-npu-a2 (0) (push) Has been cancelled
PR Test (NPU) / stage-b-test-2-npu-a2 (1) (push) Has been cancelled
PR Test (NPU) / stage-b-test-4-npu-a3 (push) Has been cancelled
PR Test (NPU) / stage-b-test-16-npu-a3 (push) Has been cancelled
PR Test (NPU) / multimodal-gen-test-1-npu-a3 (push) Has been cancelled
PR Test (NPU) / multimodal-gen-test-2-npu-a3 (push) Has been cancelled
PR Test (Arm64) / pr-gate (push) Has been cancelled
PR Test (Arm64) / check-changes (push) Has been cancelled
PR Test (Arm64) / build-test (push) Has been cancelled
PR Test (sgl-router) / gate (push) Has been cancelled
PR Test (sgl-router) / tier-1 — lint (push) Has been cancelled
PR Test (sgl-router) / tier-2 — build + test (push) Has been cancelled
PR Test (sgl-router) / tier-3 — docker (placeholder) (push) Has been cancelled
PR Test (sgl-router) / tier-3 — k8s integration (push) Has been cancelled
PR Test (sgl-router) / tier-3 — e2e (push) Has been cancelled
PR Test (sgl-router) / finish (push) Has been cancelled
PR Test (NPU) / single-node-poc (map[name:qwen3_6_27b_w8a8_1p_in64k_out1k_50ms runner:linux-aarch64-a3-2 test_case:test/registered/ascend/performance/qwen3_6_27b/test_npu_qwen3_6_27b_w8a8_1p_in64k_out1k_50ms.py test_type:perf]) (push) Has been cancelled
PR Test (NPU) / pr-test-npu-finish (push) Has been cancelled
PR Test (Xeon) / pr-gate (push) Has been cancelled
PR Test (Xeon) / check-changes (push) Has been cancelled
PR Test (Xeon) / build-test (, xeon-gnr, base-b-test-cpu) (push) Has been cancelled
PR Test (XPU) / check-changes (push) Has been cancelled
PR Test (XPU) / pr-gate (push) Has been cancelled
PR Test (XPU) / stage-a-test-1-gpu-xpu (push) Has been cancelled
PR Test (XPU) / wait-for-stage-a (push) Has been cancelled
PR Test (XPU) / stage-b-test-1-gpu-xpu (push) Has been cancelled
PR Test (XPU) / finish (push) Has been cancelled
CI Model Inventory / build-inventory (push) Has been cancelled
Lint / lint (push) Has been cancelled
PR Benchmark (SMG Components) / Benchmark Compilation Check (push) Has been cancelled
PR Benchmark (SMG Components) / Benchmark - Manual Policy (push) Has been cancelled
PR Benchmark (SMG Components) / Benchmark - Request Processing (push) Has been cancelled
PR Benchmark (SMG Components) / Benchmark Summary (push) Has been cancelled
PR Test (SMG) / build-wheel (push) Has been cancelled
Release SGLang Model Gateway to PyPI / build on windows (x86_64 - auto) (push) Has been cancelled
Release SGLang Model Gateway to PyPI / build on macos (x86_64 - auto) (push) Has been cancelled
PR Test (SMG) / python-unit-tests (push) Has been cancelled
PR Test (SMG) / unit-tests (push) Has been cancelled
PR Test (SMG) / benchmarks (push) Has been cancelled
PR Test (SMG) / chat-completions (push) Has been cancelled
PR Test (SMG) / chat-completions-4gpu (push) Has been cancelled
PR Test (SMG) / e2e (push) Has been cancelled
PR Test (SMG) / docker-build-test (push) Has been cancelled
PR Test (SMG) / k8s-integration (push) Has been cancelled
PR Test (SMG) / finish (push) Has been cancelled
PR Test (SMG) / summarize-benchmarks (push) Has been cancelled
Release SGLang Model Gateway Docker Image / publish (push) Has been cancelled
Release SGLang Model Gateway to PyPI / build on macos (aarch64 - auto) (push) Has been cancelled
Release SGLang Model Gateway to PyPI / build on linux (aarch64 - auto) (push) Has been cancelled
Release SGLang Model Gateway to PyPI / build on linux (x86_64 - auto) (push) Has been cancelled
Release SGLang Model Gateway to PyPI / build on linux (aarch64 - musllinux_1_1) (push) Has been cancelled
Release SGLang Model Gateway to PyPI / build on linux (x86_64 - musllinux_1_1) (push) Has been cancelled
Release SGLang Model Gateway to PyPI / Build SDist (push) Has been cancelled
Release SGLang Model Gateway to PyPI / Upload to PyPI (push) Has been cancelled
Release SGLang Kernels / build-cu129-matrix (aarch64, 12.9, 3.10, arm-kernel-build-node) (push) Has been cancelled
Release SGLang Kernels / build-cu129-matrix (x86_64, 12.9, 3.10, x64-kernel-build-node) (push) Has been cancelled
Release SGLang Kernels / release-cu129 (push) Has been cancelled
Release SGLang Kernels / build-cu130-matrix (aarch64, 13.0, 3.10, arm-kernel-build-node) (push) Has been cancelled
Release SGLang Kernels / build-cu130-matrix (x86_64, 13.0, 3.10, x64-kernel-build-node) (push) Has been cancelled
Release SGLang Kernels / release-cu130 (push) Has been cancelled
Release SGLang Kernels / build-rocm-matrix (3.10, 700) (push) Has been cancelled
Release SGLang Kernels / build-rocm-matrix (3.10, 720) (push) Has been cancelled
Release SGLang Kernels / release-rocm700 (push) Has been cancelled
Release SGLang Kernels / release-rocm720 (push) Has been cancelled
Release SGLang Kernels / build-musa43 (43, 3.10) (push) Has been cancelled
Release SGLang Kernels / release-musa43 (push) Has been cancelled
chore: import upstream snapshot with attribution
2026-07-13 12:38:16 +08:00

105 lines
3.0 KiB
C++

#pragma once
#include <sgl_kernel/utils.h>
#include <dlpack/dlpack.h>
#include <tvm/ffi/container/shape.h>
#include <tvm/ffi/container/tensor.h>
#include <tvm/ffi/extra/c_env_api.h>
#include <algorithm>
#include <cstdint>
#include <cstdlib>
#include <memory>
#include <optional>
namespace host::ffi {
using tvm::ffi::Tensor, tvm::ffi::TensorView, tvm::ffi::ShapeView;
inline Tensor empty(ShapeView shape, DLDataType dtype, DLDevice device) {
return Tensor::FromEnvAlloc(::TVMFFIEnvTensorAlloc, shape, dtype, device);
}
inline Tensor empty_like(TensorView tensor) {
return empty(tensor.shape(), tensor.dtype(), tensor.device());
}
struct _dummy_deleter {
void operator()(void*) const {}
};
// template <typename Fn = _dummy_deleter>
template <typename Fn>
struct FromBlobContext {
[[no_unique_address]] Fn deleter;
int64_t dimension;
int64_t* get_shape() {
return reinterpret_cast<int64_t*>(this + 1);
}
int64_t* get_stride() {
return this->get_shape() + dimension;
}
};
template <typename Fn = _dummy_deleter>
inline Tensor from_blob(
void* data,
ShapeView shape,
DLDataType dtype,
DLDevice device,
Fn&& deleter = {},
std::optional<ShapeView> stride = {},
uint64_t byte_offset = 0) {
using Context = FromBlobContext<std::decay_t<Fn>>;
const auto ndim = shape.size();
const auto ctx = [&] {
auto ptr = std::malloc(sizeof(Context) + sizeof(int64_t) * ndim * 2);
auto ctx = static_cast<Context*>(ptr);
std::construct_at(ctx, std::forward<Fn>(deleter), static_cast<int64_t>(ndim));
stdr::copy_n(shape.data(), ndim, ctx->get_shape());
if (stride.has_value()) {
RuntimeCheck(stride->size() == ndim, "Stride ndim mismatch!");
stdr::copy_n(stride->data(), ndim, ctx->get_stride());
} else {
int64_t stride_val = 1;
for (const auto i : irange(ndim)) {
const auto j = ndim - 1 - i;
ctx->get_stride()[j] = stride_val;
stride_val *= shape[j];
}
}
return ctx;
}();
const auto tensor = DLTensor{
.data = data,
.device = device,
.ndim = static_cast<int32_t>(ndim),
.dtype = dtype,
.shape = ctx->get_shape(),
.strides = ctx->get_stride(),
.byte_offset = byte_offset,
};
const auto blob_deleter = [](DLManagedTensor* self) {
auto ctx = static_cast<Context*>(self->manager_ctx);
ctx->deleter(self->dl_tensor.data);
std::destroy_at(ctx);
std::free(ctx);
};
auto managed_tensor = DLManagedTensor{tensor, ctx, blob_deleter};
return Tensor::FromDLPack(&managed_tensor);
}
template <typename Fn = _dummy_deleter>
inline Tensor from_blob_like(
void* data,
TensorView t,
Fn&& deleter = {},
bool is_contiguous = false, // if override to true, the stride will be ignored
uint64_t byte_offset = 0) {
const auto stride = is_contiguous ? std::nullopt : std::optional{t.strides()};
return from_blob(data, t.shape(), t.dtype(), t.device(), std::forward<Fn>(deleter), stride, byte_offset);
}
} // namespace host::ffi