1 //------------------------------------------------------------------------------ 2 // GB_AxB_saxpy3_coarseGus_noM_phase1: symbolic coarse Gustavson, no mask 3 //------------------------------------------------------------------------------ 4 5 // SuiteSparse:GraphBLAS, Timothy A. Davis, (c) 2017-2021, All Rights Reserved. 6 // SPDX-License-Identifier: Apache-2.0 7 8 //------------------------------------------------------------------------------ 9 10 // Initially, Hf [...] < mark for all Hf. 11 // Hf [i] is set to mark when C(i,j) is found. 12 13 { 14 for (int64_t kk = kfirst ; kk <= klast ; kk++) 15 { 16 GB_GET_B_j ; // get B(:,j) 17 18 //---------------------------------------------------------------------- 19 // special cases when B(:,j) has zero or one entries 20 //---------------------------------------------------------------------- 21 22 #if ( GB_B_IS_SPARSE || GB_B_IS_HYPER ) 23 if (bjnz == 0) 24 { 25 Cp [kk] = 0 ; // C(:,j) is empty 26 continue ; 27 } 28 #if ( GB_A_IS_SPARSE ) 29 if (bjnz == 1) 30 { 31 GB_GET_B_kj_INDEX ; // get index k of entry B(k,j) 32 GB_GET_A_k ; // get A(:,k) 33 Cp [kk] = aknz ; // nnz (C (:,j)) = nnz (A (:,k)) 34 continue ; 35 } 36 #endif 37 #endif 38 39 //---------------------------------------------------------------------- 40 // count nnz in C(:,j) 41 //---------------------------------------------------------------------- 42 43 const int64_t f = (++mark) ; 44 int64_t cjnz = 0 ; 45 for ( ; pB < pB_end ; pB++) // scan B(:,j) 46 { 47 GB_GET_B_kj_INDEX ; // get index k of entry B(k,j) 48 GB_GET_A_k ; // get A(:,k) 49 // scan A(:,k) 50 for (int64_t pA = pA_start ; pA < pA_end ; pA++) 51 { 52 GB_GET_A_ik_INDEX ; // get index i of entry A(i,k) 53 if (Hf [i] != f) // if true, i is new 54 { 55 Hf [i] = f ; // mark C(i,j) as seen 56 cjnz++ ; // C(i,j) is a new entry 57 } 58 } 59 } 60 Cp [kk] = cjnz ; // save count of entries in C(:,j) 61 } 62 } 63 64