Mercurial > hg > audiodb
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 |