Skip to content

Commit

Permalink
[gtest] Combine gtests into single binary. (#2599)
Browse files Browse the repository at this point in the history
  • Loading branch information
cderb authored Dec 22, 2023
1 parent ae2682c commit 3b5c6ce
Show file tree
Hide file tree
Showing 66 changed files with 1,736 additions and 801 deletions.
5 changes: 3 additions & 2 deletions Jenkinsfile
Original file line number Diff line number Diff line change
Expand Up @@ -48,6 +48,7 @@ def cmake_build(Map conf=[:]){

if (package_build == true) {
make_targets = "package"
setup_args = " -DMIOPEN_TEST_DISCRETE=OFF " + setup_args
}

def miopen_install_path = "${env.WORKSPACE}/install"
Expand Down Expand Up @@ -953,7 +954,7 @@ pipeline {
environment{
setup_flags="-DMIOPEN_TEST_DBSYNC=1"
make_targets='test_db_sync'
execute_cmd='./bin/test_db_sync'
execute_cmd='MIOPEN_TEST_DBSYNC=1 ./bin/test_db_sync'
}
steps{
buildHipClangJobAndReboot(lfs_pull: true, setup_flags: setup_flags, make_targets: make_targets, execute_cmd: execute_cmd,
Expand All @@ -972,7 +973,7 @@ pipeline {
environment{
setup_flags="-DMIOPEN_TEST_DBSYNC=1"
make_targets='test_db_sync'
execute_cmd='./bin/test_db_sync'
execute_cmd='MIOPEN_TEST_DBSYNC=1 ./bin/test_db_sync'
}
steps{
buildHipClangJobAndReboot(lfs_pull: true, setup_flags: setup_flags, make_targets: make_targets, execute_cmd: execute_cmd,
Expand Down
23 changes: 1 addition & 22 deletions test/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -68,6 +68,7 @@ option( MIOPEN_TEST_CONV "" OFF)
option( MIOPEN_TEST_DEEPBENCH "" OFF)
option( MIOPEN_TEST_DRIVER_ITER_MODE "" OFF)
option( MIOPEN_TEST_COMPOSABLEKERNEL "Test with composable_kernel library" ${MIOPEN_USE_COMPOSABLEKERNEL} )
option( MIOPEN_TEST_DISCRETE "Build Discrete Test Binaries" ON)

set_var_to_condition(MIOPEN_TEST_WITH_MIOPENDRIVER_DEFAULT MIOPEN_BUILD_DRIVER)
option( MIOPEN_TEST_WITH_MIOPENDRIVER "Use MIOpenDriver in tests" ${MIOPEN_TEST_WITH_MIOPENDRIVER_DEFAULT})
Expand Down Expand Up @@ -673,20 +674,6 @@ function(add_custom_test NAME)
set_tests_properties(${NAME} PROPERTIES DISABLED On)
endif()
endfunction()
if(${CODECOV_TEST})
add_custom_test(test_conv3d_codecov
COMMAND $<TARGET_FILE:test_conv3d> ${MIOPEN_TEST_FLOAT_ARG} --input 2 4 4 4 4 --weights 2 4 1 1 1 --pads_strides_dilations 0 0 0 1 1 1 1 1 1 ${MIOPEN_TEST_FLAGS_ARGS}
)
add_custom_test(test_immed_conv2d_codecov
COMMAND $<TARGET_FILE:test_immed_conv2d> ${MIOPEN_TEST_FLOAT_ARG} --input 2 2 14 14 --weights 8 2 3 3 --pads_strides_dilations 0 0 1 1 1 1 ${MIOPEN_TEST_FLAGS_ARGS}
)
add_custom_test(test_immed_conv3d_codecov
COMMAND $<TARGET_FILE:test_immed_conv3d> ${MIOPEN_TEST_FLOAT_ARG} --input 1 4 4 4 4 --weights 2 4 3 3 3 --pads_strides_dilations 0 0 0 1 1 1 1 1 1 ${MIOPEN_TEST_FLAGS_ARGS}
)
add_custom_test(test_pooling2d_codecov
COMMAND $<TARGET_FILE:test_pooling2d> ${MIOPEN_TEST_FLOAT_ARG} --input 1, 192, 28, 28 --lens 2 2 --strides 2 2 --pads 0 0 ${MIOPEN_TEST_FLAGS_ARGS}
)
endif()

if(${MIOPEN_TEST_WITH_MIOPENDRIVER})
add_custom_test(test_miopendriver_regression_issue_1576 SKIP_UNLESS_ALL GFX94X_ENABLED GFX103X_ENABLED GFX110X_ENABLED FLOAT_DISABLED HALF_ENABLED
Expand Down Expand Up @@ -776,14 +763,6 @@ set(TEST_CONV_VERBOSE_F ${MIOPEN_TEST_FLOAT_ARG} --verbose --disable-backward-da
set(TEST_CONV_VERBOSE_B ${MIOPEN_TEST_FLOAT_ARG} --verbose --disable-forward --disable-backward-weights)
set(TEST_CONV_VERBOSE_W ${MIOPEN_TEST_FLOAT_ARG} --verbose --disable-forward --disable-backward-data)

add_custom_test(test_pooling2d_asymmetric SKIP_UNLESS_ALL HALF_ENABLED GFX94X_ENABLED GFX103X_ENABLED GFX110X_ENABLED
COMMAND $<TARGET_FILE:test_pooling2d> ${MIOPEN_TEST_FLOAT_ARG} --all --dataset 1 --limit 0 ${MIOPEN_TEST_FLAGS_ARGS}
)

add_custom_test(test_pooling2d_wide SKIP_UNLESS_ALL HALF_ENABLED GFX94X_ENABLED GFX103X_ENABLED GFX110X_ENABLED
COMMAND $<TARGET_FILE:test_pooling2d> ${MIOPEN_TEST_FLOAT_ARG} --all --dataset 2 --limit 0 ${MIOPEN_TEST_FLAGS_ARGS}
)

set(IMPLICITGEMM_MLIR_ENV_F_XDLOPS ${IMPLICITGEMM_MLIR_ENV_BASE} MIOPEN_DEBUG_FIND_ONLY_SOLVER=ConvMlirIgemmFwdXdlops)
set(IMPLICITGEMM_MLIR_ENV_B_XDLOPS ${IMPLICITGEMM_MLIR_ENV_BASE} MIOPEN_DEBUG_FIND_ONLY_SOLVER=ConvMlirIgemmBwdXdlops)
set(IMPLICITGEMM_MLIR_ENV_W_XDLOPS ${IMPLICITGEMM_MLIR_ENV_BASE} MIOPEN_DEBUG_FIND_ONLY_SOLVER=ConvMlirIgemmWrWXdlops)
Expand Down
27 changes: 21 additions & 6 deletions test/immed_conv3d.cpp → test/conv3d.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -23,12 +23,13 @@
* SOFTWARE.
*
*******************************************************************************/
#include <gtest/gtest.h>
#include "conv_common.hpp"

template <class T>
struct conv3d_driver : conv_driver<T, ConvApi::Immediate>
struct conv3d_driver : conv_driver<T>
{
conv3d_driver() : conv_driver<T, ConvApi::Immediate>()
conv3d_driver() : conv_driver<T>()
{
this->add(this->input_dims, "input");
this->add(this->weight_tensor_dims, "weights");
Expand All @@ -37,16 +38,16 @@ struct conv3d_driver : conv_driver<T, ConvApi::Immediate>
this->generate_data_limited(this->get_batch_sizes(), 1, {8}));
this->add(this->input_channels,
"input_channels",
this->generate_data_limited(this->get_input_channels(), 1, {2}));
this->generate_data_limited(this->get_input_channels(), 1, {32}));
this->add(this->output_channels,
"output_channels",
this->generate_data_limited(this->get_output_channels(), 1, {16}));
this->generate_data_limited(this->get_output_channels(), 1, {32}));
this->add(this->spatial_dim_elements,
"spatial_dim_elements",
this->generate_data_limited(this->get_3d_spatial_dims(), 1, {16, 16, 16}));
this->add(this->filter_dims,
"filter_dims",
this->generate_data_limited(this->get_3d_filter_dims(), 2, {5, 5, 5}));
this->generate_data_limited(this->get_3d_filter_dims(), 2, {3, 3, 3}));
this->add(this->pads_strides_dilations,
"pads_strides_dilations",
this->generate_data_limited(this->get_3d_pads_strides_dilations(), 2));
Expand All @@ -59,4 +60,18 @@ struct conv3d_driver : conv_driver<T, ConvApi::Immediate>
}
};

int main(int argc, const char* argv[]) { test_drive<conv3d_driver>(argc, argv); }
class Conv3dFloat : public testing::TestWithParam<std::vector<std::string>>
{
};

class Conv3dHalf : public testing::TestWithParam<std::vector<std::string>>
{
};

class Conv3dBFloat16 : public testing::TestWithParam<std::vector<std::string>>
{
};

class Conv3dInt8 : public testing::TestWithParam<std::vector<std::string>>
{
};
7 changes: 6 additions & 1 deletion test/driver.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -1242,6 +1242,11 @@ void test_drive_impl_1(std::string program_name, std::vector<std::string> as)
Driver d{};
d.program_name = program_name;

std::cout << program_name << " ";
for(const auto& str : as)
std::cout << str << " ";
std::cout << std::endl;

std::set<std::string> keywords{
"--help", "-h", "--half", "--float", "--double", "--int8", "--bfloat16"};
d.parse(keyword_set{keywords});
Expand Down Expand Up @@ -1381,7 +1386,7 @@ template <template <class...> class Driver>
void test_drive(int argc, const char* argv[])
{
std::vector<std::string> as(argv + 1, argv + argc);
as.emplace_back("--float");
// as.emplace_back("--float");
for(auto&& arg : as)
{
if(arg == "--half")
Expand Down
84 changes: 52 additions & 32 deletions test/gtest/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -7,37 +7,35 @@ set(SOURCES
)

if(MIOPEN_BACKEND_OPENCL)
set(SKIP_TESTS dumpTensorTest)
set(SKIP_TESTS dumpTensorTest.cpp)
endif()

function(add_gtest TEST_NAME)
if( NOT (TEST_NAME IN_LIST SKIP_TESTS))
message("Adding Test: " ${TEST_NAME})
add_executable(test_${TEST_NAME} ${TEST_NAME}.cpp ${SOURCES})
if(WIN32)
target_compile_definitions(test_${TEST_NAME} PRIVATE NOMINMAX)
endif()
add_dependencies(tests test_${TEST_NAME})
add_dependencies(check test_${TEST_NAME})
target_compile_options(test_${TEST_NAME} PRIVATE -Wno-global-constructors -Wno-undef)
target_include_directories(test_${TEST_NAME} PRIVATE ../ ../../src/kernels)
if(MIOPEN_ENABLE_AI_KERNEL_TUNING)
target_link_libraries(test_${TEST_NAME} frugally-deep::fdeep Eigen3::Eigen)
endif()
target_link_libraries(test_${TEST_NAME} GTest::gtest GTest::gtest_main MIOpen ${Boost_LIBRARIES} hip::host $<BUILD_INTERFACE:roc::rocblas>)
if(NOT MIOPEN_EMBED_DB STREQUAL "")
target_link_libraries(test_${TEST_NAME} $<BUILD_INTERFACE:miopen_data>)
endif()
if(NOT WIN32) # TODO: cannot run on Windows due to missing DLL dependencies
# Enable CMake to discover the test binary
# Extend GTest DISCOVERY_TIMEOUT to 5 mins
gtest_discover_tests(test_${TEST_NAME} DISCOVERY_TIMEOUT 300 PROPERTIES ENVIRONMENT "MIOPEN_USER_DB_PATH=${CMAKE_CURRENT_BINARY_DIR};MIOPEN_TEST_FLOAT_ARG=${MIOPEN_TEST_FLOAT_ARG};MIOPEN_TEST_ALL=${MIOPEN_TEST_ALL};MIOPEN_TEST_MLIR=${MIOPEN_TEST_MLIR};MIOPEN_TEST_COMPOSABLEKERNEL=${MIOPEN_TEST_COMPOSABLEKERNEL}")
endif()

if(WIN32)
# Refer to https://en.cppreference.com/w/cpp/language/types for details.
target_compile_options(test_${TEST_NAME} PRIVATE $<BUILD_INTERFACE:$<$<CXX_COMPILER_ID:Clang>:-U__LP64__>>)
endif()
function(add_gtest TEST_NAME TEST_CPP)
message("Adding Test: " ${TEST_NAME} " : " ${TEST_CPP})
add_executable(${TEST_NAME} ${TEST_CPP} ${SOURCES})
if(WIN32)
target_compile_definitions(${TEST_NAME} PRIVATE NOMINMAX)
endif()
add_dependencies(tests ${TEST_NAME})
add_dependencies(check ${TEST_NAME})
target_compile_options(${TEST_NAME} PRIVATE -Wno-global-constructors -Wno-undef)
target_include_directories(${TEST_NAME} PRIVATE ../ ../../src/kernels)
if(MIOPEN_ENABLE_AI_KERNEL_TUNING)
target_link_libraries(${TEST_NAME} frugally-deep::fdeep Eigen3::Eigen)
endif()
target_link_libraries(${TEST_NAME} GTest::gtest GTest::gtest_main MIOpen ${Boost_LIBRARIES} hip::host $<BUILD_INTERFACE:roc::rocblas>)
if(NOT MIOPEN_EMBED_DB STREQUAL "")
target_link_libraries(${TEST_NAME} $<BUILD_INTERFACE:miopen_data>)
endif()
if(NOT WIN32) # TODO: cannot run on Windows due to missing DLL dependencies
# Enable CMake to discover the test binary
# Extend GTest DISCOVERY_TIMEOUT to 5 mins
gtest_discover_tests(${TEST_NAME} DISCOVERY_TIMEOUT 300 PROPERTIES ENVIRONMENT "MIOPEN_USER_DB_PATH=${CMAKE_CURRENT_BINARY_DIR};MIOPEN_TEST_FLOAT_ARG=${MIOPEN_TEST_FLOAT_ARG};MIOPEN_TEST_ALL=${MIOPEN_TEST_ALL};MIOPEN_TEST_MLIR=${MIOPEN_TEST_MLIR};MIOPEN_TEST_COMPOSABLEKERNEL=${MIOPEN_TEST_COMPOSABLEKERNEL};CODECOV_TEST=${CODECOV_TEST};MIOPEN_TEST_DBSYNC=${MIOPEN_TEST_DBSYNC}")
endif()

if(WIN32)
# Refer to https://en.cppreference.com/w/cpp/language/types for details.
target_compile_options(${TEST_NAME} PRIVATE $<BUILD_INTERFACE:$<$<CXX_COMPILER_ID:Clang>:-U__LP64__>>)
endif()
endfunction()

Expand All @@ -47,7 +45,29 @@ foreach(SOURCE ${SOURCES})
list(REMOVE_ITEM TESTS ${CMAKE_CURRENT_SOURCE_DIR}/${SOURCE})
endforeach()

foreach(TEST ${TESTS})
get_filename_component(BASE_NAME ${TEST} NAME_WE)
add_gtest(${BASE_NAME})
foreach(SOURCE ${SKIP_TESTS})
list(REMOVE_ITEM TESTS ${CMAKE_CURRENT_SOURCE_DIR}/${SOURCE})
endforeach()

if( MIOPEN_TEST_DISCRETE )
foreach(TEST ${TESTS})
get_filename_component(BASE_NAME ${TEST} NAME_WE)
add_gtest(test_${BASE_NAME} ${BASE_NAME}.cpp)
endforeach()

else()
foreach(TEST ${TESTS})
get_filename_component(BASE_NAME ${TEST} NAME)
list(APPEND TESTS_CPP ${BASE_NAME})
endforeach()

add_gtest(miopen_gtest "${TESTS_CPP}")

if( NOT ENABLE_ASAN_PACKAGING )
install(TARGETS miopen_gtest
PERMISSIONS OWNER_READ OWNER_WRITE OWNER_EXECUTE GROUP_READ GROUP_EXECUTE WORLD_READ WORLD_EXECUTE
DESTINATION ${CMAKE_INSTALL_BINDIR})
endif()
endif()


2 changes: 1 addition & 1 deletion test/gtest/ai_heuristics.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -31,7 +31,7 @@

struct AIModelTestCase
{
struct ConvTestCase conv;
struct ConvTestCaseBase conv;
miopen::conv::Direction direction;
miopenDataType_t data_type;
miopenTensorLayout_t layout;
Expand Down
21 changes: 9 additions & 12 deletions test/gtest/bad_fusion_plan.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -29,9 +29,12 @@

#include "tensor_holder.hpp"
#include "get_handle.hpp"
#include "conv_test_base.hpp"

#if MIOPEN_BACKEND_HIP

namespace bad_fusion_plan {

void setEnvironmentVariable(const std::string& name, const std::string& value)
{
int ret = 0;
Expand All @@ -45,16 +48,7 @@ void setEnvironmentVariable(const std::string& name, const std::string& value)
EXPECT_EQ(ret, 0);
}

template <typename T>
miopenDataType_t GetDataType();

template <>
miopenDataType_t GetDataType<half_float::half>()
{
return miopenHalf;
}

struct ConvTestCase
struct ConvTestCaseFusion
{
size_t N;
size_t C;
Expand All @@ -69,7 +63,7 @@ struct ConvTestCase
size_t stride_y;
size_t dilation_x;
size_t dilation_y;
friend std::ostream& operator<<(std::ostream& os, const ConvTestCase& tc)
friend std::ostream& operator<<(std::ostream& os, const ConvTestCaseFusion& tc)
{
return os << "(N: " << tc.N << " C:" << tc.C << " H:" << tc.H << " W:" << tc.W
<< " k: " << tc.k << " y:" << tc.y << " x:" << tc.x << " pad_y:" << tc.pad_y
Expand All @@ -88,7 +82,7 @@ struct ConvTestCase
}
};

const static ConvTestCase conv_config = {64, 64, 56, 56, 64, 3, 3, 1, 1, 1, 1, 1, 1};
const static ConvTestCaseFusion conv_config = {64, 64, 56, 56, 64, 3, 3, 1, 1, 1, 1, 1, 1};

template <typename Solver, typename T>
class TestFusionPlan
Expand Down Expand Up @@ -172,6 +166,9 @@ class TestFusionPlan
bool skip_test;
};

} // namespace bad_fusion_plan
using namespace bad_fusion_plan;

TEST(TestFusionPlan, GoodFusionPlan)
{
TestFusionPlan<miopen::solver::fusion::ConvCKIgemmFwdBiasActivFused, half_float::half> obj(
Expand Down
8 changes: 4 additions & 4 deletions test/gtest/bn_bwd.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -54,20 +54,20 @@ TEST_P(BNBwdTestDouble, DISABLED_BnBwdCKDouble) {}

INSTANTIATE_TEST_SUITE_P(BNBwdTestTestHalfNHWCSuite,
BNBwdTestTestHalf,
testing::Combine(testing::ValuesIn(Network1()),
testing::Combine(testing::ValuesIn(Network1<BNTestCase>()),
testing::Values(miopenTensorNHWC)));

INSTANTIATE_TEST_SUITE_P(BNBwdTestFloatNHWCSuite,
BNBwdTestFloat,
testing::Combine(testing::ValuesIn(Network1()),
testing::Combine(testing::ValuesIn(Network1<BNTestCase>()),
testing::Values(miopenTensorNHWC)));

INSTANTIATE_TEST_SUITE_P(BNBwdTestBFloat16NHWCSuite,
BNBwdTestBFloat16,
testing::Combine(testing::ValuesIn(Network1()),
testing::Combine(testing::ValuesIn(Network1<BNTestCase>()),
testing::Values(miopenTensorNHWC)));

INSTANTIATE_TEST_SUITE_P(BNBwdTestDoubleNHWCSuite,
BNBwdTestDouble,
testing::Combine(testing::ValuesIn(Network1()),
testing::Combine(testing::ValuesIn(Network1<BNTestCase>()),
testing::Values(miopenTensorNHWC)));
8 changes: 4 additions & 4 deletions test/gtest/bn_fwd_train.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -54,20 +54,20 @@ TEST_P(BNFwdTrainTestBFloat16, DISABLED_BnFwdTrainCKBFloat16) {}

INSTANTIATE_TEST_SUITE_P(BNFwdTrainTestHalfNHWCSuite,
BNFwdTrainTestHalf,
testing::Combine(testing::ValuesIn(Network1()),
testing::Combine(testing::ValuesIn(Network1<BNTestCase>()),
testing::Values(miopenTensorNHWC)));

INSTANTIATE_TEST_SUITE_P(BNFwdTrainTestFloatNHWCSuite,
BNFwdTrainTestFloat,
testing::Combine(testing::ValuesIn(Network1()),
testing::Combine(testing::ValuesIn(Network1<BNTestCase>()),
testing::Values(miopenTensorNHWC)));

INSTANTIATE_TEST_SUITE_P(BNFwdTrainTestFloatNHWCSuite,
BNFwdTrainTestDouble,
testing::Combine(testing::ValuesIn(Network1()),
testing::Combine(testing::ValuesIn(Network1<BNTestCase>()),
testing::Values(miopenTensorNHWC)));

INSTANTIATE_TEST_SUITE_P(BNFwdTrainTestFloatNHWCSuite,
BNFwdTrainTestBFloat16,
testing::Combine(testing::ValuesIn(Network1()),
testing::Combine(testing::ValuesIn(Network1<BNTestCase>()),
testing::Values(miopenTensorNHWC)));
8 changes: 4 additions & 4 deletions test/gtest/bn_infer.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -54,20 +54,20 @@ TEST_P(BNInferTestBFloat16, DISABLED_BnInferCKBFloat16) {}

INSTANTIATE_TEST_SUITE_P(BNInferTestHalfNHWCSuite,
BNInferTestHalf,
testing::Combine(testing::ValuesIn(Network1()),
testing::Combine(testing::ValuesIn(Network1<BNTestCase>()),
testing::Values(miopenTensorNHWC)));

INSTANTIATE_TEST_SUITE_P(BNInferTestFloatNHWCSuite,
BNInferTestFloat,
testing::Combine(testing::ValuesIn(Network1()),
testing::Combine(testing::ValuesIn(Network1<BNTestCase>()),
testing::Values(miopenTensorNHWC)));

INSTANTIATE_TEST_SUITE_P(BNInferTestFloatNHWCSuite,
BNInferTestDouble,
testing::Combine(testing::ValuesIn(Network1()),
testing::Combine(testing::ValuesIn(Network1<BNTestCase>()),
testing::Values(miopenTensorNHWC)));

INSTANTIATE_TEST_SUITE_P(BNInferTestFloatNHWCSuite,
BNInferTestBFloat16,
testing::Combine(testing::ValuesIn(Network1()),
testing::Combine(testing::ValuesIn(Network1<BNTestCase>()),
testing::Values(miopenTensorNHWC)));
Loading

0 comments on commit 3b5c6ce

Please sign in to comment.