Skip to content

Commit

Permalink
ARROW-15740: [C++][Compute] Benchmark element wise min/max
Browse files Browse the repository at this point in the history
Only benchmark two arguments.

Closes apache#12478 from cyb70289/15740-element-wise-max-bench

Authored-by: Yibo Cai <[email protected]>
Signed-off-by: David Li <[email protected]>
  • Loading branch information
cyb70289 authored and lidavidm committed Feb 22, 2022
1 parent 0eaafe8 commit a7ae78f
Showing 1 changed file with 32 additions and 11 deletions.
43 changes: 32 additions & 11 deletions cpp/src/arrow/compute/kernels/scalar_compare_benchmark.cc
Original file line number Diff line number Diff line change
Expand Up @@ -30,45 +30,60 @@ namespace compute {

constexpr auto kSeed = 0x94378165;

template <CompareOperator op, typename Type>
static void CompareArrayScalar(benchmark::State& state) {
template <typename Type>
static void BenchArrayScalar(benchmark::State& state, const std::string& op) {
RegressionArgs args(state, /*size_is_bytes=*/false);
auto ty = TypeTraits<Type>::type_singleton();
auto rand = random::RandomArrayGenerator(kSeed);
auto array = rand.ArrayOf(ty, args.size, args.null_proportion);
auto scalar = *rand.ArrayOf(ty, 1, 0)->GetScalar(0);
for (auto _ : state) {
ABORT_NOT_OK(
CallFunction(CompareOperatorToFunctionName(op), {array, Datum(scalar)}).status());
ABORT_NOT_OK(CallFunction(op, {array, Datum(scalar)}).status());
}
}

template <CompareOperator op, typename Type>
static void CompareArrayArray(benchmark::State& state) {
template <typename Type>
static void BenchArrayArray(benchmark::State& state, const std::string& op) {
RegressionArgs args(state, /*size_is_bytes=*/false);
auto ty = TypeTraits<Type>::type_singleton();
auto rand = random::RandomArrayGenerator(kSeed);
auto lhs = rand.ArrayOf(ty, args.size, args.null_proportion);
auto rhs = rand.ArrayOf(ty, args.size, args.null_proportion);
for (auto _ : state) {
ABORT_NOT_OK(CallFunction(CompareOperatorToFunctionName(op), {lhs, rhs}).status());
ABORT_NOT_OK(CallFunction(op, {lhs, rhs}).status());
}
}

static void GreaterArrayArrayInt64(benchmark::State& state) {
CompareArrayArray<GREATER, Int64Type>(state);
BenchArrayArray<Int64Type>(state, CompareOperatorToFunctionName(GREATER));
}

static void GreaterArrayScalarInt64(benchmark::State& state) {
CompareArrayScalar<GREATER, Int64Type>(state);
BenchArrayScalar<Int64Type>(state, CompareOperatorToFunctionName(GREATER));
}

static void GreaterArrayArrayString(benchmark::State& state) {
CompareArrayArray<GREATER, StringType>(state);
BenchArrayArray<StringType>(state, CompareOperatorToFunctionName(GREATER));
}

static void GreaterArrayScalarString(benchmark::State& state) {
CompareArrayScalar<GREATER, StringType>(state);
BenchArrayScalar<StringType>(state, CompareOperatorToFunctionName(GREATER));
}

static void MaxElementWiseArrayArrayInt64(benchmark::State& state) {
BenchArrayArray<Int64Type>(state, "max_element_wise");
}

static void MaxElementWiseArrayScalarInt64(benchmark::State& state) {
BenchArrayScalar<Int64Type>(state, "max_element_wise");
}

static void MaxElementWiseArrayArrayString(benchmark::State& state) {
BenchArrayArray<StringType>(state, "max_element_wise");
}

static void MaxElementWiseArrayScalarString(benchmark::State& state) {
BenchArrayScalar<StringType>(state, "max_element_wise");
}

BENCHMARK(GreaterArrayArrayInt64)->Apply(RegressionSetArgs);
Expand All @@ -77,5 +92,11 @@ BENCHMARK(GreaterArrayScalarInt64)->Apply(RegressionSetArgs);
BENCHMARK(GreaterArrayArrayString)->Apply(RegressionSetArgs);
BENCHMARK(GreaterArrayScalarString)->Apply(RegressionSetArgs);

BENCHMARK(MaxElementWiseArrayArrayInt64)->Apply(RegressionSetArgs);
BENCHMARK(MaxElementWiseArrayScalarInt64)->Apply(RegressionSetArgs);

BENCHMARK(MaxElementWiseArrayArrayString)->Apply(RegressionSetArgs);
BENCHMARK(MaxElementWiseArrayScalarString)->Apply(RegressionSetArgs);

} // namespace compute
} // namespace arrow

0 comments on commit a7ae78f

Please sign in to comment.