diff options
author | Tony Gutierrez <anthony.gutierrez@amd.com> | 2018-05-03 14:03:20 -0400 |
---|---|---|
committer | Anthony Gutierrez <anthony.gutierrez@amd.com> | 2018-05-15 22:02:27 +0000 |
commit | 7c46a8eb2be41ee1a3892956f5806440a0f76c83 (patch) | |
tree | ac26770c907a8481921204d36c829a9518006f3c /src/gpu-compute/rr_scheduling_policy.hh | |
parent | ce00e6042d996a9255960917f99009d9826b3885 (diff) | |
download | gem5-7c46a8eb2be41ee1a3892956f5806440a0f76c83.tar.xz |
gpu-compute: Cleanup the scheduler a bit
Change-Id: If2c626544f208e15c91be975dee9253126862ced
Reviewed-on: https://gem5-review.googlesource.com/10222
Reviewed-by: Alexandru Duțu <alexandru.dutu@amd.com>
Maintainer: Anthony Gutierrez <anthony.gutierrez@amd.com>
Diffstat (limited to 'src/gpu-compute/rr_scheduling_policy.hh')
-rw-r--r-- | src/gpu-compute/rr_scheduling_policy.hh | 61 |
1 files changed, 36 insertions, 25 deletions
diff --git a/src/gpu-compute/rr_scheduling_policy.hh b/src/gpu-compute/rr_scheduling_policy.hh index 3e83748da..a6ee383a5 100644 --- a/src/gpu-compute/rr_scheduling_policy.hh +++ b/src/gpu-compute/rr_scheduling_policy.hh @@ -1,5 +1,5 @@ /* - * Copyright (c) 2014-2015 Advanced Micro Devices, Inc. + * Copyright (c) 2014-2017 Advanced Micro Devices, Inc. * All rights reserved. * * For use for simulation and test purposes only @@ -14,9 +14,9 @@ * this list of conditions and the following disclaimer in the documentation * and/or other materials provided with the distribution. * - * 3. Neither the name of the copyright holder nor the names of its contributors - * may be used to endorse or promote products derived from this software - * without specific prior written permission. + * 3. Neither the name of the copyright holder nor the names of its + * contributors may be used to endorse or promote products derived from this + * software without specific prior written permission. * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE @@ -30,36 +30,47 @@ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. * - * Author: Sooraj Puthoor + * Authors: Sooraj Puthoor, + * Anthony Gutierrez */ -#ifndef __RR_SCHEDULING_POLICY_HH__ -#define __RR_SCHEDULING_POLICY_HH__ +#ifndef __GPU_COMPUTE_RR_SCHEDULING_POLICY_HH__ +#define __GPU_COMPUTE_RR_SCHEDULING_POLICY_HH__ -#include <inttypes.h> - -#include <cstddef> -#include <utility> #include <vector> -#include "base/logging.hh" - -class Wavefront; +#include "gpu-compute/scheduling_policy.hh" +#include "gpu-compute/wavefront.hh" -// Round-Robin pick among the list of ready waves -class RRSchedulingPolicy +// round-robin pick among the list of ready waves +class RRSchedulingPolicy final : public __SchedulingPolicy<RRSchedulingPolicy> { public: - RRSchedulingPolicy() : scheduleList(nullptr) { } + RRSchedulingPolicy() + { + } + + static Wavefront* + __chooseWave(std::vector<Wavefront*> *sched_list) + { + panic_if(!sched_list->size(), "RR scheduling policy sched list is " + "empty.\n"); + Wavefront *selected_wave(nullptr); - Wavefront* chooseWave(); - void bindList(std::vector<Wavefront*> *list); + /** + * For RR policy, select the wave that is at the front of + * the list. The selected wave is popped out from the schedule + * list immediately after selection to avoid starvation. It + * is the responsibility of the module invoking the RR scheduler + * to make sure it is scheduling eligible waves are added to the + * back of the schedule list. + */ + selected_wave = sched_list->front(); + panic_if(!selected_wave, "No wave found by RR scheduling policy.\n"); + sched_list->erase(sched_list->begin()); - private: - // List of waves which are participating in scheduling. - // This scheduler selects one wave from this list based on - // round robin policy - std::vector<Wavefront*> *scheduleList; + return selected_wave; + } }; -#endif // __RR_SCHEDULING_POLICY_HH__ +#endif // __GPU_COMPUTE_RR_SCHEDULING_POLICY_HH__ |