IPP 的FFT测试

    技术2022-05-20  54

    double双精度型复数fft测试

    平台:Intel Core(TM)2 Duo CPU E8500 3.16GHz 3.16GHz

    4.00GB内存  32位win7

    ipp测试代码: 

    #include <stdio.h>#include <time.h>#include <stdlib.h>#include <ipps.h>

    /* Maximum value that can be returned by the rand function. */#ifndef RAND_MAX#define RAND_MAX 0x7fff#endifint main() {    double t0;    unsigned int myOrder,myLength,n;    int myBufferSize;    Ipp8u *myBuffer;    Ipp64fc *myA,*myB;    IppsFFTSpec_C_64fc *mySpec;    for (myOrder = 10; myOrder < 22; myOrder++)     {        myLength = 1 << myOrder;        ippsFFTInitAlloc_C_64fc(&mySpec, myOrder, IPP_FFT_NODIV_BY_ANY, ippAlgHintFast);

            myBufferSize = 0;        ippsFFTGetBufSize_C_64fc(mySpec, &myBufferSize);        myBuffer = ippsMalloc_8u(myBufferSize);

            myA = ippsMalloc_64fc(myLength);        myB = ippsMalloc_64fc(myLength);        for(n = 0; n < myLength; ++n)        {            myA[n].re = rand()/RAND_MAX;            myA[n].im = rand()/RAND_MAX;        }

            t0=clock();            ippsFFTFwd_CToC_64fc(myA, myB, mySpec, myBuffer);        printf("%8.d  .10f       /n",myLength,(clock()-t0)/CLOCKS_PER_SEC); 

            ippsFree(myA);        ippsFree(myB);        ippsFree(myBuffer);        ippsFFTFree_C_64fc(mySpec);    }    system("pause");}

     

    make命令:

    @echo offrem call "D:/Microsoft Visual Studio 10.0/VC/bin/VCVARS32.BAT"call "C:/Program Files/Intel/Parallel Studio 2011/ips-vars.cmd"call "C:/Program Files/Intel/Parallel Studio 2011/Composer/ipp/bin/ippvars.bat"

    icl /c /o3 ipptest.c

    xilink /subsystem:console ipptest.obj ipps.lib

    del *.obj

    pause

     

    结果:

         n                 time (s)

        1024          0.0000000000    2048          0.0000000000    4096          0.0030000000    8192          0.0000000000   16384          0.0010000000   32768          0.0010000000   65536          0.0030000000  131072          0.0040000000  262144          0.0090000000  524288          0.0190000000 1048576          0.0470000000 2097152          0.0900000000请按任意键继续. . .

    //=============================================

    ooura_fft  测试:使用fftsg_h.c

    #include <stdio.h>#include <string.h>#include <math.h>#include <stdlib.h>#include <time.h>/* Maximum value that can be returned by the rand function. */#ifndef RAND_MAX#define RAND_MAX 0x7fff#endif

    #ifdef __cplusplus extern "C" { #endif void cdft(int n, int isgn, double *a);#ifdef __cplusplus } #endif

    void  initTestData(double  *data,int len){ int i; for (i=0;i<len;i++) {  data[2*i]=(double)(rand() % RAND_MAX);  data[2*i+1]=(double)(rand() % RAND_MAX); }

    }

    void testSpeed_oouraFFT(int maxLen){ int  len,c; double k,t,tmp,t0; double *data=NULL; data =(double *)malloc( (maxLen*2+1)*sizeof(double) ); if (data==NULL)  return ;

     printf("    len  /tfft time /n"); for (len=1024;len<=maxLen;len*=2) {    initTestData(data,len);  t0=clock();        cdft(len*2,1,data);          printf("%8.d  .10f       /n",len,(clock()-t0)/CLOCKS_PER_SEC);  }    if (data!=NULL)  free(data);

    }int main(){ testSpeed_oouraFFT(2*1048576); system("pause"); return 0;}

     

    make命令:

    @echo offrem call "D:/Microsoft Visual Studio 10.0/VC/bin/VCVARS32.BAT"call "C:/Program Files/Intel/Parallel Studio 2011/ips-vars.cmd"icl /c /o3 fftsg_h.c test_speedFFT.c

    xilink /subsystem:console test_speedFFT.obj fftsg_h.obj

    rem icl /help

    del *.obj

    pause

     

    结果:

        n                   time(s)    1024          0.0010000000    2048          0.0000000000    4096          0.0000000000    8192          0.0000000000   16384          0.0000000000   32768          0.0010000000   65536          0.0010000000  131072          0.0060000000  262144          0.0110000000  524288          0.0200000000 1048576          0.0560000000 2097152          0.1080000000请按任意键继续. . .

     

     

     

     

     

     

     


    最新回复(0)