Browse Source

add forgotten file

Andra Hugo 10 years ago
parent
commit
8a218eb5c5
1 changed files with 117 additions and 0 deletions
  1. 117 0
      sc_hypervisor/src/hypervisor_policies/hard_coded_policy.c

+ 117 - 0
sc_hypervisor/src/hypervisor_policies/hard_coded_policy.c

@@ -0,0 +1,117 @@
+/* StarPU --- Runtime system for heterogeneous multicore architectures.
+ *
+ * Copyright (C) 2011, 2012  INRIA
+ *
+ * StarPU is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License as published by
+ * the Free Software Foundation; either version 2.1 of the License, or (at
+ * your option) any later version.
+ *
+ * StarPU is distributed in the hope that it will be useful, but
+ * WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
+ *
+ * See the GNU Lesser General Public License in COPYING.LGPL for more details.
+ */
+
+#include "sc_hypervisor_policy.h"
+#include "sc_hypervisor_lp.h"
+#include "sc_hypervisor_policy.h"
+
+unsigned hard_coded_worker_belong_to_other_sched_ctx(unsigned sched_ctx, int worker)
+{
+	unsigned *sched_ctxs = sc_hypervisor_get_sched_ctxs();
+	int nsched_ctxs = sc_hypervisor_get_nsched_ctxs();
+
+	int i;
+	for(i = 0; i < nsched_ctxs; i++)
+		if(sched_ctxs[i] != sched_ctx && starpu_sched_ctx_contains_worker(worker, sched_ctxs[i]))
+			return 1;
+	return 0;
+}
+
+void hard_coded_handle_idle_cycle(unsigned sched_ctx, int worker)
+{
+	unsigned criteria = sc_hypervisor_get_resize_criteria();
+        if(criteria != SC_NOTHING)// && criteria == SC_SPEED)
+        {
+		
+		int ret = starpu_pthread_mutex_trylock(&act_hypervisor_mutex);
+		if(ret != EBUSY)
+		{
+//			if(sc_hypervisor_criteria_fulfilled(sched_ctx, worker))
+//			if(sc_hypervisor_check_speed_gap_btw_ctxs(NULL, -1, NULL, -1))
+			if(sc_hypervisor_check_idle(sched_ctx, worker))
+			{
+				if(hard_coded_worker_belong_to_other_sched_ctx(sched_ctx, worker))
+					sc_hypervisor_remove_workers_from_sched_ctx(&worker, 1, sched_ctx, 1);
+				else
+				{
+					//	sc_hypervisor_policy_resize_to_unknown_receiver(sched_ctx, 0);
+					unsigned *sched_ctxs = sc_hypervisor_get_sched_ctxs();
+					int ns = sc_hypervisor_get_nsched_ctxs();
+					
+				
+					int nworkers = (int)starpu_worker_get_count();
+					struct types_of_workers *tw = sc_hypervisor_get_types_of_workers(NULL, nworkers);
+					int nw = tw->nw;
+					double w_in_s[ns][nw];
+					w_in_s[0][0] = 1;
+					w_in_s[0][1] = 3;
+
+					w_in_s[1][0] = 8;
+					w_in_s[1][1] = 0;
+
+//				sc_hypervisor_lp_place_resources_in_ctx(ns, nw, w_in_s, sched_ctxs, NULL, 1, tw);
+					sc_hypervisor_lp_distribute_floating_no_resources_in_ctxs(sc_hypervisor_get_sched_ctxs(), ns, tw->nw, w_in_s, NULL, nworkers, tw);
+				}
+			}	
+			starpu_pthread_mutex_unlock(&act_hypervisor_mutex);
+		}
+	}
+}
+static void hard_coded_handle_poped_task(unsigned sched_ctx, __attribute__((unused))int worker, struct starpu_task *task, uint32_t footprint)
+{
+	unsigned criteria = sc_hypervisor_get_resize_criteria();
+        if(criteria != SC_NOTHING && criteria == SC_SPEED)
+        {
+
+		int ret = starpu_pthread_mutex_trylock(&act_hypervisor_mutex);
+		if(ret != EBUSY)
+		{
+			
+			if(sc_hypervisor_criteria_fulfilled(sched_ctx, worker))
+			{	
+				//	sc_hypervisor_policy_resize_to_unknown_receiver(sched_ctx, 0);
+				unsigned *sched_ctxs = sc_hypervisor_get_sched_ctxs();
+				int ns = sc_hypervisor_get_nsched_ctxs();
+				
+				int nworkers = (int)starpu_worker_get_count();
+				struct types_of_workers *tw = sc_hypervisor_get_types_of_workers(NULL, nworkers);
+				int nw = tw->nw;
+				double w_in_s[ns][nw];
+				w_in_s[0][0] = 1;
+				w_in_s[0][1] = 3;
+				
+				w_in_s[1][0] = 8;
+				w_in_s[1][1] = 0;
+//				sc_hypervisor_lp_place_resources_in_ctx(ns, nw, w_in_s, sched_ctxs, NULL, 1, tw);
+				sc_hypervisor_lp_distribute_floating_no_resources_in_ctxs(sc_hypervisor_get_sched_ctxs(), ns, tw->nw, w_in_s, NULL, nworkers, tw);
+			}
+			starpu_pthread_mutex_unlock(&act_hypervisor_mutex);
+		}
+	}
+}
+struct sc_hypervisor_policy hard_coded_policy =
+{
+	.size_ctxs = NULL,
+	.handle_poped_task = hard_coded_handle_poped_task,
+	.handle_pushed_task = NULL,
+	.handle_idle_cycle = hard_coded_handle_idle_cycle,
+	.handle_idle_end = NULL,
+	.handle_post_exec_hook = NULL,
+	.handle_submitted_job = NULL,
+	.end_ctx = NULL,
+	.custom = 0,
+	.name = "hard_coded"
+};