File: GB_nnz.h

package info (click to toggle)
suitesparse-graphblas 7.4.0%2Bdfsg-2
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid, trixie
  • size: 67,112 kB
  • sloc: ansic: 1,072,243; cpp: 8,081; sh: 512; makefile: 506; asm: 369; python: 125; awk: 10
file content (57 lines) | stat: -rw-r--r-- 2,226 bytes parent folder | download | duplicates (3)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
//------------------------------------------------------------------------------
// GB_nnz.h: number of entries in a matrix
//------------------------------------------------------------------------------

// SuiteSparse:GraphBLAS, Timothy A. Davis, (c) 2017-2022, All Rights Reserved.
// SPDX-License-Identifier: Apache-2.0

//------------------------------------------------------------------------------

#ifndef GB_NNZ_H
#define GB_NNZ_H

#ifdef GB_CUDA_KERNEL

    //--------------------------------------------------------------------------
    // create static inline device functions for the GPU
    //--------------------------------------------------------------------------

    #include "GB_int64_multiply.c"
    #include "GB_nnz_full_template.c"
    #include "GB_nnz_held_template.c"
    #include "GB_nnz_max_template.c"
    #include "GB_nnz_template.c"

#else

    //--------------------------------------------------------------------------
    // declare the regular functions for the CPU
    //--------------------------------------------------------------------------

    // GB_nnz(A): # of entries in any matrix: includes zombies for hypersparse
    // and sparse, but excluding entries flagged as not present in a bitmap.
    GB_PUBLIC int64_t GB_nnz (GrB_Matrix A) ;

    // GB_nnz_full(A): # of entries in A if A is full
    GB_PUBLIC int64_t GB_nnz_full (GrB_Matrix A) ;

    // GB_nnz_held(A): # of entries held in the data structure, including
    // zombies and all entries in a bitmap.  For hypersparse, sparse, and full,
    // GB_nnz(A) and GB_nnz_held(A) are the same.  For bitmap, GB_nnz_held(A)
    // is the same as the # of entries in a full matrix (# rows times #
    // columns).
    GB_PUBLIC int64_t GB_nnz_held (GrB_Matrix A) ;

    // GB_nnz_max(A): max number of entries that can be held in a matrix.
    // For iso full matrices, GB_nnz_max(A) can be less than GB_nnz_full(A),
    // and is typically 1.
    GB_PUBLIC int64_t GB_nnz_max (GrB_Matrix A) ;

#endif

// Upper bound on nnz(A) when the matrix has zombies and pending tuples;
// does not need GB_MATRIX_WAIT(A) first.
#define GB_NNZ_UPPER_BOUND(A) \
    (GB_nnz ((GrB_Matrix) A) - (A)->nzombies + GB_Pending_n (A))

#endif