Explorar o código

Merge branch 'master' of https://scm.gforge.inria.fr/anonscm/git/starpu/starpu into ft_checkpoint

Romain LION %!s(int64=5) %!d(string=hai) anos
pai
achega
d1efc81e56

+ 1 - 1
configure.ac

@@ -629,7 +629,7 @@ fi
 if test x$build_mpi_lib = xyes -o x$build_nmad_lib = xyes ; then
     if test x$enable_simgrid = xyes ; then
         if test x$enable_shared = xyes ; then
-	    AC_MSG_ERROR([MPI with simgrid can not work with shared libraries, use --disable-shared to fix this, or disable MPI with --disable-mpi])
+	    AC_MSG_ERROR([MPI with simgrid can not work with shared libraries, if you need the MPI support, theb use --disable-shared to fix this, else disable MPI with --disable-mpi])
         else
 	    CFLAGS="$CFLAGS -fPIC"
 	    CXXFLAGS="$CXXFLAGS -fPIC"

+ 2 - 2
examples/mult/sgemm.sh

@@ -67,8 +67,8 @@ then
 	$PREFIX/../../tools/starpu_codelet_histo_profile distrib.data || true
 	[ -f distrib.data.starpu_sgemm_gemm.0.492beed5.33177600.pdf ] || true
 
-	if [ -x $PREFIX/../../tools/replay/starpu_replay ]; then
-		$STARPU_LAUNCH $PREFIX/../../tools/replay/starpu_replay tasks.rec
+	if [ -x $PREFIX/../../tools/starpu_replay ]; then
+		$STARPU_LAUNCH $PREFIX/../../tools/starpu_replay tasks.rec
 	fi
 
 	[ ! -x $PREFIX/../../tools/starpu_perfmodel_recdump ] || $STARPU_LAUNCH $PREFIX/../../tools/starpu_perfmodel_recdump tasks.rec -o perfs2.rec

+ 3 - 1
mpi/src/mpi/starpu_mpi_mpi.c

@@ -333,6 +333,7 @@ static void _starpu_mpi_simgrid_wait_req_func(void* arg)
 	ret = MPI_Wait(sim_req->request, sim_req->status);
 
 	STARPU_MPI_ASSERT_MSG(ret == MPI_SUCCESS, "MPI_Wait returning %s", _starpu_mpi_get_mpi_error_code(ret));
+	_STARPU_MPI_DEBUG(0, "request %p finished\n", sim_req->request);
 
 	*(sim_req->done) = 1;
 	starpu_pthread_queue_broadcast(sim_req->queue);
@@ -355,6 +356,7 @@ void _starpu_mpi_simgrid_wait_req(MPI_Request *request, MPI_Status *status, star
 	sim_req->done = done;
 	*done = 0;
 
+	_STARPU_MPI_DEBUG(0, "will wait for request %p to finish\n", sim_req->request);
 	starpu_pthread_attr_t attr;
 	starpu_pthread_attr_init(&attr);
 	starpu_pthread_attr_setstacksize(&attr, 32786);
@@ -372,7 +374,7 @@ static void _starpu_mpi_isend_data_func(struct _starpu_mpi_req *req)
 {
 	_STARPU_MPI_LOG_IN();
 
-	_STARPU_MPI_DEBUG(0, "post MPI isend request %p type %s tag %"PRIi64" src %d data %p datasize %ld ptr %p datatype '%s' count %d registered_datatype %d sync %d\n", req, _starpu_mpi_request_type(req->request_type), req->node_tag.data_tag, req->node_tag.node.rank, req->data_handle, starpu_data_get_size(req->data_handle), req->ptr, req->datatype_name, (int)req->count, req->registered_datatype, req->sync);
+	_STARPU_MPI_DEBUG(0, "post MPI isend request %p type %s tag %"PRIi64" dst %d data %p datasize %ld ptr %p datatype '%s' count %d registered_datatype %d sync %d\n", req, _starpu_mpi_request_type(req->request_type), req->node_tag.data_tag, req->node_tag.node.rank, req->data_handle, starpu_data_get_size(req->data_handle), req->ptr, req->datatype_name, (int)req->count, req->registered_datatype, req->sync);
 
 	_starpu_mpi_comm_amounts_inc(req->node_tag.node.comm, req->node_tag.node.rank, req->datatype, req->count);
 

+ 2 - 2
mpi/src/starpu_mpi_coop_sends.c

@@ -227,7 +227,7 @@ void _starpu_mpi_coop_send(starpu_data_handle_t data_handle, struct _starpu_mpi_
 			else
 			{
 				/* Nope, incompatible, put ours instead */
-				_STARPU_MPI_DEBUG(0, "%p: new cooperative sends %p, dest %d\n", data_handle, coop_sends, req->node_tag.node.rank);
+				_STARPU_MPI_DEBUG(0, "%p: new cooperative sends %p for tag %"PRIi64", dest %d\n", data_handle, coop_sends, req->node_tag.data_tag, req->node_tag.node.rank);
 				mpi_data->coop_sends = coop_sends;
 				first = 1;
 				_starpu_spin_unlock(&mpi_data->coop_lock);
@@ -239,7 +239,7 @@ void _starpu_mpi_coop_send(starpu_data_handle_t data_handle, struct _starpu_mpi_
 		else if (coop_sends)
 		{
 			/* Nobody else and we have allocated one, we're first! */
-			_STARPU_MPI_DEBUG(0, "%p: new cooperative sends %p, dest %d\n", data_handle, coop_sends, req->node_tag.node.rank);
+			_STARPU_MPI_DEBUG(0, "%p: new cooperative sends %p for tag %"PRIi64", dest %d\n", data_handle, coop_sends, req->node_tag.data_tag, req->node_tag.node.rank);
 			mpi_data->coop_sends = coop_sends;
 			first = 1;
 			done = 1;

+ 2 - 2
tests/overlap/overlap.sh

@@ -67,8 +67,8 @@ then
 	$PREFIX/../../tools/starpu_codelet_histo_profile distrib.data || true
 	[ -f distrib.data.overlap_sleep_1024_24.0.a3d3725e.1024.pdf ] || true
 
-	if [ -x $PREFIX/../../tools/replay/starpu_replay ]; then
-		$STARPU_LAUNCH $PREFIX/../../tools/replay/starpu_replay tasks.rec
+	if [ -x $PREFIX/../../tools/starpu_replay ]; then
+		$STARPU_LAUNCH $PREFIX/../../tools/starpu_replay tasks.rec
 	fi
 
 	[ ! -x $PREFIX/../../tools/starpu_perfmodel_recdump ] || $STARPU_LAUNCH $PREFIX/../../tools/starpu_perfmodel_recdump tasks.rec -o perfs2.rec

+ 41 - 27
tools/starpu_replay.c

@@ -434,6 +434,20 @@ static void arrays_managing(int mode)
 	}
 }
 
+static unsigned count_number_tokens(const char* buffer, const char* delim)
+{
+	char* dup = strdup(buffer);
+	int result = 0;
+	char* token = strtok(dup, delim);
+	while(token != NULL)
+	{
+		++result;
+		token = strtok(NULL, delim); 
+	}
+	free(dup);
+	return result; 
+}
+
 /* Check if a handle hasn't been registered yet */
 static void variable_data_register_check(size_t * array_of_size, int nb_handles)
 {
@@ -633,10 +647,6 @@ int submit_tasks(void)
 		else
 		{
 			fix_wontuse_handle(currentTask); /* Add the handle in the wontuse task */
-                        /* FIXME: can not actually work properly since we have
-                         * disabled sequential consistency, so we don't have any
-                         * easy way to make this wait for the last task that
-                         * wrote to the handle. */
 			if (currentTask->task.handles[0])
 				starpu_data_wont_use(currentTask->task.handles[0]);
 		}
@@ -662,8 +672,6 @@ static void usage(const char *program)
 
 int main(int argc, char **argv)
 {
-	starpu_data_set_default_sequential_consistency_flag(0);
-
 	FILE *rec;
 	char *s;
 	const char *tasks_rec = NULL;
@@ -673,6 +681,8 @@ int main(int argc, char **argv)
 
 	unsigned long nread_tasks = 0;
 
+	/* FIXME: we do not support data with sequential consistency disabled */
+
 	_STARPU_MALLOC(s, s_allocated);
 	dependson_size = REPLAY_NMAX_DEPENDENCIES; /* Change the value of REPLAY_NMAX_DEPENCIES to modify the number of dependencies */
 	_STARPU_MALLOC(dependson, dependson_size * sizeof (* dependson));
@@ -987,31 +997,24 @@ int main(int argc, char **argv)
 		}
 		else if (TEST("Parameters"))
 		{
-			/* Parameters line format is PARAM1 PARAM2 (...)PARAMi (...)PARAMn */
-			char * param_str = s + 12;
-			int count = 0;
-
-			for (i = 0 ; param_str[i] != '\n'; i++)
-			{
-				if (param_str[i] == ' ') /* Checking the number of ' ' (space), assuming that the file is not corrupted */
-				{
-					count++;
-				}
-			}
-
-			nb_parameters = count + 1; /* There is one space per paramater except for the last one, that's why we have to add +1 (dirty programming) */
-
-			/* This part of the algorithm will determine if it needs static or dynamic arrays */
-			alloc_mode = set_alloc_mode(nb_parameters);
-			arrays_managing(alloc_mode);
-
+			/* Nothing to do */
 		}
 		else if (TEST("Handles"))
 		{
+			*ln = 0; 
 			char *buffer = s + 9;
 			const char *delim = " ";
-			char *token = strtok(buffer, delim);
-
+			unsigned nb_parameters_line = count_number_tokens(buffer, delim); 
+			
+			if(nb_parameters == 0)
+			{
+				nb_parameters = nb_parameters_line; 
+				arrays_managing(set_alloc_mode(nb_parameters));
+			}
+			else
+				STARPU_ASSERT(nb_parameters == nb_parameters_line);
+			
+			char* token = strtok(buffer, delim); 
 			for (i = 0 ; i < nb_parameters ; i++)
 			{
 				STARPU_ASSERT(token);
@@ -1038,10 +1041,21 @@ int main(int argc, char **argv)
 		}
 		else if (TEST("Modes"))
 		{
+			*ln = 0; 
 			char * buffer = s + 7;
 			unsigned mode_i = 0;
 			const char * delim = " ";
-			char * token = strtok(buffer, delim);
+			unsigned nb_parameters_line = count_number_tokens(buffer, delim); 
+			
+			if(nb_parameters == 0)
+			{
+				nb_parameters = nb_parameters_line; 
+				arrays_managing(set_alloc_mode(nb_parameters));
+			}
+			else
+				STARPU_ASSERT(nb_parameters == nb_parameters_line);
+
+			char* token = strtok(buffer, delim); 
 
 			while (token != NULL && mode_i < nb_parameters)
 			{