Ignore:
Timestamp:
Apr 19, 2022, 3:00:04 PM (3 years ago)
Author:
m3zulfiq <m3zulfiq@…>
Branches:
ADT, ast-experimental, master, pthread-emulation, qualifiedEnum
Children:
5b84a321
Parents:
ba897d21 (diff), bb7c77d (diff)
Note: this is a merge changeset, the changes displayed below correspond to the merge itself.
Use the (diff) links above to see all the changes relative to each parent.
Message:

added benchmark and evaluations chapter to thesis

File:
1 edited

Legend:

Unmodified
Added
Removed
  • libcfa/src/concurrency/ready_subqueue.hfa

    rba897d21 r2e9b59b  
    33#define __CFA_NO_SCHED_STATS__
    44
    5 #include "containers/queueLockFree.hfa"
     5#include "limits.hfa"
    66
    77// Intrusives lanes which are used by the relaxed ready queue
     
    2727}
    2828
    29 // Ctor
    30 void ?{}( __intrusive_lane_t & this ) {
    31         this.lock = false;
    32         this.prev = mock_head(this);
    33         this.anchor.next = 0p;
    34         this.anchor.ts   = -1llu;
    35         #if !defined(__CFA_NO_STATISTICS__)
    36                 this.cnt  = 0;
    37         #endif
    38 
    39         // We add a boat-load of assertions here because the anchor code is very fragile
    40         /* paranoid */ _Static_assert( offsetof( thread$, link ) == offsetof(__intrusive_lane_t, anchor) );
    41         /* paranoid */ verify( offsetof( thread$, link ) == offsetof(__intrusive_lane_t, anchor) );
    42         /* paranoid */ verify( ((uintptr_t)( mock_head(this) ) + offsetof( thread$, link )) == (uintptr_t)(&this.anchor) );
    43         /* paranoid */ verify( &mock_head(this)->link.next == &this.anchor.next );
    44         /* paranoid */ verify( &mock_head(this)->link.ts   == &this.anchor.ts   );
    45         /* paranoid */ verify( mock_head(this)->link.next == 0p );
    46         /* paranoid */ verify( mock_head(this)->link.ts   == -1llu  );
    47         /* paranoid */ verify( mock_head(this) == this.prev );
    48         /* paranoid */ verify( __alignof__(__intrusive_lane_t) == 128 );
    49         /* paranoid */ verify( __alignof__(this) == 128 );
    50         /* paranoid */ verifyf( ((intptr_t)(&this) % 128) == 0, "Expected address to be aligned %p %% 128 == %zd", &this, ((intptr_t)(&this) % 128) );
    51 }
    52 
    53 // Dtor is trivial
    54 void ^?{}( __intrusive_lane_t & this ) {
    55         // Make sure the list is empty
    56         /* paranoid */ verify( this.anchor.next == 0p );
    57         /* paranoid */ verify( this.anchor.ts   == -1llu );
    58         /* paranoid */ verify( mock_head(this)  == this.prev );
    59 }
    60 
    6129// Push a thread onto this lane
    6230// returns true of lane was empty before push, false otherwise
     
    6432        /* paranoid */ verify( this.lock );
    6533        /* paranoid */ verify( node->link.next == 0p );
    66         /* paranoid */ verify( node->link.ts   == -1llu  );
     34        /* paranoid */ verify( node->link.ts   == MAX  );
    6735        /* paranoid */ verify( this.prev->link.next == 0p );
    68         /* paranoid */ verify( this.prev->link.ts   == -1llu  );
     36        /* paranoid */ verify( this.prev->link.ts   == MAX  );
    6937        if( this.anchor.next == 0p ) {
    7038                /* paranoid */ verify( this.anchor.next == 0p );
    71                 /* paranoid */ verify( this.anchor.ts   == -1llu );
     39                /* paranoid */ verify( this.anchor.ts   == MAX );
    7240                /* paranoid */ verify( this.anchor.ts   != 0  );
    7341                /* paranoid */ verify( this.prev == mock_head( this ) );
    7442        } else {
    7543                /* paranoid */ verify( this.anchor.next != 0p );
    76                 /* paranoid */ verify( this.anchor.ts   != -1llu );
     44                /* paranoid */ verify( this.anchor.ts   != MAX );
    7745                /* paranoid */ verify( this.anchor.ts   != 0  );
    7846                /* paranoid */ verify( this.prev != mock_head( this ) );
     
    9462        /* paranoid */ verify( this.lock );
    9563        /* paranoid */ verify( this.anchor.next != 0p );
    96         /* paranoid */ verify( this.anchor.ts   != -1llu );
     64        /* paranoid */ verify( this.anchor.ts   != MAX );
    9765        /* paranoid */ verify( this.anchor.ts   != 0  );
    9866
     
    10371        bool is_empty = this.anchor.next == 0p;
    10472        node->link.next = 0p;
    105         node->link.ts   = -1llu;
     73        node->link.ts   = MAX;
    10674        #if !defined(__CFA_NO_STATISTICS__)
    10775                this.cnt--;
     
    11280
    11381        /* paranoid */ verify( node->link.next == 0p );
    114         /* paranoid */ verify( node->link.ts   == -1llu  );
     82        /* paranoid */ verify( node->link.ts   == MAX  );
    11583        /* paranoid */ verify( node->link.ts   != 0  );
    11684        /* paranoid */ verify( this.anchor.ts  != 0  );
Note: See TracChangeset for help on using the changeset viewer.