Unverified Commit ab60b390 authored by Mateusz Ozga's avatar Mateusz Ozga Committed by GitHub
Browse files

Rewrite *sh reduce unit tests to gtest: part 1 (#1407)



* Rewrite .sh test to Gtest

* review chnages

* Removew unused comments

* Review v2

* Typo

* Separete UT: AMAX, MAX, MIN; added template params to trigger them

* Update test/reduce/reduce_no_index.cpp

---------
Co-authored-by: default avatarBartłomiej Kocot <barkocot@amd.com>
parent 4a870942
#!/bin/bash
## The following will be used for CI
set -x
## for float
bin/test_reduce_with_index -D 64,4,280,82 -R 0,1,2,3 0 2
bin/test_reduce_with_index -D 64,4,280,82 -R 0,1,2 0 2
bin/test_reduce_with_index -D 64,4,280,82 -R 0,1,3 0 2
bin/test_reduce_with_index -D 64,4,280,82 -R 0,2,3 0 2
bin/test_reduce_with_index -D 64,4,280,82 -R 1,2,3 0 2
bin/test_reduce_with_index -D 64,4,280,82 -R 0 0 2
bin/test_reduce_with_index -D 64,4,280,82 -R 1 0 2
bin/test_reduce_with_index -D 64,4,280,82 -R 2 0 2
bin/test_reduce_with_index -D 64,4,280,82 -R 3 0 2
## for float64
bin/test_reduce_with_index -D 64,4,280,82 -R 0,1,2,3 6 2
bin/test_reduce_with_index -D 64,4,280,82 -R 0,1,2 6 2
bin/test_reduce_with_index -D 64,4,280,82 -R 0,1,3 6 2
bin/test_reduce_with_index -D 64,4,280,82 -R 0,2,3 6 2
bin/test_reduce_with_index -D 64,4,280,82 -R 1,2,3 6 2
bin/test_reduce_with_index -D 64,4,280,82 -R 0 6 2
bin/test_reduce_with_index -D 64,4,280,82 -R 1 6 2
bin/test_reduce_with_index -D 64,4,280,82 -R 2 6 2
bin/test_reduce_with_index -D 64,4,280,82 -R 3 6 2
## for float16
bin/test_reduce_with_index -D 64,4,280,82 -R 0,1,2,3 1 2
bin/test_reduce_with_index -D 64,4,280,82 -R 0,1,2 1 2
bin/test_reduce_with_index -D 64,4,280,82 -R 0,1,3 1 2
bin/test_reduce_with_index -D 64,4,280,82 -R 0,2,3 1 2
bin/test_reduce_with_index -D 64,4,280,82 -R 1,2,3 1 2
bin/test_reduce_with_index -D 64,4,280,82 -R 0 1 2
bin/test_reduce_with_index -D 64,4,280,82 -R 1 1 2
bin/test_reduce_with_index -D 64,4,280,82 -R 2 1 2
bin/test_reduce_with_index -D 64,4,280,82 -R 3 1 2
## for int8_t
bin/test_reduce_with_index -D 64,4,280,82 -R 0,1,2,3 3 2
bin/test_reduce_with_index -D 64,4,280,82 -R 0,1,2 3 2
bin/test_reduce_with_index -D 64,4,280,82 -R 0,1,3 3 2
bin/test_reduce_with_index -D 64,4,280,82 -R 0,2,3 3 2
bin/test_reduce_with_index -D 64,4,280,82 -R 1,2,3 3 2
bin/test_reduce_with_index -D 64,4,280,82 -R 0 3 2
bin/test_reduce_with_index -D 64,4,280,82 -R 1 3 2
bin/test_reduce_with_index -D 64,4,280,82 -R 2 3 2
bin/test_reduce_with_index -D 64,4,280,82 -R 3 3 2
## for bfloat16
bin/test_reduce_with_index -D 64,4,280,82 -R 0,1,2,3 5 2
bin/test_reduce_with_index -D 64,4,280,82 -R 0,1,2 5 2
bin/test_reduce_with_index -D 64,4,280,82 -R 0,1,3 5 2
bin/test_reduce_with_index -D 64,4,280,82 -R 0,2,3 5 2
bin/test_reduce_with_index -D 64,4,280,82 -R 1,2,3 5 2
bin/test_reduce_with_index -D 64,4,280,82 -R 0 5 2
bin/test_reduce_with_index -D 64,4,280,82 -R 1 5 2
bin/test_reduce_with_index -D 64,4,280,82 -R 2 5 2
bin/test_reduce_with_index -D 64,4,280,82 -R 3 5 2
set +x
add_test_executable(test_reduce_no_index reduce_no_index.cpp) add_gtest_executable(test_reduce_no_index reduce_no_index.cpp)
add_test_executable(test_reduce_with_index reduce_with_index.cpp) add_gtest_executable(test_reduce_with_index reduce_with_index.cpp)
target_link_libraries(test_reduce_no_index PRIVATE utility device_reduce_instance) target_link_libraries(test_reduce_no_index PRIVATE utility device_reduce_instance)
target_link_libraries(test_reduce_with_index PRIVATE utility device_reduce_instance) target_link_libraries(test_reduce_with_index PRIVATE utility device_reduce_instance)
// SPDX-License-Identifier: MIT // SPDX-License-Identifier: MIT
// Copyright (c) 2018-2023, Advanced Micro Devices, Inc. All rights reserved. // Copyright (c) 2018-2024, Advanced Micro Devices, Inc. All rights reserved.
#include <getopt.h> #include <getopt.h>
#include "ck/library/utility/host_common_util.hpp" #include "ck/library/utility/host_common_util.hpp"
#include "profiler/profile_reduce_impl.hpp" #include "profiler/profile_reduce_impl.hpp"
#include <gtest/gtest.h>
using namespace ck; using namespace ck;
static struct option long_options[] = {{"inLengths", required_argument, nullptr, 'D'}, struct ReduceParam
{"reduceDimensions", required_argument, nullptr, 'R'}, {
{"scales", required_argument, nullptr, 'S'}, bool do_verification{true};
{"help", no_argument, nullptr, '?'}, bool propagateNan{false};
{nullptr, 0, nullptr, 0}}; bool useIndex{false};
bool time_kernel{false};
bool do_dumpout{false};
int init_method{2};
float alpha{1.0f};
float beta{0.0f};
std::vector<size_t> inLengths{64, 4, 280, 82};
std::vector<int> reduceDims{0, 1, 2, 3};
};
class SimpleAppArgs std::vector<std::vector<int>> SetGenericReduceDim()
{ {
private: return {{0, 1, 2, 3}, {0, 1, 2}, {0, 1, 3}, {0, 2, 3}, {1, 2, 3}, {0}, {1}, {2}, {3}};
int option_index = 0; }
public: template <typename T>
std::vector<size_t> inLengths; class ReduceWithIndexTest : public ::testing::Test
std::vector<int> reduceDims; {
std::vector<float> scales; protected:
using InDataType = std::tuple_element_t<0, T>;
using AccDataType = std::tuple_element_t<1, T>;
using OutDataType = std::tuple_element_t<2, T>;
int data_type; static std::vector<ReduceParam> params;
int init_method = 1;
public: static void SetUpTestSuite()
void show_usage(const char* cmd)
{ {
std::cout << "Usage of " << cmd << std::endl; // set testcase variables
std::cout << "--inLengths or -D, comma separated list of input tensor dimension lengths " ReduceParam set;
"(only 4-d tensor supported)" const auto setReduceDim = SetGenericReduceDim();
<< std::endl;
std::cout << "--reduceDimensions or -R comma seperated list of dimension indexes to reduce "
"(only 1 or 3 or 4 dimensions supported)"
<< std::endl;
std::cout << "--scales or -S, comma separated two float values for alpha and beta"
<< std::endl;
std::cout << "Arg1 -- data type (0: fp16, 1: fp32, 3: int8, 5: bp16, 6: fp64)" << std::endl;
std::cout << "Arg2 -- init method(0=no init, 1=single integer value, 2=scope integer "
"value, 3=decimal value)"
<< std::endl;
};
int processArgs(int argc, char* argv[])
{
using ck::host_common::getTypeValuesFromString;
int ch;
while(1) for(std::size_t i(0); i < setReduceDim.size(); ++i)
{ {
ch = getopt_long(argc, argv, "D:R:S:", long_options, &option_index); set.reduceDims = setReduceDim[i];
if(ch == -1) params.emplace_back(set);
break; }
switch(ch) }
template <ReduceTensorOp ReduceOpIdType>
void Run()
{ {
case 'D': for(auto param : this->params)
if(!optarg)
throw std::runtime_error("Invalid option format!");
inLengths = getTypeValuesFromString<size_t>(optarg);
break;
case 'R':
if(!optarg)
throw std::runtime_error("Invalid option format!");
reduceDims = getTypeValuesFromString<int>(optarg);
break;
case 'S':
if(!optarg)
throw std::runtime_error("Invalid option format!");
scales = getTypeValuesFromString<float>(optarg);
break;
case '?':
if(std::string(long_options[option_index].name) == "help")
{ {
show_usage(argv[0]); bool success = ck::profiler::profile_reduce_impl<InDataType, AccDataType, OutDataType>(
return (-1); param.do_verification,
}; param.init_method,
break; param.do_dumpout,
default: show_usage(argv[0]); return (-1); param.time_kernel,
}; param.inLengths,
}; param.reduceDims,
ReduceOpIdType,
param.propagateNan,
param.useIndex,
param.alpha,
param.beta);
EXPECT_TRUE(success);
}
}
};
if(optind + 2 > argc) template <typename T>
throw std::runtime_error("Invalid cmd-line arguments, more argumetns are needed!"); std::vector<ReduceParam> ReduceWithIndexTest<T>::params = {};
data_type = std::atoi(argv[optind++]); using Reduce_float_types = ::testing::Types<std::tuple<float, float, float>>;
init_method = std::atoi(argv[optind]); using Reduce_double_types = ::testing::Types<std::tuple<double, double, double>>;
using Reduce_int8t_types = ::testing::Types<std::tuple<int8_t, int8_t, int8_t>>;
using Reduce_half_types = ::testing::Types<std::tuple<ck::half_t, ck::half_t, ck::half_t>>;
using Reduce_bhalf_float_Types = ::testing::Types<std::tuple<ck::bhalf_t, float, ck::bhalf_t>>;
if(scales.empty()) template <typename TType>
{ class ReduceWithNoIndexFloat : public ReduceWithIndexTest<TType>
scales.push_back(1.0f); {
scales.push_back(0.0f); };
};
if(inLengths.size() != 4 || template <typename TType>
(reduceDims.size() != 1 && reduceDims.size() != 3 && reduceDims.size() != 4)) class ReduceWithNoIndexDouble : public ReduceWithIndexTest<TType>
return (-1); {
};
if(data_type != 0 && data_type != 1 && data_type != 3 && data_type != 5 && data_type != 6) template <typename TType>
return (-1); class ReduceWithNoIndexInt8 : public ReduceWithIndexTest<TType>
{
};
return (0); template <typename TType>
}; class ReduceWithNoIndexHalf : public ReduceWithIndexTest<TType>
{
}; };
bool test_reduce_no_index(int data_type, template <typename TType>
int init_method, class ReduceWithNoIndexBHalfFloat : public ReduceWithIndexTest<TType>
std::vector<int> reduceDims,
std::vector<size_t> inLengths,
ReduceTensorOp reduceOpId,
bool propagateNan,
float alpha,
float beta)
{ {
using ck::profiler::profile_reduce_impl; };
bool result = true; TYPED_TEST_SUITE(ReduceWithNoIndexFloat, Reduce_float_types);
TYPED_TEST_SUITE(ReduceWithNoIndexDouble, Reduce_double_types);
TYPED_TEST_SUITE(ReduceWithNoIndexInt8, Reduce_int8t_types);
TYPED_TEST_SUITE(ReduceWithNoIndexHalf, Reduce_half_types);
TYPED_TEST_SUITE(ReduceWithNoIndexBHalfFloat, Reduce_bhalf_float_Types);
if(data_type == 0) TYPED_TEST(ReduceWithNoIndexFloat, ReduceWithNoIndexTestFloat_AMAX)
{ {
result = profile_reduce_impl<float, float, float>(true, // trigger Run() -> Generic
init_method, this->template Run<ReduceTensorOp::AMAX>();
false, }
false,
inLengths,
reduceDims,
reduceOpId,
propagateNan,
false,
alpha,
beta);
}
else if(data_type == 1)
{
result = profile_reduce_impl<ck::half_t, float, ck::half_t>(true,
init_method,
false,
false,
inLengths,
reduceDims,
reduceOpId,
propagateNan,
false,
alpha,
beta);
}
else if(data_type == 3)
{
result = profile_reduce_impl<int8_t, int32_t, int8_t>(true,
init_method,
false,
false,
inLengths,
reduceDims,
reduceOpId,
propagateNan,
false,
alpha,
beta);
}
else if(data_type == 5)
{
result = profile_reduce_impl<ck::bhalf_t, float, ck::bhalf_t>(true,
init_method,
false,
false,
inLengths,
reduceDims,
reduceOpId,
propagateNan,
false,
alpha,
beta);
}
else if(data_type == 6)
{
result = profile_reduce_impl<double, double, double>(true,
init_method,
false,
false,
inLengths,
reduceDims,
reduceOpId,
propagateNan,
false,
alpha,
beta);
}
return (result); TYPED_TEST(ReduceWithNoIndexFloat, ReduceWithNoIndexTestFloat_MIN)
}; {
// trigger Run() -> Generic
this->template Run<ReduceTensorOp::MIN>();
}
constexpr ReduceTensorOp reduceOpId = ReduceTensorOp::AVG; TYPED_TEST(ReduceWithNoIndexFloat, ReduceWithNoIndexTestFloat_MAX)
constexpr bool propagateNan = false; {
// trigger Run() -> Generic
this->template Run<ReduceTensorOp::MAX>();
}
int main(int argc, char* argv[]) TYPED_TEST(ReduceWithNoIndexDouble, ReduceWithNoIndexTestDouble_AMAX)
{ {
SimpleAppArgs args; // trigger Run() -> Generic
this->template Run<ReduceTensorOp::AMAX>();
}
bool result = true; TYPED_TEST(ReduceWithNoIndexDouble, ReduceWithNoIndexTestDouble_MIN)
{
// trigger Run() -> Generic
this->template Run<ReduceTensorOp::MIN>();
}
if(argc == 1) TYPED_TEST(ReduceWithNoIndexDouble, ReduceWithNoIndexTestDouble_MAX)
{ {
int data_type = 1; // trigger Run() -> Generic
int init_method = 2; this->template Run<ReduceTensorOp::MAX>();
std::vector<size_t> inLengths{64, 4, 280, 80}; }
std::vector<std::vector<int>> v_reduceDims{
{0, 1, 2, 3}, {0, 1, 2}, {1, 2, 3}, {0, 1, 3}, {0, 2, 3}, {0}, {1}, {2}, {3}}; TYPED_TEST(ReduceWithNoIndexInt8, ReduceWithNoIndexTestInt8_AMAX)
{
for(auto& reduceDims : v_reduceDims) // trigger Run() -> Generic
result = result && test_reduce_no_index(data_type, this->template Run<ReduceTensorOp::AMAX>();
init_method, }
reduceDims,
inLengths, TYPED_TEST(ReduceWithNoIndexInt8, ReduceWithNoIndexTestInt8_MIN)
reduceOpId, {
propagateNan, // trigger Run() -> Generic
1.0f, this->template Run<ReduceTensorOp::MIN>();
0.0f); }
}
else
{
if(args.processArgs(argc, argv) < 0)
{
throw std::runtime_error(
"Invalid input arguments, test_reduce_no_index could not be executed!");
};
result = test_reduce_no_index(args.data_type,
args.init_method,
args.reduceDims,
args.inLengths,
reduceOpId,
propagateNan,
args.scales[0],
args.scales[1]);
}
std::cout << "test_reduce_no_index ..... " << (result ? "SUCCESS" : "FAILURE") << std::endl; TYPED_TEST(ReduceWithNoIndexInt8, ReduceWithNoIndexTestInt8_MAX)
{
// trigger Run() -> Generic
this->template Run<ReduceTensorOp::MAX>();
}
TYPED_TEST(ReduceWithNoIndexHalf, ReduceWithNoIndexTestHalf_AMAX)
{
// trigger Run() -> Generic
this->template Run<ReduceTensorOp::AMAX>();
}
TYPED_TEST(ReduceWithNoIndexHalf, ReduceWithNoIndexTestHalf_MIN)
{
// trigger Run() -> Generic
this->template Run<ReduceTensorOp::MIN>();
}
TYPED_TEST(ReduceWithNoIndexHalf, ReduceWithNoIndexTestHalf_MAX)
{
// trigger Run() -> Generic
this->template Run<ReduceTensorOp::MAX>();
}
TYPED_TEST(ReduceWithNoIndexBHalfFloat, ReduceWithNoIndexTesBtHalfFloat_AMAX)
{
// trigger Run() -> Generic
this->template Run<ReduceTensorOp::AMAX>();
}
return (result ? 0 : -1); TYPED_TEST(ReduceWithNoIndexBHalfFloat, ReduceWithNoIndexTestBHalfFloat_MIN)
{
// trigger Run() -> Generic
this->template Run<ReduceTensorOp::MIN>();
}
TYPED_TEST(ReduceWithNoIndexBHalfFloat, ReduceWithNoIndexTestBHalfFloat_MAX)
{
// trigger Run() -> Generic
this->template Run<ReduceTensorOp::MAX>();
} }
// SPDX-License-Identifier: MIT // SPDX-License-Identifier: MIT
// Copyright (c) 2018-2023, Advanced Micro Devices, Inc. All rights reserved. // Copyright (c) 2018-2024, Advanced Micro Devices, Inc. All rights reserved.
#include <getopt.h> #include <getopt.h>
#include "ck/library/utility/host_common_util.hpp" #include "ck/library/utility/host_common_util.hpp"
#include "profiler/profile_reduce_impl.hpp" #include "profiler/profile_reduce_impl.hpp"
#include <gtest/gtest.h>
using namespace ck; using namespace ck;
static struct option long_options[] = {{"inLengths", required_argument, nullptr, 'D'}, struct ReduceParam
{"reduceDimensions", required_argument, nullptr, 'R'}, {
{"scales", required_argument, nullptr, 'S'}, bool do_verification{true};
{"help", no_argument, nullptr, '?'}, bool propagateNan{false};
{nullptr, 0, nullptr, 0}}; bool useIndex{false};
bool time_kernel{false};
bool do_dumpout{false};
int init_method{2};
float alpha{1.0f};
float beta{0.0f};
std::vector<size_t> inLengths{64, 4, 280, 82};
std::vector<int> reduceDims{0, 1, 2, 3};
};
class SimpleAppArgs std::vector<std::vector<int>> SetGenericReduceDim()
{ {
private: return {{0, 1, 2, 3}, {0, 1, 2}, {0, 1, 3}, {0, 2, 3}, {1, 2, 3}, {0}, {1}, {2}, {3}};
int option_index = 0; }
public: template <typename T>
std::vector<size_t> inLengths; class ReduceWithIndexTest : public ::testing::Test
std::vector<int> reduceDims; {
std::vector<float> scales; protected:
using InDataType = std::tuple_element_t<0, T>;
using AccDataType = std::tuple_element_t<1, T>;
using OutDataType = std::tuple_element_t<2, T>;
int data_type; static std::vector<ReduceParam> params;
int init_method = 1;
public: static void SetUpTestSuite()
void show_usage(const char* cmd)
{ {
std::cout << "Usage of " << cmd << std::endl; // set testcase variables
std::cout << "--inLengths or -D, comma separated list of input tensor dimension lengths " ReduceParam set;
"(only 4-d tensor supported)" const auto setReduceDim = SetGenericReduceDim();
<< std::endl;
std::cout << "--reduceDimensions or -R comma seperated list of dimension indexes to reduce "
"(only 1 or 3 or 4 dimensions supported)"
<< std::endl;
std::cout << "--scales or -S, comma separated two float values for alpha and beta"
<< std::endl;
std::cout << "Arg1 -- data type (1: fp32, 3: int8, 5: bp16, 6: fp64)" << std::endl;
std::cout << "Arg2 -- init method(0=no init, 1=single integer value, 2=scope integer "
"value, 3=decimal value)"
<< std::endl;
};
int processArgs(int argc, char* argv[])
{
using ck::host_common::getTypeValuesFromString;
int ch;
while(1) for(std::size_t i(0); i < setReduceDim.size(); ++i)
{ {
ch = getopt_long(argc, argv, "D:R:S:", long_options, &option_index); set.reduceDims = setReduceDim[i];
if(ch == -1) params.emplace_back(set);
break; }
switch(ch) }
template <ReduceTensorOp ReduceOpIdType>
void Run()
{ {
case 'D': for(auto param : this->params)
if(!optarg)
throw std::runtime_error("Invalid option format!");
inLengths = getTypeValuesFromString<size_t>(optarg);
break;
case 'R':
if(!optarg)
throw std::runtime_error("Invalid option format!");
reduceDims = getTypeValuesFromString<int>(optarg);
break;
case 'S':
if(!optarg)
throw std::runtime_error("Invalid option format!");
scales = getTypeValuesFromString<float>(optarg);
break;
case '?':
if(std::string(long_options[option_index].name) == "help")
{ {
show_usage(argv[0]); bool success = ck::profiler::profile_reduce_impl<InDataType, AccDataType, OutDataType>(
return (-1); param.do_verification,
}; param.init_method,
break; param.do_dumpout,
default: show_usage(argv[0]); return (-1); param.time_kernel,
}; param.inLengths,
}; param.reduceDims,
ReduceOpIdType,
param.propagateNan,
param.useIndex,
param.alpha,
param.beta);
EXPECT_TRUE(success);
}
}
};
if(optind + 2 > argc) template <typename T>
throw std::runtime_error("Invalid cmd-line arguments, more argumetns are needed!"); std::vector<ReduceParam> ReduceWithIndexTest<T>::params = {};
data_type = std::atoi(argv[optind++]); using Reduce_float_types = ::testing::Types<std::tuple<float, float, float>>;
init_method = std::atoi(argv[optind]); using Reduce_double_types = ::testing::Types<std::tuple<double, double, double>>;
using Reduce_int8t_types = ::testing::Types<std::tuple<int8_t, int8_t, int8_t>>;
using Reduce_half_types = ::testing::Types<std::tuple<ck::half_t, ck::half_t, ck::half_t>>;
using Reduce_bhalf_float_Types = ::testing::Types<std::tuple<ck::bhalf_t, float, ck::bhalf_t>>;
if(scales.empty()) template <typename TType>
{ class ReduceWithIndexFloat : public ReduceWithIndexTest<TType>
scales.push_back(1.0f); {
scales.push_back(0.0f); };
};
if(inLengths.size() != 4 || template <typename TType>
(reduceDims.size() != 1 && reduceDims.size() != 3 && reduceDims.size() != 4)) class ReduceWithIndexDouble : public ReduceWithIndexTest<TType>
return (-1); {
};
if(data_type != 0 && data_type != 1 && data_type != 3 && data_type != 5 && data_type != 6) template <typename TType>
return (-1); class ReduceWithIndexInt8 : public ReduceWithIndexTest<TType>
{
};
return (0); template <typename TType>
}; class ReduceWithIndexHalf : public ReduceWithIndexTest<TType>
{
}; };
bool test_reduce_with_index(int data_type, template <typename TType>
int init_method, class ReduceWithIndexBHalfFloat : public ReduceWithIndexTest<TType>
std::vector<int> reduceDims,
std::vector<size_t> inLengths,
ReduceTensorOp reduceOpId,
bool propagateNan,
float alpha,
float beta)
{ {
using ck::profiler::profile_reduce_impl; };
bool result = true; TYPED_TEST_SUITE(ReduceWithIndexFloat, Reduce_float_types);
TYPED_TEST_SUITE(ReduceWithIndexDouble, Reduce_double_types);
TYPED_TEST_SUITE(ReduceWithIndexInt8, Reduce_int8t_types);
TYPED_TEST_SUITE(ReduceWithIndexHalf, Reduce_half_types);
TYPED_TEST_SUITE(ReduceWithIndexBHalfFloat, Reduce_bhalf_float_Types);
if(data_type == 0) TYPED_TEST(ReduceWithIndexFloat, ReduceWithIndexTestFloat_AMAX)
{ {
result = profile_reduce_impl<float, float, float>(true, // trigger Run() -> Generic
init_method, this->template Run<ReduceTensorOp::AMAX>();
false, }
false,
inLengths,
reduceDims,
reduceOpId,
propagateNan,
true,
alpha,
beta);
}
else if(data_type == 1)
{
result = profile_reduce_impl<ck::half_t, ck::half_t, ck::half_t>(true,
init_method,
false,
false,
inLengths,
reduceDims,
reduceOpId,
propagateNan,
true,
alpha,
beta);
}
else if(data_type == 3)
{
result = profile_reduce_impl<int8_t, int8_t, int8_t>(true,
init_method,
false,
false,
inLengths,
reduceDims,
reduceOpId,
propagateNan,
true,
alpha,
beta);
}
else if(data_type == 5)
{
result = profile_reduce_impl<ck::bhalf_t, float, ck::bhalf_t>(true,
init_method,
false,
false,
inLengths,
reduceDims,
reduceOpId,
propagateNan,
true,
alpha,
beta);
}
else if(data_type == 6)
{
result = profile_reduce_impl<double, double, double>(true,
init_method,
false,
false,
inLengths,
reduceDims,
reduceOpId,
propagateNan,
true,
alpha,
beta);
}
return (result); TYPED_TEST(ReduceWithIndexFloat, ReduceWithIndexTestFloat_MIN)
}; {
// trigger Run() -> Generic
this->template Run<ReduceTensorOp::MIN>();
}
constexpr ReduceTensorOp reduceOpId = ReduceTensorOp::AMAX; TYPED_TEST(ReduceWithIndexFloat, ReduceWithIndexTestFloat_MAX)
constexpr bool propagateNan = false; {
// trigger Run() -> Generic
this->template Run<ReduceTensorOp::MAX>();
}
int main(int argc, char* argv[]) TYPED_TEST(ReduceWithIndexDouble, ReduceWithIndexTestDouble_AMAX)
{ {
SimpleAppArgs args; // trigger Run() -> Generic
this->template Run<ReduceTensorOp::AMAX>();
}
bool result = true; TYPED_TEST(ReduceWithIndexDouble, ReduceWithIndexTestDouble_MIN)
{
// trigger Run() -> Generic
this->template Run<ReduceTensorOp::MIN>();
}
if(argc == 1) TYPED_TEST(ReduceWithIndexDouble, ReduceWithIndexTestDouble_MAX)
{ {
int data_type = 1; // trigger Run() -> Generic
int init_method = 2; this->template Run<ReduceTensorOp::MAX>();
std::vector<size_t> inLengths{64, 4, 280, 80}; }
std::vector<std::vector<int>> v_reduceDims{
{0, 1, 2, 3}, {0, 1, 2}, {1, 2, 3}, {0, 1, 3}, {0, 2, 3}, {0}, {1}, {2}, {3}}; TYPED_TEST(ReduceWithIndexInt8, ReduceWithIndexTestInt8_AMAX)
{
for(auto& reduceDims : v_reduceDims) // trigger Run() -> Generic
result = result && test_reduce_with_index(data_type, this->template Run<ReduceTensorOp::AMAX>();
init_method, }
reduceDims,
inLengths, TYPED_TEST(ReduceWithIndexInt8, ReduceWithIndexTestInt8_MIN)
reduceOpId, {
propagateNan, // trigger Run() -> Generic
1.0f, this->template Run<ReduceTensorOp::MIN>();
0.0f); }
}
else
{
if(args.processArgs(argc, argv) < 0)
{
throw std::runtime_error(
"Invalid input arguments, test_reduce_with_index could not be executed!");
};
result = test_reduce_with_index(args.data_type,
args.init_method,
args.reduceDims,
args.inLengths,
reduceOpId,
propagateNan,
args.scales[0],
args.scales[1]);
}
std::cout << "test_reduce_with_index ..... " << (result ? "SUCCESS" : "FAILURE") << std::endl; TYPED_TEST(ReduceWithIndexInt8, ReduceWithIndexTestInt8_MAX)
{
// trigger Run() -> Generic
this->template Run<ReduceTensorOp::MAX>();
}
TYPED_TEST(ReduceWithIndexHalf, ReduceWithIndexTestHalf_AMAX)
{
// trigger Run() -> Generic
this->template Run<ReduceTensorOp::AMAX>();
}
TYPED_TEST(ReduceWithIndexHalf, ReduceWithIndexTestHalf_MIN)
{
// trigger Run() -> Generic
this->template Run<ReduceTensorOp::MIN>();
}
TYPED_TEST(ReduceWithIndexHalf, ReduceWithIndexTestHalf_MAX)
{
// trigger Run() -> Generic
this->template Run<ReduceTensorOp::MAX>();
}
TYPED_TEST(ReduceWithIndexBHalfFloat, ReduceWithIndexTesBtHalfFloat_AMAX)
{
// trigger Run() -> Generic
this->template Run<ReduceTensorOp::AMAX>();
}
return (result ? 0 : -1); TYPED_TEST(ReduceWithIndexBHalfFloat, ReduceWithIndexTestBHalfFloat_MIN)
{
// trigger Run() -> Generic
this->template Run<ReduceTensorOp::MIN>();
}
TYPED_TEST(ReduceWithIndexBHalfFloat, ReduceWithIndexTestBHalfFloat_MAX)
{
// trigger Run() -> Generic
this->template Run<ReduceTensorOp::MAX>();
} }
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment