diff --git a/hipamd/tests/hipify-clang/run_test.bat b/hipamd/tests/hipify-clang/run_test.bat index 58563be2c7..8b10bc8c2e 100644 --- a/hipamd/tests/hipify-clang/run_test.bat +++ b/hipamd/tests/hipify-clang/run_test.bat @@ -8,12 +8,13 @@ set HIPIFY=%1 set IN_FILE=%2 set TMP_FILE=%3 set CUDA_ROOT=%4 +set ROC=%5 set all_args=%* -call set clang_args=%%all_args:*%5=%% -set clang_args=%5%clang_args% +call set clang_args=%%all_args:*%6=%% +set clang_args=%6%clang_args% -%HIPIFY% -o=%TMP_FILE% %IN_FILE% %CUDA_ROOT% -- %clang_args% +%HIPIFY% -o=%TMP_FILE% %IN_FILE% %CUDA_ROOT% %ROC% -- %clang_args% if errorlevel 1 (echo Error: hipify-clang.exe failed with exit code: %errorlevel% && exit /b %errorlevel%) findstr /v /r /c:"[ ]*//[ ]*[CHECK*|RUN]" %TMP_FILE% | %FILE_CHECK% %IN_FILE% diff --git a/hipamd/tests/hipify-clang/run_test.sh b/hipamd/tests/hipify-clang/run_test.sh index eb3e822549..357976558e 100755 --- a/hipamd/tests/hipify-clang/run_test.sh +++ b/hipamd/tests/hipify-clang/run_test.sh @@ -10,8 +10,9 @@ HIPIFY=$1 IN_FILE=$2 TMP_FILE=$3 CUDA_ROOT=$4 -shift 4 +ROC=$5 +shift 5 # Remaining args are the ones to forward to clang proper. -$HIPIFY -o=$TMP_FILE $IN_FILE $CUDA_ROOT -- $@ && cat $TMP_FILE | sed -Ee 's|//.+|// |g' | FileCheck $IN_FILE +$HIPIFY -o=$TMP_FILE $IN_FILE $CUDA_ROOT $ROC -- $@ && cat $TMP_FILE | sed -Ee 's|//.+|// |g' | FileCheck $IN_FILE diff --git a/hipamd/tests/hipify-clang/unit_tests/libraries/cuBLAS/cublas_0_based_indexing.cu b/hipamd/tests/hipify-clang/unit_tests/libraries/cuBLAS/cublas_0_based_indexing.cu index af24737dbc..69812c98b0 100644 --- a/hipamd/tests/hipify-clang/unit_tests/libraries/cuBLAS/cublas_0_based_indexing.cu +++ b/hipamd/tests/hipify-clang/unit_tests/libraries/cuBLAS/cublas_0_based_indexing.cu @@ -1,5 +1,6 @@ // RUN: %run_test hipify "%s" "%t" %hipify_args %clang_args +// CHECK: #include #include #include #include @@ -33,6 +34,7 @@ int main(void) { } // cublasInit is not supported yet cublasInit(); + // cublasAlloc is not supported yet stat = cublasAlloc(M*N, sizeof(*a), (void**)&devPtrA); // CHECK: if (stat != HIPBLAS_STATUS_SUCCESS) { if (stat != CUBLAS_STATUS_SUCCESS) { diff --git a/hipamd/tests/hipify-clang/unit_tests/libraries/cuBLAS/rocBLAS/cublas_0_based_indexing_rocblas.cu b/hipamd/tests/hipify-clang/unit_tests/libraries/cuBLAS/rocBLAS/cublas_0_based_indexing_rocblas.cu new file mode 100644 index 0000000000..c61b9c8bd5 --- /dev/null +++ b/hipamd/tests/hipify-clang/unit_tests/libraries/cuBLAS/rocBLAS/cublas_0_based_indexing_rocblas.cu @@ -0,0 +1,81 @@ +// RUN: %run_test hipify "%s" "%t" %hipify_args "-roc" %clang_args + +// CHECK: #include +#include +#include +#include +// CHECK: #include "rocblas.h" +#include "cublas.h" +#define M 6 +#define N 5 +#define IDX2C(i,j,ld) (((j)*(ld))+(i)) +static __inline__ void modify(float *m, int ldm, int n, int p, int q, float + alpha, float beta) { + // CHECK: rocblas_sscal(n - p, alpha, &m[IDX2C(p, q, ldm)], ldm); + // CHECK: rocblas_sscal(ldm - p, beta, &m[IDX2C(p, q, ldm)], 1); + cublasSscal(n - p, alpha, &m[IDX2C(p, q, ldm)], ldm); + cublasSscal(ldm - p, beta, &m[IDX2C(p, q, ldm)], 1); +} +int main(void) { + int i, j; + // CHECK: rocblas_status stat; + cublasStatus stat; + float* devPtrA; + float* a = 0; + a = (float *)malloc(M * N * sizeof(*a)); + if (!a) { + printf("host memory allocation failed"); + return EXIT_FAILURE; + } + for (j = 0; j < N; j++) { + for (i = 0; i < M; i++) { + a[IDX2C(i, j, M)] = (float)(i * M + j + 1); + } + } + // cublasInit is not supported yet + cublasInit(); + // cublasAlloc is not supported yet + stat = cublasAlloc(M*N, sizeof(*a), (void**)&devPtrA); + // CHECK: if (stat != rocblas_status_success) { + if (stat != CUBLAS_STATUS_SUCCESS) { + printf("device memory allocation failed"); + // cublasShutdown is not supported yet + cublasShutdown(); + return EXIT_FAILURE; + } + // CHECK: stat = rocblas_set_matrix(M, N, sizeof(*a), a, M, devPtrA, M); + stat = cublasSetMatrix(M, N, sizeof(*a), a, M, devPtrA, M); + // CHECK: if (stat != rocblas_status_success) { + if (stat != CUBLAS_STATUS_SUCCESS) { + printf("data download failed"); + // cublasFree is not supported yet + cublasFree(devPtrA); + // cublasShutdown is not supported yet + cublasShutdown(); + return EXIT_FAILURE; + } + modify(devPtrA, M, N, 1, 2, 16.0f, 12.0f); + // CHECK: stat = rocblas_get_matrix(M, N, sizeof(*a), devPtrA, M, a, M); + stat = cublasGetMatrix(M, N, sizeof(*a), devPtrA, M, a, M); + // CHECK: if (stat != rocblas_status_success) { + if (stat != CUBLAS_STATUS_SUCCESS) { + printf("data upload failed"); + // cublasFree is not supported yet + cublasFree(devPtrA); + // cublasShutdown is not supported yet + cublasShutdown(); + return EXIT_FAILURE; + } + // cublasFree is not supported yet + cublasFree(devPtrA); + // cublasShutdown is not supported yet + cublasShutdown(); + for (j = 0; j < N; j++) { + for (i = 0; i < M; i++) { + printf("%7.0f", a[IDX2C(i, j, M)]); + } + printf("\n"); + } + free(a); + return EXIT_SUCCESS; +} diff --git a/hipamd/tests/hipify-clang/unit_tests/libraries/cuBLAS/rocBLAS/cublas_1_based_indexing_rocblas.cu b/hipamd/tests/hipify-clang/unit_tests/libraries/cuBLAS/rocBLAS/cublas_1_based_indexing_rocblas.cu new file mode 100644 index 0000000000..0202e2f7fa --- /dev/null +++ b/hipamd/tests/hipify-clang/unit_tests/libraries/cuBLAS/rocBLAS/cublas_1_based_indexing_rocblas.cu @@ -0,0 +1,90 @@ +// RUN: %run_test hipify "%s" "%t" %hipify_args "-roc" %clang_args + +#include +#include +#include +// CHECK: #include +#include +// CHECK: #include "rocblas.h" +#include "cublas_v2.h" +#define M 6 +#define N 5 +#define IDX2F(i,j,ld) ((((j)-1)*(ld))+((i)-1)) +// CHECK: static __inline__ void modify(rocblas_handle handle, float *m, int ldm, int +static __inline__ void modify(cublasHandle_t handle, float *m, int ldm, int + n, int p, int q, float alpha, float beta) { + // CHECK: rocblas_sscal(handle, n - p + 1, &alpha, &m[IDX2F(p, q, ldm)], ldm); + // CHECK: rocblas_sscal(handle, ldm - p + 1, &beta, &m[IDX2F(p, q, ldm)], 1); + cublasSscal(handle, n - p + 1, &alpha, &m[IDX2F(p, q, ldm)], ldm); + cublasSscal(handle, ldm - p + 1, &beta, &m[IDX2F(p, q, ldm)], 1); +} +int main(void) { + // CHECK: hipError_t cudaStat; + // CHECK: rocblas_status stat; + // CHECK: rocblas_handle handle; + cudaError_t cudaStat; + cublasStatus_t stat; + cublasHandle_t handle; + int i, j; + float* devPtrA; + float* a = 0; + a = (float *)malloc(M * N * sizeof(*a)); + if (!a) { + printf("host memory allocation failed"); + return EXIT_FAILURE; + } + for (j = 1; j <= N; j++) { + for (i = 1; i <= M; i++) { + a[IDX2F(i, j, M)] = (float)((i - 1) * M + j); + } + } + // CHECK: cudaStat = hipMalloc((void**)&devPtrA, M*N * sizeof(*a)); + cudaStat = cudaMalloc((void**)&devPtrA, M*N * sizeof(*a)); + // CHECK: if (cudaStat != hipSuccess) { + if (cudaStat != cudaSuccess) { + printf("device memory allocation failed"); + return EXIT_FAILURE; + } + // CHECK: stat = rocblas_create_handle(&handle); + stat = cublasCreate(&handle); + // CHECK: if (stat != rocblas_status_success) { + if (stat != CUBLAS_STATUS_SUCCESS) { + printf("CUBLAS initialization failed\n"); + return EXIT_FAILURE; + } + // CHECK: stat = rocblas_set_matrix(M, N, sizeof(*a), a, M, devPtrA, M); + stat = cublasSetMatrix(M, N, sizeof(*a), a, M, devPtrA, M); + // CHECK: if (stat != rocblas_status_success) { + if (stat != CUBLAS_STATUS_SUCCESS) { + printf("data download failed"); + // CHECK: hipFree(devPtrA); + // CHECK: rocblas_destroy_handle(handle); + cudaFree(devPtrA); + cublasDestroy(handle); + return EXIT_FAILURE; + } + modify(handle, devPtrA, M, N, 2, 3, 16.0f, 12.0f); + // CHECK: stat = rocblas_get_matrix(M, N, sizeof(*a), devPtrA, M, a, M); + stat = cublasGetMatrix(M, N, sizeof(*a), devPtrA, M, a, M); + // CHECK: if (stat != rocblas_status_success) { + if (stat != CUBLAS_STATUS_SUCCESS) { + printf("data upload failed"); + // CHECK: hipFree(devPtrA); + // CHECK: rocblas_destroy_handle(handle); + cudaFree(devPtrA); + cublasDestroy(handle); + return EXIT_FAILURE; + } + // CHECK: hipFree(devPtrA); + // CHECK: rocblas_destroy_handle(handle); + cudaFree(devPtrA); + cublasDestroy(handle); + for (j = 1; j <= N; j++) { + for (i = 1; i <= M; i++) { + printf("%7.0f", a[IDX2F(i, j, M)]); + } + printf("\n"); + } + free(a); + return EXIT_SUCCESS; +} diff --git a/hipamd/tests/hipify-clang/unit_tests/libraries/cuBLAS/rocBLAS/cublas_sgemm_matrix_multiplication_rocblas.cu b/hipamd/tests/hipify-clang/unit_tests/libraries/cuBLAS/rocBLAS/cublas_sgemm_matrix_multiplication_rocblas.cu new file mode 100644 index 0000000000..8e35f28f0e --- /dev/null +++ b/hipamd/tests/hipify-clang/unit_tests/libraries/cuBLAS/rocBLAS/cublas_sgemm_matrix_multiplication_rocblas.cu @@ -0,0 +1,108 @@ +// RUN: %run_test hipify "%s" "%t" %hipify_args "-roc" %clang_args + +#include +#include +// CHECK: #include +#include +// CHECK: #include "rocblas.h" +#include "cublas_v2.h" +#define IDX2C(i,j,ld) (((j)*(ld))+(i)) +#define m 6 +#define n 4 +#define k 5 +int main(void) { + // CHECK: hipError_t cudaStat; + // CHECK: rocblas_status stat; + // CHECK: rocblas_handle handle; + cudaError_t cudaStat; + cublasStatus_t stat; + cublasHandle_t handle; + int i, j; + float * a; + float * b; + float * c; + a = (float *)malloc(m*k * sizeof(float)); + b = (float *)malloc(k*n * sizeof(float)); + c = (float *)malloc(m*n * sizeof(float)); + int ind = 11; + for (j = 0; j