Mercurial > hg > CbC > CbC_llvm
view libc/utils/benchmarks/Memcpy.cpp @ 204:e348f3e5c8b2
ReadFromString worked.
author | Shinji KONO <kono@ie.u-ryukyu.ac.jp> |
---|---|
date | Sat, 05 Jun 2021 15:35:13 +0900 |
parents | 0572611fdcc8 |
children |
line wrap: on
line source
//===-- Benchmark memcpy implementation -----------------------------------===// // // 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 "LibcBenchmark.h" #include "LibcMemoryBenchmark.h" #include "LibcMemoryBenchmarkMain.h" #include "llvm/ADT/StringSwitch.h" #include "llvm/Support/raw_ostream.h" #include <memory> namespace llvm { namespace libc_benchmarks { // The context encapsulates the buffers, parameters and the measure. struct MemcpyContext : public BenchmarkRunner { using FunctionPrototype = void *(*)(void *, const void *, size_t); struct ParameterType { uint16_t SrcOffset = 0; uint16_t DstOffset = 0; }; explicit MemcpyContext(const StudyConfiguration &Conf) : OD(Conf), SrcBuffer(Conf.BufferSize), DstBuffer(Conf.BufferSize), PP(*this) {} // Needed by the ParameterProvider to update the current batch of parameter. void Randomize(MutableArrayRef<ParameterType> Parameters) { for (auto &P : Parameters) { P.DstOffset = OD(Gen); P.SrcOffset = OD(Gen); } } ArrayRef<StringRef> getFunctionNames() const override { static std::array<StringRef, 1> kFunctionNames = {"memcpy"}; return kFunctionNames; } BenchmarkResult benchmark(const BenchmarkOptions &Options, StringRef FunctionName, size_t Size) override { FunctionPrototype Function = StringSwitch<FunctionPrototype>(FunctionName).Case("memcpy", &::memcpy); return llvm::libc_benchmarks::benchmark( Options, PP, [this, Function, Size](ParameterType p) { Function(DstBuffer + p.DstOffset, SrcBuffer + p.SrcOffset, Size); return DstBuffer + p.DstOffset; }); } private: std::default_random_engine Gen; OffsetDistribution OD; AlignedBuffer SrcBuffer; AlignedBuffer DstBuffer; SmallParameterProvider<MemcpyContext> PP; }; std::unique_ptr<BenchmarkRunner> getRunner(const StudyConfiguration &Conf) { return std::make_unique<MemcpyContext>(Conf); } } // namespace libc_benchmarks } // namespace llvm