标签: benchmarking

堆栈运行单一基准测试

我的 cabal 文件中定义了多个基准:

benchmark my-gauge-bench
  type: exitcode-stdio-1.0
  main-is: Main.hs
  hs-source-dirs:
      bench/gauge
  ghc-options: -Wall -Wcompat -Wincomplete-record-updates -Wincomplete-uni-patterns -Wredundant-constraints -Wall -threaded -rtsopts -with-rtsopts=-N
  build-depends:
      QuickCheck
    , base >=4.10 && <10
    , bytestring
    , gauge
  default-language: Haskell2010

benchmark my-weigh-bench
  type: exitcode-stdio-1.0
  main-is: Main.hs
  other-modules:
      Paths_pkg_core_gen
  hs-source-dirs:
      bench/weigh
  ghc-options: -Wall -Wcompat -Wincomplete-record-updates -Wincomplete-uni-patterns -Wredundant-constraints -Wall
  build-depends:
      QuickCheck
    , base >=4.10 && <10
    , bytestring
    , weigh
Run Code Online (Sandbox Code Playgroud)

如何my-guage-bench使用 Stack 仅运行单个基准测试(如 )?

benchmarking haskell haskell-stack

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

在 dart 中使用对象作为映射键会对性能产生重大影响吗?

在 dart 中编写一些代码时,我最近发现使用某些对象作为映射键更简单的情况。实际上这段代码是在 Web 模式下执行的(编译为 javascript),但最终它也会在 dart VM 模式下使用。

使用对象作为映射的键会对 dart 产生显着的内存/性能影响吗?

我没有找到很多关于基准测试的资源(https://dart.dev/articles/benchmarking已失效),因此也欢迎任何指示。

performance benchmarking dictionary dart

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

为什么 CUDA GPU 矩阵乘法比 numpy 慢?numpy 为何这么快?

我正在发现 numba 的 cuda 扩展,并查看了 CUDA 上矩阵乘法的示例实现。代码位于numba 的网站上。

\n

然后我用我认为不太理想的实现对其进行了基准测试:numpy 的点函数,用于将两个 1024x1024 矩阵相乘(使用 生成randn(1024,1024)

\n

结果:

\n
    \n
  • CUDA 每次乘法 40 毫秒,
  • \n
  • numpy 每次乘法 5 毫秒。
  • \n
\n

如果 numpy 的算法是朴素矩阵乘法,那么它应该需要 1024^3 ~ 1e9 乘法和加法。这是每 5ms/1e9 = 5 皮秒一次操作的平均吞吐量。我的 CPU 运行频率约为 3.4 GHz,因此每个周期需要 300 皮秒。

\n

所以我的问题是:numpy 的矩阵乘法如何比普通矩阵乘法快 60 倍?

\n

我听说过 Strassen 的算法,其复杂度约为 N^2.8,因此每次乘法和加法需要 20 皮秒。仍然比 CPU 快 30 倍。

\n

编辑:

\n
    \n
  1. cuda方法的定义
  2. \n
\n
from numba import cuda, float32\n\nTPB = 16\n\n@cuda.jit()\ndef …
Run Code Online (Sandbox Code Playgroud)

python benchmarking cuda numpy numba

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

Java BigInteger 源代码性能基准测试

我试图弄清楚为什么 Java 的 BigInteger 乘法基准始终比使用复制到我的项目的 BigInteger.java 源代码中的实例快 3 倍。使用 jmh 运行基准测试。这是一个示例输出,请注意,加法的运行效果大致相同。

\n
Benchmark                                 Mode  Cnt       Score       Error  Units\nBenchmarkTest.javaBigInteger_add         thrpt    5  856062.338 \xef\xbf\xbd 34040.923  ops/s\nBenchmarkTest.sourceBigInteger_add       thrpt    5  842421.746 \xef\xbf\xbd 39630.112  ops/s\nBenchmarkTest.javaBigInteger_multiply    thrpt    5  525649.635 \xef\xbf\xbd 15271.083  ops/s\nBenchmarkTest.sourceBigInteger_multiply  thrpt    5  133944.766 \xef\xbf\xbd  1832.857  ops/s\n
Run Code Online (Sandbox Code Playgroud)\n

我这样做的原因是试图将其中的一部分移植到 Kotlin,我注意到基准测试有点慢。为了看看它是否与 Kotlin 有关,我从图片中删除了它,并在纯 java 中执行了所有操作,得到了完全相同的结果。如果源代码/算法完全相同,为什么这个基准测试会有如此大的差异?

\n

使用此代码的项目: https://github.com/asheragy/BigInteger-Benchmark

\n

java math performance benchmarking biginteger

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

为什么在这个简单的 BubbleSort 基准测试示例中 Java 比 C++ 更快?

我从同事那里听说 C++ 比 Java 更快,在寻求最高性能时,特别是对于金融应用程序,这是一条必经之路。但我的观察有点不同。谁能指出我实验的失败或在讨论中添加一些科学变量?

注1:我在 C++ 编译器中使用-O3(最大优化)和-O2 。

注2:包含每种语言的简短完整源代码。您可以随意在自己的机器上运行、进行更改、得出结论并分享。

注意3:如果将两个源代码并排放在编辑器中,您将看到它们的实现是等效的

更新:我尝试clang++g++各种优化选项(-O2-O3-Os-march=native等),它们都产生了比 Java 慢的结果。我认为此时为了使 C++ 更快,我必须深入研究生成的汇编代码并进行一些汇编编程。我想知道在编写大型实际应用程序时这种方法(汇编编程和汇编调试)有多实用。

基准测试有什么作用?

  • 在堆中(而不是在堆栈中)创建一个int数组
  • 启动时钟
  • 填充数组
  • 使用冒泡排序对数组进行排序
  • 停止时钟

执行 1000 万次,丢弃前 100 万次进行预热,并输出平均、最短和最长时间。

对于C++我得到:(使用 -O3 和 -O2)

$ g++ --version
g++ (Ubuntu 7.5.0-3ubuntu1~18.04) 7.5.0

$ g++ TimeBubbleSort.cpp -o TimeBubbleSort -std=c++11 -O3
$ ./TimeBubbleSort 10000000 1000000 60
Value …
Run Code Online (Sandbox Code Playgroud)

c++ java performance benchmarking bubble-sort

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

为什么 Java 编译的正则表达式比 String::split 中解释的运行速度慢?

我正在尝试改进以下代码:

\n
    public int applyAsInt(String ipAddress) {\n        var ipAddressInArray = ipAddress.split("\\\\.");\n        ...\n
Run Code Online (Sandbox Code Playgroud)\n

所以我将正则表达式编译成静态常量:

\n
    private static final Pattern PATTERN_DOT = Pattern.compile(".", Pattern.LITERAL);\n\n    public int applyAsInt(String ipAddress) {\n        var ipAddressInArray = PATTERN_DOT.split(ipAddress);\n        ...\n
Run Code Online (Sandbox Code Playgroud)\n

其余代码保持不变。

\n

令我惊讶的是,新代码比以前的代码慢。\n以下是测试结果:

\n
Benchmark                                (ipAddress)  Mode  Cnt    Score    Error  Units\nConverterBenchmark.mkyongConverter           1.2.3.4  avgt   10  166.456 \xc2\xb1  9.087  ns/op\nConverterBenchmark.mkyongConverter       120.1.34.78  avgt   10  168.548 \xc2\xb1  2.996  ns/op\nConverterBenchmark.mkyongConverter   129.205.201.114  avgt   10  180.754 \xc2\xb1  6.891  ns/op\nConverterBenchmark.mkyong2Converter          1.2.3.4  avgt   10  253.318 \xc2\xb1  4.977  ns/op\nConverterBenchmark.mkyong2Converter      120.1.34.78  avgt   10  263.045 \xc2\xb1  8.373  ns/op\nConverterBenchmark.mkyong2Converter …
Run Code Online (Sandbox Code Playgroud)

java regex benchmarking split jmh

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

为什么 Go 中读写文件比 Perl 慢很多?

我使用Go是为了提高代码效率,但是当我使用Go读写文件时,发现它的读写效率没有Perl高。是我代码的问题还是其他原因?

\n

构建输入文件:

\n
# Input File:\nfor i in $(seq 1 600000) do     echo SERVER$((RANDOM%800+100)),$RANDOM,$RANDOM,$RANDOM >> sample.csv done\n
Run Code Online (Sandbox Code Playgroud)\n

使用 Perl\xef\xbc\x9a 读写文件

\n
time cat sample.csv | perl -ne 'chomp;print"$_"' > out.txt\n
Run Code Online (Sandbox Code Playgroud)\n
real    0m0.249s\nuser    0m0.083s\nsys 0m0.049s\n
Run Code Online (Sandbox Code Playgroud)\n

使用 Go 读写文件:

\n
package main\n\nimport (\n    "bufio"\n    "fmt"\n    "io"\n    "os"\n    "strings"\n)\n\nfunc main() {\n\n    filepath := "./sample.csv"\n    file, err := os.OpenFile(filepath, os.O_RDWR, 0666)\n    if err != nil {\n        fmt.Println("Open file error!", err)\n        return\n    }\n    defer file.Close()\n    buf := bufio.NewReader(file)\n    for {\n        line, …
Run Code Online (Sandbox Code Playgroud)

perl benchmarking go

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

YCSB for VoltDB

有谁知道是否有任何YCSB客户端/驱动程序可用于对VoltDB进行基准测试?甚至任何参考出版物/博客/文章/研究项目?

我们可以将TPC工作负载用于VoltDB基准测试吗?

非常感谢大家.

cloud benchmarking microbenchmark voltdb ycsb

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

测试Ruby中数组包含的最快方法

我在想.在Ruby中测试数组是否包含另一个数组的最快方法是什么?所以我构建了这个小基准脚本.很想听听你对比较方法的看法.你知道其他一些 - 或许更好的方法吗?

require 'benchmark'
require 'set'

a = ('a'..'z').to_a.shuffle
b = ["b","d","f"]

Benchmark.bm do |x|
  x.report do
      10000.times do
          Set[b].subset?(a.to_set)
      end
  end
  x.report do
      10000.times do
          (a & b).count == b.size
      end
  end
    x.report do
      10000.times do
          (a.inject(0) {|s,i| s += b.include?(i)?1:0 } == b.size)
      end
    end
    x.report do
      10000.times do
          (b - a).empty?
      end
    end
    x.report do
      10000.times do
          b.all? { |o| a.include? o }
      end
    end
end
Run Code Online (Sandbox Code Playgroud)

结果:

     user     system      total        real
 0.380000   0.010000   0.390000 (  0.404371) …
Run Code Online (Sandbox Code Playgroud)

ruby arrays benchmarking

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

Java:使用System.nanoTime()排序函数执行时间太长

我试图获得不同数组大小的各种排序方法的总耗用时间.我能够获得size = 100,1000,10000和100000的经过时间,但是当我尝试1000000时它只是保持运行而不给出结果(我假设1000000太大了?).有没有办法使用nanoTime获取经过的时间,它会在合理的时间内编译?任何帮助都会很棒!

我的节目:

import java.util.Random;

public class Sorting {

public static void printArray(int[] array) {
    System.out.print("The Array: ");
    for (int i = 0; i < array.length; i++) {
        System.out.print(array[i] + " ");
    }
    System.out.println();
}

public static void exchange(int[] array, int i, int j) {
    int temp = array[i];
    array[i] = array[j];
    array[j] = temp;
}

public static void selectionSort(int[] array) {
    for (int fill = 0; fill < array.length - 2; fill++) {
        int minPos = fill;
        for …
Run Code Online (Sandbox Code Playgroud)

java sorting benchmarking bubble-sort nanotime

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