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
187 lines
5.2 KiB
C++
187 lines
5.2 KiB
C++
/// \file utils.h
|
|
/// \brief Host-side C++ utilities used by JIT kernel wrappers.
|
|
///
|
|
/// Provides:
|
|
/// - `DebugInfo` - wraps `std::source_location` for error reporting.
|
|
/// - `RuntimeCheck` - runtime assertion with formatted error messages.
|
|
/// - `Panic` - unconditional abort with formatted error messages.
|
|
/// - `pointer::offset` - safe void-pointer arithmetic (host side).
|
|
/// - `div_ceil` - integer ceiling division.
|
|
/// - `dtype_bytes` - byte width of a `DLDataType`.
|
|
/// - `irange` - Python-style integer range for range-for loops.
|
|
|
|
#pragma once
|
|
|
|
// ref: https://forums.developer.nvidia.com/t/c-20s-source-location-compilation-error-when-using-nvcc-12-1/258026/3
|
|
#ifdef __CUDACC__
|
|
#include <cuda.h>
|
|
#if CUDA_VERSION <= 12010
|
|
|
|
#pragma push_macro("__cpp_consteval")
|
|
#pragma push_macro("_NODISCARD")
|
|
#pragma push_macro("__builtin_LINE")
|
|
|
|
#pragma clang diagnostic push
|
|
#pragma clang diagnostic ignored "-Wbuiltin-macro-redefined"
|
|
#define __cpp_consteval 201811L
|
|
#pragma clang diagnostic pop
|
|
|
|
#ifdef _NODISCARD
|
|
#undef _NODISCARD
|
|
#define _NODISCARD
|
|
#endif
|
|
|
|
#define consteval constexpr
|
|
|
|
#include "source_location.h"
|
|
|
|
#undef consteval
|
|
#pragma pop_macro("__cpp_consteval")
|
|
#pragma pop_macro("_NODISCARD")
|
|
#else // __CUDACC__ && CUDA_VERSION > 12010
|
|
#include "source_location.h"
|
|
#endif
|
|
#else // no __CUDACC__
|
|
#include "source_location.h"
|
|
#endif
|
|
|
|
#include <dlpack/dlpack.h>
|
|
|
|
#include <concepts>
|
|
#include <cstddef>
|
|
#include <ostream>
|
|
#include <ranges>
|
|
#include <sstream>
|
|
#include <utility>
|
|
|
|
namespace host {
|
|
|
|
template <typename>
|
|
inline constexpr bool dependent_false_v = false;
|
|
|
|
/// \brief Source-location wrapper for debug/error messages.
|
|
struct DebugInfo : public source_location_t {
|
|
DebugInfo(source_location_t loc = source_location_t::current()) : source_location_t(loc) {}
|
|
};
|
|
|
|
/// \brief Exception type thrown by `RuntimeCheck` and `Panic`.
|
|
struct PanicError : public std::runtime_error {
|
|
public:
|
|
explicit PanicError(std::string msg) : runtime_error(msg), m_message(std::move(msg)) {}
|
|
auto root_cause() const -> std::string_view {
|
|
const auto str = std::string_view{m_message};
|
|
const auto pos = str.find(": ");
|
|
return pos == std::string_view::npos ? str : str.substr(pos + 2);
|
|
}
|
|
|
|
private:
|
|
std::string m_message;
|
|
};
|
|
|
|
/// \brief Unconditionally abort with a formatted error message.
|
|
template <typename... Args>
|
|
[[noreturn]]
|
|
inline auto panic(DebugInfo location, Args&&... args) -> void {
|
|
std::ostringstream os;
|
|
os << "Runtime check failed at " << location.file_name() << ":" << location.line();
|
|
if constexpr (sizeof...(args) > 0) {
|
|
os << ": ";
|
|
(os << ... << std::forward<Args>(args));
|
|
} else {
|
|
os << " in " << location.function_name();
|
|
}
|
|
throw PanicError(std::move(os).str());
|
|
}
|
|
|
|
/**
|
|
* \brief Runtime assertion: panics with a formatted message when `condition`
|
|
* is false. Extra `args` are streamed to the error message.
|
|
*
|
|
* Example:
|
|
* \code
|
|
* RuntimeCheck(n > 0, "n must be positive, got ", n);
|
|
* \endcode
|
|
*/
|
|
template <typename... Args>
|
|
struct RuntimeCheck {
|
|
template <typename Cond>
|
|
explicit RuntimeCheck(Cond&& condition, Args&&... args, DebugInfo location = {}) {
|
|
if (condition) return;
|
|
[[unlikely]] ::host::panic(location, std::forward<Args>(args)...);
|
|
}
|
|
template <typename Cond>
|
|
explicit RuntimeCheck(DebugInfo location, Cond&& condition, Args&&... args) {
|
|
if (condition) return;
|
|
[[unlikely]] ::host::panic(location, std::forward<Args>(args)...);
|
|
}
|
|
};
|
|
|
|
template <typename... Args>
|
|
struct Panic {
|
|
explicit Panic(Args&&... args, DebugInfo location = {}) {
|
|
::host::panic(location, std::forward<Args>(args)...);
|
|
}
|
|
explicit Panic(DebugInfo location, Args&&... args) {
|
|
::host::panic(location, std::forward<Args>(args)...);
|
|
}
|
|
[[noreturn]] ~Panic() {
|
|
std::terminate();
|
|
}
|
|
};
|
|
|
|
template <typename Cond, typename... Args>
|
|
explicit RuntimeCheck(Cond&&, Args&&...) -> RuntimeCheck<Args...>;
|
|
|
|
template <typename Cond, typename... Args>
|
|
explicit RuntimeCheck(DebugInfo, Cond&&, Args&&...) -> RuntimeCheck<Args...>;
|
|
|
|
template <typename... Args>
|
|
explicit Panic(Args&&...) -> Panic<Args...>;
|
|
|
|
template <typename... Args>
|
|
explicit Panic(DebugInfo, Args&&...) -> Panic<Args...>;
|
|
|
|
namespace pointer {
|
|
|
|
// we only allow void * pointer arithmetic for safety
|
|
|
|
template <typename T = char, std::integral... U>
|
|
inline auto offset(void* ptr, U... offset) -> void* {
|
|
return static_cast<T*>(ptr) + (... + offset);
|
|
}
|
|
|
|
template <typename T = char, std::integral... U>
|
|
inline auto offset(const void* ptr, U... offset) -> const void* {
|
|
return static_cast<const T*>(ptr) + (... + offset);
|
|
}
|
|
|
|
} // namespace pointer
|
|
|
|
/// \brief Integer ceiling division: ceil(a / b).
|
|
template <std::integral T, std::integral U>
|
|
inline constexpr auto div_ceil(T a, U b) {
|
|
return (a + b - 1) / b;
|
|
}
|
|
|
|
/// \brief Returns the byte width of a DLPack data type.
|
|
inline auto dtype_bytes(DLDataType dtype) -> std::size_t {
|
|
return static_cast<std::size_t>(dtype.bits / 8);
|
|
}
|
|
|
|
namespace stdr = std::ranges;
|
|
namespace stdv = stdr::views;
|
|
|
|
/// \brief Python-style integer range: `irange(n)` -> `[0, n)`.
|
|
template <std::integral T>
|
|
inline auto irange(T end) {
|
|
return stdv::iota(static_cast<T>(0), end);
|
|
}
|
|
|
|
/// \brief Python-style integer range: `irange(start, end)` -> `[start, end)`.
|
|
template <std::integral T>
|
|
inline auto irange(T start, T end) {
|
|
return stdv::iota(start, end);
|
|
}
|
|
|
|
} // namespace host
|