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;