comparison src/share/vm/utilities/taskqueue.hpp @ 1833:8b10f48633dc

6984287: Regularize how GC parallel workers are specified. Summary: Associate number of GC workers with the workgang as opposed to the task. Reviewed-by: johnc, ysr
author jmasa
date Mon, 20 Sep 2010 14:38:38 -0700
parents 5f429ee79634
children 894b1d7c7e01
comparison
equal deleted inserted replaced
1781:97fbf5beff7b 1833:8b10f48633dc
303 return true; 303 return true;
304 } 304 }
305 return false; 305 return false;
306 } 306 }
307 307
308 // pop_local_slow() is done by the owning thread and is trying to
309 // get the last task in the queue. It will compete with pop_global()
310 // that will be used by other threads. The tag age is incremented
311 // whenever the queue goes empty which it will do here if this thread
312 // gets the last task or in pop_global() if the queue wraps (top == 0
313 // and pop_global() succeeds, see pop_global()).
308 template<class E, unsigned int N> 314 template<class E, unsigned int N>
309 bool GenericTaskQueue<E, N>::pop_local_slow(uint localBot, Age oldAge) { 315 bool GenericTaskQueue<E, N>::pop_local_slow(uint localBot, Age oldAge) {
310 // This queue was observed to contain exactly one element; either this 316 // This queue was observed to contain exactly one element; either this
311 // thread will claim it, or a competing "pop_global". In either case, 317 // thread will claim it, or a competing "pop_global". In either case,
312 // the queue will be logically empty afterwards. Create a new Age value 318 // the queue will be logically empty afterwards. Create a new Age value
635 // Reset the terminator, so that it may be reused again. 641 // Reset the terminator, so that it may be reused again.
636 // The caller is responsible for ensuring that this is done 642 // The caller is responsible for ensuring that this is done
637 // in an MT-safe manner, once the previous round of use of 643 // in an MT-safe manner, once the previous round of use of
638 // the terminator is finished. 644 // the terminator is finished.
639 void reset_for_reuse(); 645 void reset_for_reuse();
646 // Same as above but the number of parallel threads is set to the
647 // given number.
648 void reset_for_reuse(int n_threads);
640 649
641 #ifdef TRACESPINNING 650 #ifdef TRACESPINNING
642 static uint total_yields() { return _total_yields; } 651 static uint total_yields() { return _total_yields; }
643 static uint total_spins() { return _total_spins; } 652 static uint total_spins() { return _total_spins; }
644 static uint total_peeks() { return _total_peeks; } 653 static uint total_peeks() { return _total_peeks; }
780 typedef OverflowTaskQueue<StarTask> OopStarTaskQueue; 789 typedef OverflowTaskQueue<StarTask> OopStarTaskQueue;
781 typedef GenericTaskQueueSet<OopStarTaskQueue> OopStarTaskQueueSet; 790 typedef GenericTaskQueueSet<OopStarTaskQueue> OopStarTaskQueueSet;
782 791
783 typedef OverflowTaskQueue<size_t> RegionTaskQueue; 792 typedef OverflowTaskQueue<size_t> RegionTaskQueue;
784 typedef GenericTaskQueueSet<RegionTaskQueue> RegionTaskQueueSet; 793 typedef GenericTaskQueueSet<RegionTaskQueue> RegionTaskQueueSet;
794