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:
parent
850fd47d07
commit
8268b9f1e1
@ -1097,20 +1097,9 @@ HYPRE_IJMatrixPrint( HYPRE_IJMatrix matrix,
|
|||||||
|
|
||||||
void *object;
|
void *object;
|
||||||
HYPRE_IJMatrixGetObject(matrix, &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);
|
hypre_ParCSRMatrixPrintIJ(par_csr, 0, 0, filename);
|
||||||
|
|
||||||
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);
|
|
||||||
}
|
|
||||||
|
|
||||||
return hypre_error_flag;
|
return hypre_error_flag;
|
||||||
}
|
}
|
||||||
|
|||||||
@ -516,7 +516,6 @@ hypre_ParCSRMatrixRead( MPI_Comm comm,
|
|||||||
{
|
{
|
||||||
offd = hypre_CSRMatrixCreate(local_num_rows, 0, 0);
|
offd = hypre_CSRMatrixCreate(local_num_rows, 0, 0);
|
||||||
hypre_CSRMatrixInitialize_v2(offd, 0, HYPRE_MEMORY_HOST);
|
hypre_CSRMatrixInitialize_v2(offd, 0, HYPRE_MEMORY_HOST);
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
matrix = hypre_CTAlloc(hypre_ParCSRMatrix, 1, 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 HYPRE_Int base_j,
|
||||||
const char *filename )
|
const char *filename )
|
||||||
{
|
{
|
||||||
|
hypre_ParCSRMatrix *h_matrix;
|
||||||
|
|
||||||
MPI_Comm comm;
|
MPI_Comm comm;
|
||||||
HYPRE_BigInt first_row_index;
|
HYPRE_BigInt first_row_index;
|
||||||
HYPRE_BigInt first_col_diag;
|
HYPRE_BigInt first_col_diag;
|
||||||
@ -646,21 +647,33 @@ hypre_ParCSRMatrixPrintIJ( const hypre_ParCSRMatrix *matrix,
|
|||||||
HYPRE_Int num_nonzeros_offd;
|
HYPRE_Int num_nonzeros_offd;
|
||||||
HYPRE_BigInt ilower, iupper, jlower, jupper;
|
HYPRE_BigInt ilower, iupper, jlower, jupper;
|
||||||
|
|
||||||
|
HYPRE_MemoryLocation memory_location = hypre_ParCSRMatrixMemoryLocation((hypre_ParCSRMatrix*) matrix);
|
||||||
|
|
||||||
if (!matrix)
|
if (!matrix)
|
||||||
{
|
{
|
||||||
hypre_error_in_arg(1);
|
hypre_error_in_arg(1);
|
||||||
return hypre_error_flag;
|
return hypre_error_flag;
|
||||||
}
|
}
|
||||||
|
|
||||||
comm = hypre_ParCSRMatrixComm(matrix);
|
/* Create temporary matrix on host memory if needed */
|
||||||
first_row_index = hypre_ParCSRMatrixFirstRowIndex(matrix);
|
if (hypre_GetActualMemLocation(memory_location) == hypre_MEMORY_HOST)
|
||||||
first_col_diag = hypre_ParCSRMatrixFirstColDiag(matrix);
|
{
|
||||||
diag = hypre_ParCSRMatrixDiag(matrix);
|
h_matrix = (hypre_ParCSRMatrix *) matrix;
|
||||||
offd = hypre_ParCSRMatrixOffd(matrix);
|
}
|
||||||
col_map_offd = hypre_ParCSRMatrixColMapOffd(matrix);
|
else
|
||||||
num_rows = hypre_ParCSRMatrixNumRows(matrix);
|
{
|
||||||
row_starts = hypre_ParCSRMatrixRowStarts(matrix);
|
h_matrix = hypre_ParCSRMatrixClone_v2((hypre_ParCSRMatrix *) matrix, 1, HYPRE_MEMORY_HOST);
|
||||||
col_starts = hypre_ParCSRMatrixColStarts(matrix);
|
}
|
||||||
|
|
||||||
|
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_rank(comm, &myid);
|
||||||
hypre_MPI_Comm_size(comm, &num_procs);
|
hypre_MPI_Comm_size(comm, &num_procs);
|
||||||
|
|
||||||
@ -739,6 +752,12 @@ hypre_ParCSRMatrixPrintIJ( const hypre_ParCSRMatrix *matrix,
|
|||||||
|
|
||||||
fclose(file);
|
fclose(file);
|
||||||
|
|
||||||
|
/* Free temporary matrix */
|
||||||
|
if (hypre_GetActualMemLocation(memory_location) != hypre_MEMORY_HOST)
|
||||||
|
{
|
||||||
|
hypre_ParCSRMatrixDestroy(h_matrix);
|
||||||
|
}
|
||||||
|
|
||||||
return hypre_error_flag;
|
return hypre_error_flag;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@ -140,12 +140,8 @@ void runjob1( HYPRE_ParCSRMatrix parcsr_A,
|
|||||||
|
|
||||||
if (print_system)
|
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");
|
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++)
|
for (i = 0 ; i < rep; i++)
|
||||||
@ -196,12 +192,8 @@ void runjob1( HYPRE_ParCSRMatrix parcsr_A,
|
|||||||
|
|
||||||
if (print_system)
|
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");
|
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);
|
hypre_ParCSRMatrixDestroy(parcsr_B);
|
||||||
|
|||||||
@ -691,7 +691,6 @@ main( hypre_int argc,
|
|||||||
else
|
else
|
||||||
{
|
{
|
||||||
hypre_MGRBuildPDevice(parcsr_A, hypre_IntArrayData(CF_marker), coarse_pnts_global, 2, &P);
|
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");
|
hypre_ParCSRMatrixPrintIJ(P, 0, 0, "P_device");
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user