相关疑难解决方法(0)

为什么在单独的循环中元素添加比在组合循环中快得多?

假设a1,b1,c1,并d1指向堆内存和我的数字代码具有下列核心循环.

const int n = 100000;

for (int j = 0; j < n; j++) {
    a1[j] += b1[j];
    c1[j] += d1[j];
}
Run Code Online (Sandbox Code Playgroud)

该循环通过另一个外for循环执行10,000次.为了加快速度,我将代码更改为:

for (int j = 0; j < n; j++) {
    a1[j] += b1[j];
}

for (int j = 0; j < n; j++) {
    c1[j] += d1[j];
}
Run Code Online (Sandbox Code Playgroud)

在MS Visual C++ 10.0上进行了全面优化编译,在Intel Core 2 Duo(x64)上为32位启用了SSE2,第一个示例需要5.5秒,双循环示例仅需1.9秒.我的问题是:(请参考我在底部的改写问题)

PS:我不确定,如果这有帮助:

第一个循环的反汇编基本上是这样的(这个块在整个程序中重复大约五次):

movsd       xmm0,mmword ptr [edx+18h]
addsd …
Run Code Online (Sandbox Code Playgroud)

c c++ performance vectorization compiler-optimization

2175
推荐指数
9
解决办法
23万
查看次数

如何在Java中编写正确的微基准测试?

你如何在Java中编写(并运行)正确的微基准测试?

我在这里寻找代码示例和注释,说明要考虑的各种事项.

示例:基准测量应该测量时间/迭代或迭代/时间,为什么?

相关:秒表基准可以接受吗?

java benchmarking jvm jvm-hotspot microbenchmark

835
推荐指数
11
解决办法
11万
查看次数

C程序的执行时间

我有一个C程序,旨在在几个处理器上并行运行.我需要能够记录执行时间(可能是1秒到几分钟).我已经搜索了答案,但他们似乎都建议使用该clock()函数,然后计算程序所用的时钟数除以该Clocks_per_second值.

我不确定如何Clocks_per_second计算价值?

在Java中,我只是在执行之前和之后以毫秒为单位.

C中有类似的东西吗?我看过了,但我似乎无法找到比第二种解决方案更好的方法.

我也知道分析器是一个选项,但我希望自己实现一个计时器.

谢谢

c benchmarking

194
推荐指数
9
解决办法
40万
查看次数

用C++测量函数的执行时间

我想知道某个函数在我的C++程序中执行多长时间才能在Linux上执行.之后,我想进行速度比较.我看到了几个时间功能,但结果来自于boost.计时:

process_user_cpu_clock, captures user-CPU time spent by the current process
Run Code Online (Sandbox Code Playgroud)

现在,我不清楚我是否使用上述功能,我将获得CPU花在该功能上的唯一时间吗?

其次,我找不到任何使用上述功能的例子.任何人都可以帮我如何使用上述功能?

PS:现在,我std::chrono::system_clock::now()用来在几秒钟内获得时间,但由于每次CPU负载不同,这给了我不同的结果.

c++ optimization profiling

110
推荐指数
6
解决办法
15万
查看次数

编译32位和64位时,性能差异很大(快26倍)

我试图衡量在访问值类型和引用类型列表时使用a for和a 的区别foreach.

我使用以下类进行分析.

public static class Benchmarker
{
    public static void Profile(string description, int iterations, Action func)
    {
        Console.Write(description);

        // Warm up
        func();

        Stopwatch watch = new Stopwatch();

        // Clean up
        GC.Collect();
        GC.WaitForPendingFinalizers();
        GC.Collect();

        watch.Start();
        for (int i = 0; i < iterations; i++)
        {
            func();
        }
        watch.Stop();

        Console.WriteLine(" average time: {0} ms", watch.Elapsed.TotalMilliseconds / iterations);
    }
}
Run Code Online (Sandbox Code Playgroud)

我用double我的价值类型.我创建了这个'假类'来测试引用类型:

class DoubleWrapper
{
    public double Value { get; set; }

    public DoubleWrapper(double value)
    {
        Value …
Run Code Online (Sandbox Code Playgroud)

c# performance 32bit-64bit

78
推荐指数
2
解决办法
6303
查看次数

浮点除法与浮点乘法

通过编码是否有任何(非微优化)性能增益

float f1 = 200f / 2
Run Code Online (Sandbox Code Playgroud)

在比较中

float f2 = 200f * 0.5
Run Code Online (Sandbox Code Playgroud)

几年前我的一位教授告诉我,浮点除法比浮点乘法慢,但没有详细说明原因.

这句话适用于现代PC架构吗?

UPDATE1

关于评论,请同时考虑这个案例:

float f1;
float f2 = 2
float f3 = 3;
for( i =0 ; i < 1e8; i++)
{
  f1 = (i * f2 + i / f3) * 0.5; //or divide by 2.0f, respectively
}
Run Code Online (Sandbox Code Playgroud)

更新2 从评论中引用:

[我想]知道什么是算法/架构要求导致>除法在硬件上比复制要复杂得多

c++ floating-point micro-optimization

67
推荐指数
5
解决办法
5万
查看次数

什么是microbenchmarking?

我听说过这个术语,但我不完全确定它是什么意思,所以:

  • 它意味着什么,它意味着什么?
  • IS和IS不是微基准测试的一些例子是什么?
  • 微基准测试的危险是什么,你如何避免它?
    • (或者这是件好事吗?)

java optimization performance benchmarking jit

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

双或浮,哪个更快?

我正在阅读"加速C++".我发现一句话说"有时double执行速度比floatC++ 快".读完句子后,我感到困惑floatdouble工作.请向我解释这一点.

c++ floating-point double

47
推荐指数
6
解决办法
4万
查看次数

Rust中的基准程序

如何在Rust中对程序进行基准测试?例如,如何在几秒钟内获得程序的执行时间?

time benchmarking rust

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

为什么 __int128_t 在 x86-64 GCC 上比 long long 快?

这是我的测试代码:

#include <chrono>
#include <iostream>
#include <cstdlib>
using namespace std;

using ll = long long;

int main()
{
    __int128_t a, b;
    ll x, y;

    a = rand() + 10000000;
    b = rand() % 50000;
    auto t0 = chrono::steady_clock::now();
    for (int i = 0; i < 100000000; i++)
    {
        a += b;
        a /= b;
        b *= a;
        b -= a;
        a %= b;
    }
    cout << chrono::duration_cast<chrono::milliseconds>(chrono::steady_clock::now() - t0).count() << ' '
         << (ll)a % 100000 << '\n';

    x = …
Run Code Online (Sandbox Code Playgroud)

c++ performance x86-64 cpu-architecture integer-division

43
推荐指数
2
解决办法
3808
查看次数