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

Not able to access the IPP API ippsSVD_64f_D2

sivashankari_siemens
398 Views

Hi
I am using IPP library v5.3 Update 4in my code.When i tried to use the IPP API ippsSVD_64f_D2 or any of SVD related APIs likeIppsSVD_64f_D2L,ippsSVD_64f_D2_I,ippsSVD_64f_D2L_I,ippsSVDSort_64f_D2,ippsSVDSort_64f_D2L,ippsSVDSort_64f_D2_I,ippsSVDSort_64f_D2L_I I am getting the error "Caught an exception of type ACCESS_VIOLATION:

Exception occurred at address : 0AA9A718".I observedthis error comingfor SVD APIs not for any multiplication APIs.Is this error coming because of older version i am using?Is this error solved in latest IPP versions?Can you please guide me to resolve this problem?

0 Kudos
4 Replies
elhefe38
Beginner
398 Views

Hi
I am using IPP library v5.3 Update 4in my code.When i tried to use the IPP API ippsSVD_64f_D2 or any of SVD related APIs likeIppsSVD_64f_D2L,ippsSVD_64f_D2_I,ippsSVD_64f_D2L_I,ippsSVDSort_64f_D2,ippsSVDSort_64f_D2L,ippsSVDSort_64f_D2_I,ippsSVDSort_64f_D2L_I I am getting the error "Caught an exception of type ACCESS_VIOLATION:

Exception occurred at address : 0AA9A718".I observedthis error comingfor SVD APIs not for any multiplication APIs.Is this error coming because of older version i am using?Is this error solved in latest IPP versions?Can you please guide me to resolve this problem?


An access violation means you are might be reading/writing unallocated/freed memory, or reading/writing beyond the area you have allocated, not that you are unable to "access the API".
Or did the same code worked with a previous version ?

Regards
0 Kudos
dana33
Beginner
398 Views
I am just starting to use the IPP SVD functions and I am seeing an access violation for some input matrices, but not for others. Depending on the A (input) matrix, sometimes the call succeeds, sometimes it fails to converge after 10000 iterations, and sometimes I get the access violation within the SVD function.

Regarding the access violation, my initial guess was that the function was trying to write to an area slightly outside the allocated bounds of one of the arrays, so I doubled the size of each array relative to what the documentation says is required. E.g., I made W of size 2*width rather than width, V of size 2*width*step (where step=width in this case), etc. But I still see the access violation.

The matrix I'm passing in is a (possibly singular) covariance matrix created from a previous calculation, so I don't yet have a simple, clean way that I can post that reproduces the problem. I will work on this if no one has an idea of what the problem might be.

I know that the "small matrices" set of functions is mainly for matrices 6x6 and smaller, but the SVD functions are part of the signal processing/speech recognition set of functions, so I assume they should work for the much-larger matrices I am using. Is this correct?

My final question is whether the SVD functions have any known bugs in IPP 5.3 that have been fixed for 6.0, such that upgrading might help.
0 Kudos
Vladimir_Dudnik
Employee
398 Views
Thanks for sharing the investigation results. Please also do not hesitate to submit found issue as a bug report through Intel Premier Support channel.

Regards,
Vladimir
0 Kudos
dana33
Beginner
398 Views
Well, it always pays to look at your data (even though it was a minor pain getting my 39x39 data matrix into a viewable form). The problem seems to have been caused by NaNs in the covariance matrix (arising from NaNs in the original data). Upon excluding these values, the SVD function appears to work fine, evenwhen my matrix is singular.

I still think there's a bug in the SVD routine, though, in that NaNs in the input data should be handled by a return code (e.g., ippStsSVDCnvgErr) rather than causing an access violation.

To the original poster: If you still have the problem, you might want to check your own data to make sure no NaNs or Infs are present in the matrixyou send to SVD (and of course make sure you are passing in height, width, and step values corresponding to the actual amounts of memory you have allocated in the various arrays).
0 Kudos
Reply