MCPcopy Create free account
hub / github.com/RedisGraph/RedisGraph / GB_AxB_dot

Function GB_AxB_dot

deps/GraphBLAS/Source/GB_AxB_dot.c:47–227  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

45#define GB_FREE_ALL ;
46
47GrB_Info GB_AxB_dot // dot product (multiple methods)
48(
49 GrB_Matrix C, // output matrix, static header
50 GrB_Matrix C_in, // input/output matrix, if done in-place
51 GrB_Matrix M, // optional mask matrix
52 const bool Mask_comp, // if true, use !M
53 const bool Mask_struct, // if true, use the only structure of M
54 const GrB_BinaryOp accum,
55 const GrB_Matrix A, // input matrix A
56 const GrB_Matrix B, // input matrix B
57 const GrB_Semiring semiring, // semiring that defines C=A*B
58 const bool flipxy, // if true, do z=fmult(b,a) vs fmult(a,b)
59 bool *mask_applied, // if true, mask was applied
60 bool *done_in_place, // if true, C_in was computed in-place
61 GB_Context Context
62)
63{
64
65 //--------------------------------------------------------------------------
66 // check inputs
67 //--------------------------------------------------------------------------
68
69 GrB_Info info ;
70 ASSERT (C != NULL && (C->static_header || GBNSTATIC)) ;
71
72 ASSERT_MATRIX_OK_OR_NULL (M, "M for dot A'*B", GB0) ;
73 ASSERT (!GB_PENDING (M)) ;
74 ASSERT (GB_JUMBLED_OK (M)) ;
75 ASSERT (!GB_ZOMBIES (M)) ;
76
77 ASSERT_MATRIX_OK (A, "A for dot A'*B", GB0) ;
78 GB_MATRIX_WAIT (A) ;
79 ASSERT (!GB_PENDING (A)) ;
80 ASSERT (!GB_JUMBLED (A)) ;
81 ASSERT (!GB_ZOMBIES (A)) ;
82
83 ASSERT_MATRIX_OK (B, "B for dot A'*B", GB0) ;
84 GB_MATRIX_WAIT (B) ;
85 ASSERT (!GB_PENDING (B)) ;
86 ASSERT (!GB_JUMBLED (B)) ;
87 ASSERT (!GB_ZOMBIES (B)) ;
88
89 ASSERT_SEMIRING_OK (semiring, "semiring for dot A'*B", GB0) ;
90 ASSERT_MATRIX_OK_OR_NULL (C_in, "C_in for dot A'*B", GB0) ;
91
92 //--------------------------------------------------------------------------
93 // determine if C is iso
94 //--------------------------------------------------------------------------
95
96 GrB_Type ztype = semiring->add->op->ztype ;
97 size_t zsize = ztype->size ;
98 GB_void cscalar [GB_VLA(zsize)] ;
99 bool C_iso = GB_iso_AxB (cscalar, A, B, A->vlen, semiring, flipxy, false) ;
100
101 if (C_iso)
102 {
103 // revise the method if A and B are both iso and full
104 if (A->iso && GB_as_if_full (A) && B->iso && GB_as_if_full (B))

Callers 1

GB_AxB_metaFunction · 0.85

Calls 15

GB_iso_AxBFunction · 0.85
GB_as_if_fullFunction · 0.85
GB_new_bixFunction · 0.85
GB_AxB_dot4_controlFunction · 0.85
GB_debugify_mxmFunction · 0.85
GB_AxB_dot4Function · 0.85
GB_AxB_dot3_controlFunction · 0.85
GB_hyper_hash_buildFunction · 0.85
GB_sparsity_char_matrixFunction · 0.85
GB_sparsityFunction · 0.85
GB_AxB_dot3_cuda_branchFunction · 0.85

Tested by

no test coverage detected