While most compression in indeed serial (values depend on previous history), you can still do all kinds of tricks to “fix things up” in parallel computes. Therefore the original matrix A=n*n is compressed in n/m vectors of dimension 2m, therefore the whole matrix is compressed in a 2n vector. So, given a submatrix a(i) of dimension m*m, can compress it inī ) A vector of dimension m with one direction in the iperspace We map the vector v using SIGMA and we find one vector k, which is one direction (axis) of V. Summarized it means that starting with a square matrix a(i) of dimension m*m, with m = 0 As can be easily checked, the composition u o d o v* coincides with T. To define the third and last move u, just apply an isometry to this ellipsoid so as to carry it over T(S).
The composition d o v* then sends the unit-sphere onto an ellipsoid isometric to T(S). On a second move, apply an endomorphism d diagonalized along the coordinate axes and stretching or shrinking in each direction, using the semi-axes lengths of T(S) as stretching coefficients. Apply first an isometry v* sending these directions to the coordinate axes of Rn. These directions happen to be mutually orthogonal. Especially when n=m, and all the singular values are distinct and non-zero, the SVD decomposition of the linear map T can be easily analysed as a succession of three consecutive moves : consider the ellipsoid T(S) and specifically its axes then consider the directions in Rn sent by T onto these axes. Non-zero singular values are simply the lengths of the semi-axes of this ellipsoid. The linear map T maps this sphere onto an ellipsoid in Rm. To get a more visual flavour of singular values and SVD decomposition —at least when working on real vector spaces— consider the sphere S of radius one in Rn. With respect to these bases, the map T is therefore represented by a diagonal matrix with non-negative real diagonal entries. The geometric content of the SVD theorem can thus be summarized as follows: for every linear map T :Kn → Km one can find orthonormal bases of Kn and Km such that T maps the i-th basis vector of Kn to a non-negative multiple of the i-th basis vector of Km, and sends the left-over basis vectors to zero. The linear transformation T :Kn → Km that takes a vector x to Mx has a particularly simple description with respect to these orthonormal bases: we have T(vi) = σi ui, for i = 1,…,min(m,n), where σi is the i-th diagonal entry of Σ, and T(vi) = 0 for i > min(m,n). My first idea is to use SVD decomposition, here’s a short remark:īecause U and V are unitary, we know that the columns u1,…,um of U yield an orthonormal basis of Km and the columns v1,…,vn of V yield an orthonormal basis of Kn (with respect to the standard scalar products on these spaces). Therefore we have to use wiser algorithms, which usually wouldn’t work that good on a classic GPU. The problem is that huffman based algorithms are more efficient on big matrix, so you could lose the beneficial effect by choosing too big a(i) square matrix. Up to today compression algorithms has been thought to work on a single CISC cpu, but this doesn’t mean that we can’t have better, faster algorithms on GPGPU.įor simplicity, think a file of n^2 bits as a A=n*n square matrix (eventually filled with zeros at the end).Ī stupid way to do this is to divide A in smaller a(i) square matrix, then apply a traditional compression to every matrix.