标签: benchmarking

如何快速将数据加载到R?

我有一些R脚本,我必须尽快在R中加载几个数据帧.这非常重要,因为读取数据是程序中最慢的部分.例如:从不同的数据帧绘图.我以sav(SPSS)格式获取数据,但我可以将其转换为建议的任何格式.不幸的是,合并数据帧不是一个选项.

什么是加载数据的最快方法?我在考虑以下几点:

  • 第一次从sav转换为二进制R对象(Rdata),后来总是加载它,因为它看起来要快得多read.spss.
  • sav转换为csv文件并从主题中讨论的给定参数读取数据,
  • 或者是否值得在localhost上设置MySQL后端并从中加载数据?会更快吗?如果是这样,我还可以保存attr变量的任何自定义值(例如来自Spss导入文件的variable.labels)吗?或者这应该在一个单独的表中完成?

欢迎任何其他想法.感谢您提前提出的每一个建议!


我根据你给出的答案在下面做了一个小实验,并且还添加了(24/01/2011)一个非常"hackish"但非常快速的解决方案,只从一个特殊的二进制文件中加载几个变量/列.后者似乎是我现在能想象的最快的方法,这就是为什么我编写了一个名为save的小包来处理这个功能(05/03/2011:ver.0.3).该套餐正在"重"开发,欢迎任何推荐!

microbenchmark软件包的帮助下,我将很快发布一个具有准确基准测试结果的小插图.

performance benchmarking load r

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

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

Guava ImmutableMap的访问速度明显慢于HashMap

在研究某些高吞吐量数据结构的内存基准测试时,我意识到我只能使用ImmutableMap一点点重构.

认为这将是一个改进,我把它扔进了组合中并且惊讶地发现它不仅比它HashMap在单线程环境中慢,而且看起来一直比它慢ConcurrentHashMap!

你可以在这里看到完整的基准:https://bitbucket.org/snippets/dimo414/89K7G

测试的内容非常简单,需要花费多长时间才能获得地图中可能存在的大量随机字符串.

public static void timeAccess(Map<String,String> map) {
    Random rnd = new Random(seed);
    int foundCount = 0;

    long start = System.nanoTime();

    for(int i = 0; i < loop; i++) {
        String s = map.get(RndString.build(rnd));
        if(s != null)
            foundCount++;
    }

    long stop = System.nanoTime() - start;

    System.out.println("Found "+foundCount+" strings out of "+loop+" attempts - "+
        String.format("%.2f",100.0*foundCount/loop)+" success rate.");
    System.out.println(map.getClass().getSimpleName()+" took "+
        String.format("%.4f", stop/1_000_000_000.0)+" seconds.");
    System.out.println();
}
Run Code Online (Sandbox Code Playgroud)

对a HashMap,a ConcurrentHashMap …

java performance benchmarking hashmap guava

36
推荐指数
2
解决办法
7951
查看次数

35
推荐指数
3
解决办法
2万
查看次数

C#:这个基准测试类准确吗?

我创建了一个简单的类来对我的一些方法进行基准测试 但它准确吗?我对基准测试,计时等等都不熟悉,所以我想在这里可以请一些反馈.此外,如果它是好的,也许其他人也可以使用它:)

public static class Benchmark
{
    public static IEnumerable<long> This(Action subject)
    {
        var watch = new Stopwatch();
        while (true)
        {
            watch.Reset();
            watch.Start();
            subject();
            watch.Stop();
            yield return watch.ElapsedTicks;
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

你可以像这样使用它:

var avg = Benchmark.This(() => SomeMethod()).Take(500).Average();
Run Code Online (Sandbox Code Playgroud)

任何反馈?它看起来是非常稳定和准确的,还是我错过了什么?

c# benchmarking feedback

35
推荐指数
3
解决办法
3115
查看次数

比较时间与亚秒精度

如何获得自纪元以来的毫秒数?

请注意,我想要实际的毫秒,而不是秒乘以1000.我正在比较需要不到一秒钟且需要毫秒精度的东西的时间.(我看了很多答案,他们似乎都有*1000)

我将POST请求中的时间与服务器上的结束时间进行比较.我只需要两次使用相同的格式,不管是什么.我认为unix时间会起作用,因为Javascript有一个函数可以实现

python benchmarking

35
推荐指数
4
解决办法
7万
查看次数

python:deque vs list性能比较

在python文档中,我可以看到deque是一个特别的集合,高度优化从左侧或右侧弹出/添加项目.例如文件说:

Deques是堆栈和队列的概括(名称发音为"deck",是"双端队列"的缩写).Deques支持线程安全,内存有效的附加和从双端队列的弹出,在任一方向上具有大致相同的O(1)性能.

尽管列表对象支持类似的操作,但它们针对快速固定长度操作进行了优化,并导致pop(0)和insert(0,v)操作的O(n)内存移动成本,这些操作改变了底层数据表示的大小和位置.

我决定使用ipython进行一些比较.谁能解释一下我在这里做错了什么:

In [31]: %timeit range(1, 10000).pop(0)
 10000 loops, best of 3: 114 us per loop

In [32]: %timeit deque(xrange(1, 10000)).pop() 
10000 loops, best of 3: 181 us per loop

In [33]: %timeit deque(range(1, 10000)).pop()
1000 loops, best of 3: 243 us per loop
Run Code Online (Sandbox Code Playgroud)

python performance benchmarking deque data-structures

35
推荐指数
4
解决办法
3万
查看次数

比较BSXFUN和REPMAT

之前在比较bsxfunrepmat表现之间提出的问题很少.

在这篇文章中,我试图调查两者之间的性能数据bsxfunrepmat覆盖所有bsxfun内置函数,从而为它提供更广泛的视角,因为这两者都提供了良好的矢量化解决方案.

具体来说,我对这篇文章的问题是:

  1. 各种内置操作如何bsxfunrepmat等效执行?bsxfun支持浮点运算一样@plus,@minus,@times等,并且还像关系和逻辑运算@ge,@and等等.所以,是否有特定的内置插件,会给我明显的加速与bsxfun比使用他们的repmat等价物?

  2. 罗兰在她blog post已经基准repmatbsxfun具有定时@() A - repmat(mean(A),size(A,1),1)@() bsxfun(@minus,A,mean(A))分别.如果我需要涵盖所有内置函数的基准测试,我可以使用一些其他可用于浮点,关系和逻辑运算的比较模型吗?

performance benchmarking matlab vectorization bsxfun

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

是否可以强制现有的Java应用程序使用不超过x个内核?

我们正在对现有Java程序进行基准测试 它们是旨在从多核CPU中受益的线程应用程序.我们想测量内核数量对运行速度的影响,但我们不愿意(也无法)更改这些应用程序的代码.

当然,我们可以在不同的机器上测试软件,但这样既昂贵又复杂.我们宁愿拥有一个软件解决方案.

注意:您可以假设测试平台是Windows,Linux或Mac.理想情况下,我们希望能够在这两个平台上运行测试.

java performance benchmarking multithreading

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

为什么读取一个字节比从文件读取2,3,4,...字节慢20倍?

我一直在试图理解之间的权衡readseek.对于小的"跳跃",读取不需要的数据比跳过它更快seek.

而定时不同的读/求块大小找到引爆点,我碰到一个奇特的现象:read(1)比慢约20倍read(2),read(3)等等.这种效应对于不同读取方法,例如,相同的read()readinto().

为什么会这样?

搜索以下第2/3行的时间结果:

2 x buffered 1 byte readinto bytearray
Run Code Online (Sandbox Code Playgroud)

环境:

Python 3.5.2 |Continuum Analytics, Inc.| (default, Jul  5 2016, 11:45:57) [MSC v.1900 32 bit (Intel)]
Run Code Online (Sandbox Code Playgroud)

时间结果:

Non-cachable binary data ingestion (file object blk_size = 8192):
- 2 x buffered 0 byte readinto bytearray:
      robust mean: 6.01 µs +/- 377 ns
      min: 3.59 µs
- Buffered 0 byte seek followed by 0 byte …
Run Code Online (Sandbox Code Playgroud)

python io benchmarking file

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