comparison query.cpp @ 529:e532666226bc multiprobeLSH

Fixed a problem with inserting into exact_evaluation_queue, duplicate pairs were being inserted when querying multiple hashtables. That is now fixed by adding a unique constraint using set<PointPair> inserts and testing. This should speed things up quite a bit (like, 10-fold with default num tables).
author mas01mc
date Fri, 30 Jan 2009 14:58:35 +0000
parents 561339c7fd26
children aa715b3e18db
comparison
equal deleted inserted replaced
528:561339c7fd26 529:e532666226bc
291 *vector_data = new double[vector_size]; 291 *vector_data = new double[vector_size];
292 qpointers->l2norm_data = new double[vector_size / d->dim]; 292 qpointers->l2norm_data = new double[vector_size / d->dim];
293 if(d->power) 293 if(d->power)
294 qpointers->power_data = new double[vector_size / d->dim]; 294 qpointers->power_data = new double[vector_size / d->dim];
295 295
296 uint32_t seq_len_dbl = sequence_length*d->dim*sizeof(double); 296 uint32_t seq_len_dim_dbl = sequence_length*d->dim*sizeof(double);
297 uint32_t seq_len_dbl = sequence_length*sizeof(double);
297 PointPair pp = ppairs.top(); 298 PointPair pp = ppairs.top();
298 uint32_t tid = pp.trackID; 299 uint32_t tid = pp.trackID;
299 300
300 while( !ppairs.empty() && pp.trackID==tid){ 301 while( !ppairs.empty() && pp.trackID==tid){
301 uint32_t spos = pp.spos; 302 uint32_t spos = pp.spos;
302 uint32_t spos_dim = spos*d->dim; 303 uint32_t spos_dim = spos*d->dim;
303 304 #ifdef _LSH_DEBUG_
304 memcpy(*vector_data+spos_dim, d->data+spos_dim, seq_len_dbl); 305 cout << "tid=" << pp.trackID << " qpos=" << pp.qpos << " spos=" << pp.spos << endl;
305 306 cout.flush();
306 audiodb_l2norm_buffer(*vector_data+spos_dim, d->dim, 1, qpointers->l2norm_data+spos); 307 #endif
308 memcpy((void*)(*vector_data+spos_dim), (void*)(d->data+spos_dim), seq_len_dim_dbl);
309
310 audiodb_l2norm_buffer(*vector_data+spos_dim, d->dim, sequence_length, qpointers->l2norm_data+spos);
307 audiodb_sequence_sum(qpointers->l2norm_data+spos, sequence_length, sequence_length); 311 audiodb_sequence_sum(qpointers->l2norm_data+spos, sequence_length, sequence_length);
308 audiodb_sequence_sqrt(qpointers->l2norm_data+spos, sequence_length, sequence_length); 312 audiodb_sequence_sqrt(qpointers->l2norm_data+spos, sequence_length, sequence_length);
309 313
310 if(d->power) { 314 if(d->power) {
311 memcpy(qpointers->power_data+spos, d->power+spos, seq_len_dbl); 315 memcpy(qpointers->power_data+spos, d->power+spos, seq_len_dbl);
514 maybe_delete_array(dbpointers.mean_duration); 518 maybe_delete_array(dbpointers.mean_duration);
515 currentTrack = pp.trackID; 519 currentTrack = pp.trackID;
516 adb_datum_t d = {0}; 520 adb_datum_t d = {0};
517 if(audiodb_track_id_datum(adb, pp.trackID, &d)) { 521 if(audiodb_track_id_datum(adb, pp.trackID, &d)) {
518 delete qstate->exact_evaluation_queue; 522 delete qstate->exact_evaluation_queue;
523 delete qstate->set;
519 return 1; 524 return 1;
520 } 525 }
521 if(audiodb_datum_qpointers_partial(&d, sequence_length, &dbdata, &dbdata_pointer, &dbpointers, qstate)) { 526 // if(audiodb_datum_qpointers_partial(&d, sequence_length, &dbdata, &dbdata_pointer, &dbpointers, qstate)) {
527 if(audiodb_datum_qpointers(&d, sequence_length, &dbdata, &dbdata_pointer, &dbpointers)) {
522 delete qstate->exact_evaluation_queue; 528 delete qstate->exact_evaluation_queue;
529 delete qstate->set;
523 audiodb_free_datum(&d); 530 audiodb_free_datum(&d);
524 return 1; 531 return 1;
525 } 532 }
526 audiodb_free_datum(&d); 533 audiodb_free_datum(&d);
527 } 534 }
559 maybe_delete_array(dbdata); 566 maybe_delete_array(dbdata);
560 maybe_delete_array(dbpointers.l2norm_data); 567 maybe_delete_array(dbpointers.l2norm_data);
561 maybe_delete_array(dbpointers.power_data); 568 maybe_delete_array(dbpointers.power_data);
562 maybe_delete_array(dbpointers.mean_duration); 569 maybe_delete_array(dbpointers.mean_duration);
563 delete qstate->exact_evaluation_queue; 570 delete qstate->exact_evaluation_queue;
571 delete qstate->set;
564 return 0; 572 return 0;
565 } 573 }
566 574
567 int audiodb_query_loop(adb_t *adb, const adb_query_spec_t *spec, adb_qstate_internal_t *qstate) { 575 int audiodb_query_loop(adb_t *adb, const adb_query_spec_t *spec, adb_qstate_internal_t *qstate) {
568 576