乐于分享
好东西不私藏

TensorRT-LLM 0.5.0 源码之二十四

TensorRT-LLM 0.5.0 源码之二十四

cudaUtils

// workspace for cublas gemm : 32MB#define CUBLAS_WORKSPACE_SIZE 33554432typedef struct __align__(4){    half x, y, z, w;half4;

这段代码定义了一个名为 half4 的数据类型,它是一个包含四个 half 类型分量且整体按4字节对齐的结构体。下面我们来详细解析它的各个部分。

结构体成员

  • • 结构体包含四个成员:xyzw,它们都是 half 类型。
  • • half 类型:这是一种半精度浮点数,通常占用 16 位(2 字节) 存储空间。它的数值范围和精度低于标准的单精度浮点数(float),但能节省内存和带宽,在对精度要求不极端的场景下非常有用,常见于图形编程和移动设备上的着色器。
  • • 因此,这个结构体四个成员的理论总大小是 4 × 2 字节 = 8 字节。

内存对齐说明

  • • __align__(4):这个关键字(或类似语法,如 __attribute__((aligned(4))) 或 _Alignas(4),取决于编译器)指示编译器将此结构体实例在内存中的起始地址安排在 4 字节的整数倍 上。
  • • 对齐的重要性:现代计算机的CPU对内存的读写操作在数据位于特定地址边界(通常是数据大小的整数倍)时效率最高。如果数据没有正确对齐,在某些架构(如ARM)上可能导致性能下降甚至运行错误。

结构体大小与内存布局

虽然四个 half 成员本身只占 8 字节,但 __align__(4) 的对齐要求会影响整个结构体的大小和布局。

  • • 结构体的最终大小通常会是其成员中最大对齐要求的整数倍,这主要是为了确保在定义结构体数组时,每一个元素都能正确对齐。
  • • 在这个例子中,由于每个 half 的大小是2字节,并且指定了4字节对齐,编译器可能会在成员之间或结构体末尾添加填充字节(Padding)来满足对齐要求。最终 sizeof(half4) 很可能仍然是 8 字节,因为 8 字节已经是 4 字节的整数倍。但在更复杂的结构体中,填充字节可能会更明显。

主要用途

  • • 数据封装:将四个相关的半精度浮点数(例如,表示一个颜色RGBA或一个四维向量)逻辑上捆绑在一起,方便统一管理。
  • • 性能优化:通过指定对齐方式,可以确保在特定硬件(如某些DSP或GPU)上获得高效的内存访问速度。
  • • 空间与精度平衡:使用 half 类型在保证一定精度的同时,相比使用四个 float(共16字节)能显著节省存储空间和传输带宽,这在处理大量数据(如顶点数据、纹理)时尤为重要。

注意事项

  • • 平台差异half 类型的精度和支持程度可能因平台和编译器而异。在一些PC平台上,它可能仍被当作 float 处理。
  • • 语法变体__align__(4) 是编译器相关的扩展语法。在C11标准中,更便携的关键字是 _Alignas 或头文件 stdalign.h 中定义的 alignas
/* **************************** type definition ***************************** */enum CublasDataType{    FLOAT_DATATYPE = 0,    HALF_DATATYPE = 1,    BFLOAT16_DATATYPE = 2,    INT8_DATATYPE = 3,    FP8_DATATYPE = 4};enum TRTLLMCudaDataType{    FP32 = 0,    FP16 = 1,    BF16 = 2,    INT8 = 3,    FP8 = 4};enum class OperationType{    FP32,    FP16,    BF16,    INT8,    FP8};
/* **************************** debug tools ********************************* */static const char* _cudaGetErrorEnum(cudaError_t error){    return cudaGetErrorString(error);}static const char* _cudaGetErrorEnum(cublasStatus_t error){    switch (error)    {    case CUBLAS_STATUS_SUCCESS: return "CUBLAS_STATUS_SUCCESS";    case CUBLAS_STATUS_NOT_INITIALIZED: return "CUBLAS_STATUS_NOT_INITIALIZED";    case CUBLAS_STATUS_ALLOC_FAILED: return "CUBLAS_STATUS_ALLOC_FAILED";    case CUBLAS_STATUS_INVALID_VALUE: return "CUBLAS_STATUS_INVALID_VALUE";    case CUBLAS_STATUS_ARCH_MISMATCH: return "CUBLAS_STATUS_ARCH_MISMATCH";    case CUBLAS_STATUS_MAPPING_ERROR: return "CUBLAS_STATUS_MAPPING_ERROR";    case CUBLAS_STATUS_EXECUTION_FAILED: return "CUBLAS_STATUS_EXECUTION_FAILED";    case CUBLAS_STATUS_INTERNAL_ERROR: return "CUBLAS_STATUS_INTERNAL_ERROR";    case CUBLAS_STATUS_NOT_SUPPORTED: return "CUBLAS_STATUS_NOT_SUPPORTED";    case CUBLAS_STATUS_LICENSE_ERROR: return "CUBLAS_STATUS_LICENSE_ERROR";    }    return "<unknown>";}template <typename T>void check(T result, char const* const func, const char* const file, int const line){    if (result)    {        throw TllmException(            file, line, fmtstr("[TensorRT-LLM][ERROR] CUDA runtime error in %s: %s", func, _cudaGetErrorEnum(result)));    }}#define check_cuda_error(val) check((val), #val, __FILE__, __LINE__)#define check_cuda_error_2(val, file, line) check((val), #val, file, line)inline bool isCudaLaunchBlocking(){    static bool firstCall = true;    static bool result = false;    if (firstCall)    {        const char* env = std::getenv("CUDA_LAUNCH_BLOCKING");        result = env != nullptr && std::string(env) == "1";        firstCall = false;    }    return result;}inline void syncAndCheck(const char* const file, int const line){#ifndef NDEBUG    const bool checkError = true;#else    const bool checkError = isCudaLaunchBlocking();#endif    if (checkError)    {        cudaError_t result = cudaDeviceSynchronize();        check(result, "cudaDeviceSynchronize", file, line);    }}#define sync_check_cuda_error() tensorrt_llm::common::syncAndCheck(__FILE__, __LINE__)
/* * Macros compliant with TensorRT coding conventions */#define TLLM_CUDA_CHECK(stat)                                                                                          \    do                                                                                                                 \    {                                                                                                                  \        tensorrt_llm::common::check((stat), #stat, __FILE__, __LINE__);                                                \    } while (0)
#define PRINT_FUNC_NAME_()                                                                                             \    do                                                                                                                 \    {                                                                                                                  \        std::cout << "[TensorRT-LLM][CALL] " << __FUNCTION__ << " " << std::endl;                                      \    } while (0)
template<typename T> struct packed_type;template <>          struct packed_type<float>         { using type = float; }; // we don't need to pack float by defaulttemplate <>          struct packed_type<half>          { using type = half2; };#ifdef ENABLE_BF16template<>struct packed_type<__nv_bfloat16> {    using type = __nv_bfloat162;};#endif#ifdef ENABLE_FP8template<>struct packed_type<__nv_fp8_e4m3> {    using type = __nv_fp8x2_e4m3;};#endif
template<typename T> struct num_elems;template <>          struct num_elems<float>           { static constexpr int value = 1; };template <>          struct num_elems<float2>          { static constexpr int value = 2; };template <>          struct num_elems<float4>          { static constexpr int value = 4; };template <>          struct num_elems<half>            { static constexpr int value = 1; };template <>          struct num_elems<half2>           { static constexpr int value = 2; };#ifdef ENABLE_BF16template <>          struct num_elems<__nv_bfloat16>   { static constexpr int value = 1; };template <>          struct num_elems<__nv_bfloat162>  { static constexpr int value = 2; };#endif#ifdef ENABLE_FP8template <>          struct num_elems<__nv_fp8_e4m3>   { static constexpr int value = 1; };template <>          struct num_elems<__nv_fp8x2_e4m3>  { static constexpr int value = 2; };#endif
template<typename T, int num> struct packed_as;template<typename T>          struct packed_as<T, 1>              { using type = T; };template<>                    struct packed_as<half,  2>          { using type = half2; };template<>                    struct packed_as<float,  2>         { using type = float2; };template<>                    struct packed_as<int8_t, 2>         { using type = int16_t; };template<>                    struct packed_as<int32_t, 2>        { using type = int2; };template<>                    struct packed_as<half2, 1>          { using type = half; };template<>                    struct packed_as<float2, 1>         { using type = float; };#ifdef ENABLE_BF16template<> struct packed_as<__nv_bfloat16,  2> { using type = __nv_bfloat162; };template<> struct packed_as<__nv_bfloat162, 1> { using type = __nv_bfloat16;  };#endif#ifdef ENABLE_FP8template<> struct packed_as<__nv_fp8_e4m3,  2> { using type = __nv_fp8x2_e4m3; };template<> struct packed_as<__nv_fp8x2_e4m3, 1> { using type = __nv_fp8_e4m3;  };template<> struct packed_as<__nv_fp8_e5m2,  2> { using type = __nv_fp8x2_e5m2; };template<> struct packed_as<__nv_fp8x2_e5m2, 1> { using type = __nv_fp8_e5m2;  };#endif
inline __device__ float2 operator*(float2 a, float2 b) { return make_float2(a.x * b.x, a.y * b.y); }inline __device__ float2 operator+(float2 a, float2 b) { return make_float2(a.x + b.x, a.y + b.y); }inline __device__ float2 operator-(float2 a, float2 b) { return make_float2(a.x - b.x, a.y - b.y); }inline __device__ float2 operator*(float2 a, float  b) { return make_float2(a.x * b, a.y * b); }inline __device__ float2 operator+(float2 a, float  b) { return make_float2(a.x + b, a.y + b); }inline __device__ float2 operator-(float2 a, float  b) { return make_float2(a.x - b, a.y - b); }
template <typename T>struct CudaDataType{};template <>struct CudaDataType<float>{    static constexpr cudaDataType_t value = cudaDataType::CUDA_R_32F;};template <>struct CudaDataType<half>{    static constexpr cudaDataType_t value = cudaDataType::CUDA_R_16F;};#ifdef ENABLE_BF16template <>struct CudaDataType<__nv_bfloat16>{    static constexpr cudaDataType_t value = cudaDataType::CUDA_R_16BF;};#endif
inline int getSMVersion(){    int device{-1};    check_cuda_error(cudaGetDevice(&device));    int sm_major = 0;    int sm_minor = 0;    check_cuda_error(cudaDeviceGetAttribute(&sm_major, cudaDevAttrComputeCapabilityMajor, device));    check_cuda_error(cudaDeviceGetAttribute(&sm_minor, cudaDevAttrComputeCapabilityMinor, device));    return sm_major * 10 + sm_minor;}
  • • 函数签名inline int getSMVersion():inline关键字建议编译器将函数体直接展开在调用处以避免函数调用开销,适用于短小且频繁使用的函数。返回值是一个整数,表示计算能力(Compute Capability),格式为主版本号 × 10 + 次版本号。例如,若设备计算能力为7.5,则返回75
  • • 用途:计算能力版本决定了GPU支持的硬件功能(如线程块大小、内存层次等),常用于条件编译或运行时优化(例如,为不同架构选择不同的内核代码)
inline int getDevice(){    int current_dev_id = 0;    check_cuda_error(cudaGetDevice(&current_dev_id));    return current_dev_id;}
inline int getDeviceCount(){    int count = 0;    check_cuda_error(cudaGetDeviceCount(&count));    return count;}
/// Get the memory info/// \return The free and total amount of memory in bytesinline std::tuple<size_t, size_t> getDeviceMemoryInfo(){    size_t free, total;    check_cuda_error(cudaMemGetInfo(&free, &total));    return {free, total};}
inline int getMultiProcessorCount(){    int device_id;    int multi_processor_count;    check_cuda_error(cudaGetDevice(&device_id));    check_cuda_error(cudaDeviceGetAttribute(&multi_processor_count, cudaDevAttrMultiProcessorCount, device_id));    return multi_processor_count;}
inline int divUp(int a, int n){    return (a + n - 1) / n;}
template <typename T, typename U, typename = std::enable_if_t<std::is_integral<T>::value>,    typename = std::enable_if_t<std::is_integral<U>::value>>auto constexpr ceilDiv(T numerator, U denominator){    return (numerator + denominator - 1) / denominator;}

这段C++代码定义了一个名为ceilDiv的函数模板,用于执行向上取整的整数除法。它通过模板元编程技术对参数类型进行了约束,并确保函数能在编译期计算。下面我们来详细解析它的各个组成部分。

模板参数与类型约束

代码中的模板参数列表使用了std::enable_if_t来施加类型约束,这是实现SFINAE(Substitution Failure Is Not An Error)的常见手法。

template <typename T, typename U,          typename = std::enable_if_t<std::is_integral<T>::value>,          typename = std::enable_if_t<std::is_integral<U>::value>>
  • • std::is_integral<T>::value:这是一个类型特质(type trait),在编译期检查类型T是否为整型(如intlongchar等)。如果是,其value成员为true;否则为false
  • • std::enable_if_t<Condition>:它是std::enable_if<Condition>::type的别名模板(C++14引入)。当Conditiontrue时,std::enable_if_t代表一个有效的类型(默认为void);当Conditionfalse时,它不产生任何类型,导致模板参数替换失败。
  • • SFINAE效果:这两个默认模板参数共同作用,确保了编译器只有在TU都是整型时,才会选择实例化这个模板函数。如果传入浮点数等非整型参数,编译将会失败。

函数声明与实现

auto constexpr ceilDiv(T numerator, U denominator){    return (numerator + denominator - 1) / denominator;}
  • • auto 返回类型:使用auto让编译器自动推导返回类型。返回类型将是表达式(numerator + denominator - 1) / denominator的结果类型,通常是TU在经过算术转换后的公共整数类型。
  • • constexpr 函数说明符:这表明该函数是一个常量表达式函数。当传入的参数是编译期常量时,整个计算过程可以在编译期完成,结果直接作为常量嵌入代码中,有助于提升运行时效率。例如,ceilDiv(10, 3)会在编译期直接计算出结果4
  • • 向上取整的算法:公式 (numerator + denominator - 1) / denominator 是整数运算中实现向上取整的经典技巧。
    • • 当 numerator 能被 denominator 整除时,例如 numerator=10denominator=5(10 + 5 - 1) / 5 = 14 / 5 = 2,结果正确。
    • • 当不能整除时,例如 numerator=10denominator=3(10 + 3 - 1) / 3 = 12 / 3 = 4,而 10 / 3 的整数除法结果是 3,向上取整正好是 4

应用场景与注意事项

这种向上取整的除法在计算分页数量、数组块分配等场景中非常有用。使用此函数模板时需要注意:

  • • 它只接受整型参数,这是通过模板约束强制实现的。
  • • 函数被设计为constexpr,适合用于编译期需要常量表达式的上下文,如数组大小定义、模板非类型参数等。
  • • 需要注意**分母为零(zero denominator)**的情况,因为这会引发未定义行为。在实际使用中,应确保denominator不为零。

总结

这个ceilDiv函数模板巧妙地结合了模板元编程(通过std::enable_if_tstd::is_integral进行类型约束)、常量表达式计算(constexpr)和高效的算术算法,提供了一个类型安全且性能优越的向上取整除法工具。


template <typename T>void printAbsMean(const T* buf, uint64_t size, cudaStream_t stream, std::string name = ""){    if (buf == nullptr)    {        TLLM_LOG_WARNING("%s is an nullptr, skip!", name.c_str());        return;    }    cudaDeviceSynchronize();    check_cuda_error(cudaGetLastError());    T* h_tmp = new T[size];    cudaMemcpyAsync(h_tmp, buf, sizeof(T) * size, cudaMemcpyDeviceToHost, stream);    cudaDeviceSynchronize();    check_cuda_error(cudaGetLastError());    double sum = 0.0f;    uint64_t zero_count = 0;    float max_val = -1e10;    bool find_inf = false;    for (uint64_t i = 0; i < size; i++)    {        if (std::isinf((float) (h_tmp[i])))        {            find_inf = true;            continue;        }        sum += abs((double) h_tmp[i]);        if ((float) h_tmp[i] == 0.0f)        {            zero_count++;        }        max_val = max_val > abs(float(h_tmp[i])) ? max_val : abs(float(h_tmp[i]));    }    TLLM_LOG_INFO("%20s size: %u, abs mean: %f, abs sum: %f, abs max: %f, find inf: %s", name.c_str(), size, sum / size,        sum, max_val, find_inf ? "true" : "false");    delete[] h_tmp;    cudaDeviceSynchronize();    check_cuda_error(cudaGetLastError());}
template <typename T>void printToStream(const T* result, const int size, FILE* strm){    const bool split_rows = (strm == stdout);    if (result == nullptr)    {        TLLM_LOG_WARNING("It is an nullptr, skip! \n");        return;    }    T* tmp = reinterpret_cast<T*>(malloc(sizeof(T) * size));    check_cuda_error(cudaMemcpy(tmp, result, sizeof(T) * size, cudaMemcpyDeviceToHost));    for (int i = 0; i < size; ++i)    {        fprintf(strm, "%f, ", static_cast<float>(tmp[i]));        if (split_rows && ((i + 1) % 10) == 0)            fprintf(strm, "\n");    }    if (!split_rows || (size % 10) != 0)    {        fprintf(strm, "\n");    }    free(tmp);}template <typename T>void printToScreen(const T* result, const int size){    printToStream(result, size, stdout);}template <typename T>void print2dToStream(const T* result, const int r, const int c, const int stride, FILE* strm){    if (result == nullptr)    {        TLLM_LOG_WARNING("It is an nullptr, skip! \n");        return;    }    for (int ri = 0; ri < r; ++ri)    {        const T* ptr = result + ri * stride;        printToStream(ptr, c, strm);    }    fprintf(strm, "\n");}template <typename T>void print2dToScreen(const T* result, const int r, const int c, const int stride){    print2dToStream(result, r, c, stride, stdout);}
inline void print_float_(float x){    printf("%7.3f ", x);}inline void print_element_(float x){    print_float_(x);}inline void print_element_(half x){    print_float_((float) x);}#ifdef ENABLE_BF16inline void print_element_(__nv_bfloat16 x){    print_float_((float) x);}#endifinline void print_element_(uint32_t ul){    printf("%7" PRIu32, ul);}inline void print_element_(uint64_t ull){    printf("%7" PRIu64, ull);}inline void print_element_(int32_t il){    printf("%7" PRId32, il);}inline void print_element_(int64_t ill){    printf("%7" PRId64, ill);}template <typename T>inline void printMatrix(const T* ptr, int m, int k, int stride, bool is_device_ptr){    T* tmp;    if (is_device_ptr)    {        // k < stride ; stride = col-dimension.        tmp = reinterpret_cast<T*>(malloc(m * stride * sizeof(T)));        check_cuda_error(cudaMemcpy(tmp, ptr, sizeof(T) * m * stride, cudaMemcpyDeviceToHost));        cudaDeviceSynchronize();    }    else    {        tmp = const_cast<T*>(ptr);    }    for (int ii = -1; ii < m; ++ii)    {        if (ii >= 0)        {            printf("%07d ", ii);        }        else        {            printf("   ");        }        for (int jj = 0; jj < k; jj += 1)        {            if (ii >= 0)            {                print_element_(tmp[ii * stride + jj]);            }            else            {                printf("%7d ", jj);            }        }        printf("\n");    }    if (is_device_ptr)    {        free(tmp);    }}template void printMatrix(const float* ptr, int m, int k, int stride, bool is_device_ptr);template void printMatrix(const half* ptr, int m, int k, int stride, bool is_device_ptr);#ifdef ENABLE_BF16template void printMatrix(const __nv_bfloat16* ptr, int m, int k, int stride, bool is_device_ptr);#endiftemplate void printMatrix(const uint32_t* ptr, int m, int k, int stride, bool is_device_ptr);template void printMatrix(const uint64_t* ptr, int m, int k, int stride, bool is_device_ptr);template void printMatrix(const int* ptr, int m, int k, int stride, bool is_device_ptr);

代码 printf("%7" PRId64, ill) 是C/C++语言中一种用于格式化输出64位有符号整数的跨平台写法。下面我来详细解释它的各个部分。

代码含义详解

  1. 1. int64_t 类型代码中的变量 ill 应该是 int64_t 类型(从格式符推断)。这是在 stdint.h(C语言)或 cstdint(C++)头文件中定义的固定宽度整数类型,保证在所有平台上都恰好占用64位(8字节)。使用这种类型可以确保代码在不同平台上有明确的数据长度。
  2. 2. 格式说明符 %7" PRId64这是整个格式字符串的核心,由两部分拼接而成:
    • • %7:这是一个字段宽度说明符。数字 7 指定了输出值的最小宽度为7个字符。如果实际数值的位数少于7位,输出会在左侧(默认右对齐)用空格填充以达到指定宽度;如果数值位数超过7位,则会按实际宽度完整输出。
    • • PRId64:这是一个在 inttypes.h(C语言)或 cinttypes(C++)中定义的。它的主要作用是提供一个与 int64_t 类型匹配的格式化符号(如 d),并确保跨平台兼容性。在预编译阶段,PRId64 会根据当前编译环境被展开为特定的字符串。例如,在64位Linux系统上,它通常被定义为 "ld";而在32位系统或Windows环境下,则可能被定义为 "lld" 或 "I64d"
  3. 3. 字符串字面量的拼接C/C++语法允许将多个用空格分隔的字符串字面量自动连接成一个字符串。因此,"%7" 和宏展开后的 PRId64 会在编译前合并。例如,在64位Linux系统上,"%7" PRId64 最终会组合成字符串 "%7ld"
  4. 4. 整行代码的效果所以,printf("%7" PRId64, ill) 这行代码的最终目的是:以至少7个字符的宽度,右对齐打印一个64位有符号整数 ill

使用注意事项与最佳实践

  1. 1. 包含正确的头文件为了使用 PRId64 和 int64_t,你需要在源代码中包含相应的头文件。
  2. 2. C++中的特殊处理在某些C编译标准下(如C11之前),使用 PRId64 可能需要先定义宏 __STDC_FORMAT_MACROS 以启用这些格式宏。最稳妥的做法是:
    • • 使用C++11或更新标准进行编译。
    • • 或者在包含头文件之前定义该宏:
      #define __STDC_FORMAT_MACROS#include <cinttypes>// 或者 #include <inttypes.h> 
  3. 3. 正确的参数类型确保传递给 printf 的变量 ill 的类型确实是 int64_t(或等价的 long longlong,这取决于平台和typedef)。类型不匹配可能导致未定义行为。

一个简单的例子

#include <stdio.h>#include <stdint.h>   // 提供 int64_t 的定义#include <inttypes.h> // 提供 PRId64 的定义int main() {    int64_t my_number = -12345;    printf("The value is: '%7" PRId64 "'\n", my_number);    return 0;}

假设在64位系统上,PRId64 展开为 "ld",输出可能类似于:

The value is: '  -12345'

(注意数字 -12345 连负号共6个字符,因此在左侧填充了一个空格以达到总共7个字符的宽度。)

cudaAllocator

#include <cuda_runtime.h>class CudaAllocator : public IAllocator{public:explicit CudaAllocator(runtime::BufferManager bufferManager);    ~CudaAllocator() override = default;void free(void** ptr) override;protected:bool contains(void const* ptr) const override{        return mPointerMapping.find(ptr) != mPointerMapping.end();    }    ReallocType reallocType(void const* ptr, size_t size) const override;void* malloc(size_t size, bool setZero) override;void memSet(void* ptr, int val, size_t size) override;private:    runtime::BufferManager mBufferManager;    std::unordered_map<void const*, runtime::BufferManager::IBufferPtr> mPointerMapping{};};
using namespace tensorrt_llm::common;namespace tr = tensorrt_llm::runtime;CudaAllocator::CudaAllocator(tr::BufferManager bufferManager)    : mBufferManager(std::move(bufferManager)){}
ReallocType CudaAllocator::reallocType(void const* ptr, size_t size) const{    TLLM_CHECK(contains(ptr));    auto const currentSize = mPointerMapping.at(ptr)->getSize();    TLLM_LOG_DEBUG("current_buffer_size: %d, original buffer: %p, new buffer: %d", currentSize, ptr, size);    if (currentSize < size)    {        return ReallocType::INCREASE;    }    else if (currentSize == size)    {        return ReallocType::REUSE;    }    else    {        return ReallocType::DECREASE;    }}
void* CudaAllocator::malloc(std::size_t size, bool const setZero){    TLLM_LOG_DEBUG(__PRETTY_FUNCTION__);    auto bufferPtr = mBufferManager.gpu(size);    if (setZero)    {        mBufferManager.setZero(*bufferPtr);    }    void* ptr{bufferPtr->data()};    TLLM_LOG_DEBUG("malloc buffer %p with size %ld", ptr, size);    mPointerMapping.insert({ptr, std::move(bufferPtr)});    return ptr;}void CudaAllocator::free(void** ptr){    TLLM_LOG_DEBUG(__PRETTY_FUNCTION__);    mPointerMapping.erase(*ptr);    *ptr = nullptr;}void CudaAllocator::memSet(void* ptr, int const val, size_t const size){    check_cuda_error(cudaMemsetAsync(ptr, val, size, mBufferManager.getStream().get()));}

参考文献

  • • https://github.com/NVIDIA/TensorRT-LLM/blob/release/0.5.0/cpp/tensorrt_llm/common/cudaAllocator.h
  • • https://github.com/NVIDIA/TensorRT-LLM/blob/release/0.5.0/cpp/tensorrt_llm/common/cudaUtils.h
点个「赞」+「在看」❤️
让我们知道这份文字有温暖到你,也是我们持续创作的最大动力!
推荐
TensorRT-LLM 0.5.0 源码之二十三
Agent SFT 数据
Claude Code 的上限,就是你的上限
如何用Claude Code提升软件工程工作效率、改善生活
OpenClow 深入解析
OpenClaw 架构详解
LLM推理优化的核心技术:深入理解KV缓存与分页注意力机制
什么是氛围编程(Vibe Coding)?
MiMo-V2-Flash技术报告
AI原生开发中的MCP与CLI对比
Qwen3-TTS 技术报告
Vibe Coding 氛围编程最佳实践
VoxCPM 模型结构
理解 VoxCPM 模型
Multi-Head, Multi-Query, and Group-Query Attention
PagedAttention
如何让AI听懂你的“话外音”?GOAT-SLM模型实现更懂情感的语言交互
大模型部署必看:LLM 推理(Inference)优化 技术,适配高并发、低延迟场景
LLM Serving Benchmark Metrics
OpenCharacter: 利用大规模合成人物角色训练可定制化角色扮演语言模型
FlashAttention与PagedAttention详解:拯救GPU显存,让大模型飞起来的核心技术
CUDA 中如何使用虚函数
DeepSpeed的ZeRO技术具体是如何实现显存优化的?
LM-as-a-judge:LLM评估指南
LLM Sequence Packing
深入了解SmoothQuant:大模型高效量化背后的数学原理
语音合成(TTS)分句生成拼接时的响度一致性问题:现状、成因与对策
当扩散模型遇上流匹配:原来是一回事儿
语音合成中的“一对多”问题主流模型解决方案分析
Share Memory 的 Bank Conflict
使用LoRA对LLM进行微调的实用技巧
语音合成(TTS)中文自然度:问题、成因、解决方案
SFT 泛化新解读:强化学习 + 奖励修正,一文读懂
Evol-Instruct 竟能精准生成领域专属数据?实操技巧速看!
语音合成(TTS)跳跃与重复问题的解析:成因、机制及解决方案
大模型训练新思路:GEPA 靠 “反思” 赢过 RL,看完秒懂
手把手教你创建 evol-instruct 数据集!附完整流程~
最新!SpeechLLM 综述:架构、能力、挑战与未来全揭秘
基本 文件 流程 错误 SQL 调试
  1. 请求信息 : 2026-06-08 12:10:28 HTTP/1.1 GET : https://www.yeyulingfeng.com/a/726211.html
  2. 运行时间 : 0.215153s [ 吞吐率:4.65req/s ] 内存消耗:4,766.83kb 文件加载:145
  3. 缓存信息 : 0 reads,0 writes
  4. 会话信息 : SESSION_ID=aac35d7b4f6b6f8289385aa1588393a5
  1. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/public/index.php ( 0.79 KB )
  2. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/autoload.php ( 0.17 KB )
  3. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/composer/autoload_real.php ( 2.49 KB )
  4. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/composer/platform_check.php ( 0.90 KB )
  5. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/composer/ClassLoader.php ( 14.03 KB )
  6. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/composer/autoload_static.php ( 6.05 KB )
  7. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-helper/src/helper.php ( 8.34 KB )
  8. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-validate/src/helper.php ( 2.19 KB )
  9. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/ralouphie/getallheaders/src/getallheaders.php ( 1.60 KB )
  10. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-orm/src/helper.php ( 1.47 KB )
  11. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-orm/stubs/load_stubs.php ( 0.16 KB )
  12. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/Exception.php ( 1.69 KB )
  13. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-container/src/Facade.php ( 2.71 KB )
  14. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/symfony/deprecation-contracts/function.php ( 0.99 KB )
  15. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/symfony/polyfill-mbstring/bootstrap.php ( 8.26 KB )
  16. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/symfony/polyfill-mbstring/bootstrap80.php ( 9.78 KB )
  17. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/symfony/var-dumper/Resources/functions/dump.php ( 1.49 KB )
  18. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-dumper/src/helper.php ( 0.18 KB )
  19. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/symfony/var-dumper/VarDumper.php ( 4.30 KB )
  20. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/guzzlehttp/guzzle/src/functions_include.php ( 0.16 KB )
  21. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/guzzlehttp/guzzle/src/functions.php ( 5.54 KB )
  22. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/App.php ( 15.30 KB )
  23. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-container/src/Container.php ( 15.76 KB )
  24. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/psr/container/src/ContainerInterface.php ( 1.02 KB )
  25. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/app/provider.php ( 0.19 KB )
  26. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/Http.php ( 6.04 KB )
  27. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-helper/src/helper/Str.php ( 7.29 KB )
  28. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/Env.php ( 4.68 KB )
  29. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/app/common.php ( 0.03 KB )
  30. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/helper.php ( 18.78 KB )
  31. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/Config.php ( 5.54 KB )
  32. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/config/alipay.php ( 3.59 KB )
  33. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/facade/Env.php ( 1.67 KB )
  34. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/config/app.php ( 0.95 KB )
  35. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/config/cache.php ( 0.78 KB )
  36. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/config/console.php ( 0.23 KB )
  37. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/config/cookie.php ( 0.56 KB )
  38. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/config/database.php ( 2.48 KB )
  39. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/config/filesystem.php ( 0.61 KB )
  40. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/config/lang.php ( 0.91 KB )
  41. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/config/log.php ( 1.35 KB )
  42. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/config/middleware.php ( 0.19 KB )
  43. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/config/route.php ( 1.89 KB )
  44. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/config/session.php ( 0.57 KB )
  45. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/config/trace.php ( 0.34 KB )
  46. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/config/view.php ( 0.82 KB )
  47. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/app/event.php ( 0.25 KB )
  48. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/Event.php ( 7.67 KB )
  49. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/app/service.php ( 0.13 KB )
  50. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/app/AppService.php ( 0.26 KB )
  51. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/Service.php ( 1.64 KB )
  52. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/Lang.php ( 7.35 KB )
  53. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/lang/zh-cn.php ( 13.70 KB )
  54. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/initializer/Error.php ( 3.31 KB )
  55. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/initializer/RegisterService.php ( 1.33 KB )
  56. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/services.php ( 0.14 KB )
  57. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/service/PaginatorService.php ( 1.52 KB )
  58. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/service/ValidateService.php ( 0.99 KB )
  59. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/service/ModelService.php ( 2.04 KB )
  60. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-trace/src/Service.php ( 0.77 KB )
  61. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/Middleware.php ( 6.72 KB )
  62. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/initializer/BootService.php ( 0.77 KB )
  63. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-orm/src/Paginator.php ( 11.86 KB )
  64. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-validate/src/Validate.php ( 63.20 KB )
  65. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-orm/src/Model.php ( 23.55 KB )
  66. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-orm/src/model/concern/Attribute.php ( 21.05 KB )
  67. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-orm/src/model/concern/AutoWriteData.php ( 4.21 KB )
  68. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-orm/src/model/concern/Conversion.php ( 6.44 KB )
  69. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-orm/src/model/concern/DbConnect.php ( 5.16 KB )
  70. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-orm/src/model/concern/ModelEvent.php ( 2.33 KB )
  71. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-orm/src/model/concern/RelationShip.php ( 28.29 KB )
  72. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-helper/src/contract/Arrayable.php ( 0.09 KB )
  73. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-helper/src/contract/Jsonable.php ( 0.13 KB )
  74. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-orm/src/model/contract/Modelable.php ( 0.09 KB )
  75. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/Db.php ( 2.88 KB )
  76. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-orm/src/DbManager.php ( 8.52 KB )
  77. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/Log.php ( 6.28 KB )
  78. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/Manager.php ( 3.92 KB )
  79. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/psr/log/src/LoggerTrait.php ( 2.69 KB )
  80. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/psr/log/src/LoggerInterface.php ( 2.71 KB )
  81. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/Cache.php ( 4.92 KB )
  82. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/psr/simple-cache/src/CacheInterface.php ( 4.71 KB )
  83. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-helper/src/helper/Arr.php ( 16.63 KB )
  84. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/cache/driver/File.php ( 7.84 KB )
  85. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/cache/Driver.php ( 9.03 KB )
  86. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/contract/CacheHandlerInterface.php ( 1.99 KB )
  87. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/app/Request.php ( 0.09 KB )
  88. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/Request.php ( 55.78 KB )
  89. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/app/middleware.php ( 0.25 KB )
  90. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/Pipeline.php ( 2.61 KB )
  91. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-trace/src/TraceDebug.php ( 3.40 KB )
  92. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/middleware/SessionInit.php ( 1.94 KB )
  93. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/Session.php ( 1.80 KB )
  94. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/session/driver/File.php ( 6.27 KB )
  95. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/contract/SessionHandlerInterface.php ( 0.87 KB )
  96. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/session/Store.php ( 7.12 KB )
  97. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/Route.php ( 23.73 KB )
  98. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/route/RuleName.php ( 5.75 KB )
  99. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/route/Domain.php ( 2.53 KB )
  100. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/route/RuleGroup.php ( 22.43 KB )
  101. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/route/Rule.php ( 26.95 KB )
  102. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/route/RuleItem.php ( 9.78 KB )
  103. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/route/app.php ( 3.94 KB )
  104. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/facade/Route.php ( 4.70 KB )
  105. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/route/dispatch/Controller.php ( 4.74 KB )
  106. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/route/Dispatch.php ( 10.44 KB )
  107. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/app/controller/Index.php ( 9.87 KB )
  108. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/app/BaseController.php ( 2.05 KB )
  109. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-orm/src/facade/Db.php ( 0.93 KB )
  110. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-orm/src/db/connector/Mysql.php ( 5.44 KB )
  111. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-orm/src/db/PDOConnection.php ( 52.47 KB )
  112. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-orm/src/db/Connection.php ( 8.39 KB )
  113. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-orm/src/db/ConnectionInterface.php ( 4.57 KB )
  114. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-orm/src/db/builder/Mysql.php ( 16.58 KB )
  115. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-orm/src/db/Builder.php ( 24.06 KB )
  116. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-orm/src/db/BaseBuilder.php ( 27.50 KB )
  117. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-orm/src/db/Query.php ( 15.71 KB )
  118. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-orm/src/db/BaseQuery.php ( 45.13 KB )
  119. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-orm/src/db/concern/TimeFieldQuery.php ( 7.43 KB )
  120. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-orm/src/db/concern/AggregateQuery.php ( 3.26 KB )
  121. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-orm/src/db/concern/ModelRelationQuery.php ( 20.07 KB )
  122. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-orm/src/db/concern/ParamsBind.php ( 3.66 KB )
  123. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-orm/src/db/concern/ResultOperation.php ( 7.01 KB )
  124. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-orm/src/db/concern/WhereQuery.php ( 19.37 KB )
  125. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-orm/src/db/concern/JoinAndViewQuery.php ( 7.11 KB )
  126. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-orm/src/db/concern/TableFieldInfo.php ( 2.63 KB )
  127. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-orm/src/db/concern/Transaction.php ( 2.77 KB )
  128. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/log/driver/File.php ( 5.96 KB )
  129. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/contract/LogHandlerInterface.php ( 0.86 KB )
  130. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/log/Channel.php ( 3.89 KB )
  131. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/event/LogRecord.php ( 1.02 KB )
  132. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-helper/src/Collection.php ( 16.47 KB )
  133. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/facade/View.php ( 1.70 KB )
  134. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/View.php ( 4.39 KB )
  135. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/app/controller/Es.php ( 3.30 KB )
  136. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/Response.php ( 8.81 KB )
  137. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/response/View.php ( 3.29 KB )
  138. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/Cookie.php ( 6.06 KB )
  139. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-view/src/Think.php ( 8.38 KB )
  140. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/contract/TemplateHandlerInterface.php ( 1.60 KB )
  141. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-template/src/Template.php ( 46.61 KB )
  142. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-template/src/template/driver/File.php ( 2.41 KB )
  143. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-template/src/template/contract/DriverInterface.php ( 0.86 KB )
  144. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/runtime/temp/c935550e3e8a3a4c27dd94e439343fdf.php ( 31.50 KB )
  145. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-trace/src/Html.php ( 4.42 KB )
  1. CONNECT:[ UseTime:0.000724s ] mysql:host=127.0.0.1;port=3306;dbname=wenku;charset=utf8mb4
  2. SHOW FULL COLUMNS FROM `fenlei` [ RunTime:0.000692s ]
  3. SELECT * FROM `fenlei` WHERE `fid` = 0 [ RunTime:0.010571s ]
  4. SELECT * FROM `fenlei` WHERE `fid` = 63 [ RunTime:0.001671s ]
  5. SHOW FULL COLUMNS FROM `set` [ RunTime:0.000726s ]
  6. SELECT * FROM `set` [ RunTime:0.000233s ]
  7. SHOW FULL COLUMNS FROM `article` [ RunTime:0.000636s ]
  8. SELECT * FROM `article` WHERE `id` = 726211 LIMIT 1 [ RunTime:0.000786s ]
  9. UPDATE `article` SET `lasttime` = 1780891828 WHERE `id` = 726211 [ RunTime:0.015125s ]
  10. SELECT * FROM `fenlei` WHERE `id` = 64 LIMIT 1 [ RunTime:0.000330s ]
  11. SELECT * FROM `article` WHERE `id` < 726211 ORDER BY `id` DESC LIMIT 1 [ RunTime:0.000628s ]
  12. SELECT * FROM `article` WHERE `id` > 726211 ORDER BY `id` ASC LIMIT 1 [ RunTime:0.000532s ]
  13. SELECT * FROM `article` WHERE `id` < 726211 ORDER BY `id` DESC LIMIT 10 [ RunTime:0.001042s ]
  14. SELECT * FROM `article` WHERE `id` < 726211 ORDER BY `id` DESC LIMIT 10,10 [ RunTime:0.001063s ]
  15. SELECT * FROM `article` WHERE `id` < 726211 ORDER BY `id` DESC LIMIT 20,10 [ RunTime:0.000991s ]
0.219062s