相关疑难解决方法(0)

找出CPU时钟频率(每个核心,每个处理器)

像CPUz这样的程序非常擅长提供有关系统的深度信息(总线速度,内存时序等)

但是,是否有一种编程方式来计算每个核心(以及每个处理器,在每个CPU具有多个核心的多处理器系统中)频率,而无需处理CPU特定信息.

我正在尝试开发一种反作弊工具(用于时钟限制基准测试),它能够在基准测试期间记录系统中所有活动核心(所有处理器)的CPU时钟.

c++ cpu cpu-speed

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

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

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

我使用以下代码来分析我的操作,以优化我的函数中的cpu周期.

static __inline__ unsigned long GetCC(void)
{
  unsigned a, d; 
  asm volatile("rdtsc" : "=a" (a), "=d" (d)); 
  return ((unsigned long)a) | (((unsigned long)d) << 32); 
}
Run Code Online (Sandbox Code Playgroud)

我不认为这是最好的,因为即使连续两次通话也给了我"33"的差异.有什么建议 ?

c cpu profiling x86-64 cpu-usage

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

在x86_64平台上是否需要rdtsc的mfence?

unsigned int lo = 0;
unsigned int hi = 0;
__asm__ __volatile__ (
    "mfence;rdtsc" : "=a"(lo), "=d"(hi) : : "memory"
);
Run Code Online (Sandbox Code Playgroud)

mfence 在上面的代码中,是否有必要?

根据我的测试,找不到cpu重新排序.

测试代码片段包含在下面.

inline uint64_t clock_cycles() {
    unsigned int lo = 0;
    unsigned int hi = 0;
    __asm__ __volatile__ (
        "rdtsc" : "=a"(lo), "=d"(hi)
    );
    return ((uint64_t)hi << 32) | lo;
}

unsigned t1 = clock_cycles();
unsigned t2 = clock_cycles();
assert(t2 > t1);
Run Code Online (Sandbox Code Playgroud)

c++ linux timestamp x86-64

2
推荐指数
1
解决办法
1094
查看次数

标签 统计

c++ ×3

c ×2

cpu ×2

x86-64 ×2

cpu-speed ×1

cpu-usage ×1

linux ×1

performance ×1

profiling ×1

rdtsc ×1

timestamp ×1

x86 ×1