1 //===-- Benchmark function -----------------------------------------------===// 2 // 3 // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. 4 // See https://llvm.org/LICENSE.txt for license information. 5 // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception 6 // 7 //===----------------------------------------------------------------------===// 8 9 #include "LibcBenchmark.h" 10 #include "llvm/ADT/StringRef.h" 11 #include "llvm/Support/Host.h" 12 13 namespace llvm { 14 namespace libc_benchmarks { 15 checkRequirements()16void checkRequirements() { 17 const auto &CpuInfo = benchmark::CPUInfo::Get(); 18 if (CpuInfo.scaling_enabled) 19 report_fatal_error( 20 "CPU scaling is enabled, the benchmark real time measurements may be " 21 "noisy and will incur extra overhead."); 22 } 23 get()24HostState HostState::get() { 25 const auto &CpuInfo = benchmark::CPUInfo::Get(); 26 HostState H; 27 H.CpuFrequency = CpuInfo.cycles_per_second; 28 H.CpuName = llvm::sys::getHostCPUName().str(); 29 for (const auto &BenchmarkCacheInfo : CpuInfo.caches) { 30 CacheInfo CI; 31 CI.Type = BenchmarkCacheInfo.type; 32 CI.Level = BenchmarkCacheInfo.level; 33 CI.Size = BenchmarkCacheInfo.size; 34 CI.NumSharing = BenchmarkCacheInfo.num_sharing; 35 H.Caches.push_back(std::move(CI)); 36 } 37 return H; 38 } 39 40 } // namespace libc_benchmarks 41 } // namespace llvm 42