多核cpu的频率怎么算?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了多核cpu的频率怎么算?相关的知识,希望对你有一定的参考价值。

amd
羿龙ii
x4
965

cpu主频:3400mhz

二级缓存:4×512kb

三级缓存:6mb

核心数量:四核心

总线类型:ht3.0总线
2000mhz

主频是3.4,就是3.4*3*4(4核心)=40.8的··不过这个只是个理论数值,一般只能到60-70%,

至于1,2,3级缓存是cpu计算数据的容量通道,就是和内存差不多的,先存点数据,到时能直接处理的,2级缓存会影响速度,3级缓存到是无所谓的,因为3级缓存一般比较大,一般够用。
参考技术A 看你是什么CPU了,最新的英特尔i系列处理器能够自适应,按需求分配CPU运算资源.甚至在低需求时关闭部分核心及线程.
而老双核CPU只能同时降频而达到节能目的.
更老的双核是分频段的,就像两个档位的车一样,要么节能,要么满载.
AMD的处理器一样,只是节能技术名称不同而已.
这些都是跟CPU本身性能和主板是否支持有关,更双核补丁没关系,双核补丁是XP时代的东西,具体原因百度下就好.

多核CPU频率

【中文标题】多核CPU频率【英文标题】:multicore CPU frequency 【发布时间】:2016-07-11 15:50:35 【问题描述】:

下面是我使用rdtsc测试我的计算机的CPU频率和计时功能的代码。

/* Code only works on x86 machine compiling with GCC */

/* Keep track of most recent reading of cycle counter */
static unsigned cyc_hi = 0;
static unsigned cyc_lo = 0;

void access_counter(unsigned *hi, unsigned *lo)

  /* Get cycle counter */
  asm("rdtsc; movl %%edx,%0; movl %%eax,%1" 
      : "=r" (*hi), "=r" (*lo)
      : /* No input */ 
      : "%edx", "%eax");


double get_counter()

  unsigned ncyc_hi, ncyc_lo;
  unsigned hi, lo, borrow;
  double result;
  /* Get cycle counter */
  access_counter(&ncyc_hi, &ncyc_lo);
  /* Do double precision subtraction */
  lo = ncyc_lo - cyc_lo;
  borrow = lo > ncyc_lo;
  hi = ncyc_hi - cyc_hi - borrow;
  return (double) hi * (1 << 30) * 4 + lo;


void start_counter()

  access_counter(&cyc_hi, &cyc_lo);


void p()

  sleep(1);


int main(int argc, char const *argv[])

    /* Determine Clock Rate of Processor */
    double MHZ;
    int sleep_time = 10;
    start_counter();
    sleep(sleep_time);
    MHZ = get_counter() / (sleep_time * 1e6);
    printf("Processor Clock Rate ~= %.1f MHz\n", MHZ);
    /* cat /proc/cpuinfo */

    /* Time Function P */
    double tsecs;
    start_counter();
    p();
    tsecs = get_counter() / (MHZ * 1e6);
  printf("%.1f seconds\n", tsecs);
    return 0;

运行这个程序后,它打印出处理器时钟频率在3591.8MHz左右,然后我运行cat /proc/cpuinfo,它显示有8个处理器(0~7),有些处理器的cpu MHz不同,但没有一个是 3591.8MHz。我想知道如何解释这个值,3591.8MHz?非常感谢。

【问题讨论】:

你得到了哪些值? 尝试使用cpufreq-info 和cpufreq-set 设置CPU 频率或调控器,然后运行您的程序。 【参考方案1】:

CPU 每秒可以重新计时数千次。它们旨在做到这一点。您的程序可能正常工作并显示当前频率的快照,当您手动执行 cat 时未观察到该快照?此外,您的程序会产生一些工作负载,因此它可能会使一个 CPU 瞬间脱离某种深度休眠状态以快速完成工作,然后重新进入睡眠状态。这是新的英特尔酷睿 i 处理器的行为。你的CPU是什么?如果您多次执行cat /proc/cpuinfo,您会得到相同的结果吗?

【讨论】:

感谢您的回复。我的 CPU 是 Intel(R) Core(TM) i7-4790。是的,我在程序完成后运行 cat 。所以这就是为什么我在 cpuinfo 中看不到程序的打印值? 我相信是的。这是一个具有许多省电状态和非常激进的省电逻辑的 Haswell。你cat /proc/cpuinfo 多次了吗?你得到了同样的结果吗? 感谢您的回复。我 cat /proc/cpuinfo 多次查看程序运行时当前的活动 CPU 频率。虽然我没有看到程序打印出来的确切的 3591.8Mhz,但是 cat /proc/cpuinfo 非常接近这个数字。【参考方案2】:

如果使用/proc/cpuinfobogomips 字段是稳定的,是 CPU 频率的 2 倍。

如果您有最新的处理器,它将具有固定的 [最大] TSC 时钟速率,在 /proc/cpuinfoflags 字段中由 constant_tsc 表示。这意味着它不会改变,即使处理器有速度步进。

所以,你想要的是最大的CPU频率,你可以通过阅读得到:

/sys/devices/system/cpu/cpu0/cpufreq/cpuinfo_max_freq

请在此处查看我的答案以获取更多详细信息:Getting TSC rate in x86 kernel

【讨论】:

以上是关于多核cpu的频率怎么算?的主要内容,如果未能解决你的问题,请参考以下文章

CPU双核或者多核的速度怎么算?

多核CPU频率

请问多核CPU还需要超线程技术吗?还有多核CPU的带宽怎样计算?

多核CPU的利用率怎么计算

怎么让apache利用多核CPU进行并发的问

多核处理器的频率是怎样计算的?