Bitwise reproducibility#
Some routines do not produce deterministic results from run to run. This is typically the case when HIP atomics are used. This page catalogues the run-to-run reproducibility of each routine.
Sparse level 1 functions#
Function name |
yes |
no |
---|---|---|
x |
||
x |
||
x |
||
x |
||
x |
||
x |
||
x |
Sparse level 2 functions#
Function name |
yes |
no |
---|---|---|
x |
||
x |
||
x |
||
x |
||
x |
||
x |
||
x |
||
x |
||
x |
||
x |
||
x |
||
x |
||
x |
||
x |
||
x |
||
x |
||
x |
||
x |
||
x |
||
x |
||
x |
||
x |
||
x |
||
x |
The reproducibility of rocsparse_Xbsrmv()
, rocsparse_Xbsrxmv()
,
rocsparse_Xcoomv()
, rocsparse_Xcsrmv()
,
rocsparse_Xellmv()
, rocsparse_Xhybmv()
,
and rocsparse_Xgebsrmv()
is more complicated, depending on whether A
is transposed or not. See the chart below to determine whether these routines are deterministic.
Routine |
A non-transpose |
A transpose |
||
---|---|---|---|---|
Yes |
No |
Yes |
No |
|
rocsparse_Xbsrmv |
x |
N/A |
N/A |
|
rocsparse_Xbsrxmv |
x |
N/A |
N/A |
|
rocsparse_Xcoomv |
x |
x |
||
rocsparse_Xcsrmv |
x |
x |
||
rocsparse_Xcsrmv (info != NULL) |
x |
x |
||
rocsparse_Xellmv |
x |
x |
||
rocsparse_Xhybmv |
x |
x |
||
rocsparse_Xgebsrmv |
x |
N/A |
N/A |
Sparse level 3 functions#
Function name |
yes |
no |
---|---|---|
x |
||
x |
||
x |
||
x |
||
x |
||
x |
||
x |
||
x |
||
x |
||
x |
||
x |
The reproducibility of rocsparse_Xbsrmm()
,
rocsparse_Xgebsrmm()
, and
rocsparse_Xcsrmm()
is more complicated, depending on
whether A is transposed or not. See the chart below to determine whether these routines
are deterministic.
Routine |
A non-transpose |
A transpose |
||
---|---|---|---|---|
Yes |
No |
Yes |
No |
|
rocsparse_Xbsrmm |
x |
N/A |
N/A |
|
rocsparse_Xgebsrmm |
x |
N/A |
N/A |
|
rocsparse_Xcsrmm |
x |
x |
Sparse extra functions#
Function name |
yes |
no |
---|---|---|
x |
||
x |
||
x |
||
x |
||
x |
||
x |
||
x |
||
x |
||
x |
||
x |
||
x |
||
x |
Preconditioner functions#
Function name |
yes |
no |
---|---|---|
x |
||
x |
||
x |
||
x |
||
x |
||
x |
||
x |
||
x |
||
x |
||
x |
||
x |
||
x |
||
x |
||
x |
||
x |
||
x |
||
x |
||
x |
||
x |
||
x |
||
x |
||
x |
||
x |
||
x |
||
x |
||
x |
||
x |
||
x |
||
x |
||
x |
||
x |
||
x |
||
x |
||
x |
||
x |
||
x |
||
x |
Conversion functions#
Function name |
yes |
no |
---|---|---|
x |
||
x |
||
x |
||
x |
||
x |
||
x |
||
x |
||
x |
||
x |
||
x |
||
x |
||
x |
||
x |
||
x |
||
x |
||
x |
||
x |
||
x |
||
x |
||
x |
||
x |
||
x |
||
x |
||
x |
||
x |
||
x |
||
x |
||
x |
||
x |
||
x |
||
x |
||
x |
||
x |
||
x |
||
x |
||
x |
||
x |
||
x |
||
x |
||
x |
||
x |
||
x |
||
x |
||
x |
||
x |
||
x |
||
x |
||
x |
||
x |
||
x |
||
x |
||
x |
||
x |
||
x |
Reordering functions#
Function name |
yes |
no |
---|---|---|
x |
Utility functions#
Function name |
yes |
no |
---|---|---|
x |
||
x |
||
x |
||
x |
||
x |
||
x |
||
x |
||
x |
||
x |
||
x |
||
x |
||
x |
||
x |
||
x |
Sparse generic functions#
Function name |
yes |
no |
---|---|---|
x |
||
x |
||
x |
||
x |
||
x |
||
x |
||
x |
||
x |
||
x |
||
x |
||
x |
||
x |
||
x |
||
x |
||
x |
||
x |
||
x |
||
x |
||
x |
||
x |
The reproducibility of rocsparse_spmv()
and rocsparse_v2_spmv()
is more complicated because these generic routines
support multiple sparse matrix formats and algorithms. See the chart below to determine whether
a given algorithm is deterministic.
Bit-wise reproducibility of SpMV/v2_SpMV |
||||
---|---|---|---|---|
Algorithm |
A non-transpose |
A transpose |
||
Yes |
No |
Yes |
No |
|
rocsparse_spmv_alg_csr_stream |
x |
x |
||
rocsparse_spmv_alg_csr_rowsplit |
x |
x |
||
rocsparse_spmv_alg_csr_adaptive |
x |
x |
||
rocsparse_spmv_alg_csr_lrb |
x |
x |
||
rocsparse_spmv_alg_csr_stream (CSC FORMAT) |
x |
x |
||
rocsparse_spmv_alg_csr_rowsplit (CSC FORMAT) |
x |
x |
||
rocsparse_spmv_alg_csr_adaptive (CSC FORMAT) |
x |
x |
||
rocsparse_spmv_alg_csr_lrb (CSC FORMAT) |
x |
x |
||
rocsparse_spmv_alg_coo |
x |
x |
||
rocsparse_spmv_alg_coo_atomic |
x |
x |
||
rocsparse_spmv_alg_ell |
x |
N/A |
N/A |
|
rocsparse_spmv_alg_bsr |
x |
N/A |
N/A |
The reproducibility of rocsparse_spmm()
is more complicated because this generic routine
supports multiple sparse matrix formats and algorithms. See the chart below to determine whether
a given algorithm is deterministic.
Bit-wise reproducibility of SpMM |
||||
---|---|---|---|---|
Algorithm |
A non-transpose |
A transpose |
||
Yes |
No |
Yes |
No |
|
rocsparse_spmm_alg_csr |
x |
x |
||
rocsparse_spmm_alg_csr_row_split |
x |
x |
||
rocsparse_spmm_alg_csr_nnz_split |
x |
x |
||
rocsparse_spmm_alg_csr_merge_path |
x |
x |
||
rocsparse_spmm_alg_csr (CSC FORMAT) |
x |
x |
||
rocsparse_spmm_alg_csr_row_split (CSC FORMAT) |
x |
x |
||
rocsparse_spmm_alg_csr_nnz_split (CSC FORMAT) |
x |
x |
||
rocsparse_spmm_alg_csr_merge_path (CSC FORMAT) |
x |
x |
||
rocsparse_spmm_alg_coo_segmented |
x |
x |
||
rocsparse_spmm_alg_coo_atomic |
x |
x |
||
rocsparse_spmm_alg_coo_segmented_atomic |
x |
x |
||
rocsparse_spmm_alg_bell |
x |
N/A |
N/A |
|
rocsparse_spmm_alg_bsr |
x |
N/A |
N/A |