Browse Source

acces data handles before unregistering data

Andra Hugo 13 years ago
parent
commit
063ee080f9

+ 2 - 2
sched_ctx_hypervisor/src/hypervisor_policies/ispeed_lp_policy.c

@@ -413,8 +413,8 @@ static void ispeed_lp_end_ctx(unsigned sched_ctx)
 {
 	struct sched_ctx_hypervisor_wrapper* sc_w = sched_ctx_hypervisor_get_wrapper(sched_ctx);
 	int worker;
-	for(worker = 0; worker < 12; worker++)
-		printf("%d/%d: speed %lf\n", worker, sched_ctx, sc_w->ref_velocity[worker]);
+/* 	for(worker = 0; worker < 12; worker++) */
+/* 		printf("%d/%d: speed %lf\n", worker, sched_ctx, sc_w->ref_velocity[worker]); */
 
 	return;
 }

+ 5 - 5
sched_ctx_hypervisor/src/sched_ctx_hypervisor.c

@@ -619,11 +619,11 @@ static unsigned _ack_resize_completed(unsigned sched_ctx, int worker)
 			   whatever the application says */
 			if(!((hypervisor.resize[sender_sched_ctx] == 0 || hypervisor.resize[receiver_sched_ctx] == 0) && imposed_resize))
 			{
-				int j;
-				printf("remove after ack from ctx %d:", sender_sched_ctx);
-				for(j = 0; j < nmoved_workers; j++)
-					printf(" %d", moved_workers[j]);
-				printf("\n");
+/* 				int j; */
+/* 				printf("remove after ack from ctx %d:", sender_sched_ctx); */
+/* 				for(j = 0; j < nmoved_workers; j++) */
+/* 					printf(" %d", moved_workers[j]); */
+/* 				printf("\n"); */
 
 				starpu_sched_ctx_remove_workers(moved_workers, nmoved_workers, sender_sched_ctx);
 

+ 9 - 7
src/core/jobs.c

@@ -144,6 +144,15 @@ void _starpu_handle_job_termination(struct _starpu_job *j)
 
 	_STARPU_PTHREAD_MUTEX_UNLOCK(&j->sync_mutex);
 
+#ifdef STARPU_USE_SCHED_CTX_HYPERVISOR
+	int workerid = starpu_worker_get_id();
+	int i;
+	size_t data_size = 0;
+	for(i = 0; i < STARPU_NMAXBUFS; i++)
+		if(task->handles[i] != NULL)
+			data_size += _starpu_data_get_size(task->handles[i]);
+#endif //STARPU_USE_SCHED_CTX_HYPERVISOR
+
 	/* We release handle reference count */
 	if (task->cl)
 	{
@@ -210,13 +219,6 @@ void _starpu_handle_job_termination(struct _starpu_job *j)
 	{
 		_starpu_sched_post_exec_hook(task);
 #ifdef STARPU_USE_SCHED_CTX_HYPERVISOR
-		int workerid = starpu_worker_get_id();
-		int i;
-		size_t data_size = 0;
-		for(i = 0; i < STARPU_NMAXBUFS; i++)
-			if(task->handles[i] != NULL)
-				data_size += _starpu_data_get_size(task->handles[i]);
-
 		starpu_call_poped_task_cb(workerid, task->sched_ctx, task->flops, data_size);
 #endif //STARPU_USE_SCHED_CTX_HYPERVISOR
 	}

+ 3 - 0
src/core/sched_ctx.c

@@ -716,6 +716,8 @@ void _starpu_decrement_nsubmitted_tasks_of_sched_ctx(unsigned sched_ctx_id)
 {
 	struct _starpu_sched_ctx *sched_ctx = _starpu_get_sched_ctx_struct(sched_ctx_id);
 	int finished = _starpu_barrier_counter_decrement_until_empty_counter(&sched_ctx->tasks_barrier);
+/*when finished decrementing the tasks if the user signaled he will not submit tasks anymore
+  we can move all its workers to the inheritor context */
 	if(finished && sched_ctx->inheritor != STARPU_NMAX_SCHED_CTXS)
 	{
 		_STARPU_PTHREAD_MUTEX_LOCK(&finished_submit_mutex);
@@ -723,6 +725,7 @@ void _starpu_decrement_nsubmitted_tasks_of_sched_ctx(unsigned sched_ctx_id)
 		{
 			_STARPU_PTHREAD_MUTEX_UNLOCK(&finished_submit_mutex);
 
+			/* take care the context is not deleted or changed at the same time */
 			_STARPU_PTHREAD_MUTEX_LOCK(&changing_ctx_mutex[sched_ctx->id]);
 			int *workerids = NULL;
 			unsigned nworkers = _get_workers_list(sched_ctx, &workerids);