benchmarking 相关问题

基准测试是在受控环境下比较两个或多个系统或过程的过程,以便有一个定量测量来比较或排序它们。基准标记应该用于关于如何执行基准测试任务或理论问题的问题,而不是用于基准测试结果列表或基准数据请求的问题;这些问题与Stack Overflow无关。

如何在Haskell中多次评估相同值的力?

我有一个功能台,可用于计算评估动作所需的时间:数据Benchmark = Benchmark POSIXTime POSIXTime | BenchmarkN [Benchmark] bench :: a-> IO Benchmark ...

回答 1 投票 4

S3多个小文件与更大的文件性能

我的应用程序从多个IoT设备接收大量日志数据。我有一项服务,可以接收那些日志文件(50-200 kb)并将其上传到ceph(S3协议)。性能不是很好,...

回答 1 投票 0


[netperf 2.7.0安装无法使用enable-demo选项进行操作

我正在尝试在运行Ubuntu 18.04的VM中安装netperf 2.7.0。由于使用apt-get安装的版本是2.6.0,因此我必须从https://github.com/HewlettPackard/netperf / ...]下载TAR文件。

回答 1 投票 0

在进行基准测试时,有没有一种方法可以模拟缓存局部性?

[我正在尝试找出最适合基准C ++程序的方法,并且希望在与基准部分相关的数据存在于缓存中时模拟这两种情况...

回答 1 投票 2

流的速度比每个循环要快吗?

我有两种方法。第一种方法:public List getCustomObjectsForEach(int n){Map foo = new HashMap <>();为(CustomObject cb:...

回答 1 投票 1

Neo4j查询执行时间:多次执行同一查询时,似乎只有第一个是正确的

我正在使用LDBC数据集来测试Neo4j 4.0.1中的执行时间,SF = 1,我使用Java连接Neo4j ResultSummary.resultAvailableAfter()来获取执行时间,这是获取..的时间。 。

回答 1 投票 0

有人拥有的TPC-H模式和数据?

有人使用TPC-H模式吗?我尝试编译但是有一些错误。我需要sql模式文件。并在可能的情况下提供数据sql文件。谢谢

回答 2 投票 2

如何在Windows中使用cmake构建和链接Google基准测试

我正在尝试使用CMake构建google基准并将其与我的库一起使用。我设法建立了google-benchmark并使用cmake成功运行了所有测试。不幸的是,我无法链接...

回答 1 投票 2

为什么在EC2上配置更高的实例需要更多时间才能运行?

我有一个调用函数10次的代码。该函数的执行是顺序执行的,因此只有在该函数返回第一个实例后,它才会再次被调用并重复...

回答 1 投票 0

S3下载-lambda函数内部的SDK与HTTP请求

我正在寻找一些基准测试或文章来解释更快的速度。在lambda函数内部,它更快地达到以下速度:...:A)使用常规请求模块通过cloudfront下载S3文件(即,命中...

回答 1 投票 0

在这种情况下,为什么'all(itr)do'的阻塞速度比for循环快?

我的代码做什么?目标是建立一个函数,该函数使用julia在给定的字符串中检查所有方括号是否正确打开和关闭。因此,“ {abc()([[def]])()}”应返回true,而某些事物...

回答 1 投票 2

我如何基准化PHP进程?

我正在运行一些for循环,想知道其中哪个更有效? for($ i = 1; $ i <101; $ i ++){...或for($ i = 1; $ i <= 100; $ i ++){...

回答 1 投票 0

为什么std :: copy`比我的测试程序中的`memcpy`要慢5倍(!)?

这是我在此程序中发布此程序的后续问题:#include #include #include #include #include #include&... ] >>>]] > ] >> 那不是我得到的结果: > g++ -O3 XX.cpp > ./a.out cast: 5 ms memcpy: 4 ms std::copy: 3 ms (counter: 1264720400) Hardware: 2GHz Intel Core i7 Memory: 8G 1333 MHz DDR3 OS: Max OS X 10.7.5 Compiler: i686-apple-darwin11-llvm-g++-4.2 (GCC) 4.2.1 在Linux机器上,我得到不同的结果: > g++ -std=c++0x -O3 XX.cpp > ./a.out cast: 3 ms memcpy: 4 ms std::copy: 21 ms (counter: 731359744) Hardware: Intel(R) Xeon(R) CPU E5-2670 0 @ 2.60GHz Memory: 61363780 kB OS: Linux ip-10-58-154-83 3.2.0-29-virtual #46-Ubuntu SMP Compiler: g++ (Ubuntu/Linaro 4.6.3-1ubuntu5) 4.6.3 [我同意@rici's comment关于开发更有意义的基准,因此我将您的测试重写为使用memcpy(),memmove(),std::copy()和std::vector赋值运算符对两个向量进行基准复制: #include <algorithm> #include <iostream> #include <vector> #include <chrono> #include <random> #include <cstring> #include <cassert> typedef std::vector<int> vector_type; void test_memcpy(vector_type & destv, vector_type const & srcv) { vector_type::pointer const dest = destv.data(); vector_type::const_pointer const src = srcv.data(); std::memcpy(dest, src, srcv.size() * sizeof(vector_type::value_type)); } void test_memmove(vector_type & destv, vector_type const & srcv) { vector_type::pointer const dest = destv.data(); vector_type::const_pointer const src = srcv.data(); std::memmove(dest, src, srcv.size() * sizeof(vector_type::value_type)); } void test_std_copy(vector_type & dest, vector_type const & src) { std::copy(src.begin(), src.end(), dest.begin()); } void test_assignment(vector_type & dest, vector_type const & src) { dest = src; } auto benchmark(std::function<void(vector_type &, vector_type const &)> copy_func) ->decltype(std::chrono::milliseconds().count()) { std::random_device rd; std::mt19937 generator(rd()); std::uniform_int_distribution<vector_type::value_type> distribution; static vector_type::size_type const num_elems = 2000; vector_type dest(num_elems); vector_type src(num_elems); // Fill the source and destination vectors with random data. for (vector_type::size_type i = 0; i < num_elems; ++i) { src.push_back(distribution(generator)); dest.push_back(distribution(generator)); } static int const iterations = 50000; std::chrono::time_point<std::chrono::system_clock> start, end; start = std::chrono::system_clock::now(); for (int i = 0; i != iterations; ++i) copy_func(dest, src); end = std::chrono::system_clock::now(); assert(src == dest); return std::chrono::duration_cast<std::chrono::milliseconds>( end - start).count(); } int main() { std::cout << "memcpy: " << benchmark(test_memcpy) << " ms" << std::endl << "memmove: " << benchmark(test_memmove) << " ms" << std::endl << "std::copy: " << benchmark(test_std_copy) << " ms" << std::endl << "assignment: " << benchmark(test_assignment) << " ms" << std::endl << std::endl; } [我出于娱乐目的对C ++ 11有点过分了。 这是我在使用g ++ 4.6.3的64位Ubuntu盒子上得到的结果: $ g++ -O3 -std=c++0x foo.cpp ; ./a.out memcpy: 33 ms memmove: 33 ms std::copy: 33 ms assignment: 34 ms 结果都相当可比!当我也将向量中的整数类型从[[e.g。更改为long long]时,在所有测试案例中我都得到了可比的时间。 除非我的基准测试重写失败,否则您的基准测试似乎无法执行有效的比较。 HTH! 在我看来,答案是gcc可以优化对memmove和memcpy的特定调用,但不能优化std :: copy。 gcc知道memmove和memcpy的语义,在这种情况下,可以利用已知大小的事实(sizeof(int))将调用转换为单个mov指令。 std :: copy是根据memcpy实现的,但是显然gcc优化器无法弄清楚数据+ sizeof(int)-数据正是sizeof(int)。因此基准称为memcpy。 我通过用-S调用gcc并快速浏览输出来获得所有这些;我很容易弄错了,但是我看到的似乎与您的测量结果一致。 顺便说一句,我认为测试或多或少是没有意义的。一个更合理的现实世界测试可能是创建一个实际的vector<int> src和一个int[N] dst,然后将memcpy(dst, src.data(), sizeof(int)*src.size())与std::copy(src.begin(), src.end(), &dst)进行比较。 memcpy和std::copy都有各自的用途,std::copy应该(如下面的Cheers所指出的那样)速度与记忆一样慢,因为不能保证存储区域会重叠。这意味着您可以非常轻松地复制非连续区域(因为它支持迭代器)(请考虑稀疏分配的结构,例如链表等,甚至实现迭代器的自定义类/结构)。 memcpy仅在连续的原因下工作,因此可以进行大量优化。 根据G++ 4.8.1,test_memcpy的汇编输出: movl (%r15), %r15d test_std_copy: movl $4, %edx movq %r15, %rsi leaq 16(%rsp), %rdi call memcpy 如您所见,std::copy成功认识到它可以用memcpy复制数据,但是由于某些原因,未发生进一步的内联操作-这就是性能差异的原因。 顺便说一下,Clang 3.4在两种情况下都产生相同的代码: movl (%r14,%rbx), %ebp 我当时要说的是,这在gcc 4中是一个实现故障,但是可能比这更复杂。我的结果是(用于计数器的20000/20000): $ g++ -Ofast a.cpp; ./a.out cast: 24 ms memcpy: 47 ms memmove: 24 ms std::copy: 24 ms (counter: 1787289600) $ g++ -O3 a.cpp; ./a.out cast: 24 ms memcpy: 24 ms memmove: 24 ms std::copy: 47 ms (counter: 1787289600) $ g++ --version g++ (Ubuntu 9.2.1-9ubuntu2) 9.2.1 20191008 注意使用copy和memcpy进行编译时,-O3和-Ofast的结果如何交换。 memmove也不比这两者都要慢。 在clang中,结果更简单: $ clang++ -O3 a.cpp; ./a.out cast: 26 ms memcpy: 26 ms memmove: 26 ms std::copy: 26 ms (counter: 1787289600) $ clang++ -Ofast a.cpp; ./a.out cast: 26 ms memcpy: 26 ms memmove: 26 ms std::copy: 26 ms (counter: 1787289600) $ clang++ --version clang version 9.0.0-2 (tags/RELEASE_900/final)

回答 6 投票 11

Where(predicate).FirstOrDefault()vs FirstOrDefault(predicate)的基准测试是否令人惊讶?

[我知道这个问题已经被很多人问过,所以甚至有人说first(FirstOrDefault(predicate))一个在性能上更好1,我明白了,我也认为还有一个方法...

回答 2 投票 4

我对Linux中的DNSperf工具中的选项有疑问

我尝试使用DNSperf工具,该工具是Linux中权威名称服务器的基准测试工具。该工具具有多种功能,可在许多方面提供结果。但我想...

回答 1 投票 0

为什么std :: vector比数组慢? [重复]

当我运行以下程序(启用优化功能时),带有std :: vector的for循环大约需要0.04秒,而带有数组的for循环则需要0.0001秒。 #include #...

回答 2 投票 -1

绩效评估的惯用方式?

我正在为我的项目评估网络+渲染工作量。程序连续运行一个主循环:while(true){doSomething()drawSomething()doSomething2()sendSomething()} ...

回答 1 投票 0

如何在Docker容器内部使用FIO时绕过内存缓存?

我正在尝试使用启用了O_direct的灵活IO工具对主机和Docker容器上的I / O性能进行基准测试,以绕过内存缓存。结果非常可疑。泊坞窗执行...

回答 1 投票 0

如何获取Android设备的SoC型号名称?

如何检索Android设备的SoC型号名称?例如。适用于Nexus 5的Qualcomm MSM 8974 HAMMERHEAD(平头设备树)(例如CPU-Z应用显示此信息。)]

回答 3 投票 3

© www.soinside.com 2019 - 2024. All rights reserved.