- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
I obtained same results with the matlab convolution using ippsConvolve_32f (OneApi 2021) configured on "ippAlgDirect".
However, I didn't match the same results using IppsConv_32f (IPP 7.0 version). I need to maintain the code with this version of IPP. But I don't understand why the results are not the same than the matlab function or the IppsConvolve_32f function.
Thanks for your insights.
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
Hi.
Add please this code to initialization stage of you app before call of IPP library. IPP detects CPU and switches to appropriate hand tuned branch in code. In addition to this ippsConv_32f selects between direct and fft-based implementations before CPU detection. ipp70 has bug in direct+avx code. Provided code switch from direct+avx to direct+sse42 and may help only in this case.
Andrey
IPP
Link Copied
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
Hi,
Thanks for reaching out to us.
Could you please share us the reproducer and environment details so that we could look upon your issue.
Best Regards,
Shanmukh.SS
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
Hi,
Reminder:
Is your issue resolved? Please let us know if the issue still persists. If not, Could you please provide us the reproducer so that we could look upon your issue.
Best Regards,
Shanmukh.SS
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
Hi Shanmukh.SS,
Sorry for the late.
I realised many tests before understanding the differences.
I understand that the IppsConv_32f internally switches the algorithm from direct convolution to FFT-based convolution at this condition :
if(( lenDst < 512)||( MIN(Src1Len,Src2Len) <64 ))
But it's not explain all results. We suspect that the FFT-based convolution algorithm gives wrong results, probably a bug.
Could you say if the logs of changes between versions of IPP contain a known issue of IPP 7.0 concerning the convolution function?
I don't find this information on the web because I suppose this information is archived. Are there any corrections of IppsConv_32f in 7.x versions ?
Thanks you in advance for your help
G.
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
Hi Gilles.
There was bug in IPP7.0 non-FFT AVX code of ippsConv_32f. This bug was fixed later.
Could you please dispatch IPP to SSE42 using this code?
Ipp64u features;
features = ippGetEnabledCpuFeatures();
IppStatus status;
#define PX_FM ( ippCPUID_MMX | ippCPUID_SSE | ippCPUID_SSE2 )
#define M7_FM ( PX_FM | ippCPUID_SSE3 )
#define U8_FM ( M7_FM | ippCPUID_SSSE3 )
#define N8_FM ( U8_FM | ippCPUID_MOVBE )
#define Y8_FM ( U8_FM | ippCPUID_SSE41 | ippCPUID_SSE42 )
#define E9_FM ( Y8_FM | ippCPUID_AVX | ippAVX_ENABLEDBYOS | ippCPUID_F16C )
status = ippSetCpuFeatures(Y8_FM);
Also could you please provide any additional information ( vector sizes, input/output data)?
Thanks
Andrey
IPP
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
Thanks you Andrey for your support.
Could you give me more details about the given code ?
Must I put this code at the beginning of the function where the ippsConv_32f ? May this code fix the bug ?
Sorry, I can't give the input and output data. The vector sizes are respectively 5001 samples convolving 512 samples.
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
Hi.
Add please this code to initialization stage of you app before call of IPP library. IPP detects CPU and switches to appropriate hand tuned branch in code. In addition to this ippsConv_32f selects between direct and fft-based implementations before CPU detection. ipp70 has bug in direct+avx code. Provided code switch from direct+avx to direct+sse42 and may help only in this case.
Andrey
IPP
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
ok thanks.
However this function is not available in IPP 7.0
ippSetCpuFeatures
I replaced your given code by :
IppCpuType cpu=ippGetCpuType();
printf("processor type %d \n",cpu);
status = ippInitCpu(ippCpuSSE3);
With these instruction sets, the results of IppsConv_32f are well.
- Subscribe to RSS Feed
- Mark Topic as New
- Mark Topic as Read
- Float this Topic for Current User
- Bookmark
- Subscribe
- Printer Friendly Page