标签: benchmarking

排序字符串向量:plain C vs idiomatic C++ 11

我目前正在尝试学习C++ 11及其奇特的功能.具体而言,我正在寻找高效率的通用性.所以我很高兴在C++ 11中编写了一个程序来对输入文件的行进行排序以测试我的新技能.由于C++编译器的内联和良好功能,我期望在这个小例子上获得高性能.为了得到我的程序有多快的提示,我使用该qsort函数在C中攻击了完全相同的程序,因为它是原始C,没有对该函数执行内联,并且我的比较函数被调用间接并且需要做两个间接到访问char *表示字符串的指针.

事实

然而,我对结果感到非常惊讶,C似乎比C++快4倍.在8Mb文件中,我得到以下结果:

$ g++ -O3 -std=c++11 -o sort sort.C
$ time ./sort < huge > /dev/null

real    0m0.415s
user    0m0.397s
sys     0m0.013s

$ cc -O3 -Wall -o sortc sort.c
$ time ./sortc < huge  > /dev/null

real    0m0.104s
user    0m0.097s
sys     0m0.010s

$ wc -l huge
140190 huge
Run Code Online (Sandbox Code Playgroud)

请注意,我试图尽可能公平,编译选项是相同的,我的C程序(稍后转储)的行为与C++程序相同:输入行的大小没有限制,输入数量没有限制线.

我还注意到,虽然我的C程序malloc几乎每个输入行调用一次,但C++程序的每个输入行的比例为10!

代码

以下是我用来比较的两个程序.

#include <iostream>
#include <string>
#include <vector>
#include <algorithm>
#include <memory>

int main () {
    typedef std::vector<std::string> svec;
    svec …
Run Code Online (Sandbox Code Playgroud)

c c++ sorting benchmarking c++11

22
推荐指数
4
解决办法
2075
查看次数

Python Numpy数据类型性能

所以我做了一些测试并得到了奇怪的结果.

码:

import numpy as np
import timeit


setup = """
import numpy as np
A = np.ones((1000,1000,3), dtype=datatype)
"""

datatypes = "np.uint8", "np.uint16", "np.uint32", "np.uint64",  "np.float16", "np.float32", "np.float64"

stmt1 = """
A = A * 255
A = A / 255
A = A - 1
A = A + 1
"""
#~ np.uint8 : 1.04969205993
#~ np.uint16 : 1.19391073202
#~ np.uint32 : 1.37279821351
#~ np.uint64 : 2.99286961148
#~ np.float16 : 9.62375889588
#~ np.float32 : 0.884994368045
#~ np.float64 : …
Run Code Online (Sandbox Code Playgroud)

python performance benchmarking types numpy

22
推荐指数
2
解决办法
6902
查看次数

PHP中的基准内存使用情况

所以,

细节

让我们假设我们有一些问题,至少有两个解决方案.我们想要实现的目标是比较它们的有效性.这该怎么做?显然,最好的答案是:做测试.我怀疑在语言特定的问题上有更好的方法(例如"PHP更快echo 'foo', 'bar'或者更快echo('foo'.'bar')").

好的,现在我们假设如果我们想测试一些代码,它等于测试一些函数.为什么?因为我们可以将该代码包装起来并传递它的上下文(如果有的话)作为它的参数.因此,我们所需要的只是拥有一些可以完成所有工作的基准功能.这是非常简单的一个:

function benchmark(callable $function, $args=null, $count=1)
{
   $time = microtime(1);
   for($i=0; $i<$count; $i++)
   {
      $result = is_array($args)?
                call_user_func_array($function, $args):
                call_user_func_array($function);
   }
   return [
      'total_time'   => microtime(1) - $time,
      'average_time' => (microtime(1) - $time)/$count,
      'count'        => $count
   ];
}
Run Code Online (Sandbox Code Playgroud)

- 这符合我们的问题,可以用来做比较基准测试.在比较我的意思是,我们可以使用以上功能的代码X,然后代码Y并在此之后,我们可以说,代码XZ%更快/比代码慢Y.

问题

好的,我们可以轻松测量时间.但记忆呢?我们之前的假设"如果我们想测试一些代码,它等于测试一些函数"似乎在这里不正确.为什么?因为 - 从形式上看它是真的,但如果我们将代码隐藏在函数中,那么我们将永远无法在此之后测量内存.例:

function foo($x, $y)
{
   $bar = array_fill(0, $y, str_repeat('bar', …
Run Code Online (Sandbox Code Playgroud)

php memory performance benchmarking

22
推荐指数
2
解决办法
4883
查看次数

为什么apply()方法比R中的for循环慢?

作为最佳实践的问题,我试图确定apply()在矩阵中创建函数是否更好,或者如果通过函数简单地循环矩阵更好.我尝试了两种方式,并惊讶地发现apply()速度较慢.任务是取一个向量并将其评估为正数或负数,然后如果为正数则返回1,如果为负则返回-1.该mash()函数循环和squish()功能传递给apply()函数.

million  <- as.matrix(rnorm(100000))

mash <- function(x){
  for(i in 1:NROW(x))
    if(x[i] > 0) {
      x[i] <- 1
    } else {
      x[i] <- -1
    }
    return(x)
}

squish <- function(x){
  if(x >0) {
    return(1)
  } else {
    return(-1)
  }
}


ptm <- proc.time()
loop_million <- mash(million)
proc.time() - ptm


ptm <- proc.time()
apply_million <- apply(million,1, squish)
proc.time() - ptm
Run Code Online (Sandbox Code Playgroud)

loop_million 结果:

user  system elapsed 
0.468   0.008   0.483 
Run Code Online (Sandbox Code Playgroud)

apply_million 结果:

user  system …
Run Code Online (Sandbox Code Playgroud)

benchmarking r

21
推荐指数
4
解决办法
2万
查看次数

显示每个vagrant ansible任务完成所需的时间

我正在将一个流浪汉配置者从shell转换为ansible,我想知道是否有任何选项可以显示完成每项任务所需的实际时间?

理想情况下,我想使用shell:方法和内置的yum:with_items方法来测量在yum中安装多个包之间的区别.ATM我坐在这里有一个秒表,但我需要准确的时间.

benchmarking provisioning task vagrant ansible

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

使用Java 8u20进行慢速AES GCM加密和解密

我正在尝试使用AES/GCM/NoPadding加密和解密数据.我安装了JCE Unlimited Strength Policy Files并在下面运行了(简单的)基准测试.我使用OpenSSL做了同样的事情,并且能够在我的PC上实现超过1 GB/s的加密和解密.

使用下面的基准测试,我只能在同一台PC上使用Java 8进行3 MB/s的加密和解密.知道我做错了什么吗?

public static void main(String[] args) throws Exception {
    final byte[] data = new byte[64 * 1024];
    final byte[] encrypted = new byte[64 * 1024];
    final byte[] key = new byte[32];
    final byte[] iv = new byte[12];
    final Random random = new Random(1);
    random.nextBytes(data);
    random.nextBytes(key);
    random.nextBytes(iv);

    System.out.println("Benchmarking AES-256 GCM encryption for 10 seconds");
    long javaEncryptInputBytes = 0;
    long javaEncryptStartTime = System.currentTimeMillis();
    final Cipher javaAES256 = Cipher.getInstance("AES/GCM/NoPadding");
    byte[] tag …
Run Code Online (Sandbox Code Playgroud)

benchmarking cryptography java-8 aes-gcm

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

IEnumerable&lt;&gt; vs List&lt;&gt; 作为参数

一般来说IEnumerable<>,当我传入参数时,我倾向于使用作为类型。然而,根据 BenchmarkDotNet:

[Benchmark]
public void EnumeratingCollectionsBad()
{
    var list = new List<string>();
    for (int i = 0; i < 1000; i++)
    {
        Bad(list);
    }
}

[Benchmark]
public void EnumeratingCollectionsFixed()
{
    var list = new List<string>();
    for (int i = 0; i < 1000; i++)
    {
        Fixed(list);
    }
}

private static void Bad(IEnumerable<string> list)
{
    foreach (var item in list)
    {
    }
}

private static void Fixed(List<string> list)
{
    foreach (var item in list)
    {
    }
}
Run Code Online (Sandbox Code Playgroud)
方法 工作 …

c# performance ienumerable benchmarking

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

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

Clojure数字运算表现

我不确定这是属于StackOverflow还是属于Clojure Google小组.但该小组似乎正在忙着讨论Clojure 1.2的数字改进,所以我会在这里尝试:

http://shootout.alioth.debian.org/为各种语言提供了许多性能基准.

我注意到Clojure丢失了,所以我制作了一个关于n体问题的Clojure版本.

我可以在这里找到我能够生成的最快的代码,并且对它进行基准测试似乎是说数字运算Clojure是

  • 因果〜比Python/Ruby/Perl快10倍
  • 因子比C/Java/Scala/Ada慢4倍
  • 与OCaml,Erlang和Go大致相同

我对这种性能表现非常满意.

我对Clojure大师的问题是

  • 无论是在速度方面还是在代码简洁性或可读性方面(不牺牲速度),我是否都有明显的改进?
  • 您是否认为这一方面代表了Clojure性能与Python/Ruby/Perl和另一方面Java/C?

更新

对于枪战更多的Clojure 1.1基准程序在这里,其中包括正体问题.

performance benchmarking clojure

20
推荐指数
2
解决办法
2975
查看次数

Rails:使用RSPec进行性能基准测试

我只是从rake:test来到RSpec,我很难找到任何等同于rake测试:基准和/或rake测试:profile.

那么,大多数rspec人员用于性能测试的是什么?我发现了--profile,它吐了十个最慢的测试,但我希望能有一些更全面的东西.

干杯...

performance benchmarking rspec ruby-on-rails

20
推荐指数
2
解决办法
6548
查看次数