Mercurial > hg > audiodb
comparison audioDB.cpp @ 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 |
comparison
equal
deleted
inserted
replaced
178:7bbe5d48a7ef | 179:71c24d0df2c4 |
---|---|
1727 double logSampleSum = 0; | 1727 double logSampleSum = 0; |
1728 double minSample = 1e9; | 1728 double minSample = 1e9; |
1729 double maxSample = 0; | 1729 double maxSample = 0; |
1730 | 1730 |
1731 // Track loop | 1731 // Track loop |
1732 for(processedTracks=0, track=0 ; processedTracks < dbH->numFiles ; track++, processedTracks++){ | 1732 size_t data_buffer_size = 0; |
1733 double *data_buffer = 0; | |
1734 lseek(dbfid, dbH->dataOffset, SEEK_SET); | |
1735 | |
1736 for(processedTracks=0, track=0 ; processedTracks < dbH->numFiles ; track++, processedTracks++) { | |
1733 | 1737 |
1734 // get trackID from file if using a control file | 1738 // get trackID from file if using a control file |
1735 if(trackFile){ | 1739 if(trackFile){ |
1736 if(!trackFile->eof()){ | 1740 if(!trackFile->eof()){ |
1737 trackFile->getline(nextKey,MAXSTR); | 1741 trackFile->getline(nextKey,MAXSTR); |
1761 for(j=0; j<numVectors;j++){ | 1765 for(j=0; j<numVectors;j++){ |
1762 DD[j]=new double[trackTable[track]]; | 1766 DD[j]=new double[trackTable[track]]; |
1763 assert(DD[j]); | 1767 assert(DD[j]); |
1764 } | 1768 } |
1765 | 1769 |
1770 if (trackTable[track] * sizeof(double) * dbH->dim > data_buffer_size) { | |
1771 if(data_buffer) { | |
1772 free(data_buffer); | |
1773 } | |
1774 { | |
1775 data_buffer_size = trackTable[track] * sizeof(double) * dbH->dim; | |
1776 void *tmp = malloc(data_buffer_size); | |
1777 if (tmp == NULL) { | |
1778 error("error allocating data buffer"); | |
1779 } | |
1780 data_buffer = (double *) tmp; | |
1781 } | |
1782 } | |
1783 | |
1784 read(dbfid, data_buffer, trackTable[track] * sizeof(double) * dbH->dim); | |
1785 | |
1766 // Dot product | 1786 // Dot product |
1767 for(j=0; j<numVectors; j++) | 1787 for(j=0; j<numVectors; j++) |
1768 for(k=0; k<trackTable[track]; k++){ | 1788 for(k=0; k<trackTable[track]; k++){ |
1769 qp=query+j*dbH->dim; | 1789 qp=query+j*dbH->dim; |
1770 sp=dataBuf+trackOffset+k*dbH->dim; | 1790 sp=data_buffer+k*dbH->dim; |
1771 DD[j][k]=0.0; // Initialize matched filter array | 1791 DD[j][k]=0.0; // Initialize matched filter array |
1772 dp=&D[j][k]; // point to correlation cell j,k | 1792 dp=&D[j][k]; // point to correlation cell j,k |
1773 *dp=0.0; // initialize correlation cell | 1793 *dp=0.0; // initialize correlation cell |
1774 l=dbH->dim; // size of vectors | 1794 l=dbH->dim; // size of vectors |
1775 while(l--) | 1795 while(l--) |
1923 qIndexes[k]=~0; | 1943 qIndexes[k]=~0; |
1924 sIndexes[k]=~0; | 1944 sIndexes[k]=~0; |
1925 } | 1945 } |
1926 } | 1946 } |
1927 | 1947 |
1948 free(data_buffer); | |
1949 | |
1928 gettimeofday(&tv2,NULL); | 1950 gettimeofday(&tv2,NULL); |
1929 if(verbosity>1) { | 1951 if(verbosity>1) { |
1930 cerr << endl << "processed tracks :" << processedTracks << " matched tracks: " << successfulTracks << " elapsed time:" | 1952 cerr << endl << "processed tracks :" << processedTracks << " matched tracks: " << successfulTracks << " elapsed time:" |
1931 << ( tv2.tv_sec*1000 + tv2.tv_usec/1000 ) - ( tv1.tv_sec*1000+tv1.tv_usec/1000 ) << " msec" << endl; | 1953 << ( tv2.tv_sec*1000 + tv2.tv_usec/1000 ) - ( tv1.tv_sec*1000+tv1.tv_usec/1000 ) << " msec" << endl; |
1932 cerr << "sampleCount: " << sampleCount << " sampleSum: " << sampleSum << " logSampleSum: " << logSampleSum | 1954 cerr << "sampleCount: " << sampleCount << " sampleSum: " << sampleSum << " logSampleSum: " << logSampleSum |
2231 double logSampleSum = 0; | 2253 double logSampleSum = 0; |
2232 double minSample = 1e9; | 2254 double minSample = 1e9; |
2233 double maxSample = 0; | 2255 double maxSample = 0; |
2234 | 2256 |
2235 // Track loop | 2257 // Track loop |
2258 size_t data_buffer_size = 0; | |
2259 double *data_buffer = 0; | |
2260 lseek(dbfid, dbH->dataOffset, SEEK_SET); | |
2261 | |
2236 for(processedTracks=0, track=0 ; processedTracks < dbH->numFiles ; track++, processedTracks++){ | 2262 for(processedTracks=0, track=0 ; processedTracks < dbH->numFiles ; track++, processedTracks++){ |
2237 | 2263 |
2238 // get trackID from file if using a control file | 2264 // get trackID from file if using a control file |
2239 if(trackFile){ | 2265 if(trackFile){ |
2240 if(!trackFile->eof()){ | 2266 if(!trackFile->eof()){ |
2265 for(j=0; j<numVectors;j++){ | 2291 for(j=0; j<numVectors;j++){ |
2266 DD[j]=new double[trackTable[track]]; | 2292 DD[j]=new double[trackTable[track]]; |
2267 assert(DD[j]); | 2293 assert(DD[j]); |
2268 } | 2294 } |
2269 | 2295 |
2296 if (trackTable[track] * sizeof(double) * dbH->dim > data_buffer_size) { | |
2297 if(data_buffer) { | |
2298 free(data_buffer); | |
2299 } | |
2300 { | |
2301 data_buffer_size = trackTable[track] * sizeof(double) * dbH->dim; | |
2302 void *tmp = malloc(data_buffer_size); | |
2303 if (tmp == NULL) { | |
2304 error("error allocating data buffer"); | |
2305 } | |
2306 data_buffer = (double *) tmp; | |
2307 } | |
2308 } | |
2309 | |
2310 read(dbfid, data_buffer, trackTable[track] * sizeof(double) * dbH->dim); | |
2311 | |
2270 // Dot product | 2312 // Dot product |
2271 for(j=0; j<numVectors; j++) | 2313 for(j=0; j<numVectors; j++) |
2272 for(k=0; k<trackTable[track]; k++){ | 2314 for(k=0; k<trackTable[track]; k++){ |
2273 qp=query+j*dbH->dim; | 2315 qp=query+j*dbH->dim; |
2274 sp=dataBuf+trackOffset+k*dbH->dim; | 2316 sp=data_buffer+k*dbH->dim; |
2275 DD[j][k]=0.0; // Initialize matched filter array | 2317 DD[j][k]=0.0; // Initialize matched filter array |
2276 dp=&D[j][k]; // point to correlation cell j,k | 2318 dp=&D[j][k]; // point to correlation cell j,k |
2277 *dp=0.0; // initialize correlation cell | 2319 *dp=0.0; // initialize correlation cell |
2278 l=dbH->dim; // size of vectors | 2320 l=dbH->dim; // size of vectors |
2279 while(l--) | 2321 while(l--) |
2280 *dp+=*qp++**sp++; | 2322 *dp+=*qp++**sp++; |
2281 } | 2323 } |
2282 | 2324 |
2283 // Matched Filter | 2325 // Matched Filter |
2284 // HOP SIZE == 1 | 2326 // HOP SIZE == 1 |
2285 double* spd; | 2327 double* spd; |
2286 if(HOP_SIZE==1){ // HOP_SIZE = shingleHop | 2328 if(HOP_SIZE==1){ // HOP_SIZE = shingleHop |
2287 for(w=0; w<wL; w++) | 2329 for(w=0; w<wL; w++) |
2403 distances[k]=0.0; | 2445 distances[k]=0.0; |
2404 qIndexes[k]=~0; | 2446 qIndexes[k]=~0; |
2405 sIndexes[k]=~0; | 2447 sIndexes[k]=~0; |
2406 } | 2448 } |
2407 } | 2449 } |
2450 | |
2451 free(data_buffer); | |
2408 | 2452 |
2409 gettimeofday(&tv2,NULL); | 2453 gettimeofday(&tv2,NULL); |
2410 if(verbosity>1) { | 2454 if(verbosity>1) { |
2411 cerr << endl << "processed tracks :" << processedTracks << " matched tracks: " << successfulTracks << " elapsed time:" | 2455 cerr << endl << "processed tracks :" << processedTracks << " matched tracks: " << successfulTracks << " elapsed time:" |
2412 << ( tv2.tv_sec*1000 + tv2.tv_usec/1000 ) - ( tv1.tv_sec*1000+tv1.tv_usec/1000 ) << " msec" << endl; | 2456 << ( tv2.tv_sec*1000 + tv2.tv_usec/1000 ) - ( tv1.tv_sec*1000+tv1.tv_usec/1000 ) << " msec" << endl; |