windows是多线程系统, 这样测试是不正确的很大可能在循环中CPU被系统或其他程序占用了, 所以时间差别比较大可以加大Num 使总时间至少到秒的级别程序本身运行速度应该没什么大差别的

解决方案 »

  1.   

    问题并不是你说的那样,该函数只是对采样间隔stepM不同而时间差别很大。对于某些stepM(如2220000,2224000)所需时间很少,而且测了几百次时间基本都是差不多的。而对于另外一些stepM,所需时间一直都是很多。如果说循环中CPU被系统或其他程序占用了,不可能上百次测试中每次都恰好是
    stepM = 2224000,2224000时CPU被占用较少,所以应该是其他问题!我估计是不是不同步长时,对内存的寻址问题?
      

  2.   

    给出测时间函数,CSDN上的资源!///////////////////////////////////////////////////////////////////////////
    // timecount.h : header file
    //
    #ifndef TIMECOUNT_H
    #define TIMECOUNT_Hstatic BOOL initFreq();
    double currTime();#endif///////////////////////////////////////////////////////////////////////////
    //timecount.cpp : implementation file
    #include "timecount.h"
    #include "stdafx.h"
    #include <windows.h>static LARGE_INTEGER freq;static BOOL initFreq()
    {
    if ( !QueryPerformanceFrequency( &freq) )
    return FALSE;
    else
    return TRUE;
    }
    double currTime() //使用高精度计时器
    {
    LARGE_INTEGER performanceCount;
    double time;
    BOOL result;
    if (freq.QuadPart==0)
    {
    BOOL bRet=initFreq();
    if (!bRet)
    return 0;
    }
    result=QueryPerformanceCounter(  &performanceCount );
    time= performanceCount.HighPart * 4294967296.0 + performanceCount.LowPart;
    time=time / (   freq.HighPart * 4294967296.0 + freq.LowPart);
    return time;
    }
    ///////////////////////////////////////////////////////////////////////////
    使用时double time,tmp;
    tmp = currTime();
    Sampling(char* arrayB,char* arrayA, int stepM,int Len,int Num);
    time = currTime() - tmp;
    ///////////////////////////////////////////////////////////////////////////
      

  3.   

    你自己测一下就知道了,我现在把Num*1000变成6000000,测试结果如下:
    ////////////////////////////////////////////////////////////////////////////////
    Carrier Freq(Hz)   Sampling Freq(Hz)   Time(s)
    2220000            6000000             0.027227
    2221000            6000000             0.217574
    2222000            6000000             0.189252
    2223000            6000000             0.146468
    2224000            6000000             0.025190
    2225000            6000000             0.064040
    2226000            6000000             0.120657
    2227000            6000000             0.229599
    2228000            6000000             0.132318
    2229000            6000000             0.115783
    2230000            6000000             0.052238
    2231000            6000000             0.219623
    2232000            6000000             0.024192
    ////////////////////////////////////////////////////////////////////////////////
    你和上面那个表对比一下,看看是不是stepM对应时间少的还是少,花时间多的还是多?
      

  4.   

    所以说花的时间还是和对应的取样间隔stepM有关系的,不是简单的CPU时间问题。
      

  5.   

    弱弱的问一下,你的测试不同Carrier Freq的时候,是自动的还是手动的?我的意思是放了一个变量自增那么测,还是手动输入的一次一次测?