From e9bf781470cca233778d6364cd5393c8c52bd1e9 Mon Sep 17 00:00:00 2001 From: Evgeny Mankov Date: Fri, 8 Dec 2023 13:36:02 +0100 Subject: [PATCH] [HIPIFY][#675][#677][SOLVER][feature] `cuSOLVER` support - Step 28 - Functions (DN) + `cusolverDn(S|D|C|Z)sytrf_(bufferSize)?` are `SUPPORTED` by `hipSOLVER` only + [NOTE] `rocsolver_(s|d|c|z)sytrf` have a harness of other HIP and ROC API calls, thus `UNSUPPORTED` + Updated `SOLVER` synthetic tests, the regenerated `hipify-perl`, and `SOLVER` `CUDA2HIP` documentation --- bin/hipify-perl | 16 ++++++++ docs/tables/CUSOLVER_API_supported_by_HIP.md | 8 ++++ .../CUSOLVER_API_supported_by_HIP_and_ROC.md | 8 ++++ docs/tables/CUSOLVER_API_supported_by_ROC.md | 8 ++++ src/CUDA2HIP_SOLVER_API_functions.cpp | 18 +++++++++ .../synthetic/libraries/cusolver2hipsolver.cu | 40 +++++++++++++++++++ 6 files changed, 98 insertions(+) diff --git a/bin/hipify-perl b/bin/hipify-perl index 5c6bf3c2..58b4dce6 100755 --- a/bin/hipify-perl +++ b/bin/hipify-perl @@ -1084,6 +1084,8 @@ my %experimental_funcs = ( "cusolverDnZunmqr" => "6.1.0", "cusolverDnZungqr_bufferSize" => "6.1.0", "cusolverDnZungqr" => "6.1.0", + "cusolverDnZsytrf_bufferSize" => "6.1.0", + "cusolverDnZsytrf" => "6.1.0", "cusolverDnZpotrsBatched" => "6.1.0", "cusolverDnZpotrs" => "6.1.0", "cusolverDnZpotri_bufferSize" => "6.1.0", @@ -1100,6 +1102,8 @@ my %experimental_funcs = ( "cusolverDnZZgesv" => "6.1.0", "cusolverDnZZgels_bufferSize" => "6.1.0", "cusolverDnZZgels" => "6.1.0", + "cusolverDnSsytrf_bufferSize" => "6.1.0", + "cusolverDnSsytrf" => "6.1.0", "cusolverDnSpotrsBatched" => "6.1.0", "cusolverDnSpotrs" => "6.1.0", "cusolverDnSpotri_bufferSize" => "6.1.0", @@ -1123,6 +1127,8 @@ my %experimental_funcs = ( "cusolverDnSSgels" => "6.1.0", "cusolverDnHandle_t" => "6.1.0", "cusolverDnGetStream" => "6.1.0", + "cusolverDnDsytrf_bufferSize" => "6.1.0", + "cusolverDnDsytrf" => "6.1.0", "cusolverDnDpotrsBatched" => "6.1.0", "cusolverDnDpotrs" => "6.1.0", "cusolverDnDpotri_bufferSize" => "6.1.0", @@ -1148,6 +1154,8 @@ my %experimental_funcs = ( "cusolverDnCunmqr" => "6.1.0", "cusolverDnCungqr_bufferSize" => "6.1.0", "cusolverDnCungqr" => "6.1.0", + "cusolverDnCsytrf_bufferSize" => "6.1.0", + "cusolverDnCsytrf" => "6.1.0", "cusolverDnCreate" => "6.1.0", "cusolverDnCpotrsBatched" => "6.1.0", "cusolverDnCpotrs" => "6.1.0", @@ -1337,6 +1345,8 @@ sub experimentalSubstitutions { subst("cusolverDnCpotrs", "hipsolverDnCpotrs", "library"); subst("cusolverDnCpotrsBatched", "hipsolverDnCpotrsBatched", "library"); subst("cusolverDnCreate", "hipsolverDnCreate", "library"); + subst("cusolverDnCsytrf", "hipsolverDnCsytrf", "library"); + subst("cusolverDnCsytrf_bufferSize", "hipsolverDnCsytrf_bufferSize", "library"); subst("cusolverDnCungqr", "hipsolverDnCungqr", "library"); subst("cusolverDnCungqr_bufferSize", "hipsolverDnCungqr_bufferSize", "library"); subst("cusolverDnCunmqr", "hipsolverDnCunmqr", "library"); @@ -1362,6 +1372,8 @@ sub experimentalSubstitutions { subst("cusolverDnDpotri_bufferSize", "hipsolverDnDpotri_bufferSize", "library"); subst("cusolverDnDpotrs", "hipsolverDnDpotrs", "library"); subst("cusolverDnDpotrsBatched", "hipsolverDnDpotrsBatched", "library"); + subst("cusolverDnDsytrf", "hipsolverDnDsytrf", "library"); + subst("cusolverDnDsytrf_bufferSize", "hipsolverDnDsytrf_bufferSize", "library"); subst("cusolverDnGetStream", "hipsolverGetStream", "library"); subst("cusolverDnSSgels", "hipsolverDnSSgels", "library"); subst("cusolverDnSSgels_bufferSize", "hipsolverDnSSgels_bufferSize", "library"); @@ -1384,6 +1396,8 @@ sub experimentalSubstitutions { subst("cusolverDnSpotri_bufferSize", "hipsolverDnSpotri_bufferSize", "library"); subst("cusolverDnSpotrs", "hipsolverDnSpotrs", "library"); subst("cusolverDnSpotrsBatched", "hipsolverDnSpotrsBatched", "library"); + subst("cusolverDnSsytrf", "hipsolverDnSsytrf", "library"); + subst("cusolverDnSsytrf_bufferSize", "hipsolverDnSsytrf_bufferSize", "library"); subst("cusolverDnZZgels", "hipsolverDnZZgels", "library"); subst("cusolverDnZZgels_bufferSize", "hipsolverDnZZgels_bufferSize", "library"); subst("cusolverDnZZgesv", "hipsolverDnZZgesv", "library"); @@ -1400,6 +1414,8 @@ sub experimentalSubstitutions { subst("cusolverDnZpotri_bufferSize", "hipsolverDnZpotri_bufferSize", "library"); subst("cusolverDnZpotrs", "hipsolverDnZpotrs", "library"); subst("cusolverDnZpotrsBatched", "hipsolverDnZpotrsBatched", "library"); + subst("cusolverDnZsytrf", "hipsolverDnZsytrf", "library"); + subst("cusolverDnZsytrf_bufferSize", "hipsolverDnZsytrf_bufferSize", "library"); subst("cusolverDnZungqr", "hipsolverDnZungqr", "library"); subst("cusolverDnZungqr_bufferSize", "hipsolverDnZungqr_bufferSize", "library"); subst("cusolverDnZunmqr", "hipsolverDnZunmqr", "library"); diff --git a/docs/tables/CUSOLVER_API_supported_by_HIP.md b/docs/tables/CUSOLVER_API_supported_by_HIP.md index 950caf2a..fe9ef362 100644 --- a/docs/tables/CUSOLVER_API_supported_by_HIP.md +++ b/docs/tables/CUSOLVER_API_supported_by_HIP.md @@ -141,6 +141,8 @@ |`cusolverDnCpotrsBatched`|9.1| | | |`hipsolverDnCpotrsBatched`|5.1.0| | | |6.1.0| |`cusolverDnCreate`| | | | |`hipsolverDnCreate`|5.1.0| | | |6.1.0| |`cusolverDnCreateParams`|11.0| | | | | | | | | | +|`cusolverDnCsytrf`| | | | |`hipsolverDnCsytrf`|5.1.0| | | |6.1.0| +|`cusolverDnCsytrf_bufferSize`| | | | |`hipsolverDnCsytrf_bufferSize`|5.1.0| | | |6.1.0| |`cusolverDnCungqr`|8.0| | | |`hipsolverDnCungqr`|5.1.0| | | |6.1.0| |`cusolverDnCungqr_bufferSize`|8.0| | | |`hipsolverDnCungqr_bufferSize`|5.1.0| | | |6.1.0| |`cusolverDnCunmqr`| | | | |`hipsolverDnCunmqr`|5.1.0| | | |6.1.0| @@ -185,6 +187,8 @@ |`cusolverDnDpotri_bufferSize`|10.1| | | |`hipsolverDnDpotri_bufferSize`|5.1.0| | | |6.1.0| |`cusolverDnDpotrs`| | | | |`hipsolverDnDpotrs`|5.1.0| | | |6.1.0| |`cusolverDnDpotrsBatched`|9.1| | | |`hipsolverDnDpotrsBatched`|5.1.0| | | |6.1.0| +|`cusolverDnDsytrf`| | | | |`hipsolverDnDsytrf`|5.1.0| | | |6.1.0| +|`cusolverDnDsytrf_bufferSize`| | | | |`hipsolverDnDsytrf_bufferSize`|5.1.0| | | |6.1.0| |`cusolverDnGetDeterministicMode`|12.2| | | | | | | | | | |`cusolverDnGetStream`| | | | |`hipsolverGetStream`|4.5.0| | | |6.1.0| |`cusolverDnIRSInfosCreate`|10.2| | | | | | | | | | @@ -249,6 +253,8 @@ |`cusolverDnSpotri_bufferSize`|10.1| | | |`hipsolverDnSpotri_bufferSize`|5.1.0| | | |6.1.0| |`cusolverDnSpotrs`| | | | |`hipsolverDnSpotrs`|5.1.0| | | |6.1.0| |`cusolverDnSpotrsBatched`|9.1| | | |`hipsolverDnSpotrsBatched`|5.1.0| | | |6.1.0| +|`cusolverDnSsytrf`| | | | |`hipsolverDnSsytrf`|5.1.0| | | |6.1.0| +|`cusolverDnSsytrf_bufferSize`| | | | |`hipsolverDnSsytrf_bufferSize`|5.1.0| | | |6.1.0| |`cusolverDnXgetrf`|11.1| | | | | | | | | | |`cusolverDnXgetrf_bufferSize`|11.1| | | | | | | | | | |`cusolverDnXgetrs`|11.1| | | | | | | | | | @@ -289,6 +295,8 @@ |`cusolverDnZpotri_bufferSize`|10.1| | | |`hipsolverDnZpotri_bufferSize`|5.1.0| | | |6.1.0| |`cusolverDnZpotrs`| | | | |`hipsolverDnZpotrs`|5.1.0| | | |6.1.0| |`cusolverDnZpotrsBatched`|9.1| | | |`hipsolverDnZpotrsBatched`|5.1.0| | | |6.1.0| +|`cusolverDnZsytrf`| | | | |`hipsolverDnZsytrf`|5.1.0| | | |6.1.0| +|`cusolverDnZsytrf_bufferSize`| | | | |`hipsolverDnZsytrf_bufferSize`|5.1.0| | | |6.1.0| |`cusolverDnZungqr`|8.0| | | |`hipsolverDnZungqr`|5.1.0| | | |6.1.0| |`cusolverDnZungqr_bufferSize`|8.0| | | |`hipsolverDnZungqr_bufferSize`|5.1.0| | | |6.1.0| |`cusolverDnZunmqr`| | | | |`hipsolverDnZunmqr`|5.1.0| | | |6.1.0| diff --git a/docs/tables/CUSOLVER_API_supported_by_HIP_and_ROC.md b/docs/tables/CUSOLVER_API_supported_by_HIP_and_ROC.md index a5fc4bd7..c0ae17c7 100644 --- a/docs/tables/CUSOLVER_API_supported_by_HIP_and_ROC.md +++ b/docs/tables/CUSOLVER_API_supported_by_HIP_and_ROC.md @@ -141,6 +141,8 @@ |`cusolverDnCpotrsBatched`|9.1| | | |`hipsolverDnCpotrsBatched`|5.1.0| | | |6.1.0| | | | | | | |`cusolverDnCreate`| | | | |`hipsolverDnCreate`|5.1.0| | | |6.1.0|`rocblas_create_handle`| | | | | | |`cusolverDnCreateParams`|11.0| | | | | | | | | | | | | | | | +|`cusolverDnCsytrf`| | | | |`hipsolverDnCsytrf`|5.1.0| | | |6.1.0| | | | | | | +|`cusolverDnCsytrf_bufferSize`| | | | |`hipsolverDnCsytrf_bufferSize`|5.1.0| | | |6.1.0| | | | | | | |`cusolverDnCungqr`|8.0| | | |`hipsolverDnCungqr`|5.1.0| | | |6.1.0| | | | | | | |`cusolverDnCungqr_bufferSize`|8.0| | | |`hipsolverDnCungqr_bufferSize`|5.1.0| | | |6.1.0| | | | | | | |`cusolverDnCunmqr`| | | | |`hipsolverDnCunmqr`|5.1.0| | | |6.1.0| | | | | | | @@ -185,6 +187,8 @@ |`cusolverDnDpotri_bufferSize`|10.1| | | |`hipsolverDnDpotri_bufferSize`|5.1.0| | | |6.1.0| | | | | | | |`cusolverDnDpotrs`| | | | |`hipsolverDnDpotrs`|5.1.0| | | |6.1.0| | | | | | | |`cusolverDnDpotrsBatched`|9.1| | | |`hipsolverDnDpotrsBatched`|5.1.0| | | |6.1.0| | | | | | | +|`cusolverDnDsytrf`| | | | |`hipsolverDnDsytrf`|5.1.0| | | |6.1.0| | | | | | | +|`cusolverDnDsytrf_bufferSize`| | | | |`hipsolverDnDsytrf_bufferSize`|5.1.0| | | |6.1.0| | | | | | | |`cusolverDnGetDeterministicMode`|12.2| | | | | | | | | | | | | | | | |`cusolverDnGetStream`| | | | |`hipsolverGetStream`|4.5.0| | | |6.1.0|`rocblas_get_stream`| | | | | | |`cusolverDnIRSInfosCreate`|10.2| | | | | | | | | | | | | | | | @@ -249,6 +253,8 @@ |`cusolverDnSpotri_bufferSize`|10.1| | | |`hipsolverDnSpotri_bufferSize`|5.1.0| | | |6.1.0| | | | | | | |`cusolverDnSpotrs`| | | | |`hipsolverDnSpotrs`|5.1.0| | | |6.1.0| | | | | | | |`cusolverDnSpotrsBatched`|9.1| | | |`hipsolverDnSpotrsBatched`|5.1.0| | | |6.1.0| | | | | | | +|`cusolverDnSsytrf`| | | | |`hipsolverDnSsytrf`|5.1.0| | | |6.1.0| | | | | | | +|`cusolverDnSsytrf_bufferSize`| | | | |`hipsolverDnSsytrf_bufferSize`|5.1.0| | | |6.1.0| | | | | | | |`cusolverDnXgetrf`|11.1| | | | | | | | | | | | | | | | |`cusolverDnXgetrf_bufferSize`|11.1| | | | | | | | | | | | | | | | |`cusolverDnXgetrs`|11.1| | | | | | | | | | | | | | | | @@ -289,6 +295,8 @@ |`cusolverDnZpotri_bufferSize`|10.1| | | |`hipsolverDnZpotri_bufferSize`|5.1.0| | | |6.1.0| | | | | | | |`cusolverDnZpotrs`| | | | |`hipsolverDnZpotrs`|5.1.0| | | |6.1.0| | | | | | | |`cusolverDnZpotrsBatched`|9.1| | | |`hipsolverDnZpotrsBatched`|5.1.0| | | |6.1.0| | | | | | | +|`cusolverDnZsytrf`| | | | |`hipsolverDnZsytrf`|5.1.0| | | |6.1.0| | | | | | | +|`cusolverDnZsytrf_bufferSize`| | | | |`hipsolverDnZsytrf_bufferSize`|5.1.0| | | |6.1.0| | | | | | | |`cusolverDnZungqr`|8.0| | | |`hipsolverDnZungqr`|5.1.0| | | |6.1.0| | | | | | | |`cusolverDnZungqr_bufferSize`|8.0| | | |`hipsolverDnZungqr_bufferSize`|5.1.0| | | |6.1.0| | | | | | | |`cusolverDnZunmqr`| | | | |`hipsolverDnZunmqr`|5.1.0| | | |6.1.0| | | | | | | diff --git a/docs/tables/CUSOLVER_API_supported_by_ROC.md b/docs/tables/CUSOLVER_API_supported_by_ROC.md index a1ae33e5..94ec33bd 100644 --- a/docs/tables/CUSOLVER_API_supported_by_ROC.md +++ b/docs/tables/CUSOLVER_API_supported_by_ROC.md @@ -141,6 +141,8 @@ |`cusolverDnCpotrsBatched`|9.1| | | | | | | | | | |`cusolverDnCreate`| | | | |`rocblas_create_handle`| | | | | | |`cusolverDnCreateParams`|11.0| | | | | | | | | | +|`cusolverDnCsytrf`| | | | | | | | | | | +|`cusolverDnCsytrf_bufferSize`| | | | | | | | | | | |`cusolverDnCungqr`|8.0| | | | | | | | | | |`cusolverDnCungqr_bufferSize`|8.0| | | | | | | | | | |`cusolverDnCunmqr`| | | | | | | | | | | @@ -185,6 +187,8 @@ |`cusolverDnDpotri_bufferSize`|10.1| | | | | | | | | | |`cusolverDnDpotrs`| | | | | | | | | | | |`cusolverDnDpotrsBatched`|9.1| | | | | | | | | | +|`cusolverDnDsytrf`| | | | | | | | | | | +|`cusolverDnDsytrf_bufferSize`| | | | | | | | | | | |`cusolverDnGetDeterministicMode`|12.2| | | | | | | | | | |`cusolverDnGetStream`| | | | |`rocblas_get_stream`| | | | | | |`cusolverDnIRSInfosCreate`|10.2| | | | | | | | | | @@ -249,6 +253,8 @@ |`cusolverDnSpotri_bufferSize`|10.1| | | | | | | | | | |`cusolverDnSpotrs`| | | | | | | | | | | |`cusolverDnSpotrsBatched`|9.1| | | | | | | | | | +|`cusolverDnSsytrf`| | | | | | | | | | | +|`cusolverDnSsytrf_bufferSize`| | | | | | | | | | | |`cusolverDnXgetrf`|11.1| | | | | | | | | | |`cusolverDnXgetrf_bufferSize`|11.1| | | | | | | | | | |`cusolverDnXgetrs`|11.1| | | | | | | | | | @@ -289,6 +295,8 @@ |`cusolverDnZpotri_bufferSize`|10.1| | | | | | | | | | |`cusolverDnZpotrs`| | | | | | | | | | | |`cusolverDnZpotrsBatched`|9.1| | | | | | | | | | +|`cusolverDnZsytrf`| | | | | | | | | | | +|`cusolverDnZsytrf_bufferSize`| | | | | | | | | | | |`cusolverDnZungqr`|8.0| | | | | | | | | | |`cusolverDnZungqr_bufferSize`|8.0| | | | | | | | | | |`cusolverDnZunmqr`| | | | | | | | | | | diff --git a/src/CUDA2HIP_SOLVER_API_functions.cpp b/src/CUDA2HIP_SOLVER_API_functions.cpp index bba905b2..c2efd58c 100644 --- a/src/CUDA2HIP_SOLVER_API_functions.cpp +++ b/src/CUDA2HIP_SOLVER_API_functions.cpp @@ -241,6 +241,16 @@ const std::map CUDA_SOLVER_FUNCTION_MAP { {"cusolverDnDormqr", {"hipsolverDnDormqr", "", CONV_LIB_FUNC, API_SOLVER, 2, ROC_UNSUPPORTED | HIP_EXPERIMENTAL}}, {"cusolverDnCunmqr", {"hipsolverDnCunmqr", "", CONV_LIB_FUNC, API_SOLVER, 2, ROC_UNSUPPORTED | HIP_EXPERIMENTAL}}, {"cusolverDnZunmqr", {"hipsolverDnZunmqr", "", CONV_LIB_FUNC, API_SOLVER, 2, ROC_UNSUPPORTED | HIP_EXPERIMENTAL}}, + // NOTE: rocsolver_(s|d|c|z)sytrf have a harness of other HIP and ROC API calls + {"cusolverDnSsytrf_bufferSize", {"hipsolverDnSsytrf_bufferSize", "", CONV_LIB_FUNC, API_SOLVER, 2, ROC_UNSUPPORTED | HIP_EXPERIMENTAL}}, + {"cusolverDnDsytrf_bufferSize", {"hipsolverDnDsytrf_bufferSize", "", CONV_LIB_FUNC, API_SOLVER, 2, ROC_UNSUPPORTED | HIP_EXPERIMENTAL}}, + {"cusolverDnCsytrf_bufferSize", {"hipsolverDnCsytrf_bufferSize", "", CONV_LIB_FUNC, API_SOLVER, 2, ROC_UNSUPPORTED | HIP_EXPERIMENTAL}}, + {"cusolverDnZsytrf_bufferSize", {"hipsolverDnZsytrf_bufferSize", "", CONV_LIB_FUNC, API_SOLVER, 2, ROC_UNSUPPORTED | HIP_EXPERIMENTAL}}, + // NOTE: rocsolver_(s|d|c|z)sytrf have a harness of other HIP and ROC API calls + {"cusolverDnSsytrf", {"hipsolverDnSsytrf", "", CONV_LIB_FUNC, API_SOLVER, 2, ROC_UNSUPPORTED | HIP_EXPERIMENTAL}}, + {"cusolverDnDsytrf", {"hipsolverDnDsytrf", "", CONV_LIB_FUNC, API_SOLVER, 2, ROC_UNSUPPORTED | HIP_EXPERIMENTAL}}, + {"cusolverDnCsytrf", {"hipsolverDnCsytrf", "", CONV_LIB_FUNC, API_SOLVER, 2, ROC_UNSUPPORTED | HIP_EXPERIMENTAL}}, + {"cusolverDnZsytrf", {"hipsolverDnZsytrf", "", CONV_LIB_FUNC, API_SOLVER, 2, ROC_UNSUPPORTED | HIP_EXPERIMENTAL}}, }; const std::map CUDA_SOLVER_FUNCTION_VER_MAP { @@ -472,6 +482,14 @@ const std::map HIP_SOLVER_FUNCTION_VER_MAP { {"hipsolverDnDormqr", {HIP_5010, HIP_0, HIP_0, HIP_LATEST}}, {"hipsolverDnCunmqr", {HIP_5010, HIP_0, HIP_0, HIP_LATEST}}, {"hipsolverDnZunmqr", {HIP_5010, HIP_0, HIP_0, HIP_LATEST}}, + {"hipsolverDnSsytrf_bufferSize", {HIP_5010, HIP_0, HIP_0, HIP_LATEST}}, + {"hipsolverDnDsytrf_bufferSize", {HIP_5010, HIP_0, HIP_0, HIP_LATEST}}, + {"hipsolverDnCsytrf_bufferSize", {HIP_5010, HIP_0, HIP_0, HIP_LATEST}}, + {"hipsolverDnZsytrf_bufferSize", {HIP_5010, HIP_0, HIP_0, HIP_LATEST}}, + {"hipsolverDnSsytrf", {HIP_5010, HIP_0, HIP_0, HIP_LATEST}}, + {"hipsolverDnDsytrf", {HIP_5010, HIP_0, HIP_0, HIP_LATEST}}, + {"hipsolverDnCsytrf", {HIP_5010, HIP_0, HIP_0, HIP_LATEST}}, + {"hipsolverDnZsytrf", {HIP_5010, HIP_0, HIP_0, HIP_LATEST}}, {"rocsolver_spotrf", {HIP_3020, HIP_0, HIP_0, HIP_LATEST}}, {"rocsolver_dpotrf", {HIP_3020, HIP_0, HIP_0, HIP_LATEST}}, diff --git a/tests/unit_tests/synthetic/libraries/cusolver2hipsolver.cu b/tests/unit_tests/synthetic/libraries/cusolver2hipsolver.cu index 3e48c01a..4ed9c355 100644 --- a/tests/unit_tests/synthetic/libraries/cusolver2hipsolver.cu +++ b/tests/unit_tests/synthetic/libraries/cusolver2hipsolver.cu @@ -276,6 +276,46 @@ int main() { // CHECK: status = hipsolverDnZgeqrf(handle, m, n, &dComplexA, lda, &dComplexTAU, &dComplexWorkspace, Lwork, &devInfo); status = cusolverDnZgeqrf(handle, m, n, &dComplexA, lda, &dComplexTAU, &dComplexWorkspace, Lwork, &devInfo); + // CUDA: cusolverStatus_t CUSOLVERAPI cusolverDnSsytrf_bufferSize(cusolverDnHandle_t handle, int n, float * A, int lda, int * lwork); + // HIP: HIPSOLVER_EXPORT hipsolverStatus_t hipsolverDnSsytrf_bufferSize(hipsolverHandle_t handle, int n, float* A, int lda, int* lwork); + // CHECK: status = hipsolverDnSsytrf_bufferSize(handle, n, &fA, lda, &Lwork); + status = cusolverDnSsytrf_bufferSize(handle, n, &fA, lda, &Lwork); + + // CUDA: cusolverStatus_t CUSOLVERAPI cusolverDnDsytrf_bufferSize(cusolverDnHandle_t handle, int n, double * A, int lda, int * lwork); + // HIP: HIPSOLVER_EXPORT hipsolverStatus_t hipsolverDnDsytrf_bufferSize(hipsolverHandle_t handle, int n, double* A, int lda, int* lwork); + // CHECK: status = hipsolverDnDsytrf_bufferSize(handle, n, &dA, lda, &Lwork); + status = cusolverDnDsytrf_bufferSize(handle, n, &dA, lda, &Lwork); + + // CUDA: cusolverStatus_t CUSOLVERAPI cusolverDnCsytrf_bufferSize(cusolverDnHandle_t handle, int n, cuComplex * A, int lda, int * lwork); + // HIP: HIPSOLVER_EXPORT hipsolverStatus_t hipsolverDnCsytrf_bufferSize(hipsolverHandle_t handle, int n, hipFloatComplex* A, int lda, int* lwork); + // CHECK: status = hipsolverDnCsytrf_bufferSize(handle, n, &complexA, lda, &Lwork); + status = cusolverDnCsytrf_bufferSize(handle, n, &complexA, lda, &Lwork); + + // CUDA: cusolverStatus_t CUSOLVERAPI cusolverDnZsytrf_bufferSize(cusolverDnHandle_t handle, int n, cuDoubleComplex * A, int lda, int * lwork); + // HIP: HIPSOLVER_EXPORT hipsolverStatus_t hipsolverDnZsytrf_bufferSize(hipsolverHandle_t handle, int n, hipDoubleComplex* A, int lda, int* lwork); + // CHECK: status = hipsolverDnZsytrf_bufferSize(handle, n, &dComplexA, lda, &Lwork); + status = cusolverDnZsytrf_bufferSize(handle, n, &dComplexA, lda, &Lwork); + + // CUDA: cusolverStatus_t CUSOLVERAPI cusolverDnSsytrf(cusolverDnHandle_t handle, cublasFillMode_t uplo, int n, float * A, int lda, int * ipiv, float * work, int lwork, int * info); + // HIP: HIPSOLVER_EXPORT hipsolverStatus_t hipsolverDnSsytrf(hipsolverHandle_t handle, hipblasFillMode_t uplo, int n, float* A, int lda, int* ipiv, float* work, int lwork, int* devInfo); + // CHECK: status = hipsolverDnSsytrf(handle, fillMode, n, &fA, lda, &devIpiv, &fWorkspace, Lwork, &devInfo); + status = cusolverDnSsytrf(handle, fillMode, n, &fA, lda, &devIpiv, &fWorkspace, Lwork, &devInfo); + + // CUDA: cusolverStatus_t CUSOLVERAPI cusolverDnDsytrf(cusolverDnHandle_t handle, cublasFillMode_t uplo, int n, double * A, int lda, int * ipiv, double * work, int lwork, int * info); + // HIP: HIPSOLVER_EXPORT hipsolverStatus_t hipsolverDnDsytrf(hipsolverHandle_t handle, hipblasFillMode_t uplo, int n, double* A, int lda, int* ipiv, double* work, int lwork, int* devInfo); + // CHECK: status = hipsolverDnDsytrf(handle, fillMode, n, &dA, lda, &devIpiv, &dWorkspace, Lwork, &devInfo); + status = cusolverDnDsytrf(handle, fillMode, n, &dA, lda, &devIpiv, &dWorkspace, Lwork, &devInfo); + + // CUDA: cusolverStatus_t CUSOLVERAPI cusolverDnCsytrf(cusolverDnHandle_t handle, cublasFillMode_t uplo, int n, cuComplex * A, int lda, int * ipiv, cuComplex * work, int lwork, int * info); + // HIP: HIPSOLVER_EXPORT hipsolverStatus_t hipsolverDnCsytrf(hipsolverHandle_t handle, hipblasFillMode_t uplo, int n, hipFloatComplex* A, int lda, int* ipiv, hipFloatComplex* work, int lwork, int* devInfo); + // CHECK: status = hipsolverDnCsytrf(handle, fillMode, n, &complexA, lda, &devIpiv, &complexWorkspace, Lwork, &devInfo); + status = cusolverDnCsytrf(handle, fillMode, n, &complexA, lda, &devIpiv, &complexWorkspace, Lwork, &devInfo); + + // CUDA: cusolverStatus_t CUSOLVERAPI cusolverDnZsytrf(cusolverDnHandle_t handle, cublasFillMode_t uplo, int n, cuDoubleComplex * A, int lda, int * ipiv, cuDoubleComplex * work, int lwork, int * info); + // HIP: HIPSOLVER_EXPORT hipsolverStatus_t hipsolverDnZsytrf(hipsolverHandle_t handle, hipblasFillMode_t uplo, int n, hipDoubleComplex* A, int lda, int* ipiv, hipDoubleComplex* work, int lwork, int* devInfo); + // CHECK: status = hipsolverDnZsytrf(handle, fillMode, n, &dComplexA, lda, &devIpiv, &dComplexWorkspace, Lwork, &devInfo); + status = cusolverDnZsytrf(handle, fillMode, n, &dComplexA, lda, &devIpiv, &dComplexWorkspace, Lwork, &devInfo); + #if CUDA_VERSION >= 8000 // CHECK: hipsolverEigType_t eigType; // CHECK-NEXT: hipsolverEigType_t EIG_TYPE_1 = HIPSOLVER_EIG_TYPE_1;