Mercurial > hg > truffle
comparison src/share/vm/utilities/taskqueue.hpp @ 6924:3dfffc8b9722
8001564: The load balancing function steal_1_random in taskqueue is not random
Summary: Removes the two unused functions GenericTaskQueueSet::steal_1_random and GenericTaskQueueSet::steal_best_of_all
Reviewed-by: brutisso, stefank
Contributed-by: erik.x.helin@oracle.com
author | brutisso |
---|---|
date | Tue, 30 Oct 2012 20:26:44 +0100 |
parents | b9a9ed0f8eeb |
children | 83f27710f5f7 |
comparison
equal
deleted
inserted
replaced
6923:3fadc0e8cffe | 6924:3dfffc8b9722 |
---|---|
494 for (int i = 0; i < n; i++) { | 494 for (int i = 0; i < n; i++) { |
495 _queues[i] = NULL; | 495 _queues[i] = NULL; |
496 } | 496 } |
497 } | 497 } |
498 | 498 |
499 bool steal_1_random(uint queue_num, int* seed, E& t); | |
500 bool steal_best_of_2(uint queue_num, int* seed, E& t); | 499 bool steal_best_of_2(uint queue_num, int* seed, E& t); |
501 bool steal_best_of_all(uint queue_num, int* seed, E& t); | |
502 | 500 |
503 void register_queue(uint i, T* q); | 501 void register_queue(uint i, T* q); |
504 | 502 |
505 T* queue(uint n); | 503 T* queue(uint n); |
506 | 504 |
533 return true; | 531 return true; |
534 } | 532 } |
535 } | 533 } |
536 TASKQUEUE_STATS_ONLY(queue(queue_num)->stats.record_steal(false)); | 534 TASKQUEUE_STATS_ONLY(queue(queue_num)->stats.record_steal(false)); |
537 return false; | 535 return false; |
538 } | |
539 | |
540 template<class T, MEMFLAGS F> bool | |
541 GenericTaskQueueSet<T, F>::steal_best_of_all(uint queue_num, int* seed, E& t) { | |
542 if (_n > 2) { | |
543 int best_k; | |
544 uint best_sz = 0; | |
545 for (uint k = 0; k < _n; k++) { | |
546 if (k == queue_num) continue; | |
547 uint sz = _queues[k]->size(); | |
548 if (sz > best_sz) { | |
549 best_sz = sz; | |
550 best_k = k; | |
551 } | |
552 } | |
553 return best_sz > 0 && _queues[best_k]->pop_global(t); | |
554 } else if (_n == 2) { | |
555 // Just try the other one. | |
556 int k = (queue_num + 1) % 2; | |
557 return _queues[k]->pop_global(t); | |
558 } else { | |
559 assert(_n == 1, "can't be zero."); | |
560 return false; | |
561 } | |
562 } | |
563 | |
564 template<class T, MEMFLAGS F> bool | |
565 GenericTaskQueueSet<T, F>::steal_1_random(uint queue_num, int* seed, E& t) { | |
566 if (_n > 2) { | |
567 uint k = queue_num; | |
568 while (k == queue_num) k = TaskQueueSetSuper::randomParkAndMiller(seed) % _n; | |
569 return _queues[2]->pop_global(t); | |
570 } else if (_n == 2) { | |
571 // Just try the other one. | |
572 int k = (queue_num + 1) % 2; | |
573 return _queues[k]->pop_global(t); | |
574 } else { | |
575 assert(_n == 1, "can't be zero."); | |
576 return false; | |
577 } | |
578 } | 536 } |
579 | 537 |
580 template<class T, MEMFLAGS F> bool | 538 template<class T, MEMFLAGS F> bool |
581 GenericTaskQueueSet<T, F>::steal_best_of_2(uint queue_num, int* seed, E& t) { | 539 GenericTaskQueueSet<T, F>::steal_best_of_2(uint queue_num, int* seed, E& t) { |
582 if (_n > 2) { | 540 if (_n > 2) { |