标签: benchmarking

如何运行所有 Golang 基准测试(包括子文件夹)

我有一个 Go 应用程序,在根目录和名为“message”的子文件夹中包含许多单元和基准测试。

我执行以下命令从根运行所有单元测试,包括消息和任何其他子文件夹中的单元测试:

go test ./...
Run Code Online (Sandbox Code Playgroud)

我想在基准测试中实现相同的目标,即运行所有测试。以下内容适用于根目录中的内容:

go test -bench .
Run Code Online (Sandbox Code Playgroud)

/messages 文件夹中的基准测试将被忽略,这是预期的。所以我从根目录运行以下命令:

go test -bench ./...
Run Code Online (Sandbox Code Playgroud)

这根本无法识别,Go 似乎执行位于根目录中的单元测试。我什至尝试在命令中指定消息文件夹,如下所示:

go test -bench ./message
Run Code Online (Sandbox Code Playgroud)

……但也失败了。目前,如果我想在消息文件夹中运行基准测试,我必须 cd 进入该文件夹并执行

go test -bench .
Run Code Online (Sandbox Code Playgroud)

像上面一样。

那么正确的做法是什么呢?我如何告诉 Go 在根文件夹和子文件夹中查找基准测试?在 -bench 标志的情况下,正则表达式 arg 如何工作?显然它与单元测试运行程序的正则表达式不同。

testing benchmarking unit-testing go

3
推荐指数
1
解决办法
2370
查看次数

Array.Empty<int>():为什么 Rider 显示已发生分配,但 BenchmarkDotNet 却没有?

第一张图片中使用的记忆工具来自 Rider。据我所知,它显示了托管堆的分配。第二张图显示了 BenchmarkDotNet 的结果。

为什么 Rider 显示已进行分配,但 BenchmarkDotNet 表明未对堆进行分配?

如果我改用下面的代码示例,BenchmarkDotNet 会选择分配:

var i = new int[0];
Run Code Online (Sandbox Code Playgroud)

骑手记忆工具结果

BenchmarkDotNet 结果

.net c# benchmarking allocation

3
推荐指数
1
解决办法
349
查看次数

基于 OpenMP 的循环,缩减规模较差

我有一个循环,我正在尝试与 OpenMP 有效地并行化。它涉及累积矢量流的 L2 范数,并进行缩减。这是循环:

struct vec3
{
    float data[3] = {};
};

float accumulate_eta_sq_t_mass(const vec3* etas, const float* masses, const std::size_t& n)
{
    auto a = 0.0;
    #pragma omp parallel for simd safelen(16) reduction(+:a)
    for (auto ii = std::size_t{}; ii < n; ++ii)
    {
        const auto& eta = etas[ii];
        const auto x = static_cast<double>(eta.data[0]);
        const auto y = static_cast<double>(eta.data[1]);
        const auto z = static_cast<double>(eta.data[2]);
        const auto m = static_cast<double>(masses[ii]);
        
        a += (x * x + y * y + …
Run Code Online (Sandbox Code Playgroud)

c++ benchmarking openmp performance-testing parallelism-amdahl

3
推荐指数
1
解决办法
111
查看次数

为什么 Rust 的函数移植比 C++ 慢 2 倍?

我有一个在 C++ 中计算字符串编辑距离的函数:

#include <string>
#include <vector>
#include <algorithm>

size_t sed_diff(const std::string & a, const std::string & b) {

    std::vector<size_t> cp(b.length() + 1);
    std::vector<size_t> cc(b.length() + 1);

    // Edit distance on postorder traversal.
    for (int j = 0; j <= b.length(); ++j) {
        cp[j] = j;
    }
    for (int i = 1; i <= a.length(); ++i) {
        cc[0] = i;
        for (int j = 1; j <= b.length(); ++j) {
            unsigned int c1 = a[i - 1];
            unsigned int c2 …
Run Code Online (Sandbox Code Playgroud)

c++ optimization benchmarking edit-distance rust

3
推荐指数
1
解决办法
307
查看次数

C++ 虚函数基准测试

我认为每个 C++ 程序员都曾在某个时候听说过“虚拟函数很慢”这句话。因此,我决定将虚拟函数与常规成员函数进行基准测试。

不幸的是,我在对“低级”C++ 代码进行基准测试方面没有太多经验,并且不知道如何正确避免编译器或硬件(主要是分支预测器)优化效果。

我现在面临的问题是,当我运行基准测试(我在下面提供)时,我几乎总是得到调用虚拟函数和常规函数具有相同速度的结果,有时虚拟函数工作得更快!

这就是我使用google/benchmark库编写基准的方式:

static void BM_MemberCall(benchmark::State& state) {
    Base* b = new Derived();

    for ([[maybe_unused]] auto _ : state) {
        benchmark::DoNotOptimize(b->Foo());
        benchmark::ClobberMemory();
    }
}
BENCHMARK(BM_MemberCall);

static void BM_VirtualCall(benchmark::State& state) {
    Base* b = new Derived();

    for ([[maybe_unused]] auto _ : state) {
        benchmark::DoNotOptimize(b->VirtualFoo());
        benchmark::ClobberMemory();
    }
}
BENCHMARK(BM_VirtualCall);
Run Code Online (Sandbox Code Playgroud)

我的类定义如下,声明于util.h

#pragma once

// generate 10 virtual functions
#define VFOO(NAME, ID, ...) \
    __attribute__((noinline)) virtual int NAME ## ID ## _0() __VA_ARGS__; \
    __attribute__((noinline)) virtual …
Run Code Online (Sandbox Code Playgroud)

c++ benchmarking virtual-functions microbenchmark

3
推荐指数
1
解决办法
157
查看次数

为什么两个Java线程(在某些情况下)的速度是一个的两倍?

文件:Example1.java

public class Example1 implements Runnable {

    public void run() {
        for(int i = 0; i < 100000000; i++) {
            int x = 5;
            x = x * 4;
            x = x % 3;
            x = x + 9000;
            x = x * 923;
        }
    }

    public static void task() {
        for(int i = 0; i < 100000000; i++) {
            int x = 5;
            x = x * 4;
            x = x % 3;
            x = x + 9000;
            x …
Run Code Online (Sandbox Code Playgroud)

java benchmarking multithreading

2
推荐指数
1
解决办法
589
查看次数

PHP获取执行特定行的确切时间

我正在尝试对我拥有的脚本执行简单的基准测试.首先,我尝试添加如下内容:

echo 'After Checklist: '. date('h:i:s:u A') ."<br />";
Run Code Online (Sandbox Code Playgroud)

但它只是在很多时候同时打印出来 - 直到运行包含脚本才会返回不同的时间.反正有没有这样做?或类似的东西 - 我基本上只是想看看瓶颈在哪里,所以我可以提高性能.

php profile time benchmarking date

2
推荐指数
1
解决办法
583
查看次数

基准Rabbitmq工具

我有多个组件与RabbitMQ连接.有些是生产者和消费者.我需要对我的系统进行基准测试/加载测试.我需要确保消费者可以处理N个消息/秒.我在互联网上做了一些搜索,但还没找到任何东西.有没有人对RabbitMQ进行基准测试有什么经验?理想情况下,我想用消息向网络发送垃圾邮件而不必创建新的生产者.

benchmarking rabbitmq

2
推荐指数
1
解决办法
3649
查看次数

对我的Golang网络服务器进行基准测试

我正在寻找一些工具或Go测试包来在不同的服务器上运行一些基准测试.知道如何在我的控制台中获得一些很好的分析输出.是否可以模拟访问服务器的多个用户?

从这个测试代码中得不到输出

package tests

import(
 "testing"
 )


func BenchmarkMyFunc(b *testing.B) {
  for i := 0; i < b.N; i++ {
   testplus()
  }
}

func testplus() int {
 x := 1
 return x + 1
}
Run Code Online (Sandbox Code Playgroud)

谢谢

benchmarking go

2
推荐指数
1
解决办法
4866
查看次数

使用BenchmarkDotNet进行首次通话

我用一个简单的测试类试用了BenchmarkDotNet

public class BenchTest
{
    bool First = false;

    [Benchmark]
    public void FirstTimeInitEffect()
    {
        if (First == false)
        {
            Console.WriteLine("First called");
            First = true;
            Thread.Sleep(1000);
        }
        else
        {
            Thread.Sleep(10);
        }

    }
}
Run Code Online (Sandbox Code Playgroud)

让它运行

    static void Main(string[] args)
    {
        var cfg = ManualConfig.Create(DefaultConfig.Instance);
        var job = new Job();
        job.Accuracy.RemoveOutliers = false;
        cfg.Add(new Job[] {
            job
            }
        );

        BenchmarkRunner.Run<BenchTest>(cfg);
    }
Run Code Online (Sandbox Code Playgroud)

这打印了一个很好的摘要,但我在结果中缺少的是第一次调用方法FirstTimeInitEffect需要1s.我期望从一个基准工具向我展示第一个呼叫效果.我已经尝试了一个自定义配置,以防止删除异常值,但这不是技巧.我使用的工具是错误的还是超出了工具的范围?

    // * Detailed results *
BenchTest.FirstTimeInitEffect: Job-LQPFTL(RemoveOutliers=False)
Runtime = Clr 4.0.30319.42000, 32bit LegacyJIT-v4.6.1586.0; GC = Concurrent Workstation
Mean = 10.8548 ms, …
Run Code Online (Sandbox Code Playgroud)

.net c# performance benchmarking benchmarkdotnet

2
推荐指数
1
解决办法
587
查看次数