Intel® Integrated Performance Primitives
Community support and discussions relating to developing high-performance vision, signal, security, and storage applications.

How to use IPP SVD function?

lkeene
Beginner
226 Views
Hello,

I'm trying to use "ippsSVD_64f_D2(...)" function. Among the argument list is one parameter named "int nIter" which is described in the documentation as "Number of iterations for diagonalization". On what basis do I select a value for this? My input data arrays are always 3x3, if this matters.

Thanks you.
-L
0 Kudos
1 Reply
Ying_H_Intel
Employee
226 Views
Quoting - lkeene
Hello,

I'm trying to use "ippsSVD_64f_D2(...)" function. Among the argument list is one parameter named "int nIter" which is described in the documentation as "Number of iterations for diagonalization". On what basis do I select a value for this? My input data arrays are always 3x3, if this matters.

Thanks you.
-L

Hello,

SVDalgorithm second step (namely diagonalization) is by-nature iterative with a number of iterations to converge mathematically known as O(M) for matrix [MxN]. So, none certain number may guaranty convergence. The only fact is that it will converge for some finite number of iterations.

Actually, mathematical number of iteration depends on input data only. So, nIter can be considered as safe guard to stop calculation in case SVD converges too long.

agood way would be to start with nIter=N*M (for example, in your casenIter=9)then double until SVD converge (untill the function returns ippStsNoErr, the function returns ippStsSVDCnvgErr indicates an error when the SVD algorithm has not converged after nIter iterations)

Regards,
YingH.

Reply