# HG changeset patch # User mas01mc # Date 1219161026 0 # Node ID c270d9e4659a82d0e62a71c2efe416820e1c8239 # Parent ab411674dad43951e2e323d443f6b901efdde9a1 Ammended batchinsert and status to memory map featureFilenameTables, powerFileNameTable and timesFileNameTable for O2_FLAG_LARGE_ADB diff -r ab411674dad4 -r c270d9e4659a audioDB.cpp --- a/audioDB.cpp Tue Aug 19 14:38:39 2008 +0000 +++ b/audioDB.cpp Tue Aug 19 15:50:26 2008 +0000 @@ -125,6 +125,12 @@ munmap(powerTable, powerTableLength); if(l2normTable) munmap(l2normTable, l2normTableLength); + if(featureFileNameTable) + munmap(featureFileNameTable, fileTableLength); + if(timesFileNameTable) + munmap(timesFileNameTable, fileTableLength); + if(powerFileNameTable) + munmap(powerFileNameTable, fileTableLength); if(trackOffsetTable) delete trackOffsetTable; if(reporter) @@ -542,7 +548,7 @@ << "] power[" << DISPLAY_FLAG(dbH->flags&O2_FLAG_POWER) << "] times[" << DISPLAY_FLAG(dbH->flags&O2_FLAG_TIMES) << "] largeADB[" << DISPLAY_FLAG(dbH->flags&O2_FLAG_LARGE_ADB) - << endl; + << "]" << endl; std::cout << "null count: " << nullCount << " small sequence count " << dudCount-nullCount << std::endl; } else { @@ -558,7 +564,7 @@ void audioDB::l2norm(const char* dbName) { forWrite = true; initTables(dbName, 0); - if(dbH->length>0){ + if( !(dbH->flags & O2_FLAG_LARGE_ADB ) && (dbH->length>0) ){ /* FIXME: should probably be uint64_t */ unsigned numVectors = dbH->length/(sizeof(double)*dbH->dim); CHECKED_MMAP(double *, dataBuf, dbH->dataOffset, dataBufLength); @@ -571,8 +577,8 @@ void audioDB::power_flag(const char *dbName) { forWrite = true; - initTables(dbName, 0); - if (dbH->length > 0) { + initTables(dbName, 0); + if( !(dbH->flags & O2_FLAG_LARGE_ADB ) && (dbH->length>0) ){ error("cannot turn on power storage for non-empty database", dbName); } dbH->flags |= O2_FLAG_POWER; diff -r ab411674dad4 -r c270d9e4659a audioDB.h --- a/audioDB.h Tue Aug 19 14:38:39 2008 +0000 +++ b/audioDB.h Tue Aug 19 15:50:26 2008 +0000 @@ -222,6 +222,10 @@ double* timesTable; double* powerTable; + char* featureFileNameTable; + char* timesFileNameTable; + char* powerFileNameTable; + size_t fileTableLength; size_t trackTableLength; off_t dataBufLength; @@ -395,6 +399,9 @@ l2normTable(0), \ timesTable(0), \ powerTable(0), \ + featureFileNameTable(0), \ + timesFileNameTable(0), \ + powerFileNameTable(0), \ fileTableLength(0), \ trackTableLength(0), \ dataBufLength(0), \ diff -r ab411674dad4 -r c270d9e4659a common.cpp --- a/common.cpp Tue Aug 19 14:38:39 2008 +0000 +++ b/common.cpp Tue Aug 19 15:50:26 2008 +0000 @@ -126,10 +126,18 @@ } else { fileTableLength = ALIGN_PAGE_UP(dbH->numFiles * O2_FILETABLE_ENTRY_SIZE); trackTableLength = ALIGN_PAGE_UP(dbH->numFiles * O2_TRACKTABLE_ENTRY_SIZE); - dataBufLength = ALIGN_PAGE_UP(dbH->length); - timesTableLength = ALIGN_PAGE_UP(2*(dbH->length / dbH->dim)); - powerTableLength = ALIGN_PAGE_UP(dbH->length / dbH->dim); - l2normTableLength = ALIGN_PAGE_UP(dbH->length / dbH->dim); + if( dbH->flags & O2_FLAG_LARGE_ADB ){ + dataBufLength = ALIGN_PAGE_UP(dbH->numFiles * O2_FILETABLE_ENTRY_SIZE); + timesTableLength = ALIGN_PAGE_UP(dbH->numFiles * O2_FILETABLE_ENTRY_SIZE); + powerTableLength = ALIGN_PAGE_UP(dbH->numFiles * O2_FILETABLE_ENTRY_SIZE); + l2normTableLength = 0; + } + else{ + dataBufLength = ALIGN_PAGE_UP(dbH->length); + timesTableLength = ALIGN_PAGE_UP(2*(dbH->length / dbH->dim)); + powerTableLength = ALIGN_PAGE_UP(dbH->length / dbH->dim); + l2normTableLength = ALIGN_PAGE_UP(dbH->length / dbH->dim); + } } CHECKED_MMAP(char *, fileTable, dbH->fileTableOffset, fileTableLength); CHECKED_MMAP(unsigned *, trackTable, dbH->trackTableOffset, trackTableLength); @@ -143,9 +151,18 @@ * * CHECKED_MMAP(double *, dataBuf, dbH->dataOffset, dataBufLength); */ - CHECKED_MMAP(double *, timesTable, dbH->timesTableOffset, timesTableLength); - CHECKED_MMAP(double *, powerTable, dbH->powerTableOffset, powerTableLength); - CHECKED_MMAP(double *, l2normTable, dbH->l2normTableOffset, l2normTableLength); + if( dbH->flags & O2_FLAG_LARGE_ADB ){ + CHECKED_MMAP(char *, featureFileNameTable, dbH->dataOffset, fileTableLength); + if( dbH->flags & O2_FLAG_TIMES ) + CHECKED_MMAP(char *, timesFileNameTable, dbH->timesTableOffset, fileTableLength); + if( dbH->flags & O2_FLAG_POWER ) + CHECKED_MMAP(char *, powerFileNameTable, dbH->powerTableOffset, fileTableLength); + } + else{ + CHECKED_MMAP(double *, timesTable, dbH->timesTableOffset, timesTableLength); + CHECKED_MMAP(double *, powerTable, dbH->powerTableOffset, powerTableLength); + CHECKED_MMAP(double *, l2normTable, dbH->l2normTableOffset, l2normTableLength); + } } // build track offset table diff -r ab411674dad4 -r c270d9e4659a insert.cpp --- a/insert.cpp Tue Aug 19 14:38:39 2008 +0000 +++ b/insert.cpp Tue Aug 19 15:50:26 2008 +0000 @@ -465,16 +465,16 @@ INSERT_FILETABLE_STRING(fileTable, thisKey); // Feature Vector fileNames - INSERT_FILETABLE_STRING(dbH->dataOffset, thisFile); + INSERT_FILETABLE_STRING(featureFileNameTable, thisFile); // Time Stamp fileNames if(usingTimes) - INSERT_FILETABLE_STRING(dbH->timesTableOffset, thisTimesFileName); + INSERT_FILETABLE_STRING(timesFileNameTable, thisTimesFileName); // Power fileNames if(usingPower) - INSERT_FILETABLE_STRING(dbH->powerTableOffset, thisPowerFileName); + INSERT_FILETABLE_STRING(powerFileNameTable, thisPowerFileName); // Increment file count dbH->numFiles++;