Mercurial > hg > audiodb
changeset 179:71c24d0df2c4 no-big-mmap
fewer accesses through dataBuf
trackSequenceQueryNN() and trackSequenceQueryRad() now use
lseek()/read() for getting hold of data, rather than accessing the
memory backed by mmap().
author | mas01cr |
---|---|
date | Thu, 15 Nov 2007 16:22:59 +0000 |
parents | 7bbe5d48a7ef |
children | d434e771c776 |
files | audioDB.cpp |
diffstat | 1 files changed, 48 insertions(+), 4 deletions(-) [+] |
line wrap: on
line diff
--- a/audioDB.cpp Thu Nov 15 15:18:37 2007 +0000 +++ b/audioDB.cpp Thu Nov 15 16:22:59 2007 +0000 @@ -1729,7 +1729,11 @@ double maxSample = 0; // Track loop - for(processedTracks=0, track=0 ; processedTracks < dbH->numFiles ; track++, processedTracks++){ + size_t data_buffer_size = 0; + double *data_buffer = 0; + lseek(dbfid, dbH->dataOffset, SEEK_SET); + + for(processedTracks=0, track=0 ; processedTracks < dbH->numFiles ; track++, processedTracks++) { // get trackID from file if using a control file if(trackFile){ @@ -1763,11 +1767,27 @@ assert(DD[j]); } + if (trackTable[track] * sizeof(double) * dbH->dim > data_buffer_size) { + if(data_buffer) { + free(data_buffer); + } + { + data_buffer_size = trackTable[track] * sizeof(double) * dbH->dim; + void *tmp = malloc(data_buffer_size); + if (tmp == NULL) { + error("error allocating data buffer"); + } + data_buffer = (double *) tmp; + } + } + + read(dbfid, data_buffer, trackTable[track] * sizeof(double) * dbH->dim); + // Dot product for(j=0; j<numVectors; j++) for(k=0; k<trackTable[track]; k++){ qp=query+j*dbH->dim; - sp=dataBuf+trackOffset+k*dbH->dim; + sp=data_buffer+k*dbH->dim; DD[j][k]=0.0; // Initialize matched filter array dp=&D[j][k]; // point to correlation cell j,k *dp=0.0; // initialize correlation cell @@ -1925,6 +1945,8 @@ } } + free(data_buffer); + gettimeofday(&tv2,NULL); if(verbosity>1) { cerr << endl << "processed tracks :" << processedTracks << " matched tracks: " << successfulTracks << " elapsed time:" @@ -2233,6 +2255,10 @@ double maxSample = 0; // Track loop + size_t data_buffer_size = 0; + double *data_buffer = 0; + lseek(dbfid, dbH->dataOffset, SEEK_SET); + for(processedTracks=0, track=0 ; processedTracks < dbH->numFiles ; track++, processedTracks++){ // get trackID from file if using a control file @@ -2267,11 +2293,27 @@ assert(DD[j]); } + if (trackTable[track] * sizeof(double) * dbH->dim > data_buffer_size) { + if(data_buffer) { + free(data_buffer); + } + { + data_buffer_size = trackTable[track] * sizeof(double) * dbH->dim; + void *tmp = malloc(data_buffer_size); + if (tmp == NULL) { + error("error allocating data buffer"); + } + data_buffer = (double *) tmp; + } + } + + read(dbfid, data_buffer, trackTable[track] * sizeof(double) * dbH->dim); + // Dot product for(j=0; j<numVectors; j++) for(k=0; k<trackTable[track]; k++){ qp=query+j*dbH->dim; - sp=dataBuf+trackOffset+k*dbH->dim; + sp=data_buffer+k*dbH->dim; DD[j][k]=0.0; // Initialize matched filter array dp=&D[j][k]; // point to correlation cell j,k *dp=0.0; // initialize correlation cell @@ -2279,7 +2321,7 @@ while(l--) *dp+=*qp++**sp++; } - + // Matched Filter // HOP SIZE == 1 double* spd; @@ -2406,6 +2448,8 @@ } } + free(data_buffer); + gettimeofday(&tv2,NULL); if(verbosity>1) { cerr << endl << "processed tracks :" << processedTracks << " matched tracks: " << successfulTracks << " elapsed time:"