[MN-dev] [mndiff]: r136 - trunk/noe/ldpc.c
michael
subversion at mplayerhq.hu
Fri Apr 10 16:17:50 CEST 2009
Author: michael
Date: Fri Apr 10 16:17:50 2009
New Revision: 136
Log:
25% faster inverse()
Modified:
trunk/noe/ldpc.c
Modified: trunk/noe/ldpc.c
==============================================================================
--- trunk/noe/ldpc.c Fri Apr 10 13:15:00 2009 (r135)
+++ trunk/noe/ldpc.c Fri Apr 10 16:17:50 2009 (r136)
@@ -45,7 +45,7 @@ typedef uint8_t ELEM;
int inverse(ELEM *matrix, int width, int height, int solvew){
int i, j, k, m, p;
- unsigned int logline[width];
+ unsigned int logline[width+1][2];
for(p=i=0; i<solvew; i++){
int bestweight= width+1;
@@ -63,17 +63,28 @@ int inverse(ELEM *matrix, int width, int
}
if(j>=0){
unsigned int inve= EXT(log)[inv(matrix[i + j*width])];
+
+ k=0;
for(m=i; m<width; m++){
ELEM t= matrix[m + j*width];
matrix[m + j*width]= matrix[m + p*width];
matrix[m + p*width]= EXT(exp)[EXT(log)[t] + inve];
- logline[m]= EXT(log)[matrix[m + p*width]];
+ if(matrix[m + p*width]){
+ logline[k ][0]= m;
+ logline[k++][1]= EXT(log)[matrix[m + p*width]];
+ }
}
+ logline[k][0]= -1;
+
for(k=p+1; k<height; k++){ // eliminate lower left
if(matrix[i + k*width]){
unsigned int factor= EXT(log)[neg(matrix[i + k*width])];
- for(m=i; m<width; m++)
- matrix[m + k*width] = sum(matrix[m + k*width], EXT(exp)[logline[m] + factor]);
+ int idx= logline[0][0];
+ m=0;
+ while(idx>=0){
+ matrix[idx + k*width] = sum(matrix[idx + k*width], EXT(exp)[logline[m++][1] + factor]);
+ idx= logline[m][0];
+ }
}
}
p++;
More information about the Mndiff-dev
mailing list