From 7dc8321f4ab4365309c41f879c9fdd7f67105253 Mon Sep 17 00:00:00 2001 From: Wayne Mitchell Date: Fri, 10 Jun 2022 19:02:35 +0000 Subject: [PATCH] Additional fixes for sycl build. Note that CSR matrix memory location must be set correctly before calling hypre_CSRMatrixSetRownnz. --- src/parcsr_mv/par_csr_matop.c | 10 +++++----- src/parcsr_mv/par_csr_triplemat_device.c | 16 ++++++++++------ src/seq_mv/csr_spgemm_device_onemklsparse.c | 1 - 3 files changed, 15 insertions(+), 12 deletions(-) diff --git a/src/parcsr_mv/par_csr_matop.c b/src/parcsr_mv/par_csr_matop.c index 8473c3142..908c1e471 100644 --- a/src/parcsr_mv/par_csr_matop.c +++ b/src/parcsr_mv/par_csr_matop.c @@ -1175,6 +1175,7 @@ hypre_ParMatmul( hypre_ParCSRMatrix *A, hypre_CSRMatrixData(C_diag) = C_diag_data; hypre_CSRMatrixI(C_diag) = C_diag_i; hypre_CSRMatrixJ(C_diag) = C_diag_j; + hypre_CSRMatrixMemoryLocation(C_diag) = memory_location_C; hypre_CSRMatrixSetRownnz(C_diag); C_offd = hypre_ParCSRMatrixOffd(C); @@ -1186,10 +1187,9 @@ hypre_ParMatmul( hypre_ParCSRMatrix *A, hypre_CSRMatrixJ(C_offd) = C_offd_j; hypre_ParCSRMatrixColMapOffd(C) = col_map_offd_C; } + hypre_CSRMatrixMemoryLocation(C_offd) = memory_location_C; hypre_CSRMatrixSetRownnz(C_offd); - hypre_CSRMatrixMemoryLocation(C_diag) = memory_location_C; - hypre_CSRMatrixMemoryLocation(C_offd) = memory_location_C; /*----------------------------------------------------------------------- * Free various arrays @@ -4009,6 +4009,9 @@ hypre_ParTMatmul( hypre_ParCSRMatrix *A, hypre_ParCSRMatrixRowvalues(C) = NULL; hypre_ParCSRMatrixGetrowactive(C) = 0; + hypre_CSRMatrixMemoryLocation(hypre_ParCSRMatrixDiag(C)) = memory_location_C; + hypre_CSRMatrixMemoryLocation(hypre_ParCSRMatrixOffd(C)) = memory_location_C; + if (C_diag) { hypre_CSRMatrixSetRownnz(C_diag); @@ -4029,9 +4032,6 @@ hypre_ParTMatmul( hypre_ParCSRMatrix *A, hypre_ParCSRMatrixOffd(C) = C_tmp_offd; } - hypre_CSRMatrixMemoryLocation(hypre_ParCSRMatrixDiag(C)) = memory_location_C; - hypre_CSRMatrixMemoryLocation(hypre_ParCSRMatrixOffd(C)) = memory_location_C; - if (num_cols_offd_C) { HYPRE_Int jj_count_offd, nnz_offd; diff --git a/src/parcsr_mv/par_csr_triplemat_device.c b/src/parcsr_mv/par_csr_triplemat_device.c index a15953412..d67e2c312 100644 --- a/src/parcsr_mv/par_csr_triplemat_device.c +++ b/src/parcsr_mv/par_csr_triplemat_device.c @@ -940,12 +940,16 @@ hypre_ParCSRTMatMatPartialAddDevice( hypre_ParCSRCommPkg *comm_pkg, &num_cols_offd_C, &col_map_offd_C, &map_offd_to_C); #if defined(HYPRE_USING_SYCL) - HYPRE_ONEDPL_CALL( oneapi::dpl::lower_bound, - col_map_offd_C, - col_map_offd_C + num_cols_offd_C, - big_work, - big_work + Cext_offd_nnz, - oneapi::dpl::make_permutation_iterator(hypre_CSRMatrixJ(Cext), work) ); + /* WM: onedpl lower_bound currently does not accept zero length input */ + if (num_cols_offd_C > 0) + { + HYPRE_ONEDPL_CALL( oneapi::dpl::lower_bound, + col_map_offd_C, + col_map_offd_C + num_cols_offd_C, + big_work, + big_work + Cext_offd_nnz, + oneapi::dpl::make_permutation_iterator(hypre_CSRMatrixJ(Cext), work) ); + } HYPRE_ONEDPL_CALL( std::transform, oneapi::dpl::make_permutation_iterator(hypre_CSRMatrixJ(Cext), work), diff --git a/src/seq_mv/csr_spgemm_device_onemklsparse.c b/src/seq_mv/csr_spgemm_device_onemklsparse.c index 7b3c530bb..a15ef161d 100644 --- a/src/seq_mv/csr_spgemm_device_onemklsparse.c +++ b/src/seq_mv/csr_spgemm_device_onemklsparse.c @@ -31,7 +31,6 @@ hypreDevice_CSRSpGemmOnemklsparse(HYPRE_Int m, HYPRE_Int **d_jc_out, HYPRE_Complex **d_c_out) { - hypre_printf("WM: debug - using oneMKL spgemm\n"); std::int64_t *tmp_size1 = NULL, *tmp_size2, *nnzC = NULL; void *tmp_buffer1 = NULL; void *tmp_buffer2 = NULL;