hypre_ParCSRMatrixPrintIJ on device (#655)

hypre_ParCSRMatrixPrintIJ works for matrices living on the device w/o the need of UVM support. A explicit copy is to host memory is performed in this function prior to printing the files.
This commit is contained in:
Victor A. Paludetto Magri 2022-06-22 17:49:57 -07:00 committed by GitHub
parent 850fd47d07
commit 8268b9f1e1
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
4 changed files with 33 additions and 34 deletions

View File

@ -1097,20 +1097,9 @@ HYPRE_IJMatrixPrint( HYPRE_IJMatrix matrix,
void *object;
HYPRE_IJMatrixGetObject(matrix, &object);
HYPRE_ParCSRMatrix par_csr = (HYPRE_ParCSRMatrix) object;
hypre_ParCSRMatrix *par_csr = (hypre_ParCSRMatrix*) object;
HYPRE_MemoryLocation memory_location = hypre_IJMatrixMemoryLocation(matrix);
if ( hypre_GetActualMemLocation(memory_location) == hypre_MEMORY_HOST )
{
hypre_ParCSRMatrixPrintIJ(par_csr, 0, 0, filename);
}
else
{
HYPRE_ParCSRMatrix par_csr2 = hypre_ParCSRMatrixClone_v2(par_csr, 1, HYPRE_MEMORY_HOST);
hypre_ParCSRMatrixPrintIJ(par_csr2, 0, 0, filename);
hypre_ParCSRMatrixDestroy(par_csr2);
}
hypre_ParCSRMatrixPrintIJ(par_csr, 0, 0, filename);
return hypre_error_flag;
}

View File

@ -516,7 +516,6 @@ hypre_ParCSRMatrixRead( MPI_Comm comm,
{
offd = hypre_CSRMatrixCreate(local_num_rows, 0, 0);
hypre_CSRMatrixInitialize_v2(offd, 0, HYPRE_MEMORY_HOST);
}
matrix = hypre_CTAlloc(hypre_ParCSRMatrix, 1, HYPRE_MEMORY_HOST);
@ -624,6 +623,8 @@ hypre_ParCSRMatrixPrintIJ( const hypre_ParCSRMatrix *matrix,
const HYPRE_Int base_j,
const char *filename )
{
hypre_ParCSRMatrix *h_matrix;
MPI_Comm comm;
HYPRE_BigInt first_row_index;
HYPRE_BigInt first_col_diag;
@ -646,21 +647,33 @@ hypre_ParCSRMatrixPrintIJ( const hypre_ParCSRMatrix *matrix,
HYPRE_Int num_nonzeros_offd;
HYPRE_BigInt ilower, iupper, jlower, jupper;
HYPRE_MemoryLocation memory_location = hypre_ParCSRMatrixMemoryLocation((hypre_ParCSRMatrix*) matrix);
if (!matrix)
{
hypre_error_in_arg(1);
return hypre_error_flag;
}
comm = hypre_ParCSRMatrixComm(matrix);
first_row_index = hypre_ParCSRMatrixFirstRowIndex(matrix);
first_col_diag = hypre_ParCSRMatrixFirstColDiag(matrix);
diag = hypre_ParCSRMatrixDiag(matrix);
offd = hypre_ParCSRMatrixOffd(matrix);
col_map_offd = hypre_ParCSRMatrixColMapOffd(matrix);
num_rows = hypre_ParCSRMatrixNumRows(matrix);
row_starts = hypre_ParCSRMatrixRowStarts(matrix);
col_starts = hypre_ParCSRMatrixColStarts(matrix);
/* Create temporary matrix on host memory if needed */
if (hypre_GetActualMemLocation(memory_location) == hypre_MEMORY_HOST)
{
h_matrix = (hypre_ParCSRMatrix *) matrix;
}
else
{
h_matrix = hypre_ParCSRMatrixClone_v2((hypre_ParCSRMatrix *) matrix, 1, HYPRE_MEMORY_HOST);
}
comm = hypre_ParCSRMatrixComm(h_matrix);
first_row_index = hypre_ParCSRMatrixFirstRowIndex(h_matrix);
first_col_diag = hypre_ParCSRMatrixFirstColDiag(h_matrix);
diag = hypre_ParCSRMatrixDiag(h_matrix);
offd = hypre_ParCSRMatrixOffd(h_matrix);
col_map_offd = hypre_ParCSRMatrixColMapOffd(h_matrix);
num_rows = hypre_ParCSRMatrixNumRows(h_matrix);
row_starts = hypre_ParCSRMatrixRowStarts(h_matrix);
col_starts = hypre_ParCSRMatrixColStarts(h_matrix);
hypre_MPI_Comm_rank(comm, &myid);
hypre_MPI_Comm_size(comm, &num_procs);
@ -739,6 +752,12 @@ hypre_ParCSRMatrixPrintIJ( const hypre_ParCSRMatrix *matrix,
fclose(file);
/* Free temporary matrix */
if (hypre_GetActualMemLocation(memory_location) != hypre_MEMORY_HOST)
{
hypre_ParCSRMatrixDestroy(h_matrix);
}
return hypre_error_flag;
}

View File

@ -140,12 +140,8 @@ void runjob1( HYPRE_ParCSRMatrix parcsr_A,
if (print_system)
{
if (!parcsr_A_host)
{
parcsr_A_host = hypre_ParCSRMatrixClone_v2(parcsr_A, 1, HYPRE_MEMORY_HOST);
}
sprintf(fname, "%s/%s", file_dir, "IJ.out.A");
hypre_ParCSRMatrixPrintIJ(parcsr_A_host, 0, 0, fname);
hypre_ParCSRMatrixPrintIJ(parcsr_A, 0, 0, fname);
}
for (i = 0 ; i < rep; i++)
@ -196,12 +192,8 @@ void runjob1( HYPRE_ParCSRMatrix parcsr_A,
if (print_system)
{
if (!parcsr_B_host2)
{
parcsr_B_host2 = hypre_ParCSRMatrixClone_v2(parcsr_B, 1, HYPRE_MEMORY_HOST);
}
sprintf(fname, "%s/%s", file_dir, "IJ.out.B");
hypre_ParCSRMatrixPrintIJ(parcsr_B_host2, 0, 0, fname);
hypre_ParCSRMatrixPrintIJ(parcsr_B, 0, 0, fname);
}
hypre_ParCSRMatrixDestroy(parcsr_B);

View File

@ -691,7 +691,6 @@ main( hypre_int argc,
else
{
hypre_MGRBuildPDevice(parcsr_A, hypre_IntArrayData(CF_marker), coarse_pnts_global, 2, &P);
hypre_ParCSRMatrixMigrate(P, HYPRE_MEMORY_HOST);
hypre_ParCSRMatrixPrintIJ(P, 0, 0, "P_device");
}
#endif