changeset 513:a30948382f56

Added hook for dumping LSH INDEX tables on load via compile-time switch: -DLSH_DUMP_CORE_TABLES
author mas01mc
date Fri, 23 Jan 2009 21:44:32 +0000
parents 3141e51cb077
children 01cb73dfcddd
files Makefile QueryADB.py lshlib.cpp lshlib.h query-indexed.cpp
diffstat 5 files changed, 59 insertions(+), 9 deletions(-) [+]
line wrap: on
line diff
--- a/Makefile	Wed Jan 21 21:48:25 2009 +0000
+++ b/Makefile	Fri Jan 23 21:44:32 2009 +0000
@@ -17,7 +17,10 @@
 MINORVERSION=0
 LIBRARY=lib$(EXECUTABLE).so.$(SOVERSION).$(MINORVERSION)
 
-override CFLAGS+=-O3 -g -fPIC
+override CFLAGS+=-O3 -g -fPIC 
+
+# set to DUMP hashtables on QUERY load
+#override CFLAGS+=-DLSH_DUMP_CORE_TABLES
 
 ifeq ($(shell uname),Linux)
 override CFLAGS+=-D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64
--- a/QueryADB.py	Wed Jan 21 21:48:25 2009 +0000
+++ b/QueryADB.py	Fri Jan 23 21:44:32 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/lshlib.cpp	Wed Jan 21 21:48:25 2009 +0000
+++ b/lshlib.cpp	Fri Jan 23 21:44:32 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	Wed Jan 21 21:48:25 2009 +0000
+++ b/lshlib.h	Fri Jan 23 21:44:32 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;
--- a/query-indexed.cpp	Wed Jan 21 21:48:25 2009 +0000
+++ b/query-indexed.cpp	Fri Jan 23 21:44:32 2009 +0000
@@ -31,6 +31,9 @@
   if((!corep) && (qstate->lsh->get_lshHeader()->flags & O2_SERIAL_FILEFORMAT2)) {
     delete qstate->lsh;
     qstate->lsh = audiodb_index_allocate(adb, indexName, true);
+#ifdef LSH_DUMP_CORE_TABLES
+    qstate->lsh->dump_hashtables();
+#endif
   }
 
   delete[] indexName;