From 8bfdde5ecb7e15d5be1d6844c3bff8fa8a44a18d Mon Sep 17 00:00:00 2001 From: ROCm CI Service Account <66695075+rocm-ci@users.noreply.github.com> Date: Fri, 5 Aug 2022 12:19:12 +0530 Subject: [PATCH] SWDEV-348718 - Use of GENERATE in thead function causes random failures with multithread condition. (#2842) Change-Id: Ie6722abbf5aa9936b5e06002064f7f1109066af9 --- tests/catch/unit/memory/hipArrayCreate.cc | 38 +++++++++++---------- tests/catch/unit/memory/hipMalloc3DArray.cc | 31 +++++++++-------- tests/catch/unit/memory/hipMallocArray.cc | 32 +++++++++-------- 3 files changed, 54 insertions(+), 47 deletions(-) diff --git a/tests/catch/unit/memory/hipArrayCreate.cc b/tests/catch/unit/memory/hipArrayCreate.cc index 836c0d1c45..efffc344e5 100644 --- a/tests/catch/unit/memory/hipArrayCreate.cc +++ b/tests/catch/unit/memory/hipArrayCreate.cc @@ -52,26 +52,28 @@ static constexpr auto ARRAY_LOOP{100}; static void ArrayCreate_DiffSizes(int gpu) { HIP_CHECK_THREAD(hipSetDevice(gpu)); - std::pair size = - GENERATE(std::make_pair(NUM_W, NUM_H), std::make_pair(BIGNUM_W, BIGNUM_H)); - std::array array; - size_t pavail, avail; - HIP_CHECK_THREAD(hipMemGetInfo(&pavail, nullptr)); - HIP_ARRAY_DESCRIPTOR desc; - desc.NumChannels = 1; - desc.Width = std::get<0>(size); - desc.Height = std::get<1>(size); - desc.Format = HIP_AD_FORMAT_FLOAT; + //Use of GENERATE in thead function causes random failures with multithread condition. + std::vector> runs {std::make_pair(NUM_W, NUM_H), std::make_pair(BIGNUM_W, BIGNUM_H)}; + for (const auto& size : runs) { + std::array array; + size_t pavail, avail; + HIP_CHECK_THREAD(hipMemGetInfo(&pavail, nullptr)); + HIP_ARRAY_DESCRIPTOR desc; + desc.NumChannels = 1; + desc.Width = std::get<0>(size); + desc.Height = std::get<1>(size); + desc.Format = HIP_AD_FORMAT_FLOAT; - for (int i = 0; i < ARRAY_LOOP; i++) { - HIP_CHECK_THREAD(hipArrayCreate(&array[i], &desc)); - } - for (int i = 0; i < ARRAY_LOOP; i++) { - HIP_CHECK_THREAD(hipArrayDestroy(array[i])); - } + for (int i = 0; i < ARRAY_LOOP; i++) { + HIP_CHECK_THREAD(hipArrayCreate(&array[i], &desc)); + } + for (int i = 0; i < ARRAY_LOOP; i++) { + HIP_CHECK_THREAD(hipArrayDestroy(array[i])); + } - HIP_CHECK_THREAD(hipMemGetInfo(&avail, nullptr)); - REQUIRE_THREAD(pavail == avail); + HIP_CHECK_THREAD(hipMemGetInfo(&avail, nullptr)); + REQUIRE_THREAD(pavail == avail); + } } /* This testcase verifies hipArrayCreate API for small and big chunks data*/ diff --git a/tests/catch/unit/memory/hipMalloc3DArray.cc b/tests/catch/unit/memory/hipMalloc3DArray.cc index 1b7ee27171..7982f85048 100644 --- a/tests/catch/unit/memory/hipMalloc3DArray.cc +++ b/tests/catch/unit/memory/hipMalloc3DArray.cc @@ -49,23 +49,26 @@ static constexpr auto ARRAY_LOOP{100}; */ static void Malloc3DArray_DiffSizes(int gpu) { HIP_CHECK_THREAD(hipSetDevice(gpu)); - const int size = GENERATE(ARRAY_SIZE, BIG_ARRAY_SIZE); - int width{size}, height{size}, depth{size}; - hipChannelFormatDesc channelDesc = hipCreateChannelDesc(); - std::array arr; - size_t pavail, avail; - HIP_CHECK_THREAD(hipMemGetInfo(&pavail, nullptr)); + //Use of GENERATE in thead function causes random failures with multithread condition. + std::vector runs {ARRAY_SIZE, BIG_ARRAY_SIZE}; + for (const auto& size : runs) { + size_t width{size}, height{size}, depth{size}; + hipChannelFormatDesc channelDesc = hipCreateChannelDesc(); + std::array arr; + size_t pavail, avail; + HIP_CHECK_THREAD(hipMemGetInfo(&pavail, nullptr)); - for (int i = 0; i < ARRAY_LOOP; i++) { - HIP_CHECK_THREAD(hipMalloc3DArray(&arr[i], &channelDesc, make_hipExtent(width, height, depth), + for (int i = 0; i < ARRAY_LOOP; i++) { + HIP_CHECK_THREAD(hipMalloc3DArray(&arr[i], &channelDesc, make_hipExtent(width, height, depth), hipArrayDefault)); - } - for (int i = 0; i < ARRAY_LOOP; i++) { - HIP_CHECK_THREAD(hipFreeArray(arr[i])); - } + } + for (int i = 0; i < ARRAY_LOOP; i++) { + HIP_CHECK_THREAD(hipFreeArray(arr[i])); + } - HIP_CHECK_THREAD(hipMemGetInfo(&avail, nullptr)); - REQUIRE_THREAD(pavail == avail); + HIP_CHECK_THREAD(hipMemGetInfo(&avail, nullptr)); + REQUIRE_THREAD(pavail == avail); + } } TEST_CASE("Unit_hipMalloc3DArray_DiffSizes") { diff --git a/tests/catch/unit/memory/hipMallocArray.cc b/tests/catch/unit/memory/hipMallocArray.cc index 24519f4b1a..8b2099a4ec 100644 --- a/tests/catch/unit/memory/hipMallocArray.cc +++ b/tests/catch/unit/memory/hipMallocArray.cc @@ -51,23 +51,25 @@ static constexpr int ARRAY_LOOP{100}; */ static void MallocArray_DiffSizes(int gpu) { HIP_CHECK_THREAD(hipSetDevice(gpu)); - std::pair size = - GENERATE(std::make_pair(NUM_W, NUM_H), std::make_pair(BIGNUM_W, BIGNUM_H)); - hipChannelFormatDesc desc = hipCreateChannelDesc(); - std::array A_d; - size_t pavail, avail; - HIP_CHECK_THREAD(hipMemGetInfo(&pavail, nullptr)); + //Use of GENERATE in thead function causes random failures with multithread condition. + std::vector> runs {std::make_pair(NUM_W, NUM_H), std::make_pair(BIGNUM_W, BIGNUM_H)}; + for (const auto& size : runs) { + hipChannelFormatDesc desc = hipCreateChannelDesc(); + std::array A_d; + size_t pavail, avail; + HIP_CHECK_THREAD(hipMemGetInfo(&pavail, nullptr)); - for (int i = 0; i < ARRAY_LOOP; i++) { - HIP_CHECK_THREAD( - hipMallocArray(&A_d[i], &desc, std::get<0>(size), std::get<1>(size), hipArrayDefault)); - } - for (int i = 0; i < ARRAY_LOOP; i++) { - HIP_CHECK_THREAD(hipFreeArray(A_d[i])); - } + for (int i = 0; i < ARRAY_LOOP; i++) { + HIP_CHECK_THREAD( + hipMallocArray(&A_d[i], &desc, std::get<0>(size), std::get<1>(size), hipArrayDefault)); + } + for (int i = 0; i < ARRAY_LOOP; i++) { + HIP_CHECK_THREAD(hipFreeArray(A_d[i])); + } - HIP_CHECK_THREAD(hipMemGetInfo(&avail, nullptr)); - REQUIRE_THREAD(pavail == avail); + HIP_CHECK_THREAD(hipMemGetInfo(&avail, nullptr)); + REQUIRE_THREAD(pavail == avail); + } } TEST_CASE("Unit_hipMallocArray_DiffSizes") {