gpt4 book ai didi

c - 多核CPU频率

转载 作者:行者123 更新时间:2023-11-30 15:07:18 25 4
gpt4 key购买 nike

下面是我测试计算机的 CPU 频率并使用 rdtsc 对函数进行计时的代码.

/* 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?非常感谢。

最佳答案

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

关于c - 多核CPU频率,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38311191/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com