瀏覽代碼

smpi: Set a small stack for transfer waiting threads

To avoid having to memset 8MB stacks for each MPI transfer.
Samuel Thibault 5 年之前
父節點
當前提交
548f2aa5b5
共有 3 個文件被更改,包括 20 次插入11 次删除
  1. 2 0
      mpi/src/mpi/starpu_mpi_mpi.c
  2. 16 11
      src/core/simgrid.c
  3. 2 0
      src/core/simgrid.h

+ 2 - 0
mpi/src/mpi/starpu_mpi_mpi.c

@@ -353,7 +353,9 @@ void _starpu_mpi_simgrid_wait_req(MPI_Request *request, MPI_Status *status, star
 	sim_req->done = done;
 	*done = 0;
 
+	_starpu_simgrid_set_stack_size(32786);
 	_starpu_simgrid_xbt_thread_create("wait for mpi transfer", _starpu_mpi_simgrid_wait_req_func, sim_req);
+	_starpu_simgrid_set_stack_size(_starpu_default_stack_size);
 }
 #endif
 

+ 16 - 11
src/core/simgrid.c

@@ -83,6 +83,20 @@ static struct worker_runner
 } worker_runner[STARPU_NMAXWORKERS];
 static void *task_execute(void *arg);
 
+size_t _starpu_default_stack_size = 8192;
+
+void _starpu_simgrid_set_stack_size(size_t stack_size)
+{
+#ifdef HAVE_SG_CFG_SET_INT
+	sg_cfg_set_int("contexts/stack-size", stack_size);
+#elif SIMGRID_VERSION >= 31300
+	xbt_cfg_set_int("contexts/stack-size", stack_size);
+#else
+	extern xbt_cfg_t _sg_cfg_set;
+	xbt_cfg_set_int(_sg_cfg_set, "contexts/stack_size", stack_size);
+#endif
+}
+
 #if defined(HAVE_SG_ZONE_GET_BY_NAME) || defined(sg_zone_get_by_name)
 #define HAVE_STARPU_SIMGRID_GET_AS_BY_NAME
 sg_netzone_t _starpu_simgrid_get_as_by_name(const char *name)
@@ -290,21 +304,12 @@ void _starpu_start_simgrid(int *argc, char **argv)
 	MSG_init(argc, argv);
 #endif
 	/* Simgrid uses tiny stacks by default.  This comes unexpected to our users.  */
-	unsigned stack_size = 8192;
 #ifdef HAVE_GETRLIMIT
 	struct rlimit rlim;
 	if (getrlimit(RLIMIT_STACK, &rlim) == 0 && rlim.rlim_cur != 0 && rlim.rlim_cur != RLIM_INFINITY)
-		stack_size = rlim.rlim_cur / 1024;
-#endif
-
-#ifdef HAVE_SG_CFG_SET_INT
-	sg_cfg_set_int("contexts/stack-size", stack_size);
-#elif SIMGRID_VERSION < 31300
-	extern xbt_cfg_t _sg_cfg_set;
-	xbt_cfg_set_int(_sg_cfg_set, "contexts/stack_size", stack_size);
-#else
-	xbt_cfg_set_int("contexts/stack-size", stack_size);
+		_starpu_default_stack_size = rlim.rlim_cur / 1024;
 #endif
+	_starpu_simgrid_set_stack_size(_starpu_default_stack_size);
 
 	/* Load XML platform */
 #if SIMGRID_VERSION < 31300

+ 2 - 0
src/core/simgrid.h

@@ -103,6 +103,8 @@ extern starpu_pthread_queue_t _starpu_simgrid_task_queue[STARPU_NMAXWORKERS];
  * bus */
 void _starpu_simgrid_count_ngpus(void);
 
+extern size_t _starpu_default_stack_size;
+void _starpu_simgrid_set_stack_size(size_t stack_size);
 void _starpu_simgrid_xbt_thread_create(const char *name, void_f_pvoid_t code,
 				       void *param);