Tag: 性能测试

与单个进程方案相比,多进程方案中的访问时间意外较低

我从program1访问共享库(共享数组数据结构),并找到访问该时间来读取该数组的所有元素。 我得到大约17000个滴答,而只有Program1单独执行。 现在,当我首先在另一个选项卡中执行program2(具有空的while循环以保持终止)时,然后运行program1并测量访问时间以读取该数组的所有元素。 令我惊讶的是,与之前只有Program1执行的情况相比,我获得了8000ticks。 看起来只有program1执行时才需要花费更多时间来读取数组,而有2个程序时,program1正在执行与之前相同的任务,而program2通过while循环保持CPU忙。 预计存在program1的访问时间会更长,而实际结果则相反。 为什么会这样? 这是共享库 #include static const int DATA[1024]={1 ,2 ,3,…..1024]; inline void foo(void) { int j, k=0,count=0; for(j=0;j<1024;j++) { k=DATA[j]; } k+=0; } PROGRAM1 int main(void) { foo(); start=timer(); foo(); end=timer(); printf(“Time1=%llu\n”,end-start); start=timer(); foo(); end=timer(); printf(“Time2=%llu\n”,end-start); start=timer(); foo(); end=timer(); printf(“Time3=%llu\n”,end-start); sleep(1); start=timer(); foo(); end=timer(); printf(“after sleep(1)\n”); printf(“Time4=%llu\n”,end-start); start=timer(); foo(); end=timer(); […]

为短代码获得可靠的性能测量

我正在尝试分析一些函数,这些函数以不同的方式实现相同算法的不同版本。 我增加了每个函数运行的次数,这样在单个函数中花费的总时间大约是1分钟(以揭示性能差异)。 现在,运行几次测试会产生令人困惑的结果。 在同一函数的多次执行之间存在巨大的可变性(+ – 50%),并且因此确定哪个函数最快(这是测试的目标)几乎是不可能的。 在运行测试之前,我应该注意一些特殊的事情吗?这样我可以获得更平滑的测量结果吗? 如果不这样做,是多次运行测试并计算每个函数的平均值?

测量CPU频率缩放效果

最近我试图测量cpu缩放的效果。 如果我使用这个时钟测量它,它是否准确? template struct rdtsc_clock { typedef unsigned long long rep; typedef std::ratio period; typedef std::chrono::duration duration; typedef std::chrono::time_point time_point; static const bool is_steady = true; static time_point now() noexcept { unsigned lo, hi; asm volatile(“rdtsc” : “=a” (lo), “=d” (hi)); return time_point(duration(static_cast(hi) << 32 | lo)); } }; 更新 : 根据我的另一篇文章的评论,我相信redtsc不能用于测量cpu频率缩放的效果,因为来自redtsc的计数器不受CPU频率的影响,我是对的吗?

比较rdtsc clock和c ++ 11 std :: chrono :: high_resolution_clock产生的时间测量结果

我试图比较c ++ 11 std::chrono::high_resolution_clock rdtsc_clock std::chrono::high_resolution_clock rdtsc_clock时间和下面的rdtsc_clock时钟。 从high_resolution_clock ,我得到的结果如rdtsc_clock 。从rdtsc_clock ,我得到rdtsc_clock等。为什么他们的结果看起来如此不同? 从我的直觉来看,我相信rdtsc_clock正在呈现〜准确的结果,对吗? template struct rdtsc_clock { typedef unsigned long long rep; typedef std::ratio period; typedef std::chrono::duration duration; typedef std::chrono::time_point time_point; static const bool is_steady = true; static time_point now() noexcept { unsigned lo, hi; asm volatile(“rdtsc” : “=a” (lo), “=d” (hi)); return time_point(duration(static_cast(hi) << 32 […]

使用while()和sleep()将程序置于睡眠模式之间的区别

我创建了一个共享对象,并从两个不同的程序访问它并测量时间。 DATA数组是两个进程之间的共享对象。 案例1:在program1中使用while program1: access shared DATA array ;// to load into memory and avoid page fault during access time calculation start=timer; access shared DATA array end=timer; Time_needed= end-start printf(“Inside Program1, Time1=%d\n”,Time_needed); start=timer; access shared DATA array end=timer; Time_needed= end-start printf(“Inside Program1, Time2=%d\n”,Time_needed); while(1){}; // I replace this by sleep(1000) in CASE-2 计划2: access shared […]