Skip to content
GitLab
Menu
Projects
Groups
Snippets
Loading...
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
Menu
Open sidebar
gaoqiong
composable_kernel_ROCM
Commits
e2eb0418
Commit
e2eb0418
authored
Aug 12, 2024
by
Jun Liu
Browse files
Merge branch 'develop' into amd-develop
parents
f2ba10b8
cbb6f2ab
Changes
22
Hide whitespace changes
Inline
Side-by-side
Showing
2 changed files
with
336 additions
and
426 deletions
+336
-426
test/reduce/reduce_no_index.cpp
test/reduce/reduce_no_index.cpp
+168
-213
test/reduce/reduce_with_index.cpp
test/reduce/reduce_with_index.cpp
+168
-213
No files found.
test/reduce/reduce_no_index.cpp
View file @
e2eb0418
// SPDX-License-Identifier: MIT
// Copyright (c) 2018-202
3
, Advanced Micro Devices, Inc. All rights reserved.
// Copyright (c) 2018-202
4
, Advanced Micro Devices, Inc. All rights reserved.
#include <getopt.h>
#include "ck/library/utility/host_common_util.hpp"
#include "profiler/profile_reduce_impl.hpp"
#include <gtest/gtest.h>
using
namespace
ck
;
static
struct
option
long_options
[]
=
{{
"inLengths"
,
required_argument
,
nullptr
,
'D'
},
{
"reduceDimensions"
,
required_argument
,
nullptr
,
'R'
},
{
"scales"
,
required_argument
,
nullptr
,
'S'
},
{
"help"
,
no_argument
,
nullptr
,
'?'
},
{
nullptr
,
0
,
nullptr
,
0
}};
struct
ReduceParam
{
bool
do_verification
{
true
};
bool
propagateNan
{
false
};
bool
useIndex
{
false
};
bool
time_kernel
{
false
};
bool
do_dumpout
{
false
};
int
init_method
{
2
};
float
alpha
{
1.0
f
};
float
beta
{
0.0
f
};
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:
int
option_index
=
0
;
return
{{
0
,
1
,
2
,
3
},
{
0
,
1
,
2
},
{
0
,
1
,
3
},
{
0
,
2
,
3
},
{
1
,
2
,
3
},
{
0
},
{
1
},
{
2
},
{
3
}};
}
public:
std
::
vector
<
size_t
>
inLengths
;
std
::
vector
<
int
>
reduceDims
;
std
::
vector
<
float
>
scales
;
template
<
typename
T
>
class
ReduceWithIndexTest
:
public
::
testing
::
Test
{
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
;
int
init_method
=
1
;
static
std
::
vector
<
ReduceParam
>
params
;
public:
void
show_usage
(
const
char
*
cmd
)
static
void
SetUpTestSuite
()
{
std
::
cout
<<
"Usage of "
<<
cmd
<<
std
::
endl
;
std
::
cout
<<
"--inLengths or -D, comma separated list of input tensor dimension lengths "
"(only 4-d tensor supported)"
<<
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
;
// set testcase variables
ReduceParam
set
;
const
auto
setReduceDim
=
SetGenericReduceDim
();
while
(
1
)
for
(
std
::
size_t
i
(
0
);
i
<
setReduceDim
.
size
();
++
i
)
{
ch
=
getopt_long
(
argc
,
argv
,
"D:R:S:"
,
long_options
,
&
option_index
);
if
(
ch
==
-
1
)
break
;
switch
(
ch
)
{
case
'D'
:
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
]);
return
(
-
1
);
};
break
;
default:
show_usage
(
argv
[
0
]);
return
(
-
1
);
};
};
if
(
optind
+
2
>
argc
)
throw
std
::
runtime_error
(
"Invalid cmd-line arguments, more argumetns are needed!"
);
data_type
=
std
::
atoi
(
argv
[
optind
++
]);
init_method
=
std
::
atoi
(
argv
[
optind
]);
if
(
scales
.
empty
())
set
.
reduceDims
=
setReduceDim
[
i
];
params
.
emplace_back
(
set
);
}
}
template
<
ReduceTensorOp
ReduceOpIdType
>
void
Run
()
{
for
(
auto
param
:
this
->
params
)
{
scales
.
push_back
(
1.0
f
);
scales
.
push_back
(
0.0
f
);
};
bool
success
=
ck
::
profiler
::
profile_reduce_impl
<
InDataType
,
AccDataType
,
OutDataType
>
(
param
.
do_verification
,
param
.
init_method
,
param
.
do_dumpout
,
param
.
time_kernel
,
param
.
inLengths
,
param
.
reduceDims
,
ReduceOpIdType
,
param
.
propagateNan
,
param
.
useIndex
,
param
.
alpha
,
param
.
beta
);
EXPECT_TRUE
(
success
);
}
}
};
if
(
inLengths
.
size
()
!=
4
||
(
reduceDims
.
size
()
!=
1
&&
reduceDims
.
size
()
!=
3
&&
reduceDims
.
size
()
!=
4
))
return
(
-
1
);
template
<
typename
T
>
std
::
vector
<
ReduceParam
>
ReduceWithIndexTest
<
T
>::
params
=
{};
if
(
data_type
!=
0
&&
data_type
!=
1
&&
data_type
!=
3
&&
data_type
!=
5
&&
data_type
!=
6
)
return
(
-
1
);
using
Reduce_float_types
=
::
testing
::
Types
<
std
::
tuple
<
float
,
float
,
float
>>
;
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
>>
;
return
(
0
);
};
template
<
typename
TType
>
class
ReduceWithNoIndexFloat
:
public
ReduceWithIndexTest
<
TType
>
{
};
bool
test_reduce_no_index
(
int
data_type
,
int
init_method
,
std
::
vector
<
int
>
reduceDims
,
std
::
vector
<
size_t
>
inLengths
,
ReduceTensorOp
reduceOpId
,
bool
propagateNan
,
float
alpha
,
float
beta
)
template
<
typename
TType
>
class
ReduceWithNoIndexDouble
:
public
ReduceWithIndexTest
<
TType
>
{
using
ck
::
profiler
::
profile_reduce_impl
;
}
;
bool
result
=
true
;
template
<
typename
TType
>
class
ReduceWithNoIndexInt8
:
public
ReduceWithIndexTest
<
TType
>
{
};
if
(
data_type
==
0
)
{
result
=
profile_reduce_impl
<
float
,
float
,
float
>
(
true
,
init_method
,
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
);
}
template
<
typename
TType
>
class
ReduceWithNoIndexHalf
:
public
ReduceWithIndexTest
<
TType
>
{
};
return
(
result
);
template
<
typename
TType
>
class
ReduceWithNoIndexBHalfFloat
:
public
ReduceWithIndexTest
<
TType
>
{
};
constexpr
ReduceTensorOp
reduceOpId
=
ReduceTensorOp
::
AVG
;
constexpr
bool
propagateNan
=
false
;
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
);
int
main
(
int
argc
,
char
*
argv
[]
)
TYPED_TEST
(
ReduceWithNoIndexFloat
,
ReduceWithNoIndexTestFloat_AMAX
)
{
SimpleAppArgs
args
;
// trigger Run() -> Generic
this
->
template
Run
<
ReduceTensorOp
::
AMAX
>();
}
bool
result
=
true
;
TYPED_TEST
(
ReduceWithNoIndexFloat
,
ReduceWithNoIndexTestFloat_MIN
)
{
// trigger Run() -> Generic
this
->
template
Run
<
ReduceTensorOp
::
MIN
>();
}
if
(
argc
==
1
)
{
int
data_type
=
1
;
int
init_method
=
2
;
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
}};
for
(
auto
&
reduceDims
:
v_reduceDims
)
result
=
result
&&
test_reduce_no_index
(
data_type
,
init_method
,
reduceDims
,
inLengths
,
reduceOpId
,
propagateNan
,
1.0
f
,
0.0
f
);
}
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
]
);
}
TYPED_TEST
(
ReduceWithNoIndexFloat
,
ReduceWithNoIndexTestFloat_MAX
)
{
// trigger Run() -> Generic
this
->
template
Run
<
ReduceTensorOp
::
MAX
>()
;
}
TYPED_TEST
(
ReduceWithNoIndexDouble
,
ReduceWithNoIndexTestDouble_AMAX
)
{
// trigger Run() -> Generic
this
->
template
Run
<
ReduceTensorOp
::
AMAX
>();
}
TYPED_TEST
(
ReduceWithNoIndexDouble
,
ReduceWithNoIndexTestDouble_MIN
)
{
// trigger Run() -> Generic
this
->
template
Run
<
ReduceTensorOp
::
MIN
>();
}
TYPED_TEST
(
ReduceWithNoIndexDouble
,
ReduceWithNoIndexTestDouble_MAX
)
{
// trigger Run() -> Generic
this
->
template
Run
<
ReduceTensorOp
::
MAX
>();
}
TYPED_TEST
(
ReduceWithNoIndexInt8
,
ReduceWithNoIndexTestInt8_AMAX
)
{
// trigger Run() -> Generic
this
->
template
Run
<
ReduceTensorOp
::
AMAX
>();
}
TYPED_TEST
(
ReduceWithNoIndexInt8
,
ReduceWithNoIndexTestInt8_MIN
)
{
// trigger Run() -> Generic
this
->
template
Run
<
ReduceTensorOp
::
MIN
>(
);
}
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
>();
}
test/reduce/reduce_with_index.cpp
View file @
e2eb0418
// SPDX-License-Identifier: MIT
// Copyright (c) 2018-202
3
, Advanced Micro Devices, Inc. All rights reserved.
// Copyright (c) 2018-202
4
, Advanced Micro Devices, Inc. All rights reserved.
#include <getopt.h>
#include "ck/library/utility/host_common_util.hpp"
#include "profiler/profile_reduce_impl.hpp"
#include <gtest/gtest.h>
using
namespace
ck
;
static
struct
option
long_options
[]
=
{{
"inLengths"
,
required_argument
,
nullptr
,
'D'
},
{
"reduceDimensions"
,
required_argument
,
nullptr
,
'R'
},
{
"scales"
,
required_argument
,
nullptr
,
'S'
},
{
"help"
,
no_argument
,
nullptr
,
'?'
},
{
nullptr
,
0
,
nullptr
,
0
}};
struct
ReduceParam
{
bool
do_verification
{
true
};
bool
propagateNan
{
false
};
bool
useIndex
{
false
};
bool
time_kernel
{
false
};
bool
do_dumpout
{
false
};
int
init_method
{
2
};
float
alpha
{
1.0
f
};
float
beta
{
0.0
f
};
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:
int
option_index
=
0
;
return
{{
0
,
1
,
2
,
3
},
{
0
,
1
,
2
},
{
0
,
1
,
3
},
{
0
,
2
,
3
},
{
1
,
2
,
3
},
{
0
},
{
1
},
{
2
},
{
3
}};
}
public:
std
::
vector
<
size_t
>
inLengths
;
std
::
vector
<
int
>
reduceDims
;
std
::
vector
<
float
>
scales
;
template
<
typename
T
>
class
ReduceWithIndexTest
:
public
::
testing
::
Test
{
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
;
int
init_method
=
1
;
static
std
::
vector
<
ReduceParam
>
params
;
public:
void
show_usage
(
const
char
*
cmd
)
static
void
SetUpTestSuite
()
{
std
::
cout
<<
"Usage of "
<<
cmd
<<
std
::
endl
;
std
::
cout
<<
"--inLengths or -D, comma separated list of input tensor dimension lengths "
"(only 4-d tensor supported)"
<<
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
;
// set testcase variables
ReduceParam
set
;
const
auto
setReduceDim
=
SetGenericReduceDim
();
while
(
1
)
for
(
std
::
size_t
i
(
0
);
i
<
setReduceDim
.
size
();
++
i
)
{
ch
=
getopt_long
(
argc
,
argv
,
"D:R:S:"
,
long_options
,
&
option_index
);
if
(
ch
==
-
1
)
break
;
switch
(
ch
)
{
case
'D'
:
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
]);
return
(
-
1
);
};
break
;
default:
show_usage
(
argv
[
0
]);
return
(
-
1
);
};
};
if
(
optind
+
2
>
argc
)
throw
std
::
runtime_error
(
"Invalid cmd-line arguments, more argumetns are needed!"
);
data_type
=
std
::
atoi
(
argv
[
optind
++
]);
init_method
=
std
::
atoi
(
argv
[
optind
]);
if
(
scales
.
empty
())
set
.
reduceDims
=
setReduceDim
[
i
];
params
.
emplace_back
(
set
);
}
}
template
<
ReduceTensorOp
ReduceOpIdType
>
void
Run
()
{
for
(
auto
param
:
this
->
params
)
{
scales
.
push_back
(
1.0
f
);
scales
.
push_back
(
0.0
f
);
};
bool
success
=
ck
::
profiler
::
profile_reduce_impl
<
InDataType
,
AccDataType
,
OutDataType
>
(
param
.
do_verification
,
param
.
init_method
,
param
.
do_dumpout
,
param
.
time_kernel
,
param
.
inLengths
,
param
.
reduceDims
,
ReduceOpIdType
,
param
.
propagateNan
,
param
.
useIndex
,
param
.
alpha
,
param
.
beta
);
EXPECT_TRUE
(
success
);
}
}
};
if
(
inLengths
.
size
()
!=
4
||
(
reduceDims
.
size
()
!=
1
&&
reduceDims
.
size
()
!=
3
&&
reduceDims
.
size
()
!=
4
))
return
(
-
1
);
template
<
typename
T
>
std
::
vector
<
ReduceParam
>
ReduceWithIndexTest
<
T
>::
params
=
{};
if
(
data_type
!=
0
&&
data_type
!=
1
&&
data_type
!=
3
&&
data_type
!=
5
&&
data_type
!=
6
)
return
(
-
1
);
using
Reduce_float_types
=
::
testing
::
Types
<
std
::
tuple
<
float
,
float
,
float
>>
;
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
>>
;
return
(
0
);
};
template
<
typename
TType
>
class
ReduceWithIndexFloat
:
public
ReduceWithIndexTest
<
TType
>
{
};
bool
test_reduce_with_index
(
int
data_type
,
int
init_method
,
std
::
vector
<
int
>
reduceDims
,
std
::
vector
<
size_t
>
inLengths
,
ReduceTensorOp
reduceOpId
,
bool
propagateNan
,
float
alpha
,
float
beta
)
template
<
typename
TType
>
class
ReduceWithIndexDouble
:
public
ReduceWithIndexTest
<
TType
>
{
using
ck
::
profiler
::
profile_reduce_impl
;
}
;
bool
result
=
true
;
template
<
typename
TType
>
class
ReduceWithIndexInt8
:
public
ReduceWithIndexTest
<
TType
>
{
};
if
(
data_type
==
0
)
{
result
=
profile_reduce_impl
<
float
,
float
,
float
>
(
true
,
init_method
,
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
);
}
template
<
typename
TType
>
class
ReduceWithIndexHalf
:
public
ReduceWithIndexTest
<
TType
>
{
};
return
(
result
);
template
<
typename
TType
>
class
ReduceWithIndexBHalfFloat
:
public
ReduceWithIndexTest
<
TType
>
{
};
constexpr
ReduceTensorOp
reduceOpId
=
ReduceTensorOp
::
AMAX
;
constexpr
bool
propagateNan
=
false
;
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
);
int
main
(
int
argc
,
char
*
argv
[]
)
TYPED_TEST
(
ReduceWithIndexFloat
,
ReduceWithIndexTestFloat_AMAX
)
{
SimpleAppArgs
args
;
// trigger Run() -> Generic
this
->
template
Run
<
ReduceTensorOp
::
AMAX
>();
}
bool
result
=
true
;
TYPED_TEST
(
ReduceWithIndexFloat
,
ReduceWithIndexTestFloat_MIN
)
{
// trigger Run() -> Generic
this
->
template
Run
<
ReduceTensorOp
::
MIN
>();
}
if
(
argc
==
1
)
{
int
data_type
=
1
;
int
init_method
=
2
;
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
}};
for
(
auto
&
reduceDims
:
v_reduceDims
)
result
=
result
&&
test_reduce_with_index
(
data_type
,
init_method
,
reduceDims
,
inLengths
,
reduceOpId
,
propagateNan
,
1.0
f
,
0.0
f
);
}
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
]
);
}
TYPED_TEST
(
ReduceWithIndexFloat
,
ReduceWithIndexTestFloat_MAX
)
{
// trigger Run() -> Generic
this
->
template
Run
<
ReduceTensorOp
::
MAX
>()
;
}
TYPED_TEST
(
ReduceWithIndexDouble
,
ReduceWithIndexTestDouble_AMAX
)
{
// trigger Run() -> Generic
this
->
template
Run
<
ReduceTensorOp
::
AMAX
>();
}
TYPED_TEST
(
ReduceWithIndexDouble
,
ReduceWithIndexTestDouble_MIN
)
{
// trigger Run() -> Generic
this
->
template
Run
<
ReduceTensorOp
::
MIN
>();
}
TYPED_TEST
(
ReduceWithIndexDouble
,
ReduceWithIndexTestDouble_MAX
)
{
// trigger Run() -> Generic
this
->
template
Run
<
ReduceTensorOp
::
MAX
>();
}
TYPED_TEST
(
ReduceWithIndexInt8
,
ReduceWithIndexTestInt8_AMAX
)
{
// trigger Run() -> Generic
this
->
template
Run
<
ReduceTensorOp
::
AMAX
>();
}
TYPED_TEST
(
ReduceWithIndexInt8
,
ReduceWithIndexTestInt8_MIN
)
{
// trigger Run() -> Generic
this
->
template
Run
<
ReduceTensorOp
::
MIN
>(
);
}
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
>();
}
Prev
1
2
Next
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
.
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment