| 1184 | template <typename FRAG_T, typename WORK_SOURCE_T, typename ASSIGN_OP, |
| 1185 | typename EDGE_OP, EdgeDirection ed> |
| 1186 | inline void ForEachEdgeCM(const Stream& stream, const FRAG_T& dev_frag, |
| 1187 | const WORK_SOURCE_T& ws, ASSIGN_OP assign_op, |
| 1188 | EDGE_OP op) { |
| 1189 | using vid_t = typename FRAG_T::vid_t; |
| 1190 | using vertex_t = typename FRAG_T::vertex_t; |
| 1191 | |
| 1192 | int grid_size, block_size; |
| 1193 | size_t size = ws.size(); |
| 1194 | if (size == 0) { |
| 1195 | return; |
| 1196 | } |
| 1197 | |
| 1198 | __calc_prefix_sum__<FRAG_T, WORK_SOURCE_T, ed>(stream, dev_frag, ws); |
| 1199 | |
| 1200 | auto calc_shmem_size = [] DEV_HOST(int block_size) -> int { |
| 1201 | using vid_t = typename FRAG_T::vid_t; |
| 1202 | using vertex_t = typename FRAG_T::vertex_t; |
| 1203 | using nbr_t = typename FRAG_T::nbr_t; |
| 1204 | using metadata_t = typename std::result_of<ASSIGN_OP&(vertex_t&)>::type; |
| 1205 | |
| 1206 | return block_size * (sizeof(VertexMetadata<vid_t, metadata_t>) + |
| 1207 | sizeof(const nbr_t*) + sizeof(vid_t)); |
| 1208 | }; |
| 1209 | ArrayView<size_t> row_offset_view( |
| 1210 | thrust::raw_pointer_cast(prefix_sum_.data()), size); |
| 1211 | |
| 1212 | auto lb_wrapper = [=] __device__() { |
| 1213 | LBCM<FRAG_T, WORK_SOURCE_T, ASSIGN_OP, EDGE_OP, ed>( |
| 1214 | dev_frag, ws, row_offset_view, assign_op, op); |
| 1215 | }; // NOLINT |
| 1216 | |
| 1217 | KernelSizing(grid_size, block_size, ws.size()); |
| 1218 | KernelWrapper<<<grid_size, block_size, calc_shmem_size(block_size), |
| 1219 | stream.cuda_stream()>>>(lb_wrapper); |
| 1220 | } |
| 1221 | |
| 1222 | template <typename FRAG_T, typename WORK_SOURCE_T, typename ASSIGN_OP, |
| 1223 | typename EDGE_OP, EdgeDirection ed> |
nothing calls this directly
no test coverage detected