Files
TheRock/rocm-libraries/projects/miopen/test/gtest/pooling2d.cpp
T
derek.holloway 7502bf64a4
CodeQL / Analyze (actions) (push) Canceled after 0s
CodeQL / Analyze (python) (push) Canceled after 0s
pre-commit / pre-commit (push) Canceled after 0s
Multi-Arch CI / setup (push) Canceled after 0s
Publish build_manylinux_x86_64 images / publish_build_manylinux_x86_64 (push) Canceled after 0s
Setup (Multi-Arch) / setup (push) Canceled after 0s
Multi-Arch CI / Linux::${{ fromJSON(needs.setup.outputs.linux_build_config || '{}').build_variant_label || 'skip' }} (push) Canceled after 0s
Publish TheRock Docker image / build-and-push-image (push) Canceled after 0s
Publish no_rocm_image_ubi10 image / publish_no_rocm_image_ubi10 (push) Canceled after 0s
Multi-Arch CI / Windows::${{ fromJSON(needs.setup.outputs.windows_build_config || '{}').build_variant_label || 'skip' }} (push) Canceled after 0s
Publish TheRock Docker image / build-and-push-image (push) Canceled after 0s
Multi-Arch CI / Manifest Diff (push) Canceled after 0s
TheRock Manifest Diff Report / Generate Manifest Diff Report (push) Canceled after 0s
Multi-Arch CI / CI Summary (push) Canceled after 0s
Publish no_rocm_image_ubuntu24_04 images / publish_no_rocm_image_ubuntu24_04 (push) Canceled after 0s
Publish no_rocm_image_ubuntu24_04_ocl_rt images / publish_no_rocm_image_ubuntu24_04_ocl_rt (push) Canceled after 0s
Publish TheRock Docker image / build-and-push-image (push) Canceled after 0s
Publish TheRock Docker image / build-and-push-image (push) Canceled after 0s
Publish no_rocm_image_ubuntu24_04 images / publish_no_rocm_image_ubuntu24_04_rocgdb (push) Canceled after 0s
Publish no_rocm_image_ubuntu24_04_rocgdb images / publish_no_rocm_image_ubuntu24_04_rocgdb (push) Canceled after 0s
Publish no_rocm_image_ubuntu24_04 images / publish_no_rocm_image_ubuntu24_04_ocl_rt (push) Canceled after 0s
Publish TheRock Docker image / build-and-push-image (push) Canceled after 0s
Unit Tests / Unit Tests :: ubuntu-24.04 (push) Canceled after 0s
Unit Tests / Unit Tests :: windows-2022 (push) Canceled after 0s
Publish no_rocm_image_ubuntu24_04 images / publish_no_rocm_image_ubuntu24_04_media (push) Canceled after 0s
Unit Tests / Unit Tests Summary (push) Canceled after 0s
Publish no_rocm_image_ubuntu24_04 images / publish_no_rocm_image_ubuntu24_04_openmpi (push) Canceled after 0s
Flatten subprojects into a single base monorepo
2026-09-02 16:34:47 -07:00

134 lines
5.1 KiB
C++

// Copyright © Advanced Micro Devices, Inc., or its affiliates.
// SPDX-License-Identifier: MIT
#include <gtest/gtest.h>
#include <half/half.hpp>
#include <vector>
#include "../network_data.hpp"
#include "pooling2d_common.hpp"
// Configuration define matching the original ctest behavior
// These can be overridden at compile time via -D flags
// TEST_GET_INPUT_TENSOR: When 0, uses all 18 predefined input shapes (matching ctest with --all).
// When 1, uses get_inputs() function to generate input shapes from
// network_data.
#ifndef TEST_GET_INPUT_TENSOR
#define TEST_GET_INPUT_TENSOR 0
#endif
namespace {
std::vector<pooling2d_gtest::PoolingTestCase> GetPooling2dTestCases()
{
static std::vector<pooling2d_gtest::PoolingTestCase> cached_test_cases;
static bool cached = false;
if(cached)
{
return cached_test_cases;
}
std::vector<pooling2d_gtest::PoolingTestCase> test_cases;
// Dataset 0: Default dataset (various tensor sizes)
std::vector<std::vector<int>> dataset0_inputs;
#if TEST_GET_INPUT_TENSOR
// When TEST_GET_INPUT_TENSOR = 1, use get_inputs() function (matching original ctest behavior)
int batch_factor = 0; // Default batch factor matching original ctest
std::set<std::vector<int>> in_dim_set = get_inputs<int>(batch_factor);
dataset0_inputs.assign(in_dim_set.begin(), in_dim_set.end());
#else
// When TEST_GET_INPUT_TENSOR = 0, use predefined shapes
// Match ctest's generate_multi_data_limited(..., 9) by only using the first 9 shapes.
dataset0_inputs = {{1, 19, 1024, 2048}, // Shape 1
{10, 3, 32, 32}, // Shape 2
{5, 32, 8, 8}, // Shape 3
{2, 1024, 12, 12}, // Shape 4
{4, 3, 231, 231}, // Shape 5
{8, 3, 227, 227}, // Shape 6
{1, 384, 13, 13}, // Shape 7
{1, 96, 27, 27}, // Shape 8
{2, 160, 7, 7}}; // Shape 9
#endif
std::vector<std::vector<int>> dataset0_lens = {{2, 2}, {3, 3}};
std::vector<std::vector<int>> dataset0_strides = {{2, 2}, {1, 1}};
std::vector<std::vector<int>> dataset0_pads = {{0, 0}, {1, 1}};
std::vector<miopenIndexType_t> dataset0_index_types = {
miopenIndexUint8, miopenIndexUint16, miopenIndexUint32, miopenIndexUint64};
std::vector<miopenPoolingMode_t> modes = {
miopenPoolingMax, miopenPoolingAverage, miopenPoolingAverageInclusive};
std::vector<int> wsidx_values = {0, 1};
// Counters limit non-uint8 index type cases to 5 each (matching original ctest behavior)
int num_uint16_case = 0;
int num_uint32_case = 0;
int num_uint32_case_imgidx = 0;
int num_uint64_case = 0;
int num_uint64_case_imgidx = 0;
for(const auto& in_shape : dataset0_inputs)
{
AddTestCasesForInput(in_shape,
dataset0_lens,
dataset0_strides,
dataset0_pads,
dataset0_index_types,
modes,
wsidx_values,
test_cases,
num_uint16_case,
num_uint32_case,
num_uint32_case_imgidx,
num_uint64_case,
num_uint64_case_imgidx,
false, // skip_wide_check=false for Dataset 0
true); // apply_index_type_limits=true for Dataset 0
}
// Note: Dataset 1 (asymmetric) and Dataset 2 (wide window) are tested separately
// via pooling2d_asymmetric.cpp and pooling2d_wide.cpp to maintain the same
// structure as the original ctest implementation.
// Cache the results
cached_test_cases = test_cases;
cached = true;
return test_cases;
}
} // anonymous namespace
// Derived classes for Dataset 0 (standard pooling)
class GPU_Pooling2d_FP32 : public pooling2d_gtest::Pooling2dCommon<float>
{
};
class GPU_Pooling2d_FP16 : public pooling2d_gtest::Pooling2dCommon<half_float::half>
{
};
class GPU_Pooling2d_BFP16 : public pooling2d_gtest::Pooling2dCommon<bfloat16>
{
};
TEST_P(GPU_Pooling2d_FP32, FloatTest_pooling2d) { RunTest(); }
TEST_P(GPU_Pooling2d_FP16, HalfTest_pooling2d) { RunTest(); }
TEST_P(GPU_Pooling2d_BFP16, BFloat16Test_pooling2d) { RunTest(); }
INSTANTIATE_TEST_SUITE_P(Full,
GPU_Pooling2d_FP32,
testing::ValuesIn(GetPooling2dTestCases()),
pooling2d_gtest::GetPoolingTestCaseName);
INSTANTIATE_TEST_SUITE_P(Full,
GPU_Pooling2d_FP16,
testing::ValuesIn(GetPooling2dTestCases()),
pooling2d_gtest::GetPoolingTestCaseName);
INSTANTIATE_TEST_SUITE_P(Full,
GPU_Pooling2d_BFP16,
testing::ValuesIn(GetPooling2dTestCases()),
pooling2d_gtest::GetPoolingTestCaseName);