- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Email to a Friend
- Report Inappropriate Content

We also tried using the convolve IPP call and got the same result so does the convolve function work the same way under the hood as the method we are using?

Link Copied

5 Replies

- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Email to a Friend
- Report Inappropriate Content

ippSetFlushToZero();

ippSetDenormAreZeros();

Can this be helpful? You can check the ippsman for these two functions.

Thanks,

Chao

- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Email to a Friend
- Report Inappropriate Content

We noticed these functions at the weekend and gave them a go. We disabled them both by setting them to 1 but this didn't seem to have an effect as the output still contained zeros. We put floating point exception handlers around the call as well and these were not triggered.

When we investigated using matlab we did the convolve long hand and found that the smallest value in the whole calculation was 9.5e-9. We are usingsingle precision (float32) so we think we should be well within the precision bounds (1.18e-38). However, we are a little confused about sub normal numbers. Epsilon of 0.0 is 1.18-38 which is what the calculation sould be using so we don't think the calculation should be underflowing or using sub normal numbers.

The dataviews we have are one dimensional. One is 996 values and then padded to 4096 with zeros. The values range from 1 to 10. The second dataview is 1600 values padded to 4096 with zeros. The values are from 0.95e-9 to 1.

So in conclusion we have disabled denorm to zero and flush to zero (even though we don't think the calculation should trigger these) and don't get floating point exceptions but still see zeros in our convolution output. When performed using a non ipp call we don't see any zeros. We are using ipp 5.3 with version 10 of the intelcompiler.

Are there any other reasons why we could be seeing zeros? I will check to see if I can send the input values to replicate our problem.

Thanks

- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Email to a Friend
- Report Inappropriate Content

Yes, the input values and the test code will be very helpful to root the problem..

Thanks,

Chao

- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Email to a Friend
- Report Inappropriate Content

- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Email to a Friend
- Report Inappropriate Content

Quoting - pascott1

We are calling the IPPInvDFT32CtoC function with a plan size of 4096. We are getting zeros in the output with Denorm to zero and flush to zero both off.The input vector is attached.

Hi,

Just tested the data with the following code. The output is very close to 0, but not 0.

are these the result you expected?

3.6954880e-006 0.00000000

6.6777798e-006 3.7308549e-008

8.1331855e-006 -4.9276043e-008

1.1082059e-005 -3.1710805e-008

1.4743879e-005 -5.1793156e-009

....

Thanks,

Chao

void main()

{

Ipp32f x[4096*2], y[4096*2];

int n;

FILE * fp,*fpout;

IppStatus status;

IppsDFTSpec_C_32fc* spec;

fp=fopen("vector_in.txt","r");

fpout=fopen("vector_out.txt","w");

for(int i=0;i<4096;i++) {

fscanf(fp,"%f %f",&x[2*i],&x[2*i+1]);

}

status =ippsDFTInitAlloc_C_32fc(&spec,4096,IPP_FFT_DIV_INV_BY_N, ippAlgHintNone);

ippsDFTInv_CToC_32fc((Ipp32fc *)x,(Ipp32fc *)y,spec, NULL);

ippsDFTFree_C_32fc( spec );

return ;

}

Topic Options

- Subscribe to RSS Feed
- Mark Topic as New
- Mark Topic as Read
- Float this Topic for Current User
- Bookmark
- Subscribe
- Printer Friendly Page