浏览代码

_starpu_data_expected_penalty and update_data_requests now takes the
memory_node as argument rather than the queue structure.

Cédric Augonnet 14 年之前
父节点
当前提交
c5a0234f3e

+ 1 - 2
src/core/perfmodel/perfmodel.c

@@ -134,9 +134,8 @@ double _starpu_job_expected_length(int workerid, struct starpu_job_s *j, enum st
 }
 
 /* Data transfer performance modeling */
-double _starpu_data_expected_penalty(struct starpu_jobq_s *q, struct starpu_task *task)
+double _starpu_data_expected_penalty(uint32_t memory_node, struct starpu_task *task)
 {
-	uint32_t memory_node = q->memory_node;
 	unsigned nbuffers = task->cl->nbuffers;
 	unsigned buffer;
 

+ 1 - 1
src/core/perfmodel/perfmodel.h

@@ -97,7 +97,7 @@ double _starpu_regression_based_job_expected_length(struct starpu_perfmodel_t *m
 void _starpu_update_perfmodel_history(struct starpu_job_s *j, enum starpu_perf_archtype arch,
 				unsigned cpuid, double measured);
 
-double _starpu_data_expected_penalty(struct starpu_jobq_s *q, struct starpu_task *task);
+double _starpu_data_expected_penalty(uint32_t memory_node, struct starpu_task *task);
 
 void _starpu_create_sampling_directory_if_needed(void);
 

+ 6 - 5
src/core/policies/deque_modeling_policy_data_aware.c

@@ -40,9 +40,8 @@ static starpu_job_t dmda_pop_task(struct starpu_jobq_s *q)
 	return j;
 }
 
-static void update_data_requests(struct starpu_jobq_s *q, struct starpu_task *task)
+static void update_data_requests(uint32_t memory_node, struct starpu_task *task)
 {
-	uint32_t memory_node = q->memory_node;
 	unsigned nbuffers = task->cl->nbuffers;
 	unsigned buffer;
 
@@ -93,7 +92,7 @@ static int _dmda_push_task(struct starpu_jobq_s *q __attribute__ ((unused)) , st
 		local_task_length[worker] = _starpu_job_expected_length(worker,	j, queue_array[worker]->arch);
 
 		//local_data_penalty[worker] = 0;
-		local_data_penalty[worker] = _starpu_data_expected_penalty(queue_array[worker], task);
+		local_data_penalty[worker] = _starpu_data_expected_penalty(queue_array[worker]->memory_node, task);
 
 		if (local_task_length[worker] == -1.0)
 		{
@@ -164,10 +163,12 @@ static int _dmda_push_task(struct starpu_jobq_s *q __attribute__ ((unused)) , st
 	j->predicted = model_best;
 	j->penality = penality_best;
 
-	update_data_requests(queue_array[best], task);
+	uint32_t memory_node = queue_array[best]->memory_node;
+
+	update_data_requests(memory_node, task);
 	
 	if (_starpu_get_prefetch_flag())
-		_starpu_prefetch_task_input_on_node(task, queue_array[best]->memory_node);
+		_starpu_prefetch_task_input_on_node(task, memory_node);
 
 	if (prio) {
 		return _starpu_fifo_push_prio_task(queue_array[best], j);