changeset 512:6439cfba2524 memory-leaks

Implemented correct LSH table via compile-time switch -DLSH_DUMP_CORE_TABLES. Dumps on LSH load.
author mas01mc
date Fri, 23 Jan 2009 18:45:44 +0000
parents eb9a7ef110c1
children
files QueryADB.py index.cpp lshlib.cpp lshlib.h
diffstat 4 files changed, 57 insertions(+), 10 deletions(-) [+]
line wrap: on
line diff
--- a/QueryADB.py	Sun Jan 11 04:24:24 2009 +0000
+++ b/QueryADB.py	Fri Jan 23 18:45:44 2009 +0000
@@ -286,7 +286,7 @@
 		pointNN = '20'
 		trackNN = '5'
 		seqLen = argv[5]
-		queryRadius = '0.2'
+		queryRadius = '0.1'
 	else:
 		featureFile = 'foo.chr12'
 		powerFile = 'foo.power'
@@ -295,7 +295,7 @@
 		pointNN = '3'
 		trackNN = '5'
 		seqLen = '10'
-		queryRadius = '0.2'
+		queryRadius = '0.1'
 
 	message = FEATURE_QUERY_TEMPLATE
 	message = FEATURE_QUERY_TEMPLATE%(dbName, featureFile, "", "", powerFile, qType, qPos, pointNN, trackNN, seqLen, queryRadius, '0.0', '0.0', '0', '1','0')
--- a/index.cpp	Sun Jan 11 04:24:24 2009 +0000
+++ b/index.cpp	Fri Jan 23 18:45:44 2009 +0000
@@ -216,9 +216,9 @@
       
       // Insert up to lsh_param_b database tracks
       index_insert_tracks(startTrack, endTrack, &fvp, &sNorm, &snPtr, &sPower, &spPtr);
-
+      
       // Serialize to file (merging is performed here)
-      lsh->serialize(mergeIndexName, lsh_in_core?O2_SERIAL_FILEFORMAT2:O2_SERIAL_FILEFORMAT1); // Serialize core LSH heap to disk
+      lsh->serialize(mergeIndexName, lsh_in_core?O2_SERIAL_FILEFORMAT2:O2_SERIAL_FILEFORMAT1); // Serialize core LSH heap to disk    
       delete lsh;
       lsh = 0;
     }
@@ -506,6 +506,9 @@
     else
       VERB_LOG(1,"INDEX: loading hash tables into core %s\n", (lsh->get_lshHeader()->flags&O2_SERIAL_FILEFORMAT2)?"FORMAT2":"FORMAT1");
     lsh = index_allocate(indexName, true);
+#ifdef LSH_DUMP_CORE_TABLES
+    lsh->dump_hashtables();
+#endif
   }
   
   delete[] indexName;
--- a/lshlib.cpp	Sun Jan 11 04:24:24 2009 +0000
+++ b/lshlib.cpp	Fri Jan 23 18:45:44 2009 +0000
@@ -1358,12 +1358,7 @@
 	  token = unserialize_hashtable_row_to_array(dbFile, h[x]+y, numElements);
 #else
 	token = unserialize_hashtable_row_format2(dbFile, h[x]+y);	
-#endif
-	
-#ifdef LSH_DUMP_CORE_TABLES
-	printf("C[%d,%d]", x, y);
-	dump_hashtable_row(h[x][y]);
-#endif
+#endif	
 	// Check that token is valid
 	if( !(token==O2_SERIAL_TOKEN_T1 || token==O2_SERIAL_TOKEN_ENDTABLE) ){
 	  fclose(dbFile);
@@ -1379,6 +1374,9 @@
 	  H::t1 = token;
       }
   }
+#ifdef LSH_DUMP_CORE_TABLES
+  dump_hashtables();
+#endif
 }
  
 Uns32T G::unserialize_hashtable_row_format2(FILE* dbFile, bucket** b, Uns32T token){
@@ -1574,6 +1572,49 @@
 	p = p + skip;
   }while( *p != LSH_CORE_ARRAY_END_ROW_TOKEN );
 }
+
+void G::dump_hashtables(){
+  for(Uns32T x = 0; x < H::L ; x++)
+    for(Uns32T y = 0; y < H::N ; y++){
+      bucket* bPtr = h[x][y];
+      if(bPtr){
+      printf("C[%d,%d]", x, y);
+#ifdef LSH_LIST_HEAD_COUNTERS
+	printf("[numBuckets=%d]",bPtr->snext.numBuckets);
+      if(bPtr->t2&LSH_CORE_ARRAY_BIT) {
+	dump_core_hashtable_array((Uns32T*)(bPtr->next));
+      } 
+      else {
+	dump_hashtable_row(bPtr->next);
+      }
+#else
+      dump_hashtable_row(bPtr);
+#endif
+  printf("\n");
+  fflush(stdout);
+      }
+    }
+}
+
+ void G::dump_core_hashtable_array(Uns32T* p){
+   Uns32T skip;
+   Uns32T t2;
+   Uns32T p1;
+   Uns32T p2;
+  CR_ASSERT(p);
+  do{
+    t2 = *p++;
+    p1 = *p++;
+    p2 = *p++;
+    skip = (( p1 & SKIP_BITS ) >> SKIP_BITS_RIGHT_SHIFT_LSB) + (( p2 & SKIP_BITS ) >> SKIP_BITS_RIGHT_SHIFT_MSB);
+    printf("(%0x, %0x)", t2, p1 ^ (p1 & SKIP_BITS));
+    if(skip--){
+      printf("(%0x, %0x)", t2, p2 ^ (p2 & SKIP_BITS));
+      while(skip-- )
+	printf("(%0x, %0x)", t2, *p++);
+    }
+  }while( *p != LSH_CORE_ARRAY_END_ROW_TOKEN );
+ }
  
 void G::dump_hashtable_row(bucket* p){
   while(p && p->t2!=IFLAG){
--- a/lshlib.h	Sun Jan 11 04:24:24 2009 +0000
+++ b/lshlib.h	Fri Jan 23 18:45:44 2009 +0000
@@ -325,6 +325,7 @@
   void bucket_chain_point(bucket* p, Uns32T qpos);
   void sbucket_chain_point(sbucket* p, Uns32T qpos);  
   void dump_hashtable_row(bucket* p);
+  void dump_core_hashtable_array(Uns32T* p);
 
   // Serial (Format 1) Retrieval/Inspection Functions
   void serial_bucket_chain_point(SerialElementT* pe, Uns32T qpos);
@@ -361,6 +362,8 @@
   void serial_dump_tables(char* filename);
   float get_mean_collision_rate(){ return (float) pointCount / bucketCount ; }
   char* get_indexName(){return indexName;}
+  void dump_hashtables();
+
 };
 
 typedef class G LSH;