## Coverage Report

#### Created: 2026-04-14 20:00

next uncovered line (L), next uncovered region (R), next uncovered branch (B)

    /home/liu/actions-runner/_work/ccv/ccv/lib/nnc/ccv_nnc_tfb.h

    Line
    Count
    Source
    1
    /**********************************************************
    2
     * C-based/Cached/Core Computer Vision Library
    3
     * Liu Liu, 2010-02-01
    4
     **********************************************************/
    5
    6
    /**********************************************************
    7
     * CCV - Neural Network Collection
    8
     **********************************************************/
    9
    10
    /**
    11
     * This header is included into main ccv.h
    12
     * such that enables toll-free bridging between
    13
     * ccv_nnc_tensor_t and ccv_dense_matrix_t
    14
     * In effect, ccv_dense_matrix_t will be a specialized
    15
     * version of ccv_nnc_tensor_t. We are taking some penalties
    16
     * from this change though, namely, the size of ccv_dense_matrix_t
    17
     * will be bigger now.
    18
     */
    19
    20
    #ifndef GUARD_ccv_nnc_tfb_h
    21
    #define GUARD_ccv_nnc_tfb_h
    22
    23
    #include <unistd.h>
    24
    #include <stdint.h>
    25
    26
    enum {
    27
      CCV_TENSOR_FORMAT_NCHW = 0x01,
    28
      CCV_TENSOR_FORMAT_NHWC = 0x02,
    29
      CCV_TENSOR_FORMAT_CHWN = 0x04,
    30
    };
    31
    32
    enum {
    33
      CCV_TENSOR_CPU_MEMORY = 0x1,
    34
      CCV_TENSOR_GPU_MEMORY = 0x2,
    35
    };
    36
    37
    enum {
    38
      CCV_COMPUTE_DEVICE_000 = 0x00000,
    39
      CCV_COMPUTE_DEVICE_001 = 0x00100,
    40
      CCV_COMPUTE_DEVICE_002 = 0x00200,
    41
      CCV_COMPUTE_DEVICE_003 = 0x00300,
    42
      CCV_COMPUTE_DEVICE_004 = 0x00400,
    43
      CCV_COMPUTE_DEVICE_005 = 0x00500,
    44
      CCV_COMPUTE_DEVICE_006 = 0x00600,
    45
      CCV_COMPUTE_DEVICE_007 = 0x00700,
    46
      CCV_COMPUTE_DEVICE_ANY = 0xfff00, // The optimal allocation will be found by the algorithm.
    47
    };
    48
    49
    1.81M
    #define CCV_TENSOR_GET_MEMORY(type) ((type) & 0x3)
    50
    485k
    #define CCV_TENSOR_GET_DEVICE(type) ((type308) & 0xfff00)
    51
    120k
    #define CCV_TENSOR_GET_DEVICE_ID(type) (CCV_TENSOR_GET_DEVICE(type) >> 8)
    52
    31.7k
    #define CCV_TENSOR_SET_DEVICE_ID(type, device_id) (type) = (((type) & ~0xfff00) | (((device_id) & 0xfff) << 8))
    53
    54
    enum {
    55
      CCV_TENSOR_VIEW       = 0x01000000,
    56
      CCV_TENSOR_MULTIVIEW  = 0x00800000, // This conflicts with CCV_MATRIX_CSC, but it should be OK.
    57
      CCV_TENSOR_PINNED_MEM = 0x04000000, // tensor is pinned in CUDA. This matches CCV_PINNED_MEM.
    58
    };
    59
    60
    typedef struct {
    61
      short v;
    62
    } ccv_float16_t; // In this way, you cannot perform any operations on float16.
    63
    64
    typedef union ccv_numeric_data_u {
    65
      char* i8;
    66
      unsigned char* u8;
    67
      int* i32;
    68
      ccv_float16_t* f16;
    69
      float* f32;
    70
      int64_t* i64;
    71
      uint64_t* u64;
    72
      double* f64;
    73
      void* ptr;
    74
    } ccv_numeric_data_t;
    75
    76
    11.3M
    #define CCV_NNC_MAX_DIM_ALLOC (12)
    77
    27.8G
    #define CCV_NNC_MAX_DIM (2)
    78
    79
    typedef struct {
    80
      int type;
    81
      int format;
    82
      int datatype;
    83
      int reserved; // This is reserved, for quantized tensor, this might be used in some ways.
    84
      int dim[CCV_NNC_MAX_DIM_ALLOC];
    85
    } ccv_nnc_tensor_param_t;
    86
    87
    typedef struct {
    88
      int type;
    89
      int refcount;
    90
      ccv_numeric_data_t data;
    91
      off_t dataof; // Offset.
    92
      uintptr_t alias_ref;
    93
      uint64_t data_size;
    94
      uint64_t sig;
    95
      ccv_nnc_tensor_param_t info;
    96
    } ccv_nnc_tensor_t;
    97
    98
    typedef struct {
    99
      int type;
    100
      int refcount;
    101
      ccv_numeric_data_t data;
    102
      off_t dataof; // Offset for the data.
    103
      uintptr_t alias_ref;
    104
      uint64_t data_size;
    105
      uint64_t sig;
    106
      ccv_nnc_tensor_param_t info;
    107
      /* tensor view and tensor shares the same data structure besides the following. */
    108
      int contiguous; // If we have other flags later, we can make this a generic flag.
    109
      off_t off; // Offset from the original tensor. This could be different from dataof.
    110
      int stride[CCV_NNC_MAX_DIM_ALLOC]; /**< "stride" or, length */
    111
    } ccv_nnc_tensor_view_t;
    112
    113
    1.59M
    #define CCV_IS_TENSOR_VIEW(x) ((*(int*)(x)) & CCV_TENSOR_VIEW)
    114
    593k
    #define CCV_IS_TENSOR_MULTIVIEW(x) ((*(int*)(x928)) & CCV_TENSOR_MULTIVIEW)
    115
    16.8k
    #define CCV_IS_TENSOR_CONTIGUOUS(x) (!16.8kCCV_IS_TENSOR_VIEW16.8k(x) || (((ccv_nnc_tensor_view_t*)x)->contiguous == 1)7)
    116
    117
    #if CCV_NNC_TENSOR_TFB
    118
    857
    #define CCV_TENSOR_IS_DENSE_MATRIX(x) (((x) & 0xFFF) > 0) // has channel components
    119
    typedef struct {
    120
      int type;
    121
      int refcount;
    122
      ccv_numeric_data_t data;
    123
      off_t reserved0;
    124
      uintptr_t reserved1;
    125
      uint64_t reserved2;
    126
      uint64_t sig;
    127
      // This is used for toll-free bridging between ccv_dense_matrix_t and ccv_nnc_tensor_t
    128
      // Note that this is bigger than it is needed, we carefully structured this
    129
      // such that bit is reused as much, but still some wasted spaces.
    130
      union {
    131
        struct {
    132
          int resides;
    133
          int format;
    134
          int datatype;
    135
          int reserved3;
    136
          int rows;
    137
          int cols;
    138
          int channels;
    139
          int reserved4; /* This reserved bit need to be zero'ed such that later dim is not cared. */
    140
          int step;
    141
          union {
    142
            unsigned char u8;
    143
            int i32;
    144
            ccv_float16_t f16;
    145
            float f32;
    146
            int64_t i64;
    147
            double f64;
    148
            void* p;
    149
          } tb;
    150
        };
    151
        ccv_nnc_tensor_param_t info;
    152
      };
    153
    } ccv_dense_matrix_t;
    154
    #else
    155
    #define CCV_TENSOR_IS_DENSE_MATRIX(x) (0)
    156
    typedef struct {
    157
      int type;
    158
      int refcount;
    159
      uint64_t sig;
    160
      int cols;
    161
      int rows;
    162
      int step;
    163
      union {
    164
        unsigned char u8;
    165
        int i32;
    166
        ccv_float16_t f16;
    167
        float f32;
    168
        int64_t i64;
    169
        double f64;
    170
        void* p;
    171
      } tb;
    172
      ccv_numeric_data_t data;
    173
    } ccv_dense_matrix_t;
    174
    #endif
    175
    176
    #endif