Mercurial > hg > audiodb
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;