Quantcast
Channel: Intel® Software - Intel® oneAPI Math Kernel Library & Intel® Math Kernel Library
Viewing all articles
Browse latest Browse all 3005

Issue during replacing ipp DCT function with MKL DCT function

$
0
0

Hi,

I want to replace my IPP based DCT function with mkl based DCT function .

I am getting different output data when I will cross check with the ipp DCT vs mkl DCT function output.

I used below functions to get the DCT by usng IPP.lib function calls :

ippsDCTFwdInitAlloc_32f
ippsDCTFwd_32f
ippsDCTFwdFree_32f

Below is my code :

//pfa of the fileinput.txt 

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

    float *dpar;
    float *out;
    MKL_INT    *ipar;
    MKL_INT tt_type,stat,n_1,nn;
    FILE *fp,*fw,*fonce;
    fp = fopen( "D:\\dump\\fileinput.txt","r" );
    if(fp == NULL){
        cout<<"file not created properly"<<endl;
    }
    DFTI_DESCRIPTOR_HANDLE handle = 0;
    int n = 65; //Hardcoded to run for my code TODO:going to change after integrating into my main codebase
    nn = (MKL_INT)n;
    tt_type = MKL_STAGGERED_COSINE_TRANSFORM;

    n_1 = nn + 1 ;
    out = (float*)malloc((n+1)*sizeof(float));
    dpar= (float*)malloc((5*n_1/2+2)*sizeof(float));
    ipar= (MKL_INT*)malloc((128)*sizeof(int));
    s_init_trig_transform(&n_1,&tt_type,ipar,dpar,&stat);
    for (int srcSize =0 ;srcSize< n ; srcSize++)
    {
        fscanf(fp,"%f\n",&out[srcSize]);
    }
    fclose(fp);
    if (stat != 0)
    {
        printf("\n============================================================================\n");
        printf("FFTW2MKL FATAL ERROR: MKL TT initialization has failed with status=%d\n",(MKL_INT)stat);
        printf("Please refer to the Trigonometric Transform Routines Section of MKL Manual\n");
        printf("to find what went wrong...\n");
        printf("============================================================================\n");
        return NULL;
    }
    ipar[10] = 1;    //nx, that is, the number of intervals along the x-axis, in the Cartesian case.
    ipar[14] = n_1;  //specifies the internal partitioning of the dpar array.
    ipar[15] = 1;    //value of ipar[14]+1,Specifies the internal partitioning of the dpar array.
    s_commit_trig_transform(out,&handle,ipar,dpar,&stat);
    if (stat != 0)
    {
        printf("\n============================================================================\n");
        printf("FFTW2MKL FATAL ERROR: MKL TT commit step has failed with status=%d\n",(MKL_INT)stat);
        printf("Please refer to the Trigonometric Transform Routines Section of MKL Manual\n");
        printf("to find what went wrong...\n");
        printf("============================================================================\n");
        return NULL;
    }
    s_forward_trig_transform(out,&handle,ipar,dpar,&stat);
    if (stat != 0)
    {
        printf("\n============================================================================\n");
        printf("FFTW2MKL FATAL ERROR: MKL TT commit step has failed with status=%d\n",(MKL_INT)stat);
        printf("Please refer to the Trigonometric Transform Routines Section of MKL Manual\n");
        printf("to find what went wrong...\n");
        printf("============================================================================\n");
        return NULL;
    }
    free_trig_transform(&handle,ipar,&stat);
    printf("\n===== DCT GOT OVER ======== \n");

    return 0;

}

 

AttachmentSize
Downloadfileinput.txt283.46 KB

Viewing all articles
Browse latest Browse all 3005

Trending Articles



<script src="https://jsc.adskeeper.com/r/s/rssing.com.1596347.js" async> </script>