[libc-commits] [libc] [libc] DRAFT: Add Generic and NVPTX Sin Benchmark (PR #99795)
Joseph Huber via libc-commits
libc-commits at lists.llvm.org
Sun Jul 21 15:53:46 PDT 2024
================
@@ -105,8 +106,34 @@ void print_results(Benchmark *b) {
<< " stddev (num threads: " << num_threads << ")\n";
}
+// We want our random values to be approximately
+// |real value| <= 2^(max_exponent) * (1 + (random 52 bits) * 2^-52) <
+// 2^(max_exponent + 1)
+// The largest integer that can be stored in a double is 2^53
+static constexpr int MAX_EXPONENT = 52;
+
+static double get_rand() {
+ using FPBits = LIBC_NAMESPACE::fputil::FPBits<double>;
+ uint64_t bits = LIBC_NAMESPACE::rand();
+ double scale = 0.5 + MAX_EXPONENT / 2048.0;
+ FPBits fp(bits);
+ fp.set_biased_exponent(
+ static_cast<uint32_t>(fp.get_biased_exponent() * scale));
+ return fp.get_val();
+}
+
+static void init_random_input() {
+ LIBC_NAMESPACE::srand(LIBC_NAMESPACE::gpu::processor_clock());
+ for (int i = 0; i < RANDOM_INPUT_SIZE; i++) {
+ random_input[i] = get_rand();
+ }
+}
+
----------------
jhuber6 wrote:
Yeah I just mean if you want a utility to get some random input, just make it a function in the header and have the benchmarks call it.
https://github.com/llvm/llvm-project/pull/99795
More information about the libc-commits
mailing list