From c0e0ca206b20fabff8062e601b2a8fc204fbbde3 Mon Sep 17 00:00:00 2001 From: Manas Yendluri Date: Wed, 22 May 2024 13:43:43 +0530 Subject: [PATCH] SWDEV-458787 - [catch2][dtest] Basic functional testcase for hipMemcpyAtoD API Change-Id: I632c92bab8b51aead983dfe4e51aaa1995626f12 [ROCm/hip-tests commit: fbe458618e075f85d3a8c1743e06ab79ab793eb9] --- .../catch/unit/memory/CMakeLists.txt | 1 + .../catch/unit/memory/hipMemcpyAtoD.cc | 81 +++++++++++++++++++ 2 files changed, 82 insertions(+) create mode 100644 projects/hip-tests/catch/unit/memory/hipMemcpyAtoD.cc diff --git a/projects/hip-tests/catch/unit/memory/CMakeLists.txt b/projects/hip-tests/catch/unit/memory/CMakeLists.txt index 883c0b5198..57b9f3222a 100644 --- a/projects/hip-tests/catch/unit/memory/CMakeLists.txt +++ b/projects/hip-tests/catch/unit/memory/CMakeLists.txt @@ -49,6 +49,7 @@ set(TEST_SRC hipMemcpy2DFromArray_old.cc hipMemcpy2DFromArrayAsync.cc hipMemcpy2DFromArrayAsync_old.cc + hipMemcpyAtoD.cc hipMemcpyAtoH.cc hipMemcpyAtoH_old.cc hipMemcpyHtoA.cc diff --git a/projects/hip-tests/catch/unit/memory/hipMemcpyAtoD.cc b/projects/hip-tests/catch/unit/memory/hipMemcpyAtoD.cc new file mode 100644 index 0000000000..abda626086 --- /dev/null +++ b/projects/hip-tests/catch/unit/memory/hipMemcpyAtoD.cc @@ -0,0 +1,81 @@ +/* +Copyright (c) 2024 Advanced Micro Devices, Inc. All rights reserved. +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. +*/ + +#include +#include + +/** +* @addtogroup hipMemcpyAtoD hipMemcpyAtoD +* @{ +* @ingroup MemoryTest +* `hipError_t hipMemcpyAtoD(hipDeviceptr_t dstDevice, hipArray_t srcArray, +* size_t srcOffset, size_t ByteCount)` - +* Copies from one 1D array to device memory. +*/ + +/** + * Test Description + * ------------------------ + * - This testcase initially copies data from host to 1D array and then performs + * hipMemcpyAtoD api call and copies this device memory to host variable and + * verifies with initial host values. + * Test source + * ------------------------ + * - unit/memory/hipMemcpyAtoD.cc + * Test requirements + * ------------------------ + * - HIP_VERSION >= 6.2 + */ +TEST_CASE("Unit_hipMemcpyAtoD_Basic") { +#if HT_NVIDIA + HipTest::HIP_SKIP_TEST("API currently unsupported on nvidia, skipping..."); + return; +#else + HIP_CHECK(hipSetDevice(0)); + int row, col; + row = 1; + col = GENERATE(3, 4, 100); + int *A_h = reinterpret_cast(malloc(sizeof(int) * row * col)); + int *B_h = reinterpret_cast(malloc(sizeof(int) * row * col)); + for (int i = 0; i < (row * col); i++) { + A_h[i] = i; + } + hipArray_t A_a; + int *A_d; + hipChannelFormatDesc desc = hipCreateChannelDesc(); + HIP_CHECK(hipMallocArray(&A_a, &desc, col, row, hipArrayDefault)); + HIP_CHECK(hipMalloc(&A_d, sizeof(int) * row * col)); + HIP_CHECK(hipMemcpy2DToArray(A_a, 0, 0, A_h, col * sizeof(int), + col * sizeof(int), row, hipMemcpyHostToDevice)); + HIP_CHECK(hipMemcpyAtoD(A_d, A_a, 0, sizeof(int) * col * row)); + HIP_CHECK(hipMemcpyDtoH(B_h, A_d, sizeof(int) * row * col)); + for (int i = 0; i < (row * col); i++) { + REQUIRE(A_h[i] == B_h[i]); + } + HIP_CHECK(hipFreeArray(A_a)); + HIP_CHECK(hipFree(A_d)); + free(A_h); + free(B_h); +#endif +} + +/** +* End doxygen group MemoryTest. +* @} +*/