Intel® Integrated Performance Primitives
Deliberate problems developing high-performance vision, signal, security, and storage applications.

ippsFIRMR32f_32fc incorrect results for down rates less than 5

West__Nathan
Beginner
1,233 Views

Hi,

I've recently begun integrating with IPP. I'm really impressed with the performance of the single-rate IPPs filter, but I can't seem to make sense of the multi-rate complex filter

I am running the following test based on the example provided on https://software.intel.com/en-us/ipp-dev-reference-firmr

1) Run the exact code from the example for real input, real output, real taps

2) Run the code modified to run on complex input, complex output, real taps

It seems that in the 2nd case half of the outputs are set to 0

 

Example output from case 1 (seems correct):

1.000000 10.000000 30.000000 50.000000 70.000000 90.000000 110.000000 130.000000 150.000000 170.000000 190.000000 210.000000 230.000000 250.000000

Example output from case 2 (seems to have half of the outputs set to 0):

0.000000 0.000000 30.000000 50.000000 0.000000 0.000000 110.000000 130.000000 0.000000 0.000000 190.000000 210.000000 0.000000 0.000000

 

I can't figure out if I am misinterpreting an output pointer or if the filter itself isn't working correctly. With uprate > 1, the output appears correct. With uprate =1 and downrate > 4 the output seems correct, but if uprate =1 and downrate <= 4 there are zeroed out puts only on the complex version of the filter.

 

Attached is a cmake file and the source file to run both filter types. To evaluate things I manually change the upRate and downRate in each function.

 

As the CmakeLists.txt will suggest, I am using IPP 2020.0.166

0 Kudos
6 Replies
Gennady_F_Intel
Moderator
1,233 Views

Yes, we confirm the problem with the current version of IPP. the issue is escalated against the signal processing team. We will keep you informed of the status of this issue.

0 Kudos
Gennady_F_Intel
Moderator
1,233 Views

As a temporary workaround the problem, you may try to change the  AVX specific code by calling the cpuFeatures(...). I see the problem is disappeared when this trick has been used. 

0 Kudos
West__Nathan
Beginner
1,233 Views

I'm calling

                ippSetCpuFeatures(ippCPUID_MMX | ippCPUID_SSE | ippCPUID_SSE2 | ippCPUID_SSE3 |
                                ippCPUID_SSSE3 | ippCPUID_SSE41 | ippCPUID_SSE42 | ippCPUID_AES |
                                ippCPUID_CLMUL | ippCPUID_SHA | ippCPUID_MOVBE);

 

That seems to work for now, thanks.

0 Kudos
Gennady_F_Intel
Moderator
1,233 Views

yes, thanks for the update. We will keep this thread updated with the status of this issue.

0 Kudos
Gennady_F_Intel
Moderator
1,226 Views

fyi - the fix of the problem is targeting to the next update of IPP. We will update this thread as soon as this update would be available.


0 Kudos
Gennady_F_Intel
Moderator
1,168 Views

the fix of the issue available into the latest IPP 2020 u2 which available for download. Please try this update and keep us inform of the results. 

0 Kudos
Reply