1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
|
//===-- Performance test for maximum and minimum functions ----------------===//
//
// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
// See https://llvm.org/LICENSE.txt for license information.
// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
//
//===----------------------------------------------------------------------===//
#include "PerfTest.h"
#include "src/math/fmaxf.h"
#include "src/math/fmaxf16.h"
#include "src/math/fmaximum_numf.h"
#include "src/math/fmaximum_numf16.h"
#include "src/math/fmaximumf.h"
#include "src/math/fmaximumf16.h"
#include "src/math/fminf.h"
#include "src/math/fminf16.h"
#include "src/math/fminimum_numf.h"
#include "src/math/fminimum_numf16.h"
#include "src/math/fminimumf.h"
#include "src/math/fminimumf16.h"
#include <math.h>
static constexpr size_t FLOAT16_ROUNDS = 20'000;
static constexpr size_t FLOAT_ROUNDS = 40;
// LLVM libc might be the only libc implementation with support for float16 math
// functions currently. We can't compare our float16 functions against the
// system libc, so we compare them against this placeholder function.
float16 placeholder_binaryf16(float16 x, float16 y) { return x; }
// The system libc might not provide the fmaximum* and fminimum* C23 math
// functions either.
float placeholder_binaryf(float x, float y) { return x; }
int main() {
BINARY_INPUT_SINGLE_OUTPUT_PERF_EX(float16, float16, LIBC_NAMESPACE::fmaxf16,
placeholder_binaryf16, FLOAT16_ROUNDS,
"fmaxf16_perf.log")
BINARY_INPUT_SINGLE_OUTPUT_PERF_EX(float16, float16, LIBC_NAMESPACE::fminf16,
placeholder_binaryf16, FLOAT16_ROUNDS,
"fminf16_perf.log")
BINARY_INPUT_SINGLE_OUTPUT_PERF_EX(
float16, float16, LIBC_NAMESPACE::fmaximumf16, placeholder_binaryf16,
FLOAT16_ROUNDS, "fmaximumf16_perf.log")
BINARY_INPUT_SINGLE_OUTPUT_PERF_EX(
float16, float16, LIBC_NAMESPACE::fminimumf16, placeholder_binaryf16,
FLOAT16_ROUNDS, "fminimumf16_perf.log")
BINARY_INPUT_SINGLE_OUTPUT_PERF_EX(
float16, float16, LIBC_NAMESPACE::fmaximum_numf16, placeholder_binaryf16,
FLOAT16_ROUNDS, "fmaximum_numf16_perf.log")
BINARY_INPUT_SINGLE_OUTPUT_PERF_EX(
float16, float16, LIBC_NAMESPACE::fminimum_numf16, placeholder_binaryf16,
FLOAT16_ROUNDS, "fminimum_numf16_perf.log")
BINARY_INPUT_SINGLE_OUTPUT_PERF_EX(float, float, LIBC_NAMESPACE::fmaxf,
::fmaxf, FLOAT_ROUNDS, "fmaxf_perf.log")
BINARY_INPUT_SINGLE_OUTPUT_PERF_EX(float, float, LIBC_NAMESPACE::fminf,
::fminf, FLOAT_ROUNDS, "fminf_perf.log")
BINARY_INPUT_SINGLE_OUTPUT_PERF_EX(float, float, LIBC_NAMESPACE::fmaximumf,
placeholder_binaryf, FLOAT_ROUNDS,
"fmaximumf_perf.log")
BINARY_INPUT_SINGLE_OUTPUT_PERF_EX(float, float, LIBC_NAMESPACE::fminimumf,
placeholder_binaryf, FLOAT_ROUNDS,
"fminimumf_perf.log")
BINARY_INPUT_SINGLE_OUTPUT_PERF_EX(
float, float, LIBC_NAMESPACE::fmaximum_numf, placeholder_binaryf,
FLOAT_ROUNDS, "fmaximum_numf_perf.log")
BINARY_INPUT_SINGLE_OUTPUT_PERF_EX(
float, float, LIBC_NAMESPACE::fminimum_numf, placeholder_binaryf,
FLOAT_ROUNDS, "fminimum_numf_perf.log")
return 0;
}
|