diff --git a/catch/unit/memory/hipArrayCreate.cc b/catch/unit/memory/hipArrayCreate.cc index 836c0d1c45..efffc344e5 100644 --- a/catch/unit/memory/hipArrayCreate.cc +++ b/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/catch/unit/memory/hipMalloc3DArray.cc b/catch/unit/memory/hipMalloc3DArray.cc index 1b7ee27171..7982f85048 100644 --- a/catch/unit/memory/hipMalloc3DArray.cc +++ b/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/catch/unit/memory/hipMallocArray.cc b/catch/unit/memory/hipMallocArray.cc index 24519f4b1a..8b2099a4ec 100644 --- a/catch/unit/memory/hipMallocArray.cc +++ b/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") {