相关疑难解决方法(0)

用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万
查看次数

x86的MOV真的可以"免费"吗?为什么我不能重现这个呢?

我一直看到人们声称MOV指令可以在x86中免费,因为寄存器重命名.

对于我的生活,我无法在一个测试用例中验证这一点.每个测试用例我尝试揭穿它.

例如,这是我用Visual C++编译的代码:

#include <limits.h>
#include <stdio.h>
#include <time.h>

int main(void)
{
    unsigned int k, l, j;
    clock_t tstart = clock();
    for (k = 0, j = 0, l = 0; j < UINT_MAX; ++j)
    {
        ++k;
        k = j;     // <-- comment out this line to remove the MOV instruction
        l += j;
    }
    fprintf(stderr, "%d ms\n", (int)((clock() - tstart) * 1000 / CLOCKS_PER_SEC));
    fflush(stderr);
    return (int)(k + j + l);
}
Run Code Online (Sandbox Code Playgroud)

这为循环生成以下汇编代码(随意生成这个你想要的;你显然不需要Visual C++):

LOOP:
    add edi,esi
    mov …
Run Code Online (Sandbox Code Playgroud)

c x86 assembly cpu-registers micro-optimization

23
推荐指数
2
解决办法
2113
查看次数

四舍五入常规

在教程中,有些东西让我感到困惑.准确地说,整数除法.

看似首选的方法是将除数转换为浮点数,然后将浮点数舍入为最接近的整数,然后将其转换为整数:

#include <cmath>
int round_divide_by_float_casting(int a, int b){
    return  (int) std::roundf( a / (float) b); 
}
Run Code Online (Sandbox Code Playgroud)

然而,这似乎是用右手刮伤你的左耳.我用的是:

int round_divide (int a, int b){
    return a / b + a % b * 2 / b;
}
Run Code Online (Sandbox Code Playgroud)

这不是突破,但它不标准的事实让我想知道我是否遗漏了什么?尽管我(尽管有限)测试,我找不到任何两种方法给我不同结果的情况.是否有人遇到某种情况,其中int-> float-> int cast产生了更准确的结果?

c++ math integer rounding

5
推荐指数
2
解决办法
439
查看次数

简单的()循环基准测试与任何循环绑定需要相同的时间

我愿意编写一个代码,让我的CPU执行一些操作,看看他花了多少时间来解决它们.我想做一个从i = 0到i <5000的循环,然后将i乘以一个常数和时间.我最终得到了这个代码,它没有错误,但即使我更改循环i <49058349083或者如果i <2它需要相同的时间,它只需要0.024秒来执行代码.是什么错误?

PD:我昨天开始学习C++我很抱歉,如果这是一个非常容易回答的问题,但我找不到解决方案

#include <iostream>
#include <ctime>

using namespace std;

int main () {
    int start_s=clock();

    int i;
    for(i=0;i<5000;i++){
        i*434243;
    }

    int stop_s=clock();
    cout << "time: "<< (stop_s-start_s)/double(CLOCKS_PER_SEC)*1000;

    return 0;
}
Run Code Online (Sandbox Code Playgroud)

c++ performance benchmarking microbenchmark

5
推荐指数
2
解决办法
568
查看次数