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

Function GB_AxB_dot2

deps/GraphBLAS/Source/GB_AxB_dot2.c:44–502  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

42#endif
43
44GB_PUBLIC
45GrB_Info GB_AxB_dot2 // C=A'*B or C<#M>=A'*B, dot product method
46(
47 GrB_Matrix C, // output matrix, static header
48 const bool C_iso, // true if C is iso
49 const GB_void *cscalar, // iso value of C
50 const GrB_Matrix M_in, // mask matrix for C<#M>=A'*B, may be NULL
51 const bool Mask_comp, // if true, use !M
52 const bool Mask_struct, // if true, use the only structure of M
53 const bool A_not_transposed, // if true, C=A*B, else C=A'*B
54 const GrB_Matrix A_in, // input matrix
55 const GrB_Matrix B_in, // input matrix
56 const GrB_Semiring semiring, // semiring that defines C=A*B
57 const bool flipxy, // if true, do z=fmult(b,a) vs fmult(a,b)
58 GB_Context Context
59)
60{
61
62 //--------------------------------------------------------------------------
63 // check inputs
64 //--------------------------------------------------------------------------
65
66 GrB_Info info ;
67
68 ASSERT (C != NULL && (C->static_header || GBNSTATIC)) ;
69 ASSERT_MATRIX_OK_OR_NULL (M_in, "M for dot A'*B", GB0) ;
70 ASSERT_MATRIX_OK (A_in, "A for dot A'*B", GB0) ;
71 ASSERT_MATRIX_OK (B_in, "B for dot A'*B", GB0) ;
72
73 ASSERT (!GB_ZOMBIES (M_in)) ;
74 ASSERT (GB_JUMBLED_OK (M_in)) ;
75 ASSERT (!GB_PENDING (M_in)) ;
76 ASSERT (!GB_ZOMBIES (A_in)) ;
77 ASSERT (!GB_JUMBLED (A_in)) ;
78 ASSERT (!GB_PENDING (A_in)) ;
79 ASSERT (!GB_ZOMBIES (B_in)) ;
80 ASSERT (!GB_JUMBLED (B_in)) ;
81 ASSERT (!GB_PENDING (B_in)) ;
82
83 ASSERT_SEMIRING_OK (semiring, "semiring for numeric A'*B", GB0) ;
84
85 struct GB_Matrix_opaque A2_header, B2_header, M2_header ;
86 GrB_Matrix M = NULL, M2 = NULL, A2 = NULL, B2 = NULL, A = NULL, B = NULL ;
87 GB_WERK_DECLARE (A_slice, int64_t) ;
88 GB_WERK_DECLARE (B_slice, int64_t) ;
89 GB_WERK_DECLARE (M_ek_slicing, int64_t) ;
90
91 // GB_AxB_saxpy punts to this dot2 method for for C=A*B, and in this case,
92 // A is bitmap or full, and B is hypersparse or sparse
93 bool A_is_full = GB_as_if_full (A_in) ;
94 bool B_is_full = GB_as_if_full (B_in) ;
95 bool A_bitmap_or_full = (GB_IS_BITMAP (A_in) || A_is_full) ;
96 bool B_bitmap_or_full = (GB_IS_BITMAP (B_in) || B_is_full) ;
97 ASSERT (GB_IMPLIES (A_not_transposed,
98 (GB_IS_BITMAP (A_in) || GB_IS_FULL (A_in)) &&
99 (GB_IS_SPARSE (B_in) || GB_IS_HYPERSPARSE (B_in)))) ;
100
101 //--------------------------------------------------------------------------

Callers 5

GB_AxB_dotFunction · 0.85
GB_AxB_saxpyFunction · 0.85
mexFunctionFunction · 0.85
adotb_complexFunction · 0.85
adotbFunction · 0.85

Calls 15

GB_as_if_fullFunction · 0.85
GB_hyper_shallowFunction · 0.85
GB_subrefFunction · 0.85
GB_nthreadsFunction · 0.85
GB_binop_patternFunction · 0.85
GB_psliceFunction · 0.85
GB_nvec_nonemptyFunction · 0.85
GB_sparsity_charFunction · 0.85
GB_sparsity_char_matrixFunction · 0.85
GB_new_bixFunction · 0.85
GB_debugify_mxmFunction · 0.85
GB_bitmap_M_scatterFunction · 0.85

Tested by

no test coverage detected