Changes in / [5f259f3:a5873bd]


Ignore:
Location:
doc/theses/thierry_delisle_PhD/code
Files:
2 added
1 edited

Legend:

Unmodified
Added
Removed
  • doc/theses/thierry_delisle_PhD/code/relaxed_list.hpp

    r5f259f3 ra5873bd  
    7373                        "SNZI",
    7474                        "BITMASK",
    75                         "DISCOVER",
     75                        "SNZI + DISCOVERED MASK",
    7676                        "SNZI + MASK"
    7777                };
     
    8282                : lists(new intrusive_queue_t[numLists])
    8383                , numLists(numLists)
    84                 #if VARIANT == SNZI || VARIANT == DISCOVER
     84                #if VARIANT == SNZI
    8585                        , snzi( std::log2( numLists / 8 ), 2 )
    86                 #elif VARIANT == SNZM
     86                #elif VARIANT == SNZM || VARIANT == DISCOVER
    8787                        , snzm( numLists )
    8888                #endif
     
    128128                                        assert(qword == 0);
    129129                                        bts(tls.mask, bit);
    130                                         snzi.arrive(i);
     130                                        snzm.arrive(i);
    131131                                #elif VARIANT == SNZI
    132132                                        snzi.arrive(i);
     
    166166                #if VARIANT == DISCOVER
    167167                        assert(numLists <= 64);
    168                         while(snzi.query()) {
     168                        while(snzm.query()) {
    169169                                tls.pick.pop.mask_attempt++;
    170170                                unsigned i, j;
     
    180180                                                tls.pick.pop.mask_reset++;
    181181                                                mask = (1U << numLists) - 1;
     182                                                tls.mask.store(mask, std::memory_order_relaxed);
    182183                                        }
    183184
     
    202203                        }
    203204                #elif VARIANT == SNZM
     205                        //*
    204206                        while(snzm.query()) {
    205207                                tls.pick.pop.mask_attempt++;
     
    246248                                if(auto node = try_pop(i, j)) return node;
    247249                        }
     250                        /*/
     251                        while(snzm.query()) {
     252                                // Pick two lists at random
     253                                int i = tls.rng.next() % numLists;
     254                                int j = tls.rng.next() % numLists;
     255
     256                                if(auto node = try_pop(i, j)) return node;
     257                        }
     258                        //*/
    248259                #elif VARIANT == BITMASK
    249260                        int nnempty;
     
    340351                                assert(qword == 0);
    341352                                __attribute__((unused)) bool ret = btr(tls.mask, bit);
    342                                 snzi.depart(w);
     353                                snzm.depart(w);
    343354                        #elif VARIANT == SNZI
    344355                                snzi.depart(w);
     
    511522        const unsigned numLists;
    512523private:
    513         #if VARIANT == SNZI || VARIANT == DISCOVER
     524        #if VARIANT == SNZI
    514525                snzi_t snzi;
    515         #elif VARIANT == SNZM
     526        #elif VARIANT == SNZM || VARIANT == DISCOVER
    516527                snzm_t snzm;
    517528        #else
     
    602613                double pop_sur  = (100.0 * double(global.pick.pop .success) / global.pick.pop .attempt);
    603614                double mpop_sur = (100.0 * double(global.pick.pop .success) / global.pick.pop .mask_attempt);
    604                 double rpop_sur = (100.0 * double(global.pick.pop .mask_reset) / global.pick.pop .mask_attempt);
    605 
    606                 os << "Push   Pick % : " << push_sur << "(" << global.pick.push.success << " / " << global.pick.push.attempt << ")\n";
    607                 os << "Pop    Pick % : " << pop_sur  << "(" << global.pick.pop .success << " / " << global.pick.pop .attempt << ")\n";
    608                 os << "TryPop Pick % : " << mpop_sur << "(" << global.pick.pop .success << " / " << global.pick.pop .mask_attempt << ")\n";
    609                 os << "Pop M Reset % : " << rpop_sur << "(" << global.pick.pop .mask_reset << " / " << global.pick.pop .mask_attempt << ")\n";
     615                double rpop_sur = (100.0 * double(global.pick.pop .success) / global.pick.pop .mask_reset);
     616
     617                double push_len = double(global.pick.push.attempt     ) / global.pick.push.success;
     618                double pop_len  = double(global.pick.pop .attempt     ) / global.pick.pop .success;
     619                double mpop_len = double(global.pick.pop .mask_attempt) / global.pick.pop .success;
     620                double rpop_len = double(global.pick.pop .mask_reset  ) / global.pick.pop .success;
     621
     622                os << "Push   Pick   : " << push_sur << " %, len " << push_len << " (" << global.pick.push.attempt      << " / " << global.pick.push.success << ")\n";
     623                os << "Pop    Pick   : " << pop_sur  << " %, len " << pop_len  << " (" << global.pick.pop .attempt      << " / " << global.pick.pop .success << ")\n";
     624                os << "TryPop Pick   : " << mpop_sur << " %, len " << mpop_len << " (" << global.pick.pop .mask_attempt << " / " << global.pick.pop .success << ")\n";
     625                os << "Pop M Reset   : " << rpop_sur << " %, len " << rpop_len << " (" << global.pick.pop .mask_reset   << " / " << global.pick.pop .success << ")\n";
    610626
    611627                double avgQ_push = double(global.qstat.push.value) / global.qstat.push.count;
Note: See TracChangeset for help on using the changeset viewer.