相关疑难解决方法(0)

定时器功能使用C++以纳秒为单位提供时间

我希望计算API返回值所花费的时间.这种行动所花费的时间是纳秒秒.由于API是C++类/函数,我使用timer.h来计算相同的:

  #include <ctime>
  #include <cstdio>

  using namespace std;

  int main(int argc, char** argv) {

      clock_t start;
      double diff;
      start = clock();
      diff = ( std::clock() - start ) / (double)CLOCKS_PER_SEC;
      cout<<"printf: "<< diff <<'\n';

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

上面的代码给出了以秒为单位的时间.如何在毫秒秒内获得相同的精度?

c c++ timer

101
推荐指数
8
解决办法
20万
查看次数

获取CPU周期数?

我在SO上看到这篇文章,其中包含C代码以获取最新的CPU周期数:

基于CPU周期计算的C/C++ Linux x86_64中的分析

有没有办法在C++中使用这个代码(欢迎使用windows和linux解决方案)?虽然用C语言编写(而C是C++的一个子集)但我不太确定这段代码是否适用于C++项目,如果没有,如何翻译呢?

我使用的是x86-64

EDIT2:

找到此功能但无法让VS2010识别汇编程序.我需要包含任何内容吗?(我相信我必须换uint64_tlong long窗户......?)

static inline uint64_t get_cycles()
{
  uint64_t t;
  __asm volatile ("rdtsc" : "=A"(t));
  return t;
}
Run Code Online (Sandbox Code Playgroud)

EDIT3:

从上面的代码我得到错误:

"错误C2400:'操作码'中的内联汇编语法错误;找到'数据类型'"

有人可以帮忙吗?

c c++ performance x86 rdtsc

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

使用rdtsc计算系统时间

假设我的CPU中的所有内核具有相同的频率,从技术上讲,我可以每毫秒左右为每个内核同步系统时间和时间戳计数器对.然后根据我正在运行的当前核心,我可以获取当前rdtsc值并使用tick delta除以核心频率,我能够估计自上次同步系统时间和时间戳计数器对后经过的时间.推断当前系统时间而没有来自当前线程的系统调用开销(假设不需要锁来检索上述数据).这在理论上很有效,但在实践中我发现有时我会得到更多的滴答,然后我会期望,也就是说,如果我的核心频率为1GHz并且我花了1毫秒的系统时间和时间戳计数器对,我希望看到一个delta在大约10 ^ 6个刻度的刻度线中,但实际上我发现它可以在10 ^ 6到10 ^ 7之间的任何位置.我不确定有什么问题,有人可以分享他对如何计算系统时间的看法rdtsc吗?我的主要目标是避免每次我想知道系统时间时执行系统调用的需要,并且能够在用户空间中执行计算,这将给我一个很好的估计(目前我定义了一个很好的估计结果)与实际系统时间间隔为10微秒.

c++ time assembly rdtsc

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

标签 统计

c++ ×3

c ×2

rdtsc ×2

assembly ×1

performance ×1

time ×1

timer ×1

x86 ×1