├── README.md ├── benaphore_mutex ├── Makefile ├── benaphore.cc ├── benaphore_recur.cc └── benaphore_recur_test.cc ├── memory_reordering ├── Makefile └── memory_reordering.cc ├── mersenne_twister ├── Makefile └── mersenne_twister.cc ├── mutex_contention ├── Makefile ├── lock_benchmark.cc └── plot │ ├── analyze_contention.py │ ├── analyze_frequency.py │ ├── contention.txt │ ├── lock_ben.txt │ └── reference.txt └── mutex_time ├── Makefile ├── draw_mutex_time.py └── mutex_time.cc /README.md: -------------------------------------------------------------------------------- 1 | blog_multithreading 2 | =================== 3 | 4 | multithreading examples of my [blogs](dreamrunner.org). 5 | -------------------------------------------------------------------------------- /benaphore_mutex/Makefile: -------------------------------------------------------------------------------- 1 | main: 2 | g++ -o benaphore -O2 benaphore.cc -lrt -pthread 3 | g++ -o benaphore_recur -O2 benaphore_recur.cc -lrt -pthread 4 | g++ -o benaphore_recur_test -O2 benaphore_recur_test.cc -pthread 5 | -------------------------------------------------------------------------------- /benaphore_mutex/benaphore.cc: -------------------------------------------------------------------------------- 1 | #include 2 | #include 3 | #include 4 | 5 | 6 | void GetMonotonicTime(struct timespec *ts) { 7 | clock_gettime(CLOCK_MONOTONIC, ts); 8 | } 9 | 10 | float GetElapsedTime(struct timespec *before, struct timespec *after) { 11 | double delta_s = after->tv_sec - before->tv_sec; 12 | double delta_ns = after->tv_nsec - before->tv_nsec; 13 | return delta_s * 1e9 + delta_ns; 14 | } 15 | 16 | 17 | class Benaphore { 18 | public: 19 | Benaphore() : counter_(0) { 20 | sem_init(&semaphore_, 0, 0); 21 | } 22 | ~Benaphore() { 23 | sem_destroy(&semaphore_); 24 | } 25 | void Lock() { 26 | if (__sync_add_and_fetch(&counter_, 1) > 1) { 27 | sem_wait(&semaphore_); 28 | } 29 | } 30 | void Unlock() { 31 | if (__sync_sub_and_fetch(&counter_, 1) > 0) { 32 | sem_post(&semaphore_); 33 | } 34 | } 35 | bool TryLock() { 36 | return __sync_bool_compare_and_swap(&counter_, 0, 1); 37 | } 38 | 39 | private: 40 | long counter_; 41 | sem_t semaphore_; 42 | }; 43 | 44 | int main(int argc, char *argv[]) { 45 | struct timespec start, end; 46 | const int kN = 1000000; 47 | Benaphore benaphore; 48 | GetMonotonicTime(&start); 49 | for (int i = 0; i < kN; ++i) { 50 | benaphore.Lock(); 51 | benaphore.Unlock(); 52 | } 53 | GetMonotonicTime(&end); 54 | float delta; 55 | delta = GetElapsedTime(&start, &end) / kN; 56 | printf("the average time of lock is %e\n", delta); 57 | return 0; 58 | } 59 | -------------------------------------------------------------------------------- /benaphore_mutex/benaphore_recur.cc: -------------------------------------------------------------------------------- 1 | #include 2 | #include 3 | #include 4 | #include 5 | 6 | 7 | void GetMonotonicTime(struct timespec *ts) { 8 | clock_gettime(CLOCK_MONOTONIC, ts); 9 | } 10 | 11 | float GetElapsedTime(struct timespec *before, struct timespec *after) { 12 | double delta_s = after->tv_sec - before->tv_sec; 13 | double delta_ns = after->tv_nsec - before->tv_nsec; 14 | return delta_s * 1e9 + delta_ns; 15 | } 16 | 17 | 18 | #define LIGHT_ASSERT(x) { if (!(x)) __builtin_trap(); } 19 | 20 | class RecursiveBenaphore { 21 | public: 22 | RecursiveBenaphore() : counter_(0), owner_(0), recursion_(0) { 23 | sem_init(&semaphore_, 0, 0); 24 | } 25 | ~RecursiveBenaphore() { 26 | sem_destroy(&semaphore_); 27 | } 28 | void Lock() { 29 | pthread_t thread_id = pthread_self(); 30 | if (__sync_add_and_fetch(&counter_, 1) > 1) { 31 | if (!pthread_equal(thread_id, owner_)) { 32 | sem_wait(&semaphore_); 33 | } 34 | } 35 | owner_ = thread_id; 36 | recursion_++; 37 | } 38 | void Unlock() { 39 | pthread_t thread_id = pthread_self(); 40 | LIGHT_ASSERT(pthread_equal(thread_id, owner_)); 41 | long recur = --recursion_; 42 | if (recur == 0) { 43 | owner_ = 0; 44 | } 45 | long result = __sync_sub_and_fetch(&counter_, 1); 46 | if (result > 0) { 47 | if (recur == 0) { 48 | int sem_value; 49 | sem_getvalue(&semaphore_, &sem_value); 50 | if (sem_value == 0) { 51 | sem_post(&semaphore_); 52 | } 53 | } 54 | } 55 | } 56 | bool TryLock() { 57 | pthread_t thread_id = pthread_self(); 58 | if (pthread_equal(thread_id, owner_)) { 59 | __sync_add_and_fetch(&counter_, 1); 60 | } else { 61 | bool result = __sync_bool_compare_and_swap(&counter_, 0, 1); 62 | if (result == false) { 63 | return false; 64 | } 65 | owner_ = thread_id; 66 | } 67 | recursion_++; 68 | return true; 69 | } 70 | 71 | private: 72 | long counter_; 73 | sem_t semaphore_; 74 | pthread_t owner_; 75 | long recursion_; 76 | }; 77 | 78 | 79 | int main(int argc, char *argv[]) { 80 | struct timespec start, end; 81 | const int kN = 1000000; 82 | RecursiveBenaphore benaphore; 83 | GetMonotonicTime(&start); 84 | for (int i = 0; i < kN; ++i) { 85 | benaphore.Lock(); 86 | benaphore.Unlock(); 87 | } 88 | GetMonotonicTime(&end); 89 | float delta; 90 | delta = GetElapsedTime(&start, &end) / kN; 91 | printf("the average time of lock is %e\n", delta); 92 | return 0; 93 | } 94 | -------------------------------------------------------------------------------- /benaphore_mutex/benaphore_recur_test.cc: -------------------------------------------------------------------------------- 1 | #include 2 | #include 3 | #include 4 | #include 5 | #include 6 | 7 | #define LIGHT_ASSERT(x) { if (!(x)) __builtin_trap(); } 8 | 9 | class RecursiveBenaphore { 10 | public: 11 | RecursiveBenaphore() : counter_(0), owner_(0), recursion_(0) { 12 | sem_init(&semaphore_, 0, 0); 13 | } 14 | ~RecursiveBenaphore() { 15 | sem_destroy(&semaphore_); 16 | } 17 | void Lock() { 18 | pthread_t thread_id = pthread_self(); 19 | if (__sync_add_and_fetch(&counter_, 1) > 1) { 20 | if (!pthread_equal(thread_id, owner_)) { 21 | sem_wait(&semaphore_); 22 | } 23 | } 24 | owner_ = thread_id; 25 | recursion_++; 26 | } 27 | void Unlock() { 28 | pthread_t thread_id = pthread_self(); 29 | LIGHT_ASSERT(pthread_equal(thread_id, owner_)); 30 | long recur = --recursion_; 31 | if (recur == 0) { 32 | owner_ = 0; 33 | } 34 | long result = __sync_sub_and_fetch(&counter_, 1); 35 | if (result > 0) { 36 | if (recur == 0) { 37 | int sem_value; 38 | sem_getvalue(&semaphore_, &sem_value); 39 | if (sem_value == 0) { 40 | sem_post(&semaphore_); 41 | } 42 | } 43 | } 44 | } 45 | bool TryLock() { 46 | pthread_t thread_id = pthread_self(); 47 | if (pthread_equal(thread_id, owner_)) { 48 | __sync_add_and_fetch(&counter_, 1); 49 | } else { 50 | bool result = __sync_bool_compare_and_swap(&counter_, 0, 1); 51 | if (result == false) { 52 | return false; 53 | } 54 | owner_ = thread_id; 55 | } 56 | recursion_++; 57 | return true; 58 | } 59 | 60 | private: 61 | long counter_; 62 | sem_t semaphore_; 63 | pthread_t owner_; 64 | long recursion_; 65 | }; 66 | 67 | 68 | // Mersenne Twister Parameters 69 | #define MT_N 624 70 | #define MT_M 397 71 | 72 | class MersenneTwister { 73 | public: 74 | explicit MersenneTwister(int seed); 75 | unsigned int Integer(); 76 | float fraction() { 77 | return Integer() * 2.3283e-10f; 78 | } 79 | 80 | private: 81 | unsigned int buffer_[MT_N]; 82 | int index_; 83 | }; 84 | 85 | MersenneTwister::MersenneTwister(int seed) { 86 | buffer_[0] = seed; 87 | for (index_ = 1; index_ < MT_N; ++index_) { 88 | buffer_[index_] = (1812433253UL * (buffer_[index_-1] 89 | ^ (buffer_[index_-1] >> 30)) + index_); 90 | } 91 | } 92 | 93 | unsigned int MersenneTwister::Integer() { 94 | if (index_ >= MT_N) { 95 | unsigned int i; 96 | unsigned int x; 97 | for (i = 0; i < MT_N - MT_M; ++i) { 98 | x = (buffer_[i] & 0x80000000UL) | (buffer_[i+1] & 0x7fffffffUL); 99 | buffer_[i] = buffer_[i+MT_M] ^ (x >> 1) ^ ((x & 1) * 0x9908b0dfUL); 100 | } 101 | for (; i < MT_N - 1; ++i) { 102 | x = (buffer_[i] & 0x80000000UL) | (buffer_[i+1] & 0x7fffffffUL); 103 | buffer_[i] = buffer_[i+MT_M-MT_N] ^ (x >> 1) ^ ((x & 1) * 0x9908b0dfUL); 104 | } 105 | x = (buffer_[MT_N-1] & 0x80000000UL) | (buffer_[0] & 0x7fffffffUL); 106 | buffer_[MT_N-1] = buffer_[MT_M-1] ^ (x >> 1) ^ ((x & 1) * 0x9908b0dfUL); 107 | index_ = 0; 108 | } 109 | unsigned int y = buffer_[index_++]; 110 | y ^= (y >> 11); 111 | y ^= (y << 7) & 0x9d2c5680UL; 112 | y ^= (y << 15) & 0xefc60000UL; 113 | y ^= (y >> 18); 114 | return y; 115 | } 116 | 117 | struct ThreadStats { 118 | int iterations; 119 | int work_units_complete; 120 | int amount_incremented; 121 | 122 | ThreadStats() { 123 | iterations = 0; 124 | work_units_complete = 0; 125 | amount_incremented = 0; 126 | } 127 | 128 | void Accumulate(const ThreadStats &rhs) { 129 | iterations += rhs.iterations; 130 | work_units_complete += rhs. work_units_complete; 131 | amount_incremented += rhs.amount_incremented; 132 | } 133 | }; 134 | 135 | 136 | const int kMaxThreads = 4; 137 | ThreadStats g_thread_stats[kMaxThreads]; 138 | 139 | RecursiveBenaphore g_lock; 140 | 141 | int g_counter = 0; 142 | bool g_done = false; 143 | 144 | void *ThreadProc(void *param) { 145 | ThreadStats local_state; 146 | int thread_number = *(static_cast(param)); 147 | MersenneTwister random(thread_number); 148 | int lock_count = 0; 149 | int last_counter = 0; 150 | LIGHT_ASSERT(thread_number < kMaxThreads); 151 | for (;;) { 152 | local_state.iterations++; 153 | float f = random.fraction(); 154 | int work_units = static_cast(f * 10); 155 | for (int i = 0; i < work_units; ++i) { 156 | random.Integer(); 157 | } 158 | local_state.work_units_complete += work_units; 159 | 160 | if (lock_count > 0) { 161 | LIGHT_ASSERT(g_counter == last_counter); 162 | } 163 | 164 | // the number of desired lock count in rang [0, 4), biased to low numbers 165 | f = random.fraction(); 166 | int desired_lock_count = static_cast(f * f * 4); 167 | while (lock_count > desired_lock_count) { 168 | g_lock.Unlock(); 169 | lock_count--; 170 | } 171 | bool use_trylock = (random.Integer() & 1) == 0; 172 | while (lock_count < desired_lock_count) { 173 | if (use_trylock) { 174 | if (!g_lock.TryLock()) { 175 | break; 176 | } 177 | } else { 178 | g_lock.Lock(); 179 | } 180 | lock_count++; 181 | } 182 | 183 | if (lock_count > 0) { 184 | LIGHT_ASSERT((g_counter - last_counter) >= 0); 185 | g_counter += thread_number + 1; 186 | last_counter = g_counter; 187 | local_state.amount_incremented += thread_number + 1; 188 | } 189 | 190 | if (g_done) { 191 | break; 192 | } 193 | } 194 | while (lock_count > 0) { 195 | g_lock.Unlock(); 196 | lock_count--; 197 | } 198 | g_thread_stats[thread_number] = local_state; 199 | return NULL; 200 | } 201 | 202 | void PerformStressTest(int thread_count, bool use_affinities, 203 | int milliseconds) { 204 | g_counter = 0; 205 | g_done = false; 206 | printf("Spawning %d threads %s affinites for %d milliseconds.\n", 207 | thread_count, use_affinities? "with" : "without", milliseconds); 208 | pthread_t threads[kMaxThreads]; 209 | int thread_ids[kMaxThreads]; 210 | for (int t = 0; t < thread_count; ++t) { 211 | thread_ids[t] = t; 212 | int rc; 213 | rc = pthread_create(&threads[t], NULL, 214 | ThreadProc, &thread_ids[t]); 215 | if (rc) { 216 | fprintf(stderr, "error: pthread_create, rc: %d\n", rc); 217 | return; 218 | } 219 | if (use_affinities) { 220 | cpu_set_t cpus; 221 | CPU_ZERO(&cpus); 222 | CPU_SET(t, &cpus); 223 | pthread_setaffinity_np(threads[t], sizeof(cpu_set_t), &cpus); 224 | } 225 | } 226 | usleep(milliseconds * 1000); 227 | g_done = true; 228 | 229 | for (int t = 0; t < thread_count; ++t) { 230 | pthread_join(threads[t], NULL); 231 | } 232 | 233 | ThreadStats total_stats; 234 | for (int t = 0; t < thread_count; ++t) { 235 | total_stats.Accumulate(g_thread_stats[t]); 236 | } 237 | LIGHT_ASSERT(total_stats.amount_incremented == g_counter); 238 | printf("%d total iterations, %d workUnits, g_counter=%d\n", 239 | total_stats.iterations, total_stats.work_units_complete, g_counter); 240 | } 241 | 242 | 243 | int main(int argc, char *argv[]) { 244 | for (int iterations = 0; iterations < 10; ++iterations) { 245 | for (int affinities = 0; affinities < 2; ++affinities) { 246 | for (int thread_count = 2; thread_count <= kMaxThreads; ++thread_count) { 247 | PerformStressTest(thread_count, affinities == 0, 2000); 248 | } 249 | } 250 | } 251 | return 0; 252 | } 253 | -------------------------------------------------------------------------------- /memory_reordering/Makefile: -------------------------------------------------------------------------------- 1 | main: 2 | g++ -o memory_reordering -O2 memory_reordering.cc -lpthread 3 | -------------------------------------------------------------------------------- /memory_reordering/memory_reordering.cc: -------------------------------------------------------------------------------- 1 | #include 2 | #include 3 | #include 4 | #include 5 | 6 | #define USE_CPU_FENCE 0 7 | #define USE_SINGLE_PROCESSOR 0 8 | 9 | #if USE_SINGLE_PROCESSOR 10 | #include 11 | #endif 12 | 13 | // Mersenne Twister Parameters 14 | #define MT_N 624 15 | #define MT_M 397 16 | 17 | /* A thread-safe random number generator 18 | 19 | */ 20 | class MersenneTwister { 21 | public: 22 | explicit MersenneTwister(int seed); 23 | unsigned int Integer(); 24 | 25 | private: 26 | unsigned int buffer_[MT_N]; 27 | int index_; 28 | }; 29 | 30 | MersenneTwister::MersenneTwister(int seed) { 31 | buffer_[0] = seed; 32 | for (index_ = 1; index_ < MT_N; ++index_) { 33 | buffer_[index_] = (1812433253UL * (buffer_[index_-1] 34 | ^ (buffer_[index_-1] >> 30)) + index_); 35 | } 36 | } 37 | 38 | unsigned int MersenneTwister::Integer() { 39 | if (index_ >= MT_N) { 40 | unsigned int i; 41 | unsigned int x; 42 | for (i = 0; i < MT_N - MT_M; ++i) { 43 | x = (buffer_[i] & 0x80000000UL) | (buffer_[i+1] & 0x7fffffffUL); 44 | buffer_[i] = buffer_[i+MT_M] ^ (x >> 1) ^ ((x & 1) * 0x9908b0dfUL); 45 | } 46 | for (; i < MT_N - 1; ++i) { 47 | x = (buffer_[i] & 0x80000000UL) | (buffer_[i+1] & 0x7fffffffUL); 48 | buffer_[i] = buffer_[i+MT_M-MT_N] ^ (x >> 1) ^ ((x & 1) * 0x9908b0dfUL); 49 | } 50 | x = (buffer_[MT_N-1] & 0x80000000UL) | (buffer_[0] & 0x7fffffffUL); 51 | buffer_[MT_N-1] = buffer_[MT_M-1] ^ (x >> 1) ^ ((x & 1) * 0x9908b0dfUL); 52 | index_ = 0; 53 | } 54 | unsigned int y = buffer_[index_++]; 55 | y ^= (y >> 11); 56 | y ^= (y << 7) & 0x9d2c5680UL; 57 | y ^= (y << 15) & 0xefc60000UL; 58 | y ^= (y >> 18); 59 | return y; 60 | } 61 | 62 | sem_t begin_sem1; 63 | sem_t begin_sem2; 64 | sem_t end_sem; 65 | 66 | int X, Y; 67 | int r1, r2; 68 | 69 | void *ThreadFunc1(void *param) { 70 | MersenneTwister random(1); 71 | for (;;) { 72 | sem_wait(&begin_sem1); 73 | // random delay 74 | while (random.Integer() % 8 != 0) { 75 | } 76 | X = 1; 77 | #if USE_CPU_FENCE 78 | asm volatile("mfence" ::: "memory"); // prevent CPU ordering 79 | #else 80 | asm volatile("" ::: "memory"); // prevent compiler ordering 81 | #endif 82 | r1 = Y; 83 | sem_post(&end_sem); 84 | } 85 | return NULL; 86 | } 87 | 88 | void *ThreadFunc2(void *param) { 89 | MersenneTwister random(2); 90 | for (;;) { 91 | sem_wait(&begin_sem2); 92 | // random delay 93 | while (random.Integer() % 8 != 0) { 94 | } 95 | Y = 1; 96 | #if USE_CPU_FENCE 97 | asm volatile("mfence" ::: "memory"); // prevent CPU ordering 98 | #else 99 | asm volatile("" ::: "memory"); // prevent compiler ordering 100 | #endif 101 | r2 = X; 102 | sem_post(&end_sem); 103 | } 104 | return NULL; 105 | } 106 | 107 | int main(int argc, char *argv[]) { 108 | sem_init(&begin_sem1, 0, 0); 109 | sem_init(&begin_sem2, 0, 0); 110 | sem_init(&end_sem, 0, 0); 111 | 112 | pthread_t thread[2]; 113 | pthread_create(&thread[0], NULL, ThreadFunc1, NULL); 114 | pthread_create(&thread[1], NULL, ThreadFunc2, NULL); 115 | 116 | #if USE_SINGLE_PROCESSOR 117 | cpu_set_t cpus; 118 | CPU_ZERO(&cpus); 119 | CPU_SET(0, &cpus); 120 | pthread_setaffinity_np(thread[0], sizeof(cpu_set_t), &cpus); 121 | pthread_setaffinity_np(thread[1], sizeof(cpu_set_t), &cpus); 122 | #endif 123 | 124 | int detected = 0; 125 | for (int i = 1; ; ++i) { 126 | X = 0; 127 | Y = 0; 128 | sem_post(&begin_sem1); 129 | sem_post(&begin_sem2); 130 | sem_wait(&end_sem); 131 | sem_wait(&end_sem); 132 | if (r1 == 0 && r2 == 0) { 133 | detected++; 134 | printf("%d reorders detected after %d iterations\n", detected, i); 135 | } 136 | } 137 | return 0; 138 | } 139 | 140 | -------------------------------------------------------------------------------- /mersenne_twister/Makefile: -------------------------------------------------------------------------------- 1 | main: 2 | g++ -o mersenne_twister -O2 mersenne_twister.cc 3 | -------------------------------------------------------------------------------- /mersenne_twister/mersenne_twister.cc: -------------------------------------------------------------------------------- 1 | #include 2 | #include 3 | using namespace std; 4 | // Mersenne Twister Parameters 5 | #define MT_N 624 6 | #define MT_M 397 7 | 8 | class MersenneTwister { 9 | public: 10 | explicit MersenneTwister(int seed); 11 | unsigned int Integer(); 12 | float PoissonInterval(float rate) { 13 | return -logf(1.0f - Integer() * 2.3283e-10f) * rate; 14 | } 15 | 16 | private: 17 | unsigned int buffer_[MT_N]; 18 | int index_; 19 | }; 20 | 21 | MersenneTwister::MersenneTwister(int seed) { 22 | buffer_[0] = seed; 23 | for (index_ = 1; index_ < MT_N; ++index_) { 24 | buffer_[index_] = (1812433253UL * (buffer_[index_-1] 25 | ^ (buffer_[index_-1] >> 30)) + index_); 26 | } 27 | } 28 | 29 | unsigned int MersenneTwister::Integer() { 30 | if (index_ >= MT_N) { 31 | unsigned int i; 32 | unsigned int x; 33 | for (i = 0; i < MT_N - MT_M; ++i) { 34 | x = (buffer_[i] & 0x80000000UL) | (buffer_[i+1] & 0x7fffffffUL); 35 | buffer_[i] = buffer_[i+MT_M] ^ (x >> 1) ^ ((x & 1) * 0x9908b0dfUL); 36 | } 37 | for (; i < MT_N - 1; ++i) { 38 | x = (buffer_[i] & 0x80000000UL) | (buffer_[i+1] & 0x7fffffffUL); 39 | buffer_[i] = buffer_[i+MT_M-MT_N] ^ (x >> 1) ^ ((x & 1) * 0x9908b0dfUL); 40 | } 41 | x = (buffer_[MT_N-1] & 0x80000000UL) | (buffer_[0] & 0x7fffffffUL); 42 | buffer_[MT_N-1] = buffer_[MT_M-1] ^ (x >> 1) ^ ((x & 1) * 0x9908b0dfUL); 43 | index_ = 0; 44 | } 45 | unsigned int y = buffer_[index_++]; 46 | y ^= (y >> 11); 47 | y ^= (y << 7) & 0x9d2c5680UL; 48 | y ^= (y << 15) & 0xefc60000UL; 49 | y ^= (y >> 18); 50 | return y; 51 | } 52 | 53 | int main(int argc, char *argv[]) { 54 | MersenneTwister prng(1); 55 | int i; 56 | for (i = 0; i < 10; ++i) { 57 | cout << prng.Integer() << endl; 58 | } 59 | cout << endl; 60 | double sum = 0; 61 | for (i = 0; i < 1500; ++i) { 62 | sum += prng.PoissonInterval(40); 63 | } 64 | cout << sum / i << endl; 65 | return 0; 66 | } 67 | -------------------------------------------------------------------------------- /mutex_contention/Makefile: -------------------------------------------------------------------------------- 1 | main: 2 | g++ -o lock_benchmark -O2 lock_benchmark.cc -lpthread -lrt 3 | 4 | -------------------------------------------------------------------------------- /mutex_contention/lock_benchmark.cc: -------------------------------------------------------------------------------- 1 | #include 2 | #include 3 | #include 4 | #include 5 | #include 6 | using std::min; 7 | 8 | typedef long long int uint64_t; 9 | // Mersenne Twister Parameters 10 | #define MT_N 624 11 | #define MT_M 397 12 | 13 | class MersenneTwister { 14 | public: 15 | explicit MersenneTwister(int seed); 16 | unsigned int Integer(); 17 | float PoissonInterval(float rate) { 18 | return -logf(1.0f - Integer() * 2.3283e-10f) * rate; 19 | } 20 | 21 | private: 22 | unsigned int buffer_[MT_N]; 23 | int index_; 24 | }; 25 | 26 | MersenneTwister::MersenneTwister(int seed) { 27 | buffer_[0] = seed; 28 | for (index_ = 1; index_ < MT_N; ++index_) { 29 | buffer_[index_] = (1812433253UL * (buffer_[index_-1] 30 | ^ (buffer_[index_-1] >> 30)) + index_); 31 | } 32 | } 33 | 34 | unsigned int MersenneTwister::Integer() { 35 | if (index_ >= MT_N) { 36 | unsigned int i; 37 | unsigned int x; 38 | for (i = 0; i < MT_N - MT_M; ++i) { 39 | x = (buffer_[i] & 0x80000000UL) | (buffer_[i+1] & 0x7fffffffUL); 40 | buffer_[i] = buffer_[i+MT_M] ^ (x >> 1) ^ ((x & 1) * 0x9908b0dfUL); 41 | } 42 | for (; i < MT_N - 1; ++i) { 43 | x = (buffer_[i] & 0x80000000UL) | (buffer_[i+1] & 0x7fffffffUL); 44 | buffer_[i] = buffer_[i+MT_M-MT_N] ^ (x >> 1) ^ ((x & 1) * 0x9908b0dfUL); 45 | } 46 | x = (buffer_[MT_N-1] & 0x80000000UL) | (buffer_[0] & 0x7fffffffUL); 47 | buffer_[MT_N-1] = buffer_[MT_M-1] ^ (x >> 1) ^ ((x & 1) * 0x9908b0dfUL); 48 | index_ = 0; 49 | } 50 | unsigned int y = buffer_[index_++]; 51 | y ^= (y >> 11); 52 | y ^= (y << 7) & 0x9d2c5680UL; 53 | y ^= (y << 15) & 0xefc60000UL; 54 | y ^= (y >> 18); 55 | return y; 56 | } 57 | 58 | static const int kMaxThreads = 4; 59 | 60 | struct ThreadStats { 61 | uint64_t workdone; 62 | uint64_t iterations; 63 | uint64_t overshoot; 64 | }; 65 | 66 | struct GlobalState { 67 | pthread_mutex_t thread_mutex; 68 | int count; 69 | pthread_mutex_t count_mutex; 70 | pthread_cond_t count_cond; 71 | float secs_per_work_unit; 72 | float time_limit; 73 | float average_unlock_count; 74 | float average_locked_count; 75 | ThreadStats thread_stats[kMaxThreads]; 76 | }; 77 | 78 | GlobalState global_state = {0}; 79 | 80 | struct BenchmarkParams { 81 | int thread_count; 82 | float lock_interval; // In seconds 83 | }; 84 | 85 | BenchmarkParams g_benchmark_params[] = { 86 | // Reference 87 | 1, 10e-3f, // 10 ms 100/s 88 | 89 | // Test 15000 locks per second with multiple threads 90 | 1, 1/15000.0f, 91 | 2, 1/15000.0f, 92 | 3, 1/15000.0f, 93 | 4, 1/15000.0f, 94 | 95 | // Test various lock rates with 2 threads 96 | 2, 10e-9f, // 10 ns 100000000/s 97 | 2, 31.6e-9f, // 31.6 ns 31600000/s 98 | 2, 100e-9f, // 100 ns 10000000/s 99 | 2, 316e-9f, // 316 ns 3160000/s 100 | 2, 1e-6f, // 1 us 1000000/s 101 | 2, 3.16e-6f, // 3.16 us 316000/s 102 | 2, 10e-6f, // 10 us 100000/s 103 | 2, 31.6e-6f, // 31.6 us 31600/s 104 | 2, 100e-6f, // 100 us 10000/s 105 | }; 106 | 107 | void GetMonotonicTime(struct timespec *ts) { 108 | clock_gettime(CLOCK_MONOTONIC, ts); 109 | } 110 | 111 | float GetElapsedTime(struct timespec *before, struct timespec *after) { 112 | double delta_s = after->tv_sec - before->tv_sec; 113 | double delta_ns = after->tv_nsec - before->tv_nsec; 114 | return delta_s + delta_ns * 1e-9; 115 | } 116 | 117 | void* ThreadProc(void *arg) { 118 | // Initialize 119 | int thread_number = *(static_cast(arg)); 120 | MersenneTwister random(thread_number); 121 | struct timespec start, end; 122 | float elapsed_time = 0; 123 | ThreadStats thread_stats = {0}; 124 | int work_units = 0; 125 | 126 | // Indicate ready, wait for start 127 | pthread_mutex_lock(&global_state.count_mutex); 128 | global_state.count++; 129 | pthread_cond_broadcast(&global_state.count_cond); 130 | pthread_mutex_unlock(&global_state.count_mutex); 131 | 132 | pthread_mutex_lock(&global_state.count_mutex); 133 | while (global_state.count != 0) { 134 | pthread_cond_wait(&global_state.count_cond, 135 | &global_state.count_mutex); 136 | } 137 | pthread_mutex_unlock(&global_state.count_mutex); 138 | GetMonotonicTime(&start); 139 | for (;;) { 140 | work_units = static_cast (random.PoissonInterval( 141 | global_state.average_unlock_count) + 0.5f); 142 | for (int i = 0; i < work_units; ++i) { 143 | random.Integer(); 144 | } 145 | thread_stats.workdone += work_units; 146 | 147 | GetMonotonicTime(&end); 148 | elapsed_time = GetElapsedTime(&start, &end); 149 | if (elapsed_time >= global_state.time_limit) { 150 | break; 151 | } 152 | 153 | // Do some work while holding the lock 154 | pthread_mutex_lock(&global_state.thread_mutex); 155 | work_units = static_cast (random.PoissonInterval( 156 | global_state.average_locked_count) + 0.5f); 157 | for (int i = 0; i < work_units; ++i) { 158 | random.Integer(); 159 | } 160 | thread_stats.workdone += work_units; 161 | pthread_mutex_unlock(&global_state.thread_mutex); 162 | 163 | thread_stats.iterations++; 164 | GetMonotonicTime(&end); 165 | elapsed_time = GetElapsedTime(&start, &end); 166 | if (elapsed_time >= global_state.time_limit) { 167 | break; 168 | } 169 | } 170 | 171 | // Estimate the number of work units which went over the time limit 172 | thread_stats.overshoot = min(work_units, 173 | static_cast 174 | ((elapsed_time -global_state.time_limit) / 175 | global_state.secs_per_work_unit)); 176 | global_state.thread_stats[thread_number] = thread_stats; 177 | return NULL; 178 | } 179 | 180 | 181 | float CalcSecsPerWorkUnit() { 182 | MersenneTwister random(1234); 183 | struct timespec start, end; 184 | int count = 100000000; 185 | GetMonotonicTime(&start); 186 | for (int i = 0; i < count; ++i) { 187 | random.Integer(); 188 | } 189 | GetMonotonicTime(&end); 190 | float elapsed_time = GetElapsedTime(&start, &end); 191 | return elapsed_time / count; 192 | } 193 | 194 | int main(int argc, char *argv[]) { 195 | pthread_mutex_init(&global_state.thread_mutex, NULL); 196 | pthread_mutex_init(&global_state.count_mutex, NULL); 197 | global_state.count = 0; 198 | pthread_cond_init(&global_state.count_cond, NULL); 199 | global_state.time_limit = 1.0f; 200 | global_state.secs_per_work_unit = CalcSecsPerWorkUnit(); 201 | printf("secsPerWorkUnit = %e\n", global_state.secs_per_work_unit); 202 | for (int b = 0; b < 203 | sizeof(g_benchmark_params) / sizeof(g_benchmark_params[0]); ++b) { 204 | float avg_work_units_between_locks = g_benchmark_params[b].lock_interval / 205 | global_state.secs_per_work_unit; 206 | int thread_count = g_benchmark_params[b].thread_count; 207 | static const int kSteps = 200; 208 | for (int s = 0; s < kSteps; ++s) { 209 | global_state.count = 0; 210 | global_state.average_locked_count = avg_work_units_between_locks * 211 | s / kSteps; 212 | global_state.average_unlock_count = avg_work_units_between_locks * 213 | (kSteps - s) / kSteps; 214 | pthread_t threads[kMaxThreads]; 215 | int thread_ids[kMaxThreads]; 216 | for (int t = 0; t < thread_count; ++t) { 217 | thread_ids[t] = t; 218 | int rc; 219 | if ((rc = pthread_create(&threads[t], NULL, 220 | ThreadProc, &thread_ids[t]))) { 221 | fprintf(stderr, "error: pthread_create, rc: %d\n", rc); 222 | return -1; 223 | } 224 | 225 | cpu_set_t cpus; 226 | CPU_ZERO(&cpus); 227 | CPU_SET(t, &cpus); 228 | pthread_setaffinity_np(threads[t], sizeof(cpu_set_t), &cpus); 229 | } 230 | 231 | // Wait all the threads are ready 232 | pthread_mutex_lock(&global_state.count_mutex); 233 | while (global_state.count != thread_count) { 234 | pthread_cond_wait(&global_state.count_cond, 235 | &global_state.count_mutex); 236 | } 237 | pthread_mutex_unlock(&global_state.count_mutex); 238 | 239 | // Start threads 240 | pthread_mutex_lock(&global_state.count_mutex); 241 | global_state.count = 0; 242 | pthread_cond_broadcast(&global_state.count_cond); 243 | pthread_mutex_unlock(&global_state.count_mutex); 244 | for (int t = 0; t < thread_count; ++t) { 245 | pthread_join(threads[t], NULL); 246 | } 247 | 248 | // Report 249 | printf("threads=%d ", thread_count); 250 | printf("lockInterval=%e ", g_benchmark_params[b].lock_interval); 251 | printf("lockDuration=%f ", (s * 1.0 / kSteps)); 252 | ThreadStats totals = {0}; 253 | for (int t = 0; t < thread_count; ++t) { 254 | totals.workdone += global_state.thread_stats[t].workdone; 255 | totals.iterations += global_state.thread_stats[t].iterations; 256 | totals.overshoot += global_state.thread_stats[t].overshoot; 257 | } 258 | printf("workDone=%llu ", totals.workdone); 259 | printf("iteratons=%llu ", totals.iterations); 260 | printf("overshoot=%llu \n", totals.overshoot); 261 | } 262 | } 263 | pthread_mutex_destroy(&global_state.thread_mutex); 264 | pthread_mutex_destroy(&global_state.count_mutex); 265 | pthread_cond_destroy(&global_state.count_cond); 266 | return 0; 267 | } 268 | -------------------------------------------------------------------------------- /mutex_contention/plot/analyze_contention.py: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env python 2 | 3 | import numpy as np 4 | import matplotlib.pyplot as plt 5 | import matplotlib 6 | from matplotlib.ticker import FuncFormatter 7 | 8 | def to_percent(y, position): 9 | # Ignore the passed in position. This has the effect of scaling the default 10 | # tick locations. 11 | s = str(100 * y) 12 | 13 | # The percent symbol needs escaping in latex 14 | if matplotlib.rcParams['text.usetex'] == True: 15 | return s + r'$\%$' 16 | else: 17 | return s + '%' 18 | 19 | 20 | work_list = [[] for i in range(5)] 21 | 22 | with open("contention.txt") as file: 23 | for line in file: 24 | fields = [line.split(' ')][0] 25 | thread_id = fields[0].split('=')[1] 26 | workdone = fields[3].split('=')[1] 27 | overshoot = fields[5].split('=')[1] 28 | work = int(workdone) - int(overshoot) 29 | work_list[int(thread_id)].append(work) 30 | 31 | 32 | for i in range(len(work_list[1])): 33 | work_list[2][i] = work_list[2][i] * 1.0 / work_list[1][i] 34 | work_list[3][i] = work_list[3][i] * 1.0 / work_list[1][i] 35 | work_list[4][i] = work_list[4][i] * 1.0 / work_list[1][i] 36 | work_list[1][i] = work_list[1][i] * 1.0 / work_list[1][i] 37 | 38 | x = [] 39 | for i in range(len(work_list[1])): 40 | x.append(i * 0.005) 41 | 42 | fig, ax = plt.subplots() 43 | 44 | line1 = ax.plot(np.array(x), np.array(work_list[1]), linewidth=2) 45 | line2 = ax.plot(np.array(x), np.array(work_list[2]), linewidth=2) 46 | line3 = ax.plot(np.array(x), np.array(work_list[3]), linewidth=2) 47 | line4 = ax.plot(np.array(x), np.array(work_list[4]), linewidth=2) 48 | ax.legend( (line1[0], line2[0], line3[0], line4[0]), 49 | ('thread1', 'thread2', 'thread3', 'thread4')) 50 | 51 | formatter = FuncFormatter(to_percent) 52 | ax.xaxis.set_major_formatter(formatter) 53 | ax.yaxis.tick_right() 54 | ax.grid(True) 55 | plt.show() 56 | 57 | -------------------------------------------------------------------------------- /mutex_contention/plot/analyze_frequency.py: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env python 2 | 3 | import numpy as np 4 | import matplotlib.pyplot as plt 5 | import matplotlib 6 | from matplotlib.ticker import FuncFormatter 7 | 8 | def to_percent(y, position): 9 | # Ignore the passed in position. This has the effect of scaling the default 10 | # tick locations. 11 | s = str(100 * y) 12 | 13 | # The percent symbol needs escaping in latex 14 | if matplotlib.rcParams['text.usetex'] == True: 15 | return s + r'$\%$' 16 | else: 17 | return s + '%' 18 | 19 | map = { 20 | '1.000000e-08' : 0, 21 | '3.160000e-08': 1, 22 | '1.000000e-07': 2, 23 | '3.160000e-07': 3, 24 | '1.000000e-06': 4, 25 | '3.160000e-06': 5, 26 | '1.000000e-05': 6, 27 | '3.160000e-05': 7, 28 | '1.000000e-04': 8, 29 | } 30 | 31 | work_list = [[] for i in range(len(map))] 32 | 33 | with open("lock_ben.txt") as file: 34 | for line in file: 35 | fields = [line.split(' ')][0] 36 | lock_interval = fields[1].split('=')[1] 37 | workdone = fields[3].split('=')[1] 38 | overshoot = fields[5].split('=')[1] 39 | work = int(workdone) - int(overshoot) 40 | work_list[map[lock_interval]].append(work) 41 | 42 | reference = [] 43 | with open("reference.txt") as file: 44 | for line in file: 45 | fields = [line.split(' ')][0] 46 | workdone = fields[3].split('=')[1] 47 | overshoot = fields[5].split('=')[1] 48 | work = int(workdone) - int(overshoot) 49 | reference.append(work) 50 | 51 | 52 | for j in range(len(map)): 53 | for i in range(len(work_list[0])): 54 | work_list[j][i] = work_list[j][i] * 1.0 / reference[i] 55 | 56 | 57 | x = [] 58 | for i in range(len(work_list[1])): 59 | x.append(i * 0.005) 60 | 61 | fig, ax = plt.subplots() 62 | 63 | line_list = [] 64 | for i in range(len(map)): 65 | line_list.append(ax.plot(np.array(x), np.array(work_list[i]), linewidth=2)) 66 | 67 | ax.legend((line_list[0][0], line_list[1][0], line_list[2][0], 68 | line_list[3][0], line_list[4][0], line_list[5][0], 69 | line_list[6][0], line_list[7][0], line_list[8][0]), 70 | ('10 ns', '31.6 ns', '100 ns', 71 | '316 ns', '1 us', '3.16 us', 72 | '10 us', '31.6 us', '100 us')) 73 | 74 | formatter = FuncFormatter(to_percent) 75 | ax.xaxis.set_major_formatter(formatter) 76 | ax.yaxis.tick_right() 77 | 78 | x_ticks= [0.1 * i for i in range(11)] 79 | ax.xaxis.set_ticks(x_ticks) 80 | ax.grid(True, which='both') 81 | plt.show() 82 | 83 | -------------------------------------------------------------------------------- /mutex_contention/plot/contention.txt: -------------------------------------------------------------------------------- 1 | threads=1 lockInterval=6.666667e-05 lockDuration=0.000000 workDone=166889010 iteratons=15150 overshoot=2840 2 | threads=1 lockInterval=6.666667e-05 lockDuration=0.005000 workDone=166129773 iteratons=14678 overshoot=139 3 | threads=1 lockInterval=6.666667e-05 lockDuration=0.010000 workDone=166991309 iteratons=15155 overshoot=2482 4 | threads=1 lockInterval=6.666667e-05 lockDuration=0.015000 workDone=167794670 iteratons=14953 overshoot=79 5 | threads=1 lockInterval=6.666667e-05 lockDuration=0.020000 workDone=168780767 iteratons=15404 overshoot=13625 6 | threads=1 lockInterval=6.666667e-05 lockDuration=0.025000 workDone=168421264 iteratons=15227 overshoot=2562 7 | threads=1 lockInterval=6.666667e-05 lockDuration=0.030000 workDone=168766717 iteratons=15233 overshoot=317 8 | threads=1 lockInterval=6.666667e-05 lockDuration=0.035000 workDone=168309808 iteratons=15312 overshoot=2800 9 | threads=1 lockInterval=6.666667e-05 lockDuration=0.040000 workDone=167522582 iteratons=15119 overshoot=24927 10 | threads=1 lockInterval=6.666667e-05 lockDuration=0.045000 workDone=165078761 iteratons=14878 overshoot=357 11 | threads=1 lockInterval=6.666667e-05 lockDuration=0.050000 workDone=163358250 iteratons=14698 overshoot=39 12 | threads=1 lockInterval=6.666667e-05 lockDuration=0.055000 workDone=167519160 iteratons=15200 overshoot=17240 13 | threads=1 lockInterval=6.666667e-05 lockDuration=0.060000 workDone=168183793 iteratons=15016 overshoot=15016 14 | threads=1 lockInterval=6.666667e-05 lockDuration=0.065000 workDone=164124856 iteratons=14819 overshoot=6038 15 | threads=1 lockInterval=6.666667e-05 lockDuration=0.070000 workDone=165698691 iteratons=14963 overshoot=7905 16 | threads=1 lockInterval=6.666667e-05 lockDuration=0.075000 workDone=166310514 iteratons=14887 overshoot=9712 17 | threads=1 lockInterval=6.666667e-05 lockDuration=0.080000 workDone=165786781 iteratons=14835 overshoot=1489 18 | threads=1 lockInterval=6.666667e-05 lockDuration=0.085000 workDone=162929213 iteratons=14662 overshoot=19147 19 | threads=1 lockInterval=6.666667e-05 lockDuration=0.090000 workDone=169637392 iteratons=15373 overshoot=2244 20 | threads=1 lockInterval=6.666667e-05 lockDuration=0.095000 workDone=169533136 iteratons=15255 overshoot=1827 21 | threads=1 lockInterval=6.666667e-05 lockDuration=0.100000 workDone=169123176 iteratons=15239 overshoot=476 22 | threads=1 lockInterval=6.666667e-05 lockDuration=0.105000 workDone=169324278 iteratons=15167 overshoot=5064 23 | threads=1 lockInterval=6.666667e-05 lockDuration=0.110000 workDone=168274135 iteratons=15115 overshoot=10270 24 | threads=1 lockInterval=6.666667e-05 lockDuration=0.115000 workDone=167056820 iteratons=14976 overshoot=6117 25 | threads=1 lockInterval=6.666667e-05 lockDuration=0.120000 workDone=168912090 iteratons=15341 overshoot=79 26 | threads=1 lockInterval=6.666667e-05 lockDuration=0.125000 workDone=168645364 iteratons=15151 overshoot=10388 27 | threads=1 lockInterval=6.666667e-05 lockDuration=0.130000 workDone=167598369 iteratons=15068 overshoot=10626 28 | threads=1 lockInterval=6.666667e-05 lockDuration=0.135000 workDone=168240334 iteratons=15236 overshoot=99 29 | threads=1 lockInterval=6.666667e-05 lockDuration=0.140000 workDone=158647563 iteratons=14241 overshoot=2025 30 | threads=1 lockInterval=6.666667e-05 lockDuration=0.145000 workDone=154458276 iteratons=13916 overshoot=1152 31 | threads=1 lockInterval=6.666667e-05 lockDuration=0.150000 workDone=153291398 iteratons=13898 overshoot=20557 32 | threads=1 lockInterval=6.666667e-05 lockDuration=0.155000 workDone=153507083 iteratons=13821 overshoot=17598 33 | threads=1 lockInterval=6.666667e-05 lockDuration=0.160000 workDone=155284859 iteratons=13974 overshoot=59 34 | threads=1 lockInterval=6.666667e-05 lockDuration=0.165000 workDone=155821334 iteratons=13984 overshoot=2860 35 | threads=1 lockInterval=6.666667e-05 lockDuration=0.170000 workDone=158804680 iteratons=14288 overshoot=6097 36 | threads=1 lockInterval=6.666667e-05 lockDuration=0.175000 workDone=168491204 iteratons=15072 overshoot=10686 37 | threads=1 lockInterval=6.666667e-05 lockDuration=0.180000 workDone=170087268 iteratons=15405 overshoot=297 38 | threads=1 lockInterval=6.666667e-05 lockDuration=0.185000 workDone=167068562 iteratons=14982 overshoot=7190 39 | threads=1 lockInterval=6.666667e-05 lockDuration=0.190000 workDone=166439459 iteratons=15140 overshoot=8223 40 | threads=1 lockInterval=6.666667e-05 lockDuration=0.195000 workDone=168483583 iteratons=15133 overshoot=10050 41 | threads=1 lockInterval=6.666667e-05 lockDuration=0.200000 workDone=168444036 iteratons=15225 overshoot=9951 42 | threads=1 lockInterval=6.666667e-05 lockDuration=0.205000 workDone=169528347 iteratons=15134 overshoot=8123 43 | threads=1 lockInterval=6.666667e-05 lockDuration=0.210000 workDone=170588103 iteratons=15336 overshoot=16088 44 | threads=1 lockInterval=6.666667e-05 lockDuration=0.215000 workDone=170539447 iteratons=15404 overshoot=12116 45 | threads=1 lockInterval=6.666667e-05 lockDuration=0.220000 workDone=170222368 iteratons=15333 overshoot=6554 46 | threads=1 lockInterval=6.666667e-05 lockDuration=0.225000 workDone=170580084 iteratons=15330 overshoot=20498 47 | threads=1 lockInterval=6.666667e-05 lockDuration=0.230000 workDone=170720872 iteratons=15399 overshoot=8898 48 | threads=1 lockInterval=6.666667e-05 lockDuration=0.235000 workDone=170795386 iteratons=15257 overshoot=13526 49 | threads=1 lockInterval=6.666667e-05 lockDuration=0.240000 workDone=170706683 iteratons=15455 overshoot=377 50 | threads=1 lockInterval=6.666667e-05 lockDuration=0.245000 workDone=170498631 iteratons=15251 overshoot=5839 51 | threads=1 lockInterval=6.666667e-05 lockDuration=0.250000 workDone=170536995 iteratons=15325 overshoot=17677 52 | threads=1 lockInterval=6.666667e-05 lockDuration=0.255000 workDone=170661380 iteratons=15491 overshoot=8441 53 | threads=1 lockInterval=6.666667e-05 lockDuration=0.260000 workDone=169445739 iteratons=15133 overshoot=1489 54 | threads=1 lockInterval=6.666667e-05 lockDuration=0.265000 workDone=170938590 iteratons=15312 overshoot=1966 55 | threads=1 lockInterval=6.666667e-05 lockDuration=0.270000 workDone=169944612 iteratons=15368 overshoot=4588 56 | threads=1 lockInterval=6.666667e-05 lockDuration=0.275000 workDone=169874337 iteratons=15366 overshoot=0 57 | threads=1 lockInterval=6.666667e-05 lockDuration=0.280000 workDone=170369099 iteratons=15427 overshoot=11381 58 | threads=1 lockInterval=6.666667e-05 lockDuration=0.285000 workDone=170686779 iteratons=15443 overshoot=3317 59 | threads=1 lockInterval=6.666667e-05 lockDuration=0.290000 workDone=170864343 iteratons=15563 overshoot=2959 60 | threads=1 lockInterval=6.666667e-05 lockDuration=0.295000 workDone=171710437 iteratons=15653 overshoot=2423 61 | threads=1 lockInterval=6.666667e-05 lockDuration=0.300000 workDone=170785731 iteratons=15476 overshoot=11460 62 | threads=1 lockInterval=6.666667e-05 lockDuration=0.305000 workDone=170591356 iteratons=15544 overshoot=6336 63 | threads=1 lockInterval=6.666667e-05 lockDuration=0.310000 workDone=167962325 iteratons=15015 overshoot=6475 64 | threads=1 lockInterval=6.666667e-05 lockDuration=0.315000 workDone=169980996 iteratons=15327 overshoot=1271 65 | threads=1 lockInterval=6.666667e-05 lockDuration=0.320000 workDone=170969909 iteratons=15479 overshoot=2820 66 | threads=1 lockInterval=6.666667e-05 lockDuration=0.325000 workDone=170805688 iteratons=15446 overshoot=893 67 | threads=1 lockInterval=6.666667e-05 lockDuration=0.330000 workDone=171406079 iteratons=15459 overshoot=3257 68 | threads=1 lockInterval=6.666667e-05 lockDuration=0.335000 workDone=170822397 iteratons=15389 overshoot=4051 69 | threads=1 lockInterval=6.666667e-05 lockDuration=0.340000 workDone=170510918 iteratons=15447 overshoot=4369 70 | threads=1 lockInterval=6.666667e-05 lockDuration=0.345000 workDone=171051017 iteratons=15351 overshoot=3297 71 | threads=1 lockInterval=6.666667e-05 lockDuration=0.350000 workDone=170401759 iteratons=15274 overshoot=12195 72 | threads=1 lockInterval=6.666667e-05 lockDuration=0.355000 workDone=169115647 iteratons=15247 overshoot=1449 73 | threads=1 lockInterval=6.666667e-05 lockDuration=0.360000 workDone=170888354 iteratons=15388 overshoot=10904 74 | threads=1 lockInterval=6.666667e-05 lockDuration=0.365000 workDone=171139600 iteratons=15330 overshoot=1171 75 | threads=1 lockInterval=6.666667e-05 lockDuration=0.370000 workDone=170902009 iteratons=15411 overshoot=15612 76 | threads=1 lockInterval=6.666667e-05 lockDuration=0.375000 workDone=164910363 iteratons=14762 overshoot=1529 77 | threads=1 lockInterval=6.666667e-05 lockDuration=0.380000 workDone=161461626 iteratons=14301 overshoot=1112 78 | threads=1 lockInterval=6.666667e-05 lockDuration=0.385000 workDone=162768611 iteratons=14777 overshoot=913 79 | threads=1 lockInterval=6.666667e-05 lockDuration=0.390000 workDone=159396530 iteratons=14333 overshoot=3555 80 | threads=1 lockInterval=6.666667e-05 lockDuration=0.395000 workDone=161588721 iteratons=14554 overshoot=5780 81 | threads=1 lockInterval=6.666667e-05 lockDuration=0.400000 workDone=163239862 iteratons=14626 overshoot=854 82 | threads=1 lockInterval=6.666667e-05 lockDuration=0.405000 workDone=163233847 iteratons=14811 overshoot=3118 83 | threads=1 lockInterval=6.666667e-05 lockDuration=0.410000 workDone=162201355 iteratons=14609 overshoot=5637 84 | threads=1 lockInterval=6.666667e-05 lockDuration=0.415000 workDone=169960091 iteratons=15078 overshoot=496 85 | threads=1 lockInterval=6.666667e-05 lockDuration=0.420000 workDone=169506449 iteratons=15250 overshoot=2165 86 | threads=1 lockInterval=6.666667e-05 lockDuration=0.425000 workDone=170726205 iteratons=15309 overshoot=5422 87 | threads=1 lockInterval=6.666667e-05 lockDuration=0.430000 workDone=161256871 iteratons=14465 overshoot=5680 88 | threads=1 lockInterval=6.666667e-05 lockDuration=0.435000 workDone=163272271 iteratons=14771 overshoot=8243 89 | threads=1 lockInterval=6.666667e-05 lockDuration=0.440000 workDone=163273555 iteratons=14773 overshoot=7925 90 | threads=1 lockInterval=6.666667e-05 lockDuration=0.445000 workDone=163737309 iteratons=14773 overshoot=178 91 | threads=1 lockInterval=6.666667e-05 lockDuration=0.450000 workDone=168990380 iteratons=15241 overshoot=6912 92 | threads=1 lockInterval=6.666667e-05 lockDuration=0.455000 workDone=172412972 iteratons=15450 overshoot=1231 93 | threads=1 lockInterval=6.666667e-05 lockDuration=0.460000 workDone=172411269 iteratons=15434 overshoot=6514 94 | threads=1 lockInterval=6.666667e-05 lockDuration=0.465000 workDone=172144073 iteratons=15556 overshoot=8421 95 | threads=1 lockInterval=6.666667e-05 lockDuration=0.470000 workDone=171881321 iteratons=15561 overshoot=2423 96 | threads=1 lockInterval=6.666667e-05 lockDuration=0.475000 workDone=171403537 iteratons=15480 overshoot=3058 97 | threads=1 lockInterval=6.666667e-05 lockDuration=0.480000 workDone=172280048 iteratons=15542 overshoot=14241 98 | threads=1 lockInterval=6.666667e-05 lockDuration=0.485000 workDone=170014614 iteratons=15331 overshoot=1509 99 | threads=1 lockInterval=6.666667e-05 lockDuration=0.490000 workDone=171235757 iteratons=15272 overshoot=2721 100 | threads=1 lockInterval=6.666667e-05 lockDuration=0.495000 workDone=170377691 iteratons=15236 overshoot=2105 101 | threads=1 lockInterval=6.666667e-05 lockDuration=0.500000 workDone=172234469 iteratons=15655 overshoot=9752 102 | threads=1 lockInterval=6.666667e-05 lockDuration=0.505000 workDone=172171122 iteratons=15355 overshoot=258 103 | threads=1 lockInterval=6.666667e-05 lockDuration=0.510000 workDone=172400112 iteratons=15386 overshoot=1152 104 | threads=1 lockInterval=6.666667e-05 lockDuration=0.515000 workDone=172124067 iteratons=15616 overshoot=576 105 | threads=1 lockInterval=6.666667e-05 lockDuration=0.520000 workDone=172349004 iteratons=15584 overshoot=377 106 | threads=1 lockInterval=6.666667e-05 lockDuration=0.525000 workDone=171744080 iteratons=15571 overshoot=873 107 | threads=1 lockInterval=6.666667e-05 lockDuration=0.530000 workDone=169476025 iteratons=15335 overshoot=2919 108 | threads=1 lockInterval=6.666667e-05 lockDuration=0.535000 workDone=172322778 iteratons=15699 overshoot=6992 109 | threads=1 lockInterval=6.666667e-05 lockDuration=0.540000 workDone=172376286 iteratons=15321 overshoot=734 110 | threads=1 lockInterval=6.666667e-05 lockDuration=0.545000 workDone=170719553 iteratons=15305 overshoot=3217 111 | threads=1 lockInterval=6.666667e-05 lockDuration=0.550000 workDone=169895285 iteratons=15277 overshoot=417 112 | threads=1 lockInterval=6.666667e-05 lockDuration=0.555000 workDone=171051347 iteratons=15409 overshoot=576 113 | threads=1 lockInterval=6.666667e-05 lockDuration=0.560000 workDone=172450221 iteratons=15632 overshoot=2204 114 | threads=1 lockInterval=6.666667e-05 lockDuration=0.565000 workDone=150230015 iteratons=13573 overshoot=2284 115 | threads=1 lockInterval=6.666667e-05 lockDuration=0.570000 workDone=172082654 iteratons=15429 overshoot=4925 116 | threads=1 lockInterval=6.666667e-05 lockDuration=0.575000 workDone=170764323 iteratons=15437 overshoot=2264 117 | threads=1 lockInterval=6.666667e-05 lockDuration=0.580000 workDone=169750844 iteratons=15579 overshoot=3654 118 | threads=1 lockInterval=6.666667e-05 lockDuration=0.585000 workDone=170887094 iteratons=15301 overshoot=1847 119 | threads=1 lockInterval=6.666667e-05 lockDuration=0.590000 workDone=172493148 iteratons=15493 overshoot=12076 120 | threads=1 lockInterval=6.666667e-05 lockDuration=0.595000 workDone=172321989 iteratons=15573 overshoot=3714 121 | threads=1 lockInterval=6.666667e-05 lockDuration=0.600000 workDone=172759582 iteratons=15547 overshoot=4051 122 | threads=1 lockInterval=6.666667e-05 lockDuration=0.605000 workDone=172697308 iteratons=15544 overshoot=2701 123 | threads=1 lockInterval=6.666667e-05 lockDuration=0.610000 workDone=172485914 iteratons=15524 overshoot=2045 124 | threads=1 lockInterval=6.666667e-05 lockDuration=0.615000 workDone=172219607 iteratons=15598 overshoot=4568 125 | threads=1 lockInterval=6.666667e-05 lockDuration=0.620000 workDone=172576400 iteratons=15486 overshoot=1032 126 | threads=1 lockInterval=6.666667e-05 lockDuration=0.625000 workDone=172669246 iteratons=15433 overshoot=1608 127 | threads=1 lockInterval=6.666667e-05 lockDuration=0.630000 workDone=172435012 iteratons=15642 overshoot=1150 128 | threads=1 lockInterval=6.666667e-05 lockDuration=0.635000 workDone=172403704 iteratons=15432 overshoot=1747 129 | threads=1 lockInterval=6.666667e-05 lockDuration=0.640000 workDone=172783726 iteratons=15516 overshoot=11381 130 | threads=1 lockInterval=6.666667e-05 lockDuration=0.645000 workDone=172631210 iteratons=15704 overshoot=2403 131 | threads=1 lockInterval=6.666667e-05 lockDuration=0.650000 workDone=172857306 iteratons=15475 overshoot=1390 132 | threads=1 lockInterval=6.666667e-05 lockDuration=0.655000 workDone=172698707 iteratons=15526 overshoot=1549 133 | threads=1 lockInterval=6.666667e-05 lockDuration=0.660000 workDone=172863804 iteratons=15469 overshoot=5402 134 | threads=1 lockInterval=6.666667e-05 lockDuration=0.665000 workDone=172768818 iteratons=15644 overshoot=3932 135 | threads=1 lockInterval=6.666667e-05 lockDuration=0.670000 workDone=172769074 iteratons=15606 overshoot=1708 136 | threads=1 lockInterval=6.666667e-05 lockDuration=0.675000 workDone=173196927 iteratons=15573 overshoot=15194 137 | threads=1 lockInterval=6.666667e-05 lockDuration=0.680000 workDone=172598348 iteratons=15571 overshoot=1449 138 | threads=1 lockInterval=6.666667e-05 lockDuration=0.685000 workDone=172743976 iteratons=15569 overshoot=3853 139 | threads=1 lockInterval=6.666667e-05 lockDuration=0.690000 workDone=171579651 iteratons=15348 overshoot=7945 140 | threads=1 lockInterval=6.666667e-05 lockDuration=0.695000 workDone=172685122 iteratons=15570 overshoot=1668 141 | threads=1 lockInterval=6.666667e-05 lockDuration=0.700000 workDone=172732117 iteratons=15625 overshoot=496 142 | threads=1 lockInterval=6.666667e-05 lockDuration=0.705000 workDone=171710598 iteratons=15573 overshoot=15135 143 | threads=1 lockInterval=6.666667e-05 lockDuration=0.710000 workDone=168351766 iteratons=15411 overshoot=2602 144 | threads=1 lockInterval=6.666667e-05 lockDuration=0.715000 workDone=172822899 iteratons=15652 overshoot=4012 145 | threads=1 lockInterval=6.666667e-05 lockDuration=0.720000 workDone=173094359 iteratons=15764 overshoot=7210 146 | threads=1 lockInterval=6.666667e-05 lockDuration=0.725000 workDone=173065104 iteratons=15709 overshoot=9295 147 | threads=1 lockInterval=6.666667e-05 lockDuration=0.730000 workDone=172787513 iteratons=15640 overshoot=3317 148 | threads=1 lockInterval=6.666667e-05 lockDuration=0.735000 workDone=172315171 iteratons=15482 overshoot=1231 149 | threads=1 lockInterval=6.666667e-05 lockDuration=0.740000 workDone=172906356 iteratons=15517 overshoot=794 150 | threads=1 lockInterval=6.666667e-05 lockDuration=0.745000 workDone=172404565 iteratons=15584 overshoot=1410 151 | threads=1 lockInterval=6.666667e-05 lockDuration=0.750000 workDone=172951839 iteratons=15546 overshoot=5303 152 | threads=1 lockInterval=6.666667e-05 lockDuration=0.755000 workDone=166295431 iteratons=14869 overshoot=10845 153 | threads=1 lockInterval=6.666667e-05 lockDuration=0.760000 workDone=161706512 iteratons=14579 overshoot=12493 154 | threads=1 lockInterval=6.666667e-05 lockDuration=0.765000 workDone=163374922 iteratons=14535 overshoot=1211 155 | threads=1 lockInterval=6.666667e-05 lockDuration=0.770000 workDone=162451697 iteratons=14664 overshoot=1449 156 | threads=1 lockInterval=6.666667e-05 lockDuration=0.775000 workDone=162685575 iteratons=14602 overshoot=99 157 | threads=1 lockInterval=6.666667e-05 lockDuration=0.780000 workDone=163820724 iteratons=14712 overshoot=7349 158 | threads=1 lockInterval=6.666667e-05 lockDuration=0.785000 workDone=164224615 iteratons=14807 overshoot=1708 159 | threads=1 lockInterval=6.666667e-05 lockDuration=0.790000 workDone=163988299 iteratons=14699 overshoot=2045 160 | threads=1 lockInterval=6.666667e-05 lockDuration=0.795000 workDone=164264652 iteratons=14638 overshoot=9355 161 | threads=1 lockInterval=6.666667e-05 lockDuration=0.800000 workDone=165034967 iteratons=14936 overshoot=9436 162 | threads=1 lockInterval=6.666667e-05 lockDuration=0.805000 workDone=170749124 iteratons=15327 overshoot=18770 163 | threads=1 lockInterval=6.666667e-05 lockDuration=0.810000 workDone=169732922 iteratons=15436 overshoot=1628 164 | threads=1 lockInterval=6.666667e-05 lockDuration=0.815000 workDone=160871395 iteratons=14350 overshoot=2820 165 | threads=1 lockInterval=6.666667e-05 lockDuration=0.820000 workDone=163996545 iteratons=14682 overshoot=695 166 | threads=1 lockInterval=6.666667e-05 lockDuration=0.825000 workDone=164321623 iteratons=14797 overshoot=9792 167 | threads=1 lockInterval=6.666667e-05 lockDuration=0.830000 workDone=164309035 iteratons=14684 overshoot=2820 168 | threads=1 lockInterval=6.666667e-05 lockDuration=0.835000 workDone=164080454 iteratons=14694 overshoot=12732 169 | threads=1 lockInterval=6.666667e-05 lockDuration=0.840000 workDone=164379071 iteratons=14671 overshoot=5323 170 | threads=1 lockInterval=6.666667e-05 lockDuration=0.845000 workDone=163172454 iteratons=14728 overshoot=27787 171 | threads=1 lockInterval=6.666667e-05 lockDuration=0.850000 workDone=163365080 iteratons=14819 overshoot=16227 172 | threads=1 lockInterval=6.666667e-05 lockDuration=0.855000 workDone=164743325 iteratons=14904 overshoot=119 173 | threads=1 lockInterval=6.666667e-05 lockDuration=0.860000 workDone=164636755 iteratons=14775 overshoot=13844 174 | threads=1 lockInterval=6.666667e-05 lockDuration=0.865000 workDone=164530386 iteratons=14758 overshoot=16009 175 | threads=1 lockInterval=6.666667e-05 lockDuration=0.870000 workDone=164529206 iteratons=14914 overshoot=9653 176 | threads=1 lockInterval=6.666667e-05 lockDuration=0.875000 workDone=165175290 iteratons=14776 overshoot=17936 177 | threads=1 lockInterval=6.666667e-05 lockDuration=0.880000 workDone=169316542 iteratons=15296 overshoot=74 178 | threads=1 lockInterval=6.666667e-05 lockDuration=0.885000 workDone=171573459 iteratons=15365 overshoot=4508 179 | threads=1 lockInterval=6.666667e-05 lockDuration=0.890000 workDone=162849463 iteratons=14599 overshoot=873 180 | threads=1 lockInterval=6.666667e-05 lockDuration=0.895000 workDone=165041767 iteratons=14816 overshoot=1747 181 | threads=1 lockInterval=6.666667e-05 lockDuration=0.900000 workDone=165076114 iteratons=14838 overshoot=655 182 | threads=1 lockInterval=6.666667e-05 lockDuration=0.905000 workDone=165242710 iteratons=14868 overshoot=2323 183 | threads=1 lockInterval=6.666667e-05 lockDuration=0.910000 workDone=164507618 iteratons=14883 overshoot=42228 184 | threads=1 lockInterval=6.666667e-05 lockDuration=0.915000 workDone=164534490 iteratons=14776 overshoot=3595 185 | threads=1 lockInterval=6.666667e-05 lockDuration=0.920000 workDone=165212351 iteratons=14800 overshoot=1648 186 | threads=1 lockInterval=6.666667e-05 lockDuration=0.925000 workDone=165049715 iteratons=14851 overshoot=11083 187 | threads=1 lockInterval=6.666667e-05 lockDuration=0.930000 workDone=164673333 iteratons=14999 overshoot=8759 188 | threads=1 lockInterval=6.666667e-05 lockDuration=0.935000 workDone=164945996 iteratons=14862 overshoot=178 189 | threads=1 lockInterval=6.666667e-05 lockDuration=0.940000 workDone=160344455 iteratons=14323 overshoot=10269 190 | threads=1 lockInterval=6.666667e-05 lockDuration=0.945000 workDone=164599233 iteratons=14950 overshoot=4508 191 | threads=1 lockInterval=6.666667e-05 lockDuration=0.950000 workDone=162808612 iteratons=14679 overshoot=14916 192 | threads=1 lockInterval=6.666667e-05 lockDuration=0.955000 workDone=168667047 iteratons=15277 overshoot=25642 193 | threads=1 lockInterval=6.666667e-05 lockDuration=0.960000 workDone=168300909 iteratons=15162 overshoot=13586 194 | threads=1 lockInterval=6.666667e-05 lockDuration=0.965000 workDone=162547221 iteratons=14661 overshoot=1966 195 | threads=1 lockInterval=6.666667e-05 lockDuration=0.970000 workDone=164919489 iteratons=14998 overshoot=873 196 | threads=1 lockInterval=6.666667e-05 lockDuration=0.975000 workDone=164160375 iteratons=14888 overshoot=24133 197 | threads=1 lockInterval=6.666667e-05 lockDuration=0.980000 workDone=164489552 iteratons=14995 overshoot=39367 198 | threads=1 lockInterval=6.666667e-05 lockDuration=0.985000 workDone=164193730 iteratons=14750 overshoot=9911 199 | threads=1 lockInterval=6.666667e-05 lockDuration=0.990000 workDone=163364334 iteratons=14864 overshoot=2125 200 | threads=1 lockInterval=6.666667e-05 lockDuration=0.995000 workDone=163567596 iteratons=14487 overshoot=3833 201 | threads=2 lockInterval=6.666667e-05 lockDuration=0.000000 workDone=320497094 iteratons=28800 overshoot=12711 202 | threads=2 lockInterval=6.666667e-05 lockDuration=0.005000 workDone=322000184 iteratons=28573 overshoot=21694 203 | threads=2 lockInterval=6.666667e-05 lockDuration=0.010000 workDone=325198560 iteratons=29302 overshoot=13823 204 | threads=2 lockInterval=6.666667e-05 lockDuration=0.015000 workDone=330377125 iteratons=29581 overshoot=34163 205 | threads=2 lockInterval=6.666667e-05 lockDuration=0.020000 workDone=329863417 iteratons=29852 overshoot=21212 206 | threads=2 lockInterval=6.666667e-05 lockDuration=0.025000 workDone=328063976 iteratons=29751 overshoot=24490 207 | threads=2 lockInterval=6.666667e-05 lockDuration=0.030000 workDone=328946621 iteratons=29651 overshoot=3455 208 | threads=2 lockInterval=6.666667e-05 lockDuration=0.035000 workDone=328737235 iteratons=29757 overshoot=25979 209 | threads=2 lockInterval=6.666667e-05 lockDuration=0.040000 workDone=318297381 iteratons=28572 overshoot=8897 210 | threads=2 lockInterval=6.666667e-05 lockDuration=0.045000 workDone=319268908 iteratons=28684 overshoot=37202 211 | threads=2 lockInterval=6.666667e-05 lockDuration=0.050000 workDone=317999299 iteratons=28593 overshoot=15770 212 | threads=2 lockInterval=6.666667e-05 lockDuration=0.055000 workDone=325872538 iteratons=29588 overshoot=5064 213 | threads=2 lockInterval=6.666667e-05 lockDuration=0.060000 workDone=324957313 iteratons=28785 overshoot=17757 214 | threads=2 lockInterval=6.666667e-05 lockDuration=0.065000 workDone=322954053 iteratons=29129 overshoot=2482 215 | threads=2 lockInterval=6.666667e-05 lockDuration=0.070000 workDone=319020869 iteratons=28728 overshoot=7507 216 | threads=2 lockInterval=6.666667e-05 lockDuration=0.075000 workDone=316540921 iteratons=28588 overshoot=35275 217 | threads=2 lockInterval=6.666667e-05 lockDuration=0.080000 workDone=317758805 iteratons=28368 overshoot=37122 218 | threads=2 lockInterval=6.666667e-05 lockDuration=0.085000 workDone=324822155 iteratons=29113 overshoot=12076 219 | threads=2 lockInterval=6.666667e-05 lockDuration=0.090000 workDone=324743279 iteratons=29361 overshoot=22940 220 | threads=2 lockInterval=6.666667e-05 lockDuration=0.095000 workDone=324111275 iteratons=29371 overshoot=11201 221 | threads=2 lockInterval=6.666667e-05 lockDuration=0.100000 workDone=316999058 iteratons=28666 overshoot=51319 222 | threads=2 lockInterval=6.666667e-05 lockDuration=0.105000 workDone=321815127 iteratons=29187 overshoot=16466 223 | threads=2 lockInterval=6.666667e-05 lockDuration=0.110000 workDone=323241491 iteratons=28872 overshoot=18332 224 | threads=2 lockInterval=6.666667e-05 lockDuration=0.115000 workDone=319154701 iteratons=28886 overshoot=28145 225 | threads=2 lockInterval=6.666667e-05 lockDuration=0.120000 workDone=321904409 iteratons=29306 overshoot=2410 226 | threads=2 lockInterval=6.666667e-05 lockDuration=0.125000 workDone=321186181 iteratons=28813 overshoot=23238 227 | threads=2 lockInterval=6.666667e-05 lockDuration=0.130000 workDone=283938693 iteratons=25383 overshoot=14638 228 | threads=2 lockInterval=6.666667e-05 lockDuration=0.135000 workDone=305411614 iteratons=27544 overshoot=49934 229 | threads=2 lockInterval=6.666667e-05 lockDuration=0.140000 workDone=305406258 iteratons=27615 overshoot=30677 230 | threads=2 lockInterval=6.666667e-05 lockDuration=0.145000 workDone=304765006 iteratons=27344 overshoot=4488 231 | threads=2 lockInterval=6.666667e-05 lockDuration=0.150000 workDone=304957802 iteratons=27436 overshoot=12016 232 | threads=2 lockInterval=6.666667e-05 lockDuration=0.155000 workDone=304497764 iteratons=27547 overshoot=20835 233 | threads=2 lockInterval=6.666667e-05 lockDuration=0.160000 workDone=305121162 iteratons=27495 overshoot=17101 234 | threads=2 lockInterval=6.666667e-05 lockDuration=0.165000 workDone=317169997 iteratons=28429 overshoot=19544 235 | threads=2 lockInterval=6.666667e-05 lockDuration=0.170000 workDone=316365031 iteratons=28374 overshoot=26039 236 | threads=2 lockInterval=6.666667e-05 lockDuration=0.175000 workDone=234168741 iteratons=21145 overshoot=7696 237 | threads=2 lockInterval=6.666667e-05 lockDuration=0.180000 workDone=290014978 iteratons=26250 overshoot=17020 238 | threads=2 lockInterval=6.666667e-05 lockDuration=0.185000 workDone=314901453 iteratons=28287 overshoot=46597 239 | threads=2 lockInterval=6.666667e-05 lockDuration=0.190000 workDone=312598664 iteratons=28241 overshoot=2104 240 | threads=2 lockInterval=6.666667e-05 lockDuration=0.195000 workDone=312481623 iteratons=28055 overshoot=10467 241 | threads=2 lockInterval=6.666667e-05 lockDuration=0.200000 workDone=311474943 iteratons=28005 overshoot=41850 242 | threads=2 lockInterval=6.666667e-05 lockDuration=0.205000 workDone=294215058 iteratons=26480 overshoot=29376 243 | threads=2 lockInterval=6.666667e-05 lockDuration=0.210000 workDone=233679567 iteratons=20994 overshoot=26102 244 | threads=2 lockInterval=6.666667e-05 lockDuration=0.215000 workDone=307841667 iteratons=27663 overshoot=32495 245 | threads=2 lockInterval=6.666667e-05 lockDuration=0.220000 workDone=307128367 iteratons=27621 overshoot=11599 246 | threads=2 lockInterval=6.666667e-05 lockDuration=0.225000 workDone=307470221 iteratons=27669 overshoot=37122 247 | threads=2 lockInterval=6.666667e-05 lockDuration=0.230000 workDone=300703709 iteratons=27146 overshoot=10586 248 | threads=2 lockInterval=6.666667e-05 lockDuration=0.235000 workDone=302084257 iteratons=27035 overshoot=6316 249 | threads=2 lockInterval=6.666667e-05 lockDuration=0.240000 workDone=300594736 iteratons=27349 overshoot=12453 250 | threads=2 lockInterval=6.666667e-05 lockDuration=0.245000 workDone=272612410 iteratons=24436 overshoot=13903 251 | threads=2 lockInterval=6.666667e-05 lockDuration=0.250000 workDone=295816184 iteratons=26542 overshoot=11400 252 | threads=2 lockInterval=6.666667e-05 lockDuration=0.255000 workDone=300343684 iteratons=27309 overshoot=13725 253 | threads=2 lockInterval=6.666667e-05 lockDuration=0.260000 workDone=300263472 iteratons=27091 overshoot=12751 254 | threads=2 lockInterval=6.666667e-05 lockDuration=0.265000 workDone=301486278 iteratons=26939 overshoot=7885 255 | threads=2 lockInterval=6.666667e-05 lockDuration=0.270000 workDone=298307395 iteratons=26768 overshoot=30587 256 | threads=2 lockInterval=6.666667e-05 lockDuration=0.275000 workDone=297549449 iteratons=27093 overshoot=26158 257 | threads=2 lockInterval=6.666667e-05 lockDuration=0.280000 workDone=207315171 iteratons=18758 overshoot=19246 258 | threads=2 lockInterval=6.666667e-05 lockDuration=0.285000 workDone=293388334 iteratons=26410 overshoot=7996 259 | threads=2 lockInterval=6.666667e-05 lockDuration=0.290000 workDone=280959086 iteratons=25496 overshoot=7050 260 | threads=2 lockInterval=6.666667e-05 lockDuration=0.295000 workDone=253687490 iteratons=23028 overshoot=7955 261 | threads=2 lockInterval=6.666667e-05 lockDuration=0.300000 workDone=274805616 iteratons=24861 overshoot=8480 262 | threads=2 lockInterval=6.666667e-05 lockDuration=0.305000 workDone=290926149 iteratons=26466 overshoot=17518 263 | threads=2 lockInterval=6.666667e-05 lockDuration=0.310000 workDone=263043891 iteratons=23645 overshoot=3731 264 | threads=2 lockInterval=6.666667e-05 lockDuration=0.315000 workDone=211446556 iteratons=19166 overshoot=29078 265 | threads=2 lockInterval=6.666667e-05 lockDuration=0.320000 workDone=281187002 iteratons=25522 overshoot=4150 266 | threads=2 lockInterval=6.666667e-05 lockDuration=0.325000 workDone=241822219 iteratons=21818 overshoot=6137 267 | threads=2 lockInterval=6.666667e-05 lockDuration=0.330000 workDone=275853692 iteratons=24904 overshoot=14181 268 | threads=2 lockInterval=6.666667e-05 lockDuration=0.335000 workDone=198408353 iteratons=17892 overshoot=13782 269 | threads=2 lockInterval=6.666667e-05 lockDuration=0.340000 workDone=275424993 iteratons=24925 overshoot=11182 270 | threads=2 lockInterval=6.666667e-05 lockDuration=0.345000 workDone=272603334 iteratons=24595 overshoot=5000 271 | threads=2 lockInterval=6.666667e-05 lockDuration=0.350000 workDone=269293660 iteratons=24257 overshoot=14757 272 | threads=2 lockInterval=6.666667e-05 lockDuration=0.355000 workDone=257474827 iteratons=23156 overshoot=7051 273 | threads=2 lockInterval=6.666667e-05 lockDuration=0.360000 workDone=255974112 iteratons=23096 overshoot=13644 274 | threads=2 lockInterval=6.666667e-05 lockDuration=0.365000 workDone=266171156 iteratons=23806 overshoot=3773 275 | threads=2 lockInterval=6.666667e-05 lockDuration=0.370000 workDone=258018190 iteratons=23243 overshoot=14081 276 | threads=2 lockInterval=6.666667e-05 lockDuration=0.375000 workDone=248063134 iteratons=22277 overshoot=8858 277 | threads=2 lockInterval=6.666667e-05 lockDuration=0.380000 workDone=272967656 iteratons=24344 overshoot=5977 278 | threads=2 lockInterval=6.666667e-05 lockDuration=0.385000 workDone=258156778 iteratons=23351 overshoot=16842 279 | threads=2 lockInterval=6.666667e-05 lockDuration=0.390000 workDone=257416726 iteratons=23067 overshoot=6116 280 | threads=2 lockInterval=6.666667e-05 lockDuration=0.395000 workDone=241694680 iteratons=21666 overshoot=25979 281 | threads=2 lockInterval=6.666667e-05 lockDuration=0.400000 workDone=240808712 iteratons=21476 overshoot=5878 282 | threads=2 lockInterval=6.666667e-05 lockDuration=0.405000 workDone=233949390 iteratons=21080 overshoot=4925 283 | threads=2 lockInterval=6.666667e-05 lockDuration=0.410000 workDone=254022959 iteratons=22846 overshoot=6375 284 | threads=2 lockInterval=6.666667e-05 lockDuration=0.415000 workDone=227582000 iteratons=20339 overshoot=12498 285 | threads=2 lockInterval=6.666667e-05 lockDuration=0.420000 workDone=234434705 iteratons=21018 overshoot=13990 286 | threads=2 lockInterval=6.666667e-05 lockDuration=0.425000 workDone=253983487 iteratons=22937 overshoot=1250 287 | threads=2 lockInterval=6.666667e-05 lockDuration=0.430000 workDone=239515620 iteratons=21555 overshoot=18054 288 | threads=2 lockInterval=6.666667e-05 lockDuration=0.435000 workDone=239858010 iteratons=21698 overshoot=9484 289 | threads=2 lockInterval=6.666667e-05 lockDuration=0.440000 workDone=197060960 iteratons=17838 overshoot=10062 290 | threads=2 lockInterval=6.666667e-05 lockDuration=0.445000 workDone=226923357 iteratons=20471 overshoot=8396 291 | threads=2 lockInterval=6.666667e-05 lockDuration=0.450000 workDone=228875654 iteratons=20548 overshoot=14036 292 | threads=2 lockInterval=6.666667e-05 lockDuration=0.455000 workDone=188932908 iteratons=16974 overshoot=19538 293 | threads=2 lockInterval=6.666667e-05 lockDuration=0.460000 workDone=210604718 iteratons=19023 overshoot=5081 294 | threads=2 lockInterval=6.666667e-05 lockDuration=0.465000 workDone=223827954 iteratons=20382 overshoot=13518 295 | threads=2 lockInterval=6.666667e-05 lockDuration=0.470000 workDone=219645497 iteratons=19919 overshoot=18740 296 | threads=2 lockInterval=6.666667e-05 lockDuration=0.475000 workDone=219677004 iteratons=19793 overshoot=1131 297 | threads=2 lockInterval=6.666667e-05 lockDuration=0.480000 workDone=179398967 iteratons=16261 overshoot=10991 298 | threads=2 lockInterval=6.666667e-05 lockDuration=0.485000 workDone=207962049 iteratons=18655 overshoot=2316 299 | threads=2 lockInterval=6.666667e-05 lockDuration=0.490000 workDone=205148138 iteratons=18204 overshoot=24947 300 | threads=2 lockInterval=6.666667e-05 lockDuration=0.495000 workDone=203047374 iteratons=18310 overshoot=27904 301 | threads=2 lockInterval=6.666667e-05 lockDuration=0.500000 workDone=210422652 iteratons=19041 overshoot=9494 302 | threads=2 lockInterval=6.666667e-05 lockDuration=0.505000 workDone=214726027 iteratons=19249 overshoot=14023 303 | threads=2 lockInterval=6.666667e-05 lockDuration=0.510000 workDone=182746968 iteratons=16337 overshoot=5064 304 | threads=2 lockInterval=6.666667e-05 lockDuration=0.515000 workDone=185737991 iteratons=16727 overshoot=13526 305 | threads=2 lockInterval=6.666667e-05 lockDuration=0.520000 workDone=176075748 iteratons=15983 overshoot=12532 306 | threads=2 lockInterval=6.666667e-05 lockDuration=0.525000 workDone=183240213 iteratons=16660 overshoot=18778 307 | threads=2 lockInterval=6.666667e-05 lockDuration=0.530000 workDone=184155517 iteratons=16653 overshoot=16922 308 | threads=2 lockInterval=6.666667e-05 lockDuration=0.535000 workDone=168649225 iteratons=15397 overshoot=32414 309 | threads=2 lockInterval=6.666667e-05 lockDuration=0.540000 workDone=168010492 iteratons=15067 overshoot=12648 310 | threads=2 lockInterval=6.666667e-05 lockDuration=0.545000 workDone=189252320 iteratons=17067 overshoot=11319 311 | threads=2 lockInterval=6.666667e-05 lockDuration=0.550000 workDone=178477265 iteratons=15937 overshoot=17924 312 | threads=2 lockInterval=6.666667e-05 lockDuration=0.555000 workDone=173642418 iteratons=15558 overshoot=4099 313 | threads=2 lockInterval=6.666667e-05 lockDuration=0.560000 workDone=162732486 iteratons=14855 overshoot=9882 314 | threads=2 lockInterval=6.666667e-05 lockDuration=0.565000 workDone=178556228 iteratons=16119 overshoot=18903 315 | threads=2 lockInterval=6.666667e-05 lockDuration=0.570000 workDone=169075424 iteratons=15201 overshoot=21318 316 | threads=2 lockInterval=6.666667e-05 lockDuration=0.575000 workDone=174435175 iteratons=15770 overshoot=5006 317 | threads=2 lockInterval=6.666667e-05 lockDuration=0.580000 workDone=150198242 iteratons=13770 overshoot=33075 318 | threads=2 lockInterval=6.666667e-05 lockDuration=0.585000 workDone=172518421 iteratons=15586 overshoot=2264 319 | threads=2 lockInterval=6.666667e-05 lockDuration=0.590000 workDone=174801880 iteratons=15828 overshoot=6633 320 | threads=2 lockInterval=6.666667e-05 lockDuration=0.595000 workDone=154866218 iteratons=13998 overshoot=6300 321 | threads=2 lockInterval=6.666667e-05 lockDuration=0.600000 workDone=155915397 iteratons=13874 overshoot=10646 322 | threads=2 lockInterval=6.666667e-05 lockDuration=0.605000 workDone=181850867 iteratons=16337 overshoot=8216 323 | threads=2 lockInterval=6.666667e-05 lockDuration=0.610000 workDone=174823045 iteratons=15725 overshoot=13579 324 | threads=2 lockInterval=6.666667e-05 lockDuration=0.615000 workDone=177210632 iteratons=15887 overshoot=30644 325 | threads=2 lockInterval=6.666667e-05 lockDuration=0.620000 workDone=152451655 iteratons=13714 overshoot=5735 326 | threads=2 lockInterval=6.666667e-05 lockDuration=0.625000 workDone=149068901 iteratons=13232 overshoot=13573 327 | threads=2 lockInterval=6.666667e-05 lockDuration=0.630000 workDone=170327532 iteratons=15412 overshoot=32071 328 | threads=2 lockInterval=6.666667e-05 lockDuration=0.635000 workDone=169379326 iteratons=15209 overshoot=13675 329 | threads=2 lockInterval=6.666667e-05 lockDuration=0.640000 workDone=150514449 iteratons=13594 overshoot=18782 330 | threads=2 lockInterval=6.666667e-05 lockDuration=0.645000 workDone=159297950 iteratons=14415 overshoot=32367 331 | threads=2 lockInterval=6.666667e-05 lockDuration=0.650000 workDone=152564913 iteratons=13775 overshoot=25537 332 | threads=2 lockInterval=6.666667e-05 lockDuration=0.655000 workDone=159532819 iteratons=14425 overshoot=5443 333 | threads=2 lockInterval=6.666667e-05 lockDuration=0.660000 workDone=137856267 iteratons=12276 overshoot=3177 334 | threads=2 lockInterval=6.666667e-05 lockDuration=0.665000 workDone=153136927 iteratons=13786 overshoot=40439 335 | threads=2 lockInterval=6.666667e-05 lockDuration=0.670000 workDone=147761736 iteratons=13346 overshoot=8083 336 | threads=2 lockInterval=6.666667e-05 lockDuration=0.675000 workDone=144438779 iteratons=12994 overshoot=9990 337 | threads=2 lockInterval=6.666667e-05 lockDuration=0.680000 workDone=143602524 iteratons=12911 overshoot=1727 338 | threads=2 lockInterval=6.666667e-05 lockDuration=0.685000 workDone=153746930 iteratons=13898 overshoot=13272 339 | threads=2 lockInterval=6.666667e-05 lockDuration=0.690000 workDone=161251065 iteratons=14559 overshoot=3733 340 | threads=2 lockInterval=6.666667e-05 lockDuration=0.695000 workDone=136743105 iteratons=12291 overshoot=21162 341 | threads=2 lockInterval=6.666667e-05 lockDuration=0.700000 workDone=132544497 iteratons=11895 overshoot=22257 342 | threads=2 lockInterval=6.666667e-05 lockDuration=0.705000 workDone=143803117 iteratons=12937 overshoot=6123 343 | threads=2 lockInterval=6.666667e-05 lockDuration=0.710000 workDone=133778176 iteratons=12148 overshoot=12408 344 | threads=2 lockInterval=6.666667e-05 lockDuration=0.715000 workDone=157573040 iteratons=14239 overshoot=6437 345 | threads=2 lockInterval=6.666667e-05 lockDuration=0.720000 workDone=142476846 iteratons=12820 overshoot=25820 346 | threads=2 lockInterval=6.666667e-05 lockDuration=0.725000 workDone=148144523 iteratons=13377 overshoot=5249 347 | threads=2 lockInterval=6.666667e-05 lockDuration=0.730000 workDone=131488401 iteratons=11980 overshoot=3687 348 | threads=2 lockInterval=6.666667e-05 lockDuration=0.735000 workDone=122763640 iteratons=11203 overshoot=22686 349 | threads=2 lockInterval=6.666667e-05 lockDuration=0.740000 workDone=134391424 iteratons=12122 overshoot=9118 350 | threads=2 lockInterval=6.666667e-05 lockDuration=0.745000 workDone=146658830 iteratons=13189 overshoot=19465 351 | threads=2 lockInterval=6.666667e-05 lockDuration=0.750000 workDone=141301052 iteratons=12702 overshoot=9242 352 | threads=2 lockInterval=6.666667e-05 lockDuration=0.755000 workDone=127919568 iteratons=11493 overshoot=26984 353 | threads=2 lockInterval=6.666667e-05 lockDuration=0.760000 workDone=121372966 iteratons=10858 overshoot=4190 354 | threads=2 lockInterval=6.666667e-05 lockDuration=0.765000 workDone=122969017 iteratons=11013 overshoot=2646 355 | threads=2 lockInterval=6.666667e-05 lockDuration=0.770000 workDone=122656777 iteratons=10973 overshoot=1317 356 | threads=2 lockInterval=6.666667e-05 lockDuration=0.775000 workDone=122439439 iteratons=10963 overshoot=15656 357 | threads=2 lockInterval=6.666667e-05 lockDuration=0.780000 workDone=124779469 iteratons=11153 overshoot=11865 358 | threads=2 lockInterval=6.666667e-05 lockDuration=0.785000 workDone=135336737 iteratons=11933 overshoot=2032 359 | threads=2 lockInterval=6.666667e-05 lockDuration=0.790000 workDone=122076105 iteratons=11037 overshoot=7884 360 | threads=2 lockInterval=6.666667e-05 lockDuration=0.795000 workDone=124753988 iteratons=11099 overshoot=11132 361 | threads=2 lockInterval=6.666667e-05 lockDuration=0.800000 workDone=124156042 iteratons=11294 overshoot=16976 362 | threads=2 lockInterval=6.666667e-05 lockDuration=0.805000 workDone=119374042 iteratons=10752 overshoot=7389 363 | threads=2 lockInterval=6.666667e-05 lockDuration=0.810000 workDone=138775661 iteratons=12519 overshoot=31486 364 | threads=2 lockInterval=6.666667e-05 lockDuration=0.815000 workDone=127080598 iteratons=11423 overshoot=16290 365 | threads=2 lockInterval=6.666667e-05 lockDuration=0.820000 workDone=112358523 iteratons=10086 overshoot=27354 366 | threads=2 lockInterval=6.666667e-05 lockDuration=0.825000 workDone=135558610 iteratons=12325 overshoot=6567 367 | threads=2 lockInterval=6.666667e-05 lockDuration=0.830000 workDone=123197179 iteratons=10966 overshoot=2958 368 | threads=2 lockInterval=6.666667e-05 lockDuration=0.835000 workDone=120720652 iteratons=10783 overshoot=8577 369 | threads=2 lockInterval=6.666667e-05 lockDuration=0.840000 workDone=123877984 iteratons=11047 overshoot=36152 370 | threads=2 lockInterval=6.666667e-05 lockDuration=0.845000 workDone=119629673 iteratons=10855 overshoot=6276 371 | threads=2 lockInterval=6.666667e-05 lockDuration=0.850000 workDone=127499805 iteratons=11490 overshoot=5045 372 | threads=2 lockInterval=6.666667e-05 lockDuration=0.855000 workDone=119369879 iteratons=10827 overshoot=15110 373 | threads=2 lockInterval=6.666667e-05 lockDuration=0.860000 workDone=110310682 iteratons=9868 overshoot=8416 374 | threads=2 lockInterval=6.666667e-05 lockDuration=0.865000 workDone=120776739 iteratons=10896 overshoot=16680 375 | threads=2 lockInterval=6.666667e-05 lockDuration=0.870000 workDone=105159604 iteratons=9537 overshoot=15427 376 | threads=2 lockInterval=6.666667e-05 lockDuration=0.875000 workDone=145185653 iteratons=13036 overshoot=19788 377 | threads=2 lockInterval=6.666667e-05 lockDuration=0.880000 workDone=104748224 iteratons=9461 overshoot=8103 378 | threads=2 lockInterval=6.666667e-05 lockDuration=0.885000 workDone=112283547 iteratons=9978 overshoot=3713 379 | threads=2 lockInterval=6.666667e-05 lockDuration=0.890000 workDone=132566037 iteratons=11822 overshoot=28919 380 | threads=2 lockInterval=6.666667e-05 lockDuration=0.895000 workDone=119802743 iteratons=10907 overshoot=37977 381 | threads=2 lockInterval=6.666667e-05 lockDuration=0.900000 workDone=101639985 iteratons=9233 overshoot=55923 382 | threads=2 lockInterval=6.666667e-05 lockDuration=0.905000 workDone=107611271 iteratons=9855 overshoot=27960 383 | threads=2 lockInterval=6.666667e-05 lockDuration=0.910000 workDone=101615186 iteratons=9216 overshoot=6679 384 | threads=2 lockInterval=6.666667e-05 lockDuration=0.915000 workDone=105700328 iteratons=9432 overshoot=5616 385 | threads=2 lockInterval=6.666667e-05 lockDuration=0.920000 workDone=104192678 iteratons=9249 overshoot=4908 386 | threads=2 lockInterval=6.666667e-05 lockDuration=0.925000 workDone=107992084 iteratons=9676 overshoot=31401 387 | threads=2 lockInterval=6.666667e-05 lockDuration=0.930000 workDone=92245635 iteratons=8423 overshoot=24577 388 | threads=2 lockInterval=6.666667e-05 lockDuration=0.935000 workDone=98015595 iteratons=8934 overshoot=14380 389 | threads=2 lockInterval=6.666667e-05 lockDuration=0.940000 workDone=95257793 iteratons=8590 overshoot=11576 390 | threads=2 lockInterval=6.666667e-05 lockDuration=0.945000 workDone=105004905 iteratons=9558 overshoot=49900 391 | threads=2 lockInterval=6.666667e-05 lockDuration=0.950000 workDone=100034479 iteratons=8851 overshoot=26552 392 | threads=2 lockInterval=6.666667e-05 lockDuration=0.955000 workDone=88317515 iteratons=8003 overshoot=32118 393 | threads=2 lockInterval=6.666667e-05 lockDuration=0.960000 workDone=96853909 iteratons=8692 overshoot=12762 394 | threads=2 lockInterval=6.666667e-05 lockDuration=0.965000 workDone=102569880 iteratons=9172 overshoot=30512 395 | threads=2 lockInterval=6.666667e-05 lockDuration=0.970000 workDone=110976575 iteratons=9971 overshoot=4170 396 | threads=2 lockInterval=6.666667e-05 lockDuration=0.975000 workDone=103946995 iteratons=9399 overshoot=11222 397 | threads=2 lockInterval=6.666667e-05 lockDuration=0.980000 workDone=105433868 iteratons=9547 overshoot=10122 398 | threads=2 lockInterval=6.666667e-05 lockDuration=0.985000 workDone=122399843 iteratons=11122 overshoot=15455 399 | threads=2 lockInterval=6.666667e-05 lockDuration=0.990000 workDone=117811296 iteratons=10740 overshoot=27350 400 | threads=2 lockInterval=6.666667e-05 lockDuration=0.995000 workDone=135288807 iteratons=12163 overshoot=8349 401 | threads=3 lockInterval=6.666667e-05 lockDuration=0.000000 workDone=461044733 iteratons=41338 overshoot=29475 402 | threads=3 lockInterval=6.666667e-05 lockDuration=0.005000 workDone=462065781 iteratons=41199 overshoot=9553 403 | threads=3 lockInterval=6.666667e-05 lockDuration=0.010000 workDone=461869709 iteratons=41649 overshoot=12374 404 | threads=3 lockInterval=6.666667e-05 lockDuration=0.015000 workDone=460172108 iteratons=41410 overshoot=15213 405 | threads=3 lockInterval=6.666667e-05 lockDuration=0.020000 workDone=446558380 iteratons=40333 overshoot=31535 406 | threads=3 lockInterval=6.666667e-05 lockDuration=0.025000 workDone=462375598 iteratons=41817 overshoot=27211 407 | threads=3 lockInterval=6.666667e-05 lockDuration=0.030000 workDone=461734662 iteratons=41709 overshoot=9910 408 | threads=3 lockInterval=6.666667e-05 lockDuration=0.035000 workDone=461187042 iteratons=41653 overshoot=37738 409 | threads=3 lockInterval=6.666667e-05 lockDuration=0.040000 workDone=430545406 iteratons=38554 overshoot=50708 410 | threads=3 lockInterval=6.666667e-05 lockDuration=0.045000 workDone=458089361 iteratons=40948 overshoot=20079 411 | threads=3 lockInterval=6.666667e-05 lockDuration=0.050000 workDone=455227681 iteratons=41000 overshoot=40082 412 | threads=3 lockInterval=6.666667e-05 lockDuration=0.055000 workDone=436369066 iteratons=39651 overshoot=3257 413 | threads=3 lockInterval=6.666667e-05 lockDuration=0.060000 workDone=454613683 iteratons=40337 overshoot=19206 414 | threads=3 lockInterval=6.666667e-05 lockDuration=0.065000 workDone=328861571 iteratons=29766 overshoot=8182 415 | threads=3 lockInterval=6.666667e-05 lockDuration=0.070000 workDone=431966230 iteratons=38770 overshoot=6255 416 | threads=3 lockInterval=6.666667e-05 lockDuration=0.075000 workDone=426082376 iteratons=38385 overshoot=49382 417 | threads=3 lockInterval=6.666667e-05 lockDuration=0.080000 workDone=348177755 iteratons=31131 overshoot=35981 418 | threads=3 lockInterval=6.666667e-05 lockDuration=0.085000 workDone=398465391 iteratons=35782 overshoot=32275 419 | threads=3 lockInterval=6.666667e-05 lockDuration=0.090000 workDone=368675757 iteratons=33263 overshoot=21391 420 | threads=3 lockInterval=6.666667e-05 lockDuration=0.095000 workDone=398655461 iteratons=35862 overshoot=40399 421 | threads=3 lockInterval=6.666667e-05 lockDuration=0.100000 workDone=382139744 iteratons=34456 overshoot=13650 422 | threads=3 lockInterval=6.666667e-05 lockDuration=0.105000 workDone=349751696 iteratons=31763 overshoot=44844 423 | threads=3 lockInterval=6.666667e-05 lockDuration=0.110000 workDone=380077628 iteratons=33964 overshoot=23814 424 | threads=3 lockInterval=6.666667e-05 lockDuration=0.115000 workDone=340963723 iteratons=30921 overshoot=27268 425 | threads=3 lockInterval=6.666667e-05 lockDuration=0.120000 workDone=391909117 iteratons=35596 overshoot=31864 426 | threads=3 lockInterval=6.666667e-05 lockDuration=0.125000 workDone=354010003 iteratons=31836 overshoot=2401 427 | threads=3 lockInterval=6.666667e-05 lockDuration=0.130000 workDone=351280202 iteratons=31410 overshoot=7244 428 | threads=3 lockInterval=6.666667e-05 lockDuration=0.135000 workDone=372922496 iteratons=33607 overshoot=10804 429 | threads=3 lockInterval=6.666667e-05 lockDuration=0.140000 workDone=386265038 iteratons=34831 overshoot=27986 430 | threads=3 lockInterval=6.666667e-05 lockDuration=0.145000 workDone=335854237 iteratons=30127 overshoot=22994 431 | threads=3 lockInterval=6.666667e-05 lockDuration=0.150000 workDone=366758598 iteratons=32977 overshoot=25904 432 | threads=3 lockInterval=6.666667e-05 lockDuration=0.155000 workDone=405807552 iteratons=36524 overshoot=19087 433 | threads=3 lockInterval=6.666667e-05 lockDuration=0.160000 workDone=320677981 iteratons=28869 overshoot=21816 434 | threads=3 lockInterval=6.666667e-05 lockDuration=0.165000 workDone=377756322 iteratons=34171 overshoot=21509 435 | threads=3 lockInterval=6.666667e-05 lockDuration=0.170000 workDone=369381326 iteratons=33055 overshoot=56237 436 | threads=3 lockInterval=6.666667e-05 lockDuration=0.175000 workDone=364999137 iteratons=32935 overshoot=111634 437 | threads=3 lockInterval=6.666667e-05 lockDuration=0.180000 workDone=315726600 iteratons=28359 overshoot=29202 438 | threads=3 lockInterval=6.666667e-05 lockDuration=0.185000 workDone=331771295 iteratons=29826 overshoot=8811 439 | threads=3 lockInterval=6.666667e-05 lockDuration=0.190000 workDone=315545516 iteratons=28478 overshoot=27047 440 | threads=3 lockInterval=6.666667e-05 lockDuration=0.195000 workDone=302482228 iteratons=27274 overshoot=16009 441 | threads=3 lockInterval=6.666667e-05 lockDuration=0.200000 workDone=321254917 iteratons=29093 overshoot=24981 442 | threads=3 lockInterval=6.666667e-05 lockDuration=0.205000 workDone=339181161 iteratons=30381 overshoot=14335 443 | threads=3 lockInterval=6.666667e-05 lockDuration=0.210000 workDone=337463181 iteratons=30447 overshoot=18437 444 | threads=3 lockInterval=6.666667e-05 lockDuration=0.215000 workDone=357972964 iteratons=32076 overshoot=30249 445 | threads=3 lockInterval=6.666667e-05 lockDuration=0.220000 workDone=340570630 iteratons=30625 overshoot=6455 446 | threads=3 lockInterval=6.666667e-05 lockDuration=0.225000 workDone=313250993 iteratons=28176 overshoot=29237 447 | threads=3 lockInterval=6.666667e-05 lockDuration=0.230000 workDone=325171917 iteratons=29333 overshoot=7944 448 | threads=3 lockInterval=6.666667e-05 lockDuration=0.235000 workDone=314266043 iteratons=28237 overshoot=22513 449 | threads=3 lockInterval=6.666667e-05 lockDuration=0.240000 workDone=292230055 iteratons=26510 overshoot=16544 450 | threads=3 lockInterval=6.666667e-05 lockDuration=0.245000 workDone=332191109 iteratons=29902 overshoot=27946 451 | threads=3 lockInterval=6.666667e-05 lockDuration=0.250000 workDone=277395359 iteratons=25057 overshoot=16489 452 | threads=3 lockInterval=6.666667e-05 lockDuration=0.255000 workDone=315471149 iteratons=28458 overshoot=6807 453 | threads=3 lockInterval=6.666667e-05 lockDuration=0.260000 workDone=309449344 iteratons=27856 overshoot=9763 454 | threads=3 lockInterval=6.666667e-05 lockDuration=0.265000 workDone=289386865 iteratons=25770 overshoot=31024 455 | threads=3 lockInterval=6.666667e-05 lockDuration=0.270000 workDone=304530695 iteratons=27331 overshoot=46497 456 | threads=3 lockInterval=6.666667e-05 lockDuration=0.275000 workDone=305847546 iteratons=27734 overshoot=8549 457 | threads=3 lockInterval=6.666667e-05 lockDuration=0.280000 workDone=297559024 iteratons=26803 overshoot=40221 458 | threads=3 lockInterval=6.666667e-05 lockDuration=0.285000 workDone=295934892 iteratons=26675 overshoot=11022 459 | threads=3 lockInterval=6.666667e-05 lockDuration=0.290000 workDone=288425387 iteratons=26106 overshoot=28890 460 | threads=3 lockInterval=6.666667e-05 lockDuration=0.295000 workDone=272705481 iteratons=24662 overshoot=25044 461 | threads=3 lockInterval=6.666667e-05 lockDuration=0.300000 workDone=275523570 iteratons=24951 overshoot=11320 462 | threads=3 lockInterval=6.666667e-05 lockDuration=0.305000 workDone=295074110 iteratons=26568 overshoot=52833 463 | threads=3 lockInterval=6.666667e-05 lockDuration=0.310000 workDone=274531935 iteratons=24789 overshoot=15065 464 | threads=3 lockInterval=6.666667e-05 lockDuration=0.315000 workDone=272030604 iteratons=24522 overshoot=17922 465 | threads=3 lockInterval=6.666667e-05 lockDuration=0.320000 workDone=272520462 iteratons=24704 overshoot=28247 466 | threads=3 lockInterval=6.666667e-05 lockDuration=0.325000 workDone=268849011 iteratons=24304 overshoot=31798 467 | threads=3 lockInterval=6.666667e-05 lockDuration=0.330000 workDone=262400210 iteratons=23650 overshoot=12155 468 | threads=3 lockInterval=6.666667e-05 lockDuration=0.335000 workDone=249945182 iteratons=22593 overshoot=7018 469 | threads=3 lockInterval=6.666667e-05 lockDuration=0.340000 workDone=234851273 iteratons=21237 overshoot=20656 470 | threads=3 lockInterval=6.666667e-05 lockDuration=0.345000 workDone=280930675 iteratons=25385 overshoot=7626 471 | threads=3 lockInterval=6.666667e-05 lockDuration=0.350000 workDone=250895976 iteratons=22628 overshoot=18235 472 | threads=3 lockInterval=6.666667e-05 lockDuration=0.355000 workDone=229931743 iteratons=20578 overshoot=13664 473 | threads=3 lockInterval=6.666667e-05 lockDuration=0.360000 workDone=233872918 iteratons=21201 overshoot=22512 474 | threads=3 lockInterval=6.666667e-05 lockDuration=0.365000 workDone=253321462 iteratons=22837 overshoot=16944 475 | threads=3 lockInterval=6.666667e-05 lockDuration=0.370000 workDone=241803115 iteratons=21800 overshoot=17605 476 | threads=3 lockInterval=6.666667e-05 lockDuration=0.375000 workDone=240759822 iteratons=21642 overshoot=10061 477 | threads=3 lockInterval=6.666667e-05 lockDuration=0.380000 workDone=240186895 iteratons=21425 overshoot=7506 478 | threads=3 lockInterval=6.666667e-05 lockDuration=0.385000 workDone=204447592 iteratons=18489 overshoot=14135 479 | threads=3 lockInterval=6.666667e-05 lockDuration=0.390000 workDone=210505225 iteratons=18929 overshoot=3566 480 | threads=3 lockInterval=6.666667e-05 lockDuration=0.395000 workDone=212334646 iteratons=19174 overshoot=17250 481 | threads=3 lockInterval=6.666667e-05 lockDuration=0.400000 workDone=217456641 iteratons=19506 overshoot=44212 482 | threads=3 lockInterval=6.666667e-05 lockDuration=0.405000 workDone=212420971 iteratons=19191 overshoot=9588 483 | threads=3 lockInterval=6.666667e-05 lockDuration=0.410000 workDone=214417932 iteratons=19444 overshoot=23611 484 | threads=3 lockInterval=6.666667e-05 lockDuration=0.415000 workDone=208924558 iteratons=18687 overshoot=6914 485 | threads=3 lockInterval=6.666667e-05 lockDuration=0.420000 workDone=199903687 iteratons=17901 overshoot=12832 486 | threads=3 lockInterval=6.666667e-05 lockDuration=0.425000 workDone=207115440 iteratons=18678 overshoot=21924 487 | threads=3 lockInterval=6.666667e-05 lockDuration=0.430000 workDone=204485360 iteratons=18409 overshoot=20457 488 | threads=3 lockInterval=6.666667e-05 lockDuration=0.435000 workDone=226217998 iteratons=20267 overshoot=12472 489 | threads=3 lockInterval=6.666667e-05 lockDuration=0.440000 workDone=210449413 iteratons=19066 overshoot=18767 490 | threads=3 lockInterval=6.666667e-05 lockDuration=0.445000 workDone=206255476 iteratons=18695 overshoot=7846 491 | threads=3 lockInterval=6.666667e-05 lockDuration=0.450000 workDone=211326028 iteratons=18988 overshoot=18751 492 | threads=3 lockInterval=6.666667e-05 lockDuration=0.455000 workDone=215235967 iteratons=19384 overshoot=13829 493 | threads=3 lockInterval=6.666667e-05 lockDuration=0.460000 workDone=203225124 iteratons=18287 overshoot=51424 494 | threads=3 lockInterval=6.666667e-05 lockDuration=0.465000 workDone=198800073 iteratons=18093 overshoot=15095 495 | threads=3 lockInterval=6.666667e-05 lockDuration=0.470000 workDone=200648576 iteratons=18130 overshoot=59284 496 | threads=3 lockInterval=6.666667e-05 lockDuration=0.475000 workDone=179019468 iteratons=16105 overshoot=18217 497 | threads=3 lockInterval=6.666667e-05 lockDuration=0.480000 workDone=173655596 iteratons=15739 overshoot=25627 498 | threads=3 lockInterval=6.666667e-05 lockDuration=0.485000 workDone=193660399 iteratons=17438 overshoot=23929 499 | threads=3 lockInterval=6.666667e-05 lockDuration=0.490000 workDone=183282384 iteratons=16252 overshoot=9029 500 | threads=3 lockInterval=6.666667e-05 lockDuration=0.495000 workDone=164989493 iteratons=14957 overshoot=9735 501 | threads=3 lockInterval=6.666667e-05 lockDuration=0.500000 workDone=183114301 iteratons=16536 overshoot=26887 502 | threads=3 lockInterval=6.666667e-05 lockDuration=0.505000 workDone=194318221 iteratons=17340 overshoot=14908 503 | threads=3 lockInterval=6.666667e-05 lockDuration=0.510000 workDone=180835776 iteratons=16169 overshoot=15949 504 | threads=3 lockInterval=6.666667e-05 lockDuration=0.515000 workDone=169652331 iteratons=15319 overshoot=47394 505 | threads=3 lockInterval=6.666667e-05 lockDuration=0.520000 workDone=160079032 iteratons=14569 overshoot=23858 506 | threads=3 lockInterval=6.666667e-05 lockDuration=0.525000 workDone=171492395 iteratons=15631 overshoot=41352 507 | threads=3 lockInterval=6.666667e-05 lockDuration=0.530000 workDone=170077808 iteratons=15340 overshoot=11016 508 | threads=3 lockInterval=6.666667e-05 lockDuration=0.535000 workDone=161447344 iteratons=14647 overshoot=20424 509 | threads=3 lockInterval=6.666667e-05 lockDuration=0.540000 workDone=158606609 iteratons=14235 overshoot=32680 510 | threads=3 lockInterval=6.666667e-05 lockDuration=0.545000 workDone=160002369 iteratons=14505 overshoot=21151 511 | threads=3 lockInterval=6.666667e-05 lockDuration=0.550000 workDone=162164589 iteratons=14564 overshoot=12596 512 | threads=3 lockInterval=6.666667e-05 lockDuration=0.555000 workDone=154496007 iteratons=13938 overshoot=14189 513 | threads=3 lockInterval=6.666667e-05 lockDuration=0.560000 workDone=154637062 iteratons=13972 overshoot=18528 514 | threads=3 lockInterval=6.666667e-05 lockDuration=0.565000 workDone=168574271 iteratons=15093 overshoot=15391 515 | threads=3 lockInterval=6.666667e-05 lockDuration=0.570000 workDone=142660486 iteratons=12815 overshoot=34011 516 | threads=3 lockInterval=6.666667e-05 lockDuration=0.575000 workDone=147801509 iteratons=13379 overshoot=19804 517 | threads=3 lockInterval=6.666667e-05 lockDuration=0.580000 workDone=139323350 iteratons=12602 overshoot=54069 518 | threads=3 lockInterval=6.666667e-05 lockDuration=0.585000 workDone=149151208 iteratons=13459 overshoot=14117 519 | threads=3 lockInterval=6.666667e-05 lockDuration=0.590000 workDone=153331432 iteratons=13747 overshoot=18592 520 | threads=3 lockInterval=6.666667e-05 lockDuration=0.595000 workDone=159016879 iteratons=14382 overshoot=34941 521 | threads=3 lockInterval=6.666667e-05 lockDuration=0.600000 workDone=142449697 iteratons=12762 overshoot=11862 522 | threads=3 lockInterval=6.666667e-05 lockDuration=0.605000 workDone=148339412 iteratons=13428 overshoot=15885 523 | threads=3 lockInterval=6.666667e-05 lockDuration=0.610000 workDone=133403119 iteratons=11994 overshoot=6206 524 | threads=3 lockInterval=6.666667e-05 lockDuration=0.615000 workDone=128195407 iteratons=11530 overshoot=17632 525 | threads=3 lockInterval=6.666667e-05 lockDuration=0.620000 workDone=158877359 iteratons=14281 overshoot=35287 526 | threads=3 lockInterval=6.666667e-05 lockDuration=0.625000 workDone=140393205 iteratons=12465 overshoot=38659 527 | threads=3 lockInterval=6.666667e-05 lockDuration=0.630000 workDone=133502244 iteratons=12164 overshoot=16865 528 | threads=3 lockInterval=6.666667e-05 lockDuration=0.635000 workDone=159241052 iteratons=14237 overshoot=40072 529 | threads=3 lockInterval=6.666667e-05 lockDuration=0.640000 workDone=145049642 iteratons=13149 overshoot=23796 530 | threads=3 lockInterval=6.666667e-05 lockDuration=0.645000 workDone=125715645 iteratons=11444 overshoot=14487 531 | threads=3 lockInterval=6.666667e-05 lockDuration=0.650000 workDone=131250367 iteratons=11886 overshoot=27308 532 | threads=3 lockInterval=6.666667e-05 lockDuration=0.655000 workDone=128164001 iteratons=11584 overshoot=17514 533 | threads=3 lockInterval=6.666667e-05 lockDuration=0.660000 workDone=133016571 iteratons=11891 overshoot=17761 534 | threads=3 lockInterval=6.666667e-05 lockDuration=0.665000 workDone=130432054 iteratons=11723 overshoot=14646 535 | threads=3 lockInterval=6.666667e-05 lockDuration=0.670000 workDone=114351531 iteratons=10314 overshoot=21209 536 | threads=3 lockInterval=6.666667e-05 lockDuration=0.675000 workDone=134364967 iteratons=12114 overshoot=20578 537 | threads=3 lockInterval=6.666667e-05 lockDuration=0.680000 workDone=122320609 iteratons=10901 overshoot=8655 538 | threads=3 lockInterval=6.666667e-05 lockDuration=0.685000 workDone=114625933 iteratons=10383 overshoot=17578 539 | threads=3 lockInterval=6.666667e-05 lockDuration=0.690000 workDone=125413691 iteratons=11297 overshoot=29383 540 | threads=3 lockInterval=6.666667e-05 lockDuration=0.695000 workDone=107868154 iteratons=9768 overshoot=32692 541 | threads=3 lockInterval=6.666667e-05 lockDuration=0.700000 workDone=112700836 iteratons=10155 overshoot=14889 542 | threads=3 lockInterval=6.666667e-05 lockDuration=0.705000 workDone=119168182 iteratons=10599 overshoot=6346 543 | threads=3 lockInterval=6.666667e-05 lockDuration=0.710000 workDone=110569738 iteratons=9953 overshoot=13200 544 | threads=3 lockInterval=6.666667e-05 lockDuration=0.715000 workDone=107883659 iteratons=9773 overshoot=10608 545 | threads=3 lockInterval=6.666667e-05 lockDuration=0.720000 workDone=108529379 iteratons=9772 overshoot=11043 546 | threads=3 lockInterval=6.666667e-05 lockDuration=0.725000 workDone=116893943 iteratons=10600 overshoot=53620 547 | threads=3 lockInterval=6.666667e-05 lockDuration=0.730000 workDone=108264183 iteratons=9809 overshoot=14964 548 | threads=3 lockInterval=6.666667e-05 lockDuration=0.735000 workDone=110981637 iteratons=10098 overshoot=90600 549 | threads=3 lockInterval=6.666667e-05 lockDuration=0.740000 workDone=111613504 iteratons=10101 overshoot=28404 550 | threads=3 lockInterval=6.666667e-05 lockDuration=0.745000 workDone=105241730 iteratons=9432 overshoot=13206 551 | threads=3 lockInterval=6.666667e-05 lockDuration=0.750000 workDone=111069695 iteratons=9982 overshoot=27981 552 | threads=3 lockInterval=6.666667e-05 lockDuration=0.755000 workDone=112768061 iteratons=10091 overshoot=35857 553 | threads=3 lockInterval=6.666667e-05 lockDuration=0.760000 workDone=112006966 iteratons=9940 overshoot=14064 554 | threads=3 lockInterval=6.666667e-05 lockDuration=0.765000 workDone=106988008 iteratons=9678 overshoot=14418 555 | threads=3 lockInterval=6.666667e-05 lockDuration=0.770000 workDone=108465786 iteratons=9682 overshoot=17509 556 | threads=3 lockInterval=6.666667e-05 lockDuration=0.775000 workDone=111879229 iteratons=10026 overshoot=21201 557 | threads=3 lockInterval=6.666667e-05 lockDuration=0.780000 workDone=97895565 iteratons=8735 overshoot=20334 558 | threads=3 lockInterval=6.666667e-05 lockDuration=0.785000 workDone=103043015 iteratons=9150 overshoot=19119 559 | threads=3 lockInterval=6.666667e-05 lockDuration=0.790000 workDone=94316810 iteratons=8549 overshoot=24924 560 | threads=3 lockInterval=6.666667e-05 lockDuration=0.795000 workDone=132188113 iteratons=11811 overshoot=26018 561 | threads=3 lockInterval=6.666667e-05 lockDuration=0.800000 workDone=94674670 iteratons=8625 overshoot=16638 562 | threads=3 lockInterval=6.666667e-05 lockDuration=0.805000 workDone=106274196 iteratons=9523 overshoot=23655 563 | threads=3 lockInterval=6.666667e-05 lockDuration=0.810000 workDone=124093545 iteratons=11201 overshoot=35331 564 | threads=3 lockInterval=6.666667e-05 lockDuration=0.815000 workDone=107235080 iteratons=9571 overshoot=18427 565 | threads=3 lockInterval=6.666667e-05 lockDuration=0.820000 workDone=110823616 iteratons=9928 overshoot=8623 566 | threads=3 lockInterval=6.666667e-05 lockDuration=0.825000 workDone=122611066 iteratons=11005 overshoot=30870 567 | threads=3 lockInterval=6.666667e-05 lockDuration=0.830000 workDone=105542524 iteratons=9418 overshoot=7324 568 | threads=3 lockInterval=6.666667e-05 lockDuration=0.835000 workDone=89254831 iteratons=8010 overshoot=36041 569 | threads=3 lockInterval=6.666667e-05 lockDuration=0.840000 workDone=95257603 iteratons=8456 overshoot=24844 570 | threads=3 lockInterval=6.666667e-05 lockDuration=0.845000 workDone=93370661 iteratons=8453 overshoot=20341 571 | threads=3 lockInterval=6.666667e-05 lockDuration=0.850000 workDone=82455816 iteratons=7341 overshoot=33418 572 | threads=3 lockInterval=6.666667e-05 lockDuration=0.855000 workDone=82163080 iteratons=7365 overshoot=30446 573 | threads=3 lockInterval=6.666667e-05 lockDuration=0.860000 workDone=87563546 iteratons=7766 overshoot=12987 574 | threads=3 lockInterval=6.666667e-05 lockDuration=0.865000 workDone=91621564 iteratons=8384 overshoot=19985 575 | threads=3 lockInterval=6.666667e-05 lockDuration=0.870000 workDone=86272371 iteratons=7748 overshoot=27357 576 | threads=3 lockInterval=6.666667e-05 lockDuration=0.875000 workDone=91589973 iteratons=8213 overshoot=11624 577 | threads=3 lockInterval=6.666667e-05 lockDuration=0.880000 workDone=88507145 iteratons=7950 overshoot=18597 578 | threads=3 lockInterval=6.666667e-05 lockDuration=0.885000 workDone=96420120 iteratons=8543 overshoot=22308 579 | threads=3 lockInterval=6.666667e-05 lockDuration=0.890000 workDone=82811415 iteratons=7331 overshoot=52729 580 | threads=3 lockInterval=6.666667e-05 lockDuration=0.895000 workDone=82539722 iteratons=7575 overshoot=45896 581 | threads=3 lockInterval=6.666667e-05 lockDuration=0.900000 workDone=78755269 iteratons=7172 overshoot=18844 582 | threads=3 lockInterval=6.666667e-05 lockDuration=0.905000 workDone=90777345 iteratons=8203 overshoot=58726 583 | threads=3 lockInterval=6.666667e-05 lockDuration=0.910000 workDone=88731916 iteratons=7980 overshoot=48703 584 | threads=3 lockInterval=6.666667e-05 lockDuration=0.915000 workDone=91290944 iteratons=8168 overshoot=13528 585 | threads=3 lockInterval=6.666667e-05 lockDuration=0.920000 workDone=78107520 iteratons=6978 overshoot=20772 586 | threads=3 lockInterval=6.666667e-05 lockDuration=0.925000 workDone=91427298 iteratons=8169 overshoot=34415 587 | threads=3 lockInterval=6.666667e-05 lockDuration=0.930000 workDone=79371803 iteratons=7172 overshoot=50370 588 | threads=3 lockInterval=6.666667e-05 lockDuration=0.935000 workDone=80722169 iteratons=7354 overshoot=32002 589 | threads=3 lockInterval=6.666667e-05 lockDuration=0.940000 workDone=88985678 iteratons=8010 overshoot=6916 590 | threads=3 lockInterval=6.666667e-05 lockDuration=0.945000 workDone=83444836 iteratons=7654 overshoot=2325 591 | threads=3 lockInterval=6.666667e-05 lockDuration=0.950000 workDone=84858446 iteratons=7535 overshoot=31934 592 | threads=3 lockInterval=6.666667e-05 lockDuration=0.955000 workDone=93906833 iteratons=8475 overshoot=25847 593 | threads=3 lockInterval=6.666667e-05 lockDuration=0.960000 workDone=83529268 iteratons=7521 overshoot=23904 594 | threads=3 lockInterval=6.666667e-05 lockDuration=0.965000 workDone=85005442 iteratons=7611 overshoot=44100 595 | threads=3 lockInterval=6.666667e-05 lockDuration=0.970000 workDone=81014249 iteratons=7375 overshoot=39467 596 | threads=3 lockInterval=6.666667e-05 lockDuration=0.975000 workDone=89744307 iteratons=8078 overshoot=77541 597 | threads=3 lockInterval=6.666667e-05 lockDuration=0.980000 workDone=82771505 iteratons=7454 overshoot=40032 598 | threads=3 lockInterval=6.666667e-05 lockDuration=0.985000 workDone=91454687 iteratons=8439 overshoot=78742 599 | threads=3 lockInterval=6.666667e-05 lockDuration=0.990000 workDone=99650268 iteratons=9181 overshoot=7141 600 | threads=3 lockInterval=6.666667e-05 lockDuration=0.995000 workDone=100872230 iteratons=8994 overshoot=50719 601 | threads=4 lockInterval=6.666667e-05 lockDuration=0.000000 workDone=436248018 iteratons=38931 overshoot=17080 602 | threads=4 lockInterval=6.666667e-05 lockDuration=0.005000 workDone=515291912 iteratons=46024 overshoot=54439 603 | threads=4 lockInterval=6.666667e-05 lockDuration=0.010000 workDone=554171664 iteratons=50056 overshoot=56806 604 | threads=4 lockInterval=6.666667e-05 lockDuration=0.015000 workDone=468990304 iteratons=42142 overshoot=41300 605 | threads=4 lockInterval=6.666667e-05 lockDuration=0.020000 workDone=504873337 iteratons=45441 overshoot=34536 606 | threads=4 lockInterval=6.666667e-05 lockDuration=0.025000 workDone=570505012 iteratons=51508 overshoot=30715 607 | threads=4 lockInterval=6.666667e-05 lockDuration=0.030000 workDone=568839063 iteratons=51209 overshoot=46774 608 | threads=4 lockInterval=6.666667e-05 lockDuration=0.035000 workDone=552609955 iteratons=49693 overshoot=44771 609 | threads=4 lockInterval=6.666667e-05 lockDuration=0.040000 workDone=507715273 iteratons=45441 overshoot=15066 610 | threads=4 lockInterval=6.666667e-05 lockDuration=0.045000 workDone=466065258 iteratons=42113 overshoot=16086 611 | threads=4 lockInterval=6.666667e-05 lockDuration=0.050000 workDone=471419276 iteratons=42266 overshoot=9775 612 | threads=4 lockInterval=6.666667e-05 lockDuration=0.055000 workDone=461483443 iteratons=41699 overshoot=9811 613 | threads=4 lockInterval=6.666667e-05 lockDuration=0.060000 workDone=463378581 iteratons=41419 overshoot=33629 614 | threads=4 lockInterval=6.666667e-05 lockDuration=0.065000 workDone=509664294 iteratons=46092 overshoot=42935 615 | threads=4 lockInterval=6.666667e-05 lockDuration=0.070000 workDone=452059025 iteratons=40481 overshoot=66624 616 | threads=4 lockInterval=6.666667e-05 lockDuration=0.075000 workDone=466229008 iteratons=41790 overshoot=35396 617 | threads=4 lockInterval=6.666667e-05 lockDuration=0.080000 workDone=384436798 iteratons=34337 overshoot=53091 618 | threads=4 lockInterval=6.666667e-05 lockDuration=0.085000 workDone=462794405 iteratons=41702 overshoot=11525 619 | threads=4 lockInterval=6.666667e-05 lockDuration=0.090000 workDone=470703668 iteratons=42531 overshoot=82900 620 | threads=4 lockInterval=6.666667e-05 lockDuration=0.095000 workDone=417350938 iteratons=37739 overshoot=34123 621 | threads=4 lockInterval=6.666667e-05 lockDuration=0.100000 workDone=429160873 iteratons=38656 overshoot=33885 622 | threads=4 lockInterval=6.666667e-05 lockDuration=0.105000 workDone=447188330 iteratons=40489 overshoot=45989 623 | threads=4 lockInterval=6.666667e-05 lockDuration=0.110000 workDone=434088997 iteratons=38893 overshoot=43597 624 | threads=4 lockInterval=6.666667e-05 lockDuration=0.115000 workDone=425638896 iteratons=38466 overshoot=42308 625 | threads=4 lockInterval=6.666667e-05 lockDuration=0.120000 workDone=419457181 iteratons=37871 overshoot=29315 626 | threads=4 lockInterval=6.666667e-05 lockDuration=0.125000 workDone=386629838 iteratons=34831 overshoot=2350 627 | threads=4 lockInterval=6.666667e-05 lockDuration=0.130000 workDone=387726444 iteratons=34811 overshoot=2894 628 | threads=4 lockInterval=6.666667e-05 lockDuration=0.135000 workDone=389567129 iteratons=35196 overshoot=68083 629 | threads=4 lockInterval=6.666667e-05 lockDuration=0.140000 workDone=360149076 iteratons=32357 overshoot=63656 630 | threads=4 lockInterval=6.666667e-05 lockDuration=0.145000 workDone=382907732 iteratons=34506 overshoot=74734 631 | threads=4 lockInterval=6.666667e-05 lockDuration=0.150000 workDone=390856215 iteratons=35036 overshoot=28779 632 | threads=4 lockInterval=6.666667e-05 lockDuration=0.155000 workDone=392093773 iteratons=35340 overshoot=33804 633 | threads=4 lockInterval=6.666667e-05 lockDuration=0.160000 workDone=391994468 iteratons=35300 overshoot=38825 634 | threads=4 lockInterval=6.666667e-05 lockDuration=0.165000 workDone=387426183 iteratons=35072 overshoot=81798 635 | threads=4 lockInterval=6.666667e-05 lockDuration=0.170000 workDone=359019383 iteratons=32204 overshoot=39700 636 | threads=4 lockInterval=6.666667e-05 lockDuration=0.175000 workDone=374940653 iteratons=33746 overshoot=24422 637 | threads=4 lockInterval=6.666667e-05 lockDuration=0.180000 workDone=354469834 iteratons=31804 overshoot=39718 638 | threads=4 lockInterval=6.666667e-05 lockDuration=0.185000 workDone=334545432 iteratons=30216 overshoot=23198 639 | threads=4 lockInterval=6.666667e-05 lockDuration=0.190000 workDone=370547631 iteratons=33447 overshoot=17515 640 | threads=4 lockInterval=6.666667e-05 lockDuration=0.195000 workDone=357754878 iteratons=32203 overshoot=23975 641 | threads=4 lockInterval=6.666667e-05 lockDuration=0.200000 workDone=350348381 iteratons=31584 overshoot=5959 642 | threads=4 lockInterval=6.666667e-05 lockDuration=0.205000 workDone=342405811 iteratons=30748 overshoot=66125 643 | threads=4 lockInterval=6.666667e-05 lockDuration=0.210000 workDone=359962580 iteratons=32512 overshoot=8819 644 | threads=4 lockInterval=6.666667e-05 lockDuration=0.215000 workDone=382307089 iteratons=34266 overshoot=19480 645 | threads=4 lockInterval=6.666667e-05 lockDuration=0.220000 workDone=353540751 iteratons=31901 overshoot=2914 646 | threads=4 lockInterval=6.666667e-05 lockDuration=0.225000 workDone=333922617 iteratons=30187 overshoot=53204 647 | threads=4 lockInterval=6.666667e-05 lockDuration=0.230000 workDone=337405279 iteratons=30462 overshoot=14757 648 | threads=4 lockInterval=6.666667e-05 lockDuration=0.235000 workDone=331906720 iteratons=29784 overshoot=8569 649 | threads=4 lockInterval=6.666667e-05 lockDuration=0.240000 workDone=323157141 iteratons=29296 overshoot=43041 650 | threads=4 lockInterval=6.666667e-05 lockDuration=0.245000 workDone=328798386 iteratons=29538 overshoot=19266 651 | threads=4 lockInterval=6.666667e-05 lockDuration=0.250000 workDone=314974498 iteratons=28397 overshoot=5745 652 | threads=4 lockInterval=6.666667e-05 lockDuration=0.255000 workDone=304144599 iteratons=27445 overshoot=14798 653 | threads=4 lockInterval=6.666667e-05 lockDuration=0.260000 workDone=318784390 iteratons=28671 overshoot=31283 654 | threads=4 lockInterval=6.666667e-05 lockDuration=0.265000 workDone=318105117 iteratons=28402 overshoot=18525 655 | threads=4 lockInterval=6.666667e-05 lockDuration=0.270000 workDone=324312577 iteratons=29218 overshoot=12514 656 | threads=4 lockInterval=6.666667e-05 lockDuration=0.275000 workDone=302452380 iteratons=27318 overshoot=10644 657 | threads=4 lockInterval=6.666667e-05 lockDuration=0.280000 workDone=289902422 iteratons=26047 overshoot=46509 658 | threads=4 lockInterval=6.666667e-05 lockDuration=0.285000 workDone=306184601 iteratons=27537 overshoot=23260 659 | threads=4 lockInterval=6.666667e-05 lockDuration=0.290000 workDone=295934565 iteratons=26733 overshoot=44172 660 | threads=4 lockInterval=6.666667e-05 lockDuration=0.295000 workDone=274478951 iteratons=24888 overshoot=12031 661 | threads=4 lockInterval=6.666667e-05 lockDuration=0.300000 workDone=260252348 iteratons=23562 overshoot=9154 662 | threads=4 lockInterval=6.666667e-05 lockDuration=0.305000 workDone=276801772 iteratons=24930 overshoot=15431 663 | threads=4 lockInterval=6.666667e-05 lockDuration=0.310000 workDone=255674672 iteratons=22955 overshoot=12937 664 | threads=4 lockInterval=6.666667e-05 lockDuration=0.315000 workDone=276856987 iteratons=24858 overshoot=27623 665 | threads=4 lockInterval=6.666667e-05 lockDuration=0.320000 workDone=262980671 iteratons=23666 overshoot=13145 666 | threads=4 lockInterval=6.666667e-05 lockDuration=0.325000 workDone=278671723 iteratons=25056 overshoot=26070 667 | threads=4 lockInterval=6.666667e-05 lockDuration=0.330000 workDone=272334931 iteratons=24492 overshoot=20622 668 | threads=4 lockInterval=6.666667e-05 lockDuration=0.335000 workDone=267088163 iteratons=24137 overshoot=5735 669 | threads=4 lockInterval=6.666667e-05 lockDuration=0.340000 workDone=254128711 iteratons=22986 overshoot=24608 670 | threads=4 lockInterval=6.666667e-05 lockDuration=0.345000 workDone=247300213 iteratons=22386 overshoot=28416 671 | threads=4 lockInterval=6.666667e-05 lockDuration=0.350000 workDone=236591157 iteratons=21355 overshoot=12446 672 | threads=4 lockInterval=6.666667e-05 lockDuration=0.355000 workDone=231776999 iteratons=20758 overshoot=35923 673 | threads=4 lockInterval=6.666667e-05 lockDuration=0.360000 workDone=228926775 iteratons=20842 overshoot=16478 674 | threads=4 lockInterval=6.666667e-05 lockDuration=0.365000 workDone=224980699 iteratons=20200 overshoot=31509 675 | threads=4 lockInterval=6.666667e-05 lockDuration=0.370000 workDone=253491185 iteratons=22821 overshoot=23375 676 | threads=4 lockInterval=6.666667e-05 lockDuration=0.375000 workDone=223087661 iteratons=20032 overshoot=19100 677 | threads=4 lockInterval=6.666667e-05 lockDuration=0.380000 workDone=225665880 iteratons=20263 overshoot=27393 678 | threads=4 lockInterval=6.666667e-05 lockDuration=0.385000 workDone=244469505 iteratons=22147 overshoot=7140 679 | threads=4 lockInterval=6.666667e-05 lockDuration=0.390000 workDone=231615331 iteratons=20811 overshoot=32189 680 | threads=4 lockInterval=6.666667e-05 lockDuration=0.395000 workDone=206579176 iteratons=18745 overshoot=38333 681 | threads=4 lockInterval=6.666667e-05 lockDuration=0.400000 workDone=202807135 iteratons=18311 overshoot=25981 682 | threads=4 lockInterval=6.666667e-05 lockDuration=0.405000 workDone=207378992 iteratons=18593 overshoot=25268 683 | threads=4 lockInterval=6.666667e-05 lockDuration=0.410000 workDone=199446474 iteratons=18067 overshoot=21128 684 | threads=4 lockInterval=6.666667e-05 lockDuration=0.415000 workDone=198712529 iteratons=17830 overshoot=14670 685 | threads=4 lockInterval=6.666667e-05 lockDuration=0.420000 workDone=181332577 iteratons=16392 overshoot=26347 686 | threads=4 lockInterval=6.666667e-05 lockDuration=0.425000 workDone=181683564 iteratons=16271 overshoot=16314 687 | threads=4 lockInterval=6.666667e-05 lockDuration=0.430000 workDone=203382072 iteratons=18334 overshoot=15675 688 | threads=4 lockInterval=6.666667e-05 lockDuration=0.435000 workDone=185462941 iteratons=16672 overshoot=31944 689 | threads=4 lockInterval=6.666667e-05 lockDuration=0.440000 workDone=174916660 iteratons=15786 overshoot=39023 690 | threads=4 lockInterval=6.666667e-05 lockDuration=0.445000 workDone=177317360 iteratons=16112 overshoot=12616 691 | threads=4 lockInterval=6.666667e-05 lockDuration=0.450000 workDone=171574234 iteratons=15398 overshoot=31669 692 | threads=4 lockInterval=6.666667e-05 lockDuration=0.455000 workDone=167509120 iteratons=15050 overshoot=9129 693 | threads=4 lockInterval=6.666667e-05 lockDuration=0.460000 workDone=170222619 iteratons=15376 overshoot=17070 694 | threads=4 lockInterval=6.666667e-05 lockDuration=0.465000 workDone=163880099 iteratons=14824 overshoot=20664 695 | threads=4 lockInterval=6.666667e-05 lockDuration=0.470000 workDone=150986546 iteratons=13659 overshoot=49511 696 | threads=4 lockInterval=6.666667e-05 lockDuration=0.475000 workDone=163291493 iteratons=14753 overshoot=25353 697 | threads=4 lockInterval=6.666667e-05 lockDuration=0.480000 workDone=164388763 iteratons=14929 overshoot=34360 698 | threads=4 lockInterval=6.666667e-05 lockDuration=0.485000 workDone=160119178 iteratons=14527 overshoot=31005 699 | threads=4 lockInterval=6.666667e-05 lockDuration=0.490000 workDone=159747113 iteratons=14307 overshoot=18480 700 | threads=4 lockInterval=6.666667e-05 lockDuration=0.495000 workDone=152456736 iteratons=13937 overshoot=57163 701 | threads=4 lockInterval=6.666667e-05 lockDuration=0.500000 workDone=142583869 iteratons=12930 overshoot=30126 702 | threads=4 lockInterval=6.666667e-05 lockDuration=0.505000 workDone=166310777 iteratons=14869 overshoot=23680 703 | threads=4 lockInterval=6.666667e-05 lockDuration=0.510000 workDone=154600714 iteratons=13905 overshoot=27994 704 | threads=4 lockInterval=6.666667e-05 lockDuration=0.515000 workDone=138820082 iteratons=12515 overshoot=29154 705 | threads=4 lockInterval=6.666667e-05 lockDuration=0.520000 workDone=133546790 iteratons=12153 overshoot=9650 706 | threads=4 lockInterval=6.666667e-05 lockDuration=0.525000 workDone=149320057 iteratons=13618 overshoot=38146 707 | threads=4 lockInterval=6.666667e-05 lockDuration=0.530000 workDone=148473005 iteratons=13412 overshoot=43419 708 | threads=4 lockInterval=6.666667e-05 lockDuration=0.535000 workDone=136557716 iteratons=12258 overshoot=19561 709 | threads=4 lockInterval=6.666667e-05 lockDuration=0.540000 workDone=135412851 iteratons=12198 overshoot=75642 710 | threads=4 lockInterval=6.666667e-05 lockDuration=0.545000 workDone=136901986 iteratons=12419 overshoot=18820 711 | threads=4 lockInterval=6.666667e-05 lockDuration=0.550000 workDone=128072894 iteratons=11494 overshoot=45681 712 | threads=4 lockInterval=6.666667e-05 lockDuration=0.555000 workDone=118135755 iteratons=10647 overshoot=30328 713 | threads=4 lockInterval=6.666667e-05 lockDuration=0.560000 workDone=180598213 iteratons=16323 overshoot=22287 714 | threads=4 lockInterval=6.666667e-05 lockDuration=0.565000 workDone=134760549 iteratons=12092 overshoot=23243 715 | threads=4 lockInterval=6.666667e-05 lockDuration=0.570000 workDone=129782990 iteratons=11687 overshoot=25904 716 | threads=4 lockInterval=6.666667e-05 lockDuration=0.575000 workDone=153933912 iteratons=13900 overshoot=41657 717 | threads=4 lockInterval=6.666667e-05 lockDuration=0.580000 workDone=144190412 iteratons=13062 overshoot=47907 718 | threads=4 lockInterval=6.666667e-05 lockDuration=0.585000 workDone=135858010 iteratons=12225 overshoot=30671 719 | threads=4 lockInterval=6.666667e-05 lockDuration=0.590000 workDone=151065088 iteratons=13457 overshoot=25374 720 | threads=4 lockInterval=6.666667e-05 lockDuration=0.595000 workDone=119540785 iteratons=10885 overshoot=24560 721 | threads=4 lockInterval=6.666667e-05 lockDuration=0.600000 workDone=134575071 iteratons=12167 overshoot=40492 722 | threads=4 lockInterval=6.666667e-05 lockDuration=0.605000 workDone=132014049 iteratons=12009 overshoot=23086 723 | threads=4 lockInterval=6.666667e-05 lockDuration=0.610000 workDone=125825300 iteratons=11335 overshoot=15102 724 | threads=4 lockInterval=6.666667e-05 lockDuration=0.615000 workDone=120155926 iteratons=10770 overshoot=17262 725 | threads=4 lockInterval=6.666667e-05 lockDuration=0.620000 workDone=114909634 iteratons=10391 overshoot=21504 726 | threads=4 lockInterval=6.666667e-05 lockDuration=0.625000 workDone=116978642 iteratons=10431 overshoot=7378 727 | threads=4 lockInterval=6.666667e-05 lockDuration=0.630000 workDone=125859343 iteratons=11491 overshoot=21183 728 | threads=4 lockInterval=6.666667e-05 lockDuration=0.635000 workDone=121176933 iteratons=10896 overshoot=24399 729 | threads=4 lockInterval=6.666667e-05 lockDuration=0.640000 workDone=107691608 iteratons=9745 overshoot=36637 730 | threads=4 lockInterval=6.666667e-05 lockDuration=0.645000 workDone=115017018 iteratons=10344 overshoot=21851 731 | threads=4 lockInterval=6.666667e-05 lockDuration=0.650000 workDone=101095338 iteratons=9152 overshoot=19293 732 | threads=4 lockInterval=6.666667e-05 lockDuration=0.655000 workDone=98189518 iteratons=8821 overshoot=65593 733 | threads=4 lockInterval=6.666667e-05 lockDuration=0.660000 workDone=95331615 iteratons=8430 overshoot=34794 734 | threads=4 lockInterval=6.666667e-05 lockDuration=0.665000 workDone=101764119 iteratons=9061 overshoot=16237 735 | threads=4 lockInterval=6.666667e-05 lockDuration=0.670000 workDone=105062827 iteratons=9519 overshoot=42510 736 | threads=4 lockInterval=6.666667e-05 lockDuration=0.675000 workDone=95488635 iteratons=8590 overshoot=32692 737 | threads=4 lockInterval=6.666667e-05 lockDuration=0.680000 workDone=92950366 iteratons=8247 overshoot=42424 738 | threads=4 lockInterval=6.666667e-05 lockDuration=0.685000 workDone=100782764 iteratons=9096 overshoot=18894 739 | threads=4 lockInterval=6.666667e-05 lockDuration=0.690000 workDone=93050997 iteratons=8412 overshoot=21995 740 | threads=4 lockInterval=6.666667e-05 lockDuration=0.695000 workDone=102515257 iteratons=9334 overshoot=9002 741 | threads=4 lockInterval=6.666667e-05 lockDuration=0.700000 workDone=97514984 iteratons=8773 overshoot=23974 742 | threads=4 lockInterval=6.666667e-05 lockDuration=0.705000 workDone=96091403 iteratons=8670 overshoot=48391 743 | threads=4 lockInterval=6.666667e-05 lockDuration=0.710000 workDone=98402256 iteratons=8870 overshoot=34058 744 | threads=4 lockInterval=6.666667e-05 lockDuration=0.715000 workDone=95266479 iteratons=8667 overshoot=13614 745 | threads=4 lockInterval=6.666667e-05 lockDuration=0.720000 workDone=90666617 iteratons=8170 overshoot=27787 746 | threads=4 lockInterval=6.666667e-05 lockDuration=0.725000 workDone=91951001 iteratons=8343 overshoot=99777 747 | threads=4 lockInterval=6.666667e-05 lockDuration=0.730000 workDone=88395782 iteratons=7963 overshoot=23589 748 | threads=4 lockInterval=6.666667e-05 lockDuration=0.735000 workDone=87766039 iteratons=7873 overshoot=36775 749 | threads=4 lockInterval=6.666667e-05 lockDuration=0.740000 workDone=87868487 iteratons=8027 overshoot=37820 750 | threads=4 lockInterval=6.666667e-05 lockDuration=0.745000 workDone=132985758 iteratons=11995 overshoot=10762 751 | threads=4 lockInterval=6.666667e-05 lockDuration=0.750000 workDone=91894608 iteratons=8363 overshoot=35917 752 | threads=4 lockInterval=6.666667e-05 lockDuration=0.755000 workDone=102808188 iteratons=9131 overshoot=10500 753 | threads=4 lockInterval=6.666667e-05 lockDuration=0.760000 workDone=128605155 iteratons=11474 overshoot=23249 754 | threads=4 lockInterval=6.666667e-05 lockDuration=0.765000 workDone=113024484 iteratons=10140 overshoot=11951 755 | threads=4 lockInterval=6.666667e-05 lockDuration=0.770000 workDone=81706558 iteratons=7307 overshoot=82500 756 | threads=4 lockInterval=6.666667e-05 lockDuration=0.775000 workDone=88382690 iteratons=7927 overshoot=30535 757 | threads=4 lockInterval=6.666667e-05 lockDuration=0.780000 workDone=85570323 iteratons=7662 overshoot=20937 758 | threads=4 lockInterval=6.666667e-05 lockDuration=0.785000 workDone=87191343 iteratons=7802 overshoot=64840 759 | threads=4 lockInterval=6.666667e-05 lockDuration=0.790000 workDone=87197531 iteratons=7885 overshoot=13513 760 | threads=4 lockInterval=6.666667e-05 lockDuration=0.795000 workDone=86622861 iteratons=7769 overshoot=28539 761 | threads=4 lockInterval=6.666667e-05 lockDuration=0.800000 workDone=78982900 iteratons=7138 overshoot=41503 762 | threads=4 lockInterval=6.666667e-05 lockDuration=0.805000 workDone=86803383 iteratons=7796 overshoot=23822 763 | threads=4 lockInterval=6.666667e-05 lockDuration=0.810000 workDone=81382175 iteratons=7438 overshoot=52884 764 | threads=4 lockInterval=6.666667e-05 lockDuration=0.815000 workDone=80292862 iteratons=7170 overshoot=11982 765 | threads=4 lockInterval=6.666667e-05 lockDuration=0.820000 workDone=84925745 iteratons=7660 overshoot=61764 766 | threads=4 lockInterval=6.666667e-05 lockDuration=0.825000 workDone=93316614 iteratons=8393 overshoot=95681 767 | threads=4 lockInterval=6.666667e-05 lockDuration=0.830000 workDone=80271267 iteratons=7297 overshoot=19973 768 | threads=4 lockInterval=6.666667e-05 lockDuration=0.835000 workDone=79922811 iteratons=7126 overshoot=26139 769 | threads=4 lockInterval=6.666667e-05 lockDuration=0.840000 workDone=74602488 iteratons=6594 overshoot=22608 770 | threads=4 lockInterval=6.666667e-05 lockDuration=0.845000 workDone=78306415 iteratons=7152 overshoot=21928 771 | threads=4 lockInterval=6.666667e-05 lockDuration=0.850000 workDone=74644539 iteratons=6622 overshoot=35074 772 | threads=4 lockInterval=6.666667e-05 lockDuration=0.855000 workDone=77526269 iteratons=6903 overshoot=58895 773 | threads=4 lockInterval=6.666667e-05 lockDuration=0.860000 workDone=76417768 iteratons=6828 overshoot=30096 774 | threads=4 lockInterval=6.666667e-05 lockDuration=0.865000 workDone=75464729 iteratons=6840 overshoot=11959 775 | threads=4 lockInterval=6.666667e-05 lockDuration=0.870000 workDone=77221337 iteratons=6972 overshoot=32426 776 | threads=4 lockInterval=6.666667e-05 lockDuration=0.875000 workDone=72033230 iteratons=6430 overshoot=17509 777 | threads=4 lockInterval=6.666667e-05 lockDuration=0.880000 workDone=73560361 iteratons=6588 overshoot=15550 778 | threads=4 lockInterval=6.666667e-05 lockDuration=0.885000 workDone=72448396 iteratons=6415 overshoot=42033 779 | threads=4 lockInterval=6.666667e-05 lockDuration=0.890000 workDone=73883424 iteratons=6616 overshoot=50118 780 | threads=4 lockInterval=6.666667e-05 lockDuration=0.895000 workDone=80000733 iteratons=7300 overshoot=41201 781 | threads=4 lockInterval=6.666667e-05 lockDuration=0.900000 workDone=75023401 iteratons=6693 overshoot=11544 782 | threads=4 lockInterval=6.666667e-05 lockDuration=0.905000 workDone=74169206 iteratons=6765 overshoot=53779 783 | threads=4 lockInterval=6.666667e-05 lockDuration=0.910000 workDone=79387754 iteratons=7147 overshoot=47011 784 | threads=4 lockInterval=6.666667e-05 lockDuration=0.915000 workDone=80410849 iteratons=7181 overshoot=70173 785 | threads=4 lockInterval=6.666667e-05 lockDuration=0.920000 workDone=73640395 iteratons=6589 overshoot=29652 786 | threads=4 lockInterval=6.666667e-05 lockDuration=0.925000 workDone=73132064 iteratons=6498 overshoot=20254 787 | threads=4 lockInterval=6.666667e-05 lockDuration=0.930000 workDone=70175676 iteratons=6343 overshoot=30459 788 | threads=4 lockInterval=6.666667e-05 lockDuration=0.935000 workDone=114067237 iteratons=10389 overshoot=27866 789 | threads=4 lockInterval=6.666667e-05 lockDuration=0.940000 workDone=82829429 iteratons=7508 overshoot=17526 790 | threads=4 lockInterval=6.666667e-05 lockDuration=0.945000 workDone=73740132 iteratons=6667 overshoot=71772 791 | threads=4 lockInterval=6.666667e-05 lockDuration=0.950000 workDone=102775420 iteratons=9168 overshoot=19782 792 | threads=4 lockInterval=6.666667e-05 lockDuration=0.955000 workDone=89648673 iteratons=8195 overshoot=39257 793 | threads=4 lockInterval=6.666667e-05 lockDuration=0.960000 workDone=78849254 iteratons=7038 overshoot=22324 794 | threads=4 lockInterval=6.666667e-05 lockDuration=0.965000 workDone=74381805 iteratons=6616 overshoot=72824 795 | threads=4 lockInterval=6.666667e-05 lockDuration=0.970000 workDone=70703479 iteratons=6323 overshoot=74044 796 | threads=4 lockInterval=6.666667e-05 lockDuration=0.975000 workDone=76000906 iteratons=6851 overshoot=52881 797 | threads=4 lockInterval=6.666667e-05 lockDuration=0.980000 workDone=85207589 iteratons=7677 overshoot=63028 798 | threads=4 lockInterval=6.666667e-05 lockDuration=0.985000 workDone=86769056 iteratons=7826 overshoot=52944 799 | threads=4 lockInterval=6.666667e-05 lockDuration=0.990000 workDone=81739377 iteratons=7560 overshoot=36902 800 | threads=4 lockInterval=6.666667e-05 lockDuration=0.995000 workDone=103102597 iteratons=9341 overshoot=54099 801 | -------------------------------------------------------------------------------- /mutex_contention/plot/reference.txt: -------------------------------------------------------------------------------- 1 | threads=1 lockInterval=1.000000e-02 lockDuration=0.000000 workDone=175846366 iteratons=96 overshoot=2375716 2 | threads=1 lockInterval=1.000000e-02 lockDuration=0.005000 workDone=170577909 iteratons=118 overshoot=334996 3 | threads=1 lockInterval=1.000000e-02 lockDuration=0.010000 workDone=165762677 iteratons=112 overshoot=2988746 4 | threads=1 lockInterval=1.000000e-02 lockDuration=0.015000 workDone=173509435 iteratons=118 overshoot=593183 5 | threads=1 lockInterval=1.000000e-02 lockDuration=0.020000 workDone=173508762 iteratons=125 overshoot=588890 6 | threads=1 lockInterval=1.000000e-02 lockDuration=0.025000 workDone=177146870 iteratons=114 overshoot=1660158 7 | threads=1 lockInterval=1.000000e-02 lockDuration=0.030000 workDone=175426836 iteratons=98 overshoot=24255 8 | threads=1 lockInterval=1.000000e-02 lockDuration=0.035000 workDone=176264051 iteratons=101 overshoot=1078833 9 | threads=1 lockInterval=1.000000e-02 lockDuration=0.040000 workDone=174738046 iteratons=104 overshoot=336074 10 | threads=1 lockInterval=1.000000e-02 lockDuration=0.045000 workDone=175589810 iteratons=104 overshoot=714961 11 | threads=1 lockInterval=1.000000e-02 lockDuration=0.050000 workDone=175222586 iteratons=125 overshoot=781298 12 | threads=1 lockInterval=1.000000e-02 lockDuration=0.055000 workDone=175407817 iteratons=110 overshoot=627853 13 | threads=1 lockInterval=1.000000e-02 lockDuration=0.060000 workDone=176159319 iteratons=107 overshoot=758910 14 | threads=1 lockInterval=1.000000e-02 lockDuration=0.065000 workDone=177394154 iteratons=103 overshoot=2548739 15 | threads=1 lockInterval=1.000000e-02 lockDuration=0.070000 workDone=174293340 iteratons=109 overshoot=322002 16 | threads=1 lockInterval=1.000000e-02 lockDuration=0.075000 workDone=176875440 iteratons=105 overshoot=2012229 17 | threads=1 lockInterval=1.000000e-02 lockDuration=0.080000 workDone=176291291 iteratons=119 overshoot=1989725 18 | threads=1 lockInterval=1.000000e-02 lockDuration=0.085000 workDone=177553549 iteratons=100 overshoot=2237421 19 | threads=1 lockInterval=1.000000e-02 lockDuration=0.090000 workDone=175176066 iteratons=98 overshoot=441470 20 | threads=1 lockInterval=1.000000e-02 lockDuration=0.095000 workDone=175060703 iteratons=99 overshoot=109072 21 | threads=1 lockInterval=1.000000e-02 lockDuration=0.100000 workDone=175592804 iteratons=111 overshoot=804745 22 | threads=1 lockInterval=1.000000e-02 lockDuration=0.105000 workDone=175237194 iteratons=102 overshoot=362254 23 | threads=1 lockInterval=1.000000e-02 lockDuration=0.110000 workDone=176553479 iteratons=101 overshoot=2141014 24 | threads=1 lockInterval=1.000000e-02 lockDuration=0.115000 workDone=174575300 iteratons=117 overshoot=27932 25 | threads=1 lockInterval=1.000000e-02 lockDuration=0.120000 workDone=175274390 iteratons=102 overshoot=1002466 26 | threads=1 lockInterval=1.000000e-02 lockDuration=0.125000 workDone=174831158 iteratons=131 overshoot=225384 27 | threads=1 lockInterval=1.000000e-02 lockDuration=0.130000 workDone=176769174 iteratons=116 overshoot=2567238 28 | threads=1 lockInterval=1.000000e-02 lockDuration=0.135000 workDone=175419115 iteratons=101 overshoot=813581 29 | threads=1 lockInterval=1.000000e-02 lockDuration=0.140000 workDone=175213104 iteratons=107 overshoot=888831 30 | threads=1 lockInterval=1.000000e-02 lockDuration=0.145000 workDone=175885232 iteratons=113 overshoot=1419546 31 | threads=1 lockInterval=1.000000e-02 lockDuration=0.150000 workDone=175915776 iteratons=121 overshoot=2045282 32 | threads=1 lockInterval=1.000000e-02 lockDuration=0.155000 workDone=176521971 iteratons=101 overshoot=2493317 33 | threads=1 lockInterval=1.000000e-02 lockDuration=0.160000 workDone=173602586 iteratons=113 overshoot=146226 34 | threads=1 lockInterval=1.000000e-02 lockDuration=0.165000 workDone=175736927 iteratons=110 overshoot=1596978 35 | threads=1 lockInterval=1.000000e-02 lockDuration=0.170000 workDone=174090099 iteratons=119 overshoot=929064 36 | threads=1 lockInterval=1.000000e-02 lockDuration=0.175000 workDone=182978366 iteratons=102 overshoot=8583001 37 | threads=1 lockInterval=1.000000e-02 lockDuration=0.180000 workDone=173524266 iteratons=102 overshoot=69397 38 | threads=1 lockInterval=1.000000e-02 lockDuration=0.185000 workDone=172824571 iteratons=123 overshoot=121066 39 | threads=1 lockInterval=1.000000e-02 lockDuration=0.190000 workDone=169768618 iteratons=107 overshoot=712824 40 | threads=1 lockInterval=1.000000e-02 lockDuration=0.195000 workDone=172120379 iteratons=103 overshoot=66606 41 | threads=1 lockInterval=1.000000e-02 lockDuration=0.200000 workDone=175281900 iteratons=102 overshoot=1973170 42 | threads=1 lockInterval=1.000000e-02 lockDuration=0.205000 workDone=169944613 iteratons=115 overshoot=132155 43 | threads=1 lockInterval=1.000000e-02 lockDuration=0.210000 workDone=169852863 iteratons=113 overshoot=33476 44 | threads=1 lockInterval=1.000000e-02 lockDuration=0.215000 workDone=173627391 iteratons=105 overshoot=318517 45 | threads=1 lockInterval=1.000000e-02 lockDuration=0.220000 workDone=172394708 iteratons=109 overshoot=56442 46 | threads=1 lockInterval=1.000000e-02 lockDuration=0.225000 workDone=173768405 iteratons=100 overshoot=885674 47 | threads=1 lockInterval=1.000000e-02 lockDuration=0.230000 workDone=172948431 iteratons=107 overshoot=339962 48 | threads=1 lockInterval=1.000000e-02 lockDuration=0.235000 workDone=172977630 iteratons=102 overshoot=30646 49 | threads=1 lockInterval=1.000000e-02 lockDuration=0.240000 workDone=174039450 iteratons=104 overshoot=791077 50 | threads=1 lockInterval=1.000000e-02 lockDuration=0.245000 workDone=173375362 iteratons=124 overshoot=178490 51 | threads=1 lockInterval=1.000000e-02 lockDuration=0.250000 workDone=172357202 iteratons=113 overshoot=618612 52 | threads=1 lockInterval=1.000000e-02 lockDuration=0.255000 workDone=173203963 iteratons=101 overshoot=51687 53 | threads=1 lockInterval=1.000000e-02 lockDuration=0.260000 workDone=180568917 iteratons=118 overshoot=7473117 54 | threads=1 lockInterval=1.000000e-02 lockDuration=0.265000 workDone=172835196 iteratons=117 overshoot=304176 55 | threads=1 lockInterval=1.000000e-02 lockDuration=0.270000 workDone=173379237 iteratons=113 overshoot=798469 56 | threads=1 lockInterval=1.000000e-02 lockDuration=0.275000 workDone=173851492 iteratons=111 overshoot=697655 57 | threads=1 lockInterval=1.000000e-02 lockDuration=0.280000 workDone=173337395 iteratons=118 overshoot=29048 58 | threads=1 lockInterval=1.000000e-02 lockDuration=0.285000 workDone=172956425 iteratons=103 overshoot=673 59 | threads=1 lockInterval=1.000000e-02 lockDuration=0.290000 workDone=173499206 iteratons=105 overshoot=821531 60 | threads=1 lockInterval=1.000000e-02 lockDuration=0.295000 workDone=174019117 iteratons=118 overshoot=2022432 61 | threads=1 lockInterval=1.000000e-02 lockDuration=0.300000 workDone=172731630 iteratons=110 overshoot=405606 62 | threads=1 lockInterval=1.000000e-02 lockDuration=0.305000 workDone=173777134 iteratons=101 overshoot=1386898 63 | threads=1 lockInterval=1.000000e-02 lockDuration=0.310000 workDone=174333664 iteratons=108 overshoot=2545870 64 | threads=1 lockInterval=1.000000e-02 lockDuration=0.315000 workDone=173577395 iteratons=100 overshoot=1091269 65 | threads=1 lockInterval=1.000000e-02 lockDuration=0.320000 workDone=172275574 iteratons=117 overshoot=239533 66 | threads=1 lockInterval=1.000000e-02 lockDuration=0.325000 workDone=173730900 iteratons=106 overshoot=1089151 67 | threads=1 lockInterval=1.000000e-02 lockDuration=0.330000 workDone=172021956 iteratons=112 overshoot=78310 68 | threads=1 lockInterval=1.000000e-02 lockDuration=0.335000 workDone=172979592 iteratons=104 overshoot=325024 69 | threads=1 lockInterval=1.000000e-02 lockDuration=0.340000 workDone=171412445 iteratons=115 overshoot=94211 70 | threads=1 lockInterval=1.000000e-02 lockDuration=0.345000 workDone=172107300 iteratons=107 overshoot=88359 71 | threads=1 lockInterval=1.000000e-02 lockDuration=0.350000 workDone=172966287 iteratons=101 overshoot=225037 72 | threads=1 lockInterval=1.000000e-02 lockDuration=0.355000 workDone=172379418 iteratons=114 overshoot=91940 73 | threads=1 lockInterval=1.000000e-02 lockDuration=0.360000 workDone=172395234 iteratons=102 overshoot=473041 74 | threads=1 lockInterval=1.000000e-02 lockDuration=0.365000 workDone=171323427 iteratons=114 overshoot=42620 75 | threads=1 lockInterval=1.000000e-02 lockDuration=0.370000 workDone=170549251 iteratons=93 overshoot=266426 76 | threads=1 lockInterval=1.000000e-02 lockDuration=0.375000 workDone=164723335 iteratons=95 overshoot=889659 77 | threads=1 lockInterval=1.000000e-02 lockDuration=0.380000 workDone=170104181 iteratons=110 overshoot=35420 78 | threads=1 lockInterval=1.000000e-02 lockDuration=0.385000 workDone=168088266 iteratons=111 overshoot=247733 79 | threads=1 lockInterval=1.000000e-02 lockDuration=0.390000 workDone=169039349 iteratons=108 overshoot=1062816 80 | threads=1 lockInterval=1.000000e-02 lockDuration=0.395000 workDone=168617915 iteratons=103 overshoot=1077716 81 | threads=1 lockInterval=1.000000e-02 lockDuration=0.400000 workDone=173383995 iteratons=99 overshoot=1543904 82 | threads=1 lockInterval=1.000000e-02 lockDuration=0.405000 workDone=172097852 iteratons=105 overshoot=753019 83 | threads=1 lockInterval=1.000000e-02 lockDuration=0.410000 workDone=169213936 iteratons=103 overshoot=158238 84 | threads=1 lockInterval=1.000000e-02 lockDuration=0.415000 workDone=172707016 iteratons=102 overshoot=1616151 85 | threads=1 lockInterval=1.000000e-02 lockDuration=0.420000 workDone=172300822 iteratons=100 overshoot=1037387 86 | threads=1 lockInterval=1.000000e-02 lockDuration=0.425000 workDone=171306619 iteratons=102 overshoot=482570 87 | threads=1 lockInterval=1.000000e-02 lockDuration=0.430000 workDone=171747938 iteratons=105 overshoot=463954 88 | threads=1 lockInterval=1.000000e-02 lockDuration=0.435000 workDone=171171352 iteratons=107 overshoot=55152 89 | threads=1 lockInterval=1.000000e-02 lockDuration=0.440000 workDone=171705597 iteratons=115 overshoot=1008915 90 | threads=1 lockInterval=1.000000e-02 lockDuration=0.445000 workDone=171059876 iteratons=102 overshoot=211408 91 | threads=1 lockInterval=1.000000e-02 lockDuration=0.450000 workDone=169231524 iteratons=109 overshoot=383719 92 | threads=1 lockInterval=1.000000e-02 lockDuration=0.455000 workDone=166237325 iteratons=95 overshoot=493254 93 | threads=1 lockInterval=1.000000e-02 lockDuration=0.460000 workDone=168265883 iteratons=90 overshoot=858819 94 | threads=1 lockInterval=1.000000e-02 lockDuration=0.465000 workDone=167344519 iteratons=99 overshoot=216163 95 | threads=1 lockInterval=1.000000e-02 lockDuration=0.470000 workDone=170569829 iteratons=102 overshoot=1489676 96 | threads=1 lockInterval=1.000000e-02 lockDuration=0.475000 workDone=169248159 iteratons=111 overshoot=834718 97 | threads=1 lockInterval=1.000000e-02 lockDuration=0.480000 workDone=167822282 iteratons=101 overshoot=443010 98 | threads=1 lockInterval=1.000000e-02 lockDuration=0.485000 workDone=169482819 iteratons=107 overshoot=937554 99 | threads=1 lockInterval=1.000000e-02 lockDuration=0.490000 workDone=170550590 iteratons=110 overshoot=124242 100 | threads=1 lockInterval=1.000000e-02 lockDuration=0.495000 workDone=170835315 iteratons=94 overshoot=799066 101 | threads=1 lockInterval=1.000000e-02 lockDuration=0.500000 workDone=170266829 iteratons=111 overshoot=322887 102 | threads=1 lockInterval=1.000000e-02 lockDuration=0.505000 workDone=170130102 iteratons=111 overshoot=12147 103 | threads=1 lockInterval=1.000000e-02 lockDuration=0.510000 workDone=171068069 iteratons=116 overshoot=868098 104 | threads=1 lockInterval=1.000000e-02 lockDuration=0.515000 workDone=170839162 iteratons=94 overshoot=320943 105 | threads=1 lockInterval=1.000000e-02 lockDuration=0.520000 workDone=170442292 iteratons=100 overshoot=487806 106 | threads=1 lockInterval=1.000000e-02 lockDuration=0.525000 workDone=170142195 iteratons=107 overshoot=3114875 107 | threads=1 lockInterval=1.000000e-02 lockDuration=0.530000 workDone=170299582 iteratons=101 overshoot=11550 108 | threads=1 lockInterval=1.000000e-02 lockDuration=0.535000 workDone=172063961 iteratons=100 overshoot=861630 109 | threads=1 lockInterval=1.000000e-02 lockDuration=0.540000 workDone=171151923 iteratons=100 overshoot=1094907 110 | threads=1 lockInterval=1.000000e-02 lockDuration=0.545000 workDone=170573454 iteratons=105 overshoot=762663 111 | threads=1 lockInterval=1.000000e-02 lockDuration=0.550000 workDone=170540274 iteratons=117 overshoot=76173 112 | threads=1 lockInterval=1.000000e-02 lockDuration=0.555000 workDone=170617853 iteratons=90 overshoot=253316 113 | threads=1 lockInterval=1.000000e-02 lockDuration=0.560000 workDone=170727560 iteratons=104 overshoot=979000 114 | threads=1 lockInterval=1.000000e-02 lockDuration=0.565000 workDone=162726594 iteratons=101 overshoot=176930 115 | threads=1 lockInterval=1.000000e-02 lockDuration=0.570000 workDone=167720124 iteratons=99 overshoot=107224 116 | threads=1 lockInterval=1.000000e-02 lockDuration=0.575000 workDone=168577625 iteratons=103 overshoot=1339580 117 | threads=1 lockInterval=1.000000e-02 lockDuration=0.580000 workDone=166680983 iteratons=96 overshoot=1109826 118 | threads=1 lockInterval=1.000000e-02 lockDuration=0.585000 workDone=167174519 iteratons=110 overshoot=743163 119 | threads=1 lockInterval=1.000000e-02 lockDuration=0.590000 workDone=166262517 iteratons=99 overshoot=5120 120 | threads=1 lockInterval=1.000000e-02 lockDuration=0.595000 workDone=169785544 iteratons=108 overshoot=549965 121 | threads=1 lockInterval=1.000000e-02 lockDuration=0.600000 workDone=169201809 iteratons=108 overshoot=123010 122 | threads=1 lockInterval=1.000000e-02 lockDuration=0.605000 workDone=169796102 iteratons=99 overshoot=713209 123 | threads=1 lockInterval=1.000000e-02 lockDuration=0.610000 workDone=170857159 iteratons=110 overshoot=2190969 124 | threads=1 lockInterval=1.000000e-02 lockDuration=0.615000 workDone=170236329 iteratons=127 overshoot=373689 125 | threads=1 lockInterval=1.000000e-02 lockDuration=0.620000 workDone=169891177 iteratons=116 overshoot=346604 126 | threads=1 lockInterval=1.000000e-02 lockDuration=0.625000 workDone=169675281 iteratons=118 overshoot=103548 127 | threads=1 lockInterval=1.000000e-02 lockDuration=0.630000 workDone=170022988 iteratons=98 overshoot=879860 128 | threads=1 lockInterval=1.000000e-02 lockDuration=0.635000 workDone=169335163 iteratons=103 overshoot=582768 129 | threads=1 lockInterval=1.000000e-02 lockDuration=0.640000 workDone=169314263 iteratons=108 overshoot=154369 130 | threads=1 lockInterval=1.000000e-02 lockDuration=0.645000 workDone=169606505 iteratons=102 overshoot=148266 131 | threads=1 lockInterval=1.000000e-02 lockDuration=0.650000 workDone=169704287 iteratons=100 overshoot=425685 132 | threads=1 lockInterval=1.000000e-02 lockDuration=0.655000 workDone=169493798 iteratons=106 overshoot=551582 133 | threads=1 lockInterval=1.000000e-02 lockDuration=0.660000 workDone=169688201 iteratons=106 overshoot=153483 134 | threads=1 lockInterval=1.000000e-02 lockDuration=0.665000 workDone=168667525 iteratons=103 overshoot=466765 135 | threads=1 lockInterval=1.000000e-02 lockDuration=0.670000 workDone=168820253 iteratons=110 overshoot=91189 136 | threads=1 lockInterval=1.000000e-02 lockDuration=0.675000 workDone=170274762 iteratons=121 overshoot=938901 137 | threads=1 lockInterval=1.000000e-02 lockDuration=0.680000 workDone=169407902 iteratons=117 overshoot=684815 138 | threads=1 lockInterval=1.000000e-02 lockDuration=0.685000 workDone=170662314 iteratons=111 overshoot=2105420 139 | threads=1 lockInterval=1.000000e-02 lockDuration=0.690000 workDone=170476827 iteratons=110 overshoot=1483978 140 | threads=1 lockInterval=1.000000e-02 lockDuration=0.695000 workDone=168764338 iteratons=99 overshoot=57635 141 | threads=1 lockInterval=1.000000e-02 lockDuration=0.700000 workDone=169545543 iteratons=98 overshoot=805265 142 | threads=1 lockInterval=1.000000e-02 lockDuration=0.705000 workDone=169911951 iteratons=103 overshoot=1371651 143 | threads=1 lockInterval=1.000000e-02 lockDuration=0.710000 workDone=168658047 iteratons=107 overshoot=687779 144 | threads=1 lockInterval=1.000000e-02 lockDuration=0.715000 workDone=169199645 iteratons=108 overshoot=499702 145 | threads=1 lockInterval=1.000000e-02 lockDuration=0.720000 workDone=171348455 iteratons=102 overshoot=2692693 146 | threads=1 lockInterval=1.000000e-02 lockDuration=0.725000 workDone=170277852 iteratons=107 overshoot=1473698 147 | threads=1 lockInterval=1.000000e-02 lockDuration=0.730000 workDone=172556641 iteratons=97 overshoot=4187413 148 | threads=1 lockInterval=1.000000e-02 lockDuration=0.735000 workDone=168960888 iteratons=102 overshoot=173523 149 | threads=1 lockInterval=1.000000e-02 lockDuration=0.740000 workDone=168848233 iteratons=112 overshoot=666257 150 | threads=1 lockInterval=1.000000e-02 lockDuration=0.745000 workDone=169992142 iteratons=118 overshoot=1835317 151 | threads=1 lockInterval=1.000000e-02 lockDuration=0.750000 workDone=169174415 iteratons=102 overshoot=970164 152 | threads=1 lockInterval=1.000000e-02 lockDuration=0.755000 workDone=160720671 iteratons=92 overshoot=596301 153 | threads=1 lockInterval=1.000000e-02 lockDuration=0.760000 workDone=166419364 iteratons=94 overshoot=214738 154 | threads=1 lockInterval=1.000000e-02 lockDuration=0.765000 workDone=167001901 iteratons=113 overshoot=392054 155 | threads=1 lockInterval=1.000000e-02 lockDuration=0.770000 workDone=162205451 iteratons=94 overshoot=1462398 156 | threads=1 lockInterval=1.000000e-02 lockDuration=0.775000 workDone=163874087 iteratons=106 overshoot=421988 157 | threads=1 lockInterval=1.000000e-02 lockDuration=0.780000 workDone=167838131 iteratons=112 overshoot=291586 158 | threads=1 lockInterval=1.000000e-02 lockDuration=0.785000 workDone=168050092 iteratons=99 overshoot=843881 159 | threads=1 lockInterval=1.000000e-02 lockDuration=0.790000 workDone=168177927 iteratons=115 overshoot=421295 160 | threads=1 lockInterval=1.000000e-02 lockDuration=0.795000 workDone=171853286 iteratons=110 overshoot=3822579 161 | threads=1 lockInterval=1.000000e-02 lockDuration=0.800000 workDone=168643253 iteratons=107 overshoot=1396061 162 | threads=1 lockInterval=1.000000e-02 lockDuration=0.805000 workDone=168745451 iteratons=105 overshoot=1022621 163 | threads=1 lockInterval=1.000000e-02 lockDuration=0.810000 workDone=167753002 iteratons=101 overshoot=2104920 164 | threads=1 lockInterval=1.000000e-02 lockDuration=0.815000 workDone=167641700 iteratons=104 overshoot=569081 165 | threads=1 lockInterval=1.000000e-02 lockDuration=0.820000 workDone=168088031 iteratons=112 overshoot=845941 166 | threads=1 lockInterval=1.000000e-02 lockDuration=0.825000 workDone=169191541 iteratons=94 overshoot=1399526 167 | threads=1 lockInterval=1.000000e-02 lockDuration=0.830000 workDone=167505691 iteratons=105 overshoot=31474 168 | threads=1 lockInterval=1.000000e-02 lockDuration=0.835000 workDone=168939062 iteratons=117 overshoot=1265042 169 | threads=1 lockInterval=1.000000e-02 lockDuration=0.840000 workDone=168027540 iteratons=130 overshoot=177296 170 | threads=1 lockInterval=1.000000e-02 lockDuration=0.845000 workDone=173380608 iteratons=101 overshoot=5660707 171 | threads=1 lockInterval=1.000000e-02 lockDuration=0.850000 workDone=168595701 iteratons=105 overshoot=1199764 172 | threads=1 lockInterval=1.000000e-02 lockDuration=0.855000 workDone=168763220 iteratons=108 overshoot=1429711 173 | threads=1 lockInterval=1.000000e-02 lockDuration=0.860000 workDone=167201016 iteratons=109 overshoot=272586 174 | threads=1 lockInterval=1.000000e-02 lockDuration=0.865000 workDone=172291119 iteratons=85 overshoot=5132899 175 | threads=1 lockInterval=1.000000e-02 lockDuration=0.870000 workDone=167428855 iteratons=99 overshoot=384373 176 | threads=1 lockInterval=1.000000e-02 lockDuration=0.875000 workDone=167156599 iteratons=107 overshoot=146014 177 | threads=1 lockInterval=1.000000e-02 lockDuration=0.880000 workDone=167673674 iteratons=120 overshoot=447842 178 | threads=1 lockInterval=1.000000e-02 lockDuration=0.885000 workDone=167989848 iteratons=108 overshoot=1029282 179 | threads=1 lockInterval=1.000000e-02 lockDuration=0.890000 workDone=168477293 iteratons=118 overshoot=1982699 180 | threads=1 lockInterval=1.000000e-02 lockDuration=0.895000 workDone=167476419 iteratons=108 overshoot=533160 181 | threads=1 lockInterval=1.000000e-02 lockDuration=0.900000 workDone=167591396 iteratons=91 overshoot=1281136 182 | threads=1 lockInterval=1.000000e-02 lockDuration=0.905000 workDone=166459618 iteratons=114 overshoot=282249 183 | threads=1 lockInterval=1.000000e-02 lockDuration=0.910000 workDone=168971882 iteratons=117 overshoot=2442380 184 | threads=1 lockInterval=1.000000e-02 lockDuration=0.915000 workDone=167034753 iteratons=106 overshoot=743760 185 | threads=1 lockInterval=1.000000e-02 lockDuration=0.920000 workDone=167869129 iteratons=120 overshoot=915069 186 | threads=1 lockInterval=1.000000e-02 lockDuration=0.925000 workDone=168499939 iteratons=93 overshoot=1923388 187 | threads=1 lockInterval=1.000000e-02 lockDuration=0.930000 workDone=167267987 iteratons=107 overshoot=757524 188 | threads=1 lockInterval=1.000000e-02 lockDuration=0.935000 workDone=167295837 iteratons=107 overshoot=1334902 189 | threads=1 lockInterval=1.000000e-02 lockDuration=0.940000 workDone=158567014 iteratons=91 overshoot=68223 190 | threads=1 lockInterval=1.000000e-02 lockDuration=0.945000 workDone=166452840 iteratons=113 overshoot=1816779 191 | threads=1 lockInterval=1.000000e-02 lockDuration=0.950000 workDone=162081346 iteratons=96 overshoot=1721778 192 | threads=1 lockInterval=1.000000e-02 lockDuration=0.955000 workDone=163113926 iteratons=110 overshoot=444896 193 | threads=1 lockInterval=1.000000e-02 lockDuration=0.960000 workDone=163643865 iteratons=112 overshoot=543959 194 | threads=1 lockInterval=1.000000e-02 lockDuration=0.965000 workDone=167517224 iteratons=86 overshoot=2137684 195 | threads=1 lockInterval=1.000000e-02 lockDuration=0.970000 workDone=168462177 iteratons=106 overshoot=2632748 196 | threads=1 lockInterval=1.000000e-02 lockDuration=0.975000 workDone=166179579 iteratons=105 overshoot=283924 197 | threads=1 lockInterval=1.000000e-02 lockDuration=0.980000 workDone=166428971 iteratons=91 overshoot=210792 198 | threads=1 lockInterval=1.000000e-02 lockDuration=0.985000 workDone=166532226 iteratons=99 overshoot=481896 199 | threads=1 lockInterval=1.000000e-02 lockDuration=0.990000 workDone=166056774 iteratons=102 overshoot=200089 200 | threads=1 lockInterval=1.000000e-02 lockDuration=0.995000 workDone=168946594 iteratons=117 overshoot=3068289 -------------------------------------------------------------------------------- /mutex_time/Makefile: -------------------------------------------------------------------------------- 1 | main: 2 | g++ -o mutex_time -O2 mutex_time.cc -lpthread -lrt 3 | 4 | -------------------------------------------------------------------------------- /mutex_time/draw_mutex_time.py: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env python 2 | import numpy as np 3 | import matplotlib.pyplot as plt 4 | 5 | N = 1 6 | i5 = (34.2) 7 | 8 | ind = np.arange(N) # the x locations for the groups 9 | width = 0.35 # the width of the bars 10 | 11 | fig, ax = plt.subplots() 12 | rects1 = ax.barh(ind, i5, width, color='r') 13 | 14 | i7 = (21.0) 15 | rects2 = ax.barh(ind+width, i7, width, color='y') 16 | plt.subplots_adjust(left=0.115, right=0.88) 17 | 18 | ax.set_ylabel('phtread mutex') 19 | ax.set_yticks(ind+width) 20 | ax.set_yticklabels( '' ) 21 | ax.set_xlim(0, 60) 22 | ax.set_ylim(0, 1.4) 23 | ax.legend( (rects1[0], rects2[0]), 24 | ('2.40GHz i5 X64-Ubuntu', '2.93GHz i7 X86-Ubuntu',), 25 | loc='center right') 26 | 27 | ax.text(38, 0.15, '34.2 ns', ha='center', va='bottom') 28 | ax.text(24, 0.5, '21.0 ns', ha='center', va='bottom') 29 | plt.show() 30 | -------------------------------------------------------------------------------- /mutex_time/mutex_time.cc: -------------------------------------------------------------------------------- 1 | #include 2 | #include 3 | #include 4 | 5 | 6 | void GetMonotonicTime(struct timespec *ts) { 7 | clock_gettime(CLOCK_MONOTONIC, ts); 8 | } 9 | 10 | float GetElapsedTime(struct timespec *before, struct timespec *after) { 11 | double delta_s = after->tv_sec - before->tv_sec; 12 | double delta_ns = after->tv_nsec - before->tv_nsec; 13 | return delta_s * 1e9 + delta_ns; 14 | } 15 | 16 | pthread_mutex_t lock; 17 | 18 | int main(int argc, char *argv[]) { 19 | pthread_mutex_init(&lock, NULL); 20 | struct timespec start, end; 21 | const int kN = 1000000; 22 | GetMonotonicTime(&start); 23 | for (int i = 0; i < kN; ++i) { 24 | pthread_mutex_lock(&lock); 25 | pthread_mutex_unlock(&lock); 26 | } 27 | GetMonotonicTime(&end); 28 | float delta; 29 | delta = GetElapsedTime(&start, &end) / kN; 30 | printf("the average time of lock is %e\n", delta); 31 | pthread_mutex_destroy(&lock); 32 | return 0; 33 | } 34 | --------------------------------------------------------------------------------