`
kmplayer
  • 浏览: 508781 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

返回一段程序经过的CPU周期数

阅读更多
1,实例代码:
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>

static unsigned cyc_high=0;
static unsigned cyc_low=0;

//rstsc指令访问计数器,高32为保存在%edx,低32位保存在%ax
void access_counter( unsigned* hi, unsigned* lo )
{
    asm("rdtsc; movl %%edx,%0; movl %%eax,%1"
        :"=r" (*hi),"=r" (*lo)
        :
        : "%edx", "%eax");
}

void start_counter()
{
    access_counter( &cyc_high, &cyc_low );
}

double get_counter()
{
    unsigned ncyc_high,ncyc_low;
    unsigned high_num,low_num,borrow;
    double result;

    access_counter( &ncyc_high, &ncyc_low );
    low_num=ncyc_low-cyc_low;
    borrow=( low_num<0 );
    high_num=ncyc_high-cyc_high;
    result=(double)high_num*(1<<30)*4+low_num;
    if(result<0)
        fprintf(stderr,"Error: counter returns neg value: %.0f\n",result);
    return result;
}


double get_mhz(int sleeptime)
{
    double rate;
    start_counter();
    sleep(sleeptime);
    rate=get_counter()/(1e6*sleeptime);
    return rate;
}




int main()
{
    double mhz;
    mhz=get_mhz(3);
    printf("CPU Time Frequency: %.0f MHZ\n",mhz);

    start_counter();
    //测量代码段
    printf("%.0f",get_counter());
    return 0;
}

分享到:
评论

相关推荐

    MIPS32位单周期CPU 32位MIPS单周期CPU 可以实现16条指令

    单周期CPU意味着所有操作都在一个时钟周期内完成,包括取指、译码、执行和写回结果。这种设计减少了处理器内部的延迟,使得CPU能够更快地响应指令。然而,单周期设计通常限制了指令的种类和复杂性,因为它需要一次性...

    基于verilog的多周期cpu附设计图和流程运行图

    多周期CPU通常包含以下主要部件:指令寄存器(IR)、指令解码器、控制单元、算术逻辑单元(ALU)、寄存器文件、数据存储器、程序计数器(PC)以及各种状态和控制信号。 在Verilog中实现多周期CPU,开发者需要定义...

    (16软工)关于测试多周期CPU的简单方法 beq、bltz1

    测试程序段包括了一系列汇编指令,这些指令涵盖了不同的操作,如数据处理、分支和跳转、存储器访问等。以下是部分指令的解析: 1. `addi $1,$0,80` (0x00000000): 这是一个立即数加载指令,将数值80加到寄存器$1中...

    单周期CPU设计实验报告1

    在本实验中,设计的CPU遵循了单周期处理器的架构,即所有的操作都在一个时钟周期内完成,以此来简化设计并提高执行效率。 1. 简介 单周期CPU设计是一个基础的数字系统课程设计任务,旨在让学生理解计算机内部如何...

    实验三:多周期CPU设计1

    在实现这个多周期CPU时,还需要编写一个编译器,将MIPS汇编语言程序转化为二进制机器码,以便CPU能够识别和执行。同时,实验还包括了测试CPU的方法,以确保所有设计的指令都能正确工作。 通过这个实验,学生不仅...

    02-6.7 总线结构与CPU指令周期(2).pptx

    CPU指令周期是指从取指令到完成该指令执行的一系列操作步骤。通常,一个指令周期包括若干个时钟周期,每个时钟周期对应一个具体的操作,如取指、解码、执行、写回结果等。以下是一些常见的指令执行阶段: 1. **取指...

    CPU占用率检测模块(易语言)

    在IT领域,CPU占用率是衡量计算机性能的重要指标之一,它反映了处理器在一段时间内执行任务的繁忙程度。易语言是一款中国本土开发的编程语言,旨在让编程变得更加简单、直观。本模块“CPU占用率检测模块”是专为...

    用程序使你的CPU占用率正弦变化

    描述中提到的“控制CPU占用率按正弦规律变化的代码”是一段编程代码,它的目标是动态地调整CPU的工作负荷,使得CPU的使用率呈现出正弦波形的变化。这可能对于测试系统性能、监控资源管理或者理解CPU负载对系统行为的...

    计算机组成原理资源程序:计算机组成原理课程设计,做了一个cpu

    7. **中断系统**:中断系统允许CPU响应外部事件,如键盘输入、网络数据到达等,中断处理程序会暂停当前任务,处理中断事件,然后返回原任务。 8. **控制逻辑**:控制单元中的控制逻辑负责生成必要的控制信号,以...

    linux c程序获取cpu使用率及内存使用情况.pdf

    - 先调用`get_cpuoccupy`获取当前的CPU占用信息(第一次读取),然后在一段时间后再次调用获取新的CPU占用信息(第二次读取)。 - 使用`cal_cpuoccupy`计算两次读取之间的CPU使用率差值。 - 同样,调用`get_...

    C语言计算代码执行所耗CPU时钟周期

    `rdtsc`是一个CPU指令,它会返回处理器自启动以来经过的时钟周期数。这个计数器的值是递增的,因此可以通过比较开始和结束时刻的值来计算代码执行的时钟周期数。 代码如下: ```c #include #include LARGE_...

    可以获得CPU利用率的VC源码

    2. **获取当前CPU时间**:在循环中,每隔一段时间调用`QueryPerformanceCounter()`获取当前CPU计数值。 3. **计算CPU利用率**:通过比较两次读取之间的时间差,以及CPU在这段时间内的总运行时间,可以计算出CPU利用...

    CPU 的精确计时器

    1. RDTSC(Read Time-Stamp Counter):这是Intel CPU中的一种指令,可以直接读取CPU内部的计数器,提供自CPU启动以来的总时钟周期数。RDTSC是无中断的,因此对于高精度计时非常有用。 2. QueryPerformanceCounter...

    verilog流水线CPU

    流水线技术是现代CPU设计中的一个重要概念,它通过将处理过程分解为多个独立的阶段来提高处理速度,每个阶段在一个时钟周期内完成自己的任务,从而实现连续的数据流处理。 五级流水线通常包括以下几个阶段: 1. **...

    频率计程序

    中断是单片机处理外部事件的一种机制,当外部设备或者内部硬件模块发生特定事件时,会发送一个中断请求给CPU,CPU暂停当前任务,转而去执行中断服务程序,处理完后再返回到原来的程序执行点。在频率测量中,我们可以...

    CPU的Verilog实现

    例如,ALU模块可能接收两个操作数和一个操作码,然后返回计算结果。控制单元模块则根据IR中的指令解码结果生成ALU和内存访问的控制信号。 在CPU的设计过程中,需要考虑以下关键步骤: 1. **指令集设计**:定义CPU...

    verilog实现16位cpu

    CPU的工作基于时钟周期,每个时钟周期执行一个操作。为了提高效率,可以采用流水线技术,将指令执行过程分为多个阶段,如取指、解码、执行、写回等,使得在每个时钟周期内能处理多条指令的不同阶段。 4. **数据...

    计算linux和openwrt的cpu使用率.docx

    首先,CPU使用率是指CPU在一段时间内执行用户进程和系统进程所花费的时间比例。在Linux中,这个信息存储在`/proc/stat`文件中,这是一个虚拟文件,提供了关于系统运行状态的实时数据。`get_cpu_util`函数展示了如何...

Global site tag (gtag.js) - Google Analytics