浏览代码

fix build with mpi implementations which don't have fortran support, e.g. simgrid before 3.12

Samuel Thibault 9 年之前
父节点
当前提交
109917c6fb
共有 3 个文件被更改,包括 18 次插入0 次删除
  1. 4 0
      configure.ac
  2. 2 0
      mpi/src/starpu_mpi.c
  3. 12 0
      mpi/src/starpu_mpi_task_insert.c

+ 4 - 0
configure.ac

@@ -1959,6 +1959,10 @@ AC_SUBST(USE_MPI, $use_mpi)
 AM_CONDITIONAL(USE_MPI, test x$use_mpi = xyes)
 AM_CONDITIONAL(USE_MPI, test x$use_mpi = xyes)
 if test x$use_mpi = xyes; then
 if test x$use_mpi = xyes; then
 	AC_DEFINE(STARPU_USE_MPI,[],[whether the StarPU MPI library is available])
 	AC_DEFINE(STARPU_USE_MPI,[],[whether the StarPU MPI library is available])
+	OLD_CC=$CC
+	CC=$mpicc_path
+	AC_CHECK_FUNCS([MPI_Comm_f2c])
+	CC=$OLD_CC
 else
 else
 	running_mpi_check=no
 	running_mpi_check=no
 fi
 fi

+ 2 - 0
mpi/src/starpu_mpi.c

@@ -1832,6 +1832,7 @@ int starpu_mpi_wait_for_all(MPI_Comm comm)
 	return 0;
 	return 0;
 }
 }
 
 
+#ifdef HAVE_MPI_COMM_F2C
 /* Fortran related functions */
 /* Fortran related functions */
 struct _starpu_mpi_argc_argv *fstarpu_mpi_argcv_alloc(int argc, int initialize_mpi, int comm_present, MPI_Fint comm)
 struct _starpu_mpi_argc_argv *fstarpu_mpi_argcv_alloc(int argc, int initialize_mpi, int comm_present, MPI_Fint comm)
 {
 {
@@ -2064,3 +2065,4 @@ int fstarpu_mpi_wait_for_all(MPI_Fint comm)
 {
 {
 	return starpu_mpi_wait_for_all(MPI_Comm_f2c(comm));
 	return starpu_mpi_wait_for_all(MPI_Comm_f2c(comm));
 }
 }
+#endif

+ 12 - 0
mpi/src/starpu_mpi_task_insert.c

@@ -434,6 +434,7 @@ int _starpu_mpi_task_decode_v(struct starpu_codelet *codelet, int me, int nb_nod
 	return 0;
 	return 0;
 }
 }
 
 
+#ifdef HAVE_MPI_COMM_F2C
 static
 static
 int _fstarpu_mpi_task_decode_v(struct starpu_codelet *codelet, int me, int nb_nodes, int *xrank, int *do_execute, struct starpu_data_descr **descrs_p, int *nb_data_p, void **arglist)
 int _fstarpu_mpi_task_decode_v(struct starpu_codelet *codelet, int me, int nb_nodes, int *xrank, int *do_execute, struct starpu_data_descr **descrs_p, int *nb_data_p, void **arglist)
 {
 {
@@ -710,6 +711,7 @@ int _fstarpu_mpi_task_decode_v(struct starpu_codelet *codelet, int me, int nb_no
 	_STARPU_TRACE_TASK_MPI_DECODE_END();
 	_STARPU_TRACE_TASK_MPI_DECODE_END();
 	return 0;
 	return 0;
 }
 }
+#endif
 
 
 static
 static
 int _starpu_mpi_task_build_v(MPI_Comm comm, struct starpu_codelet *codelet, struct starpu_task **task, int *xrank_p, struct starpu_data_descr **descrs_p, int *nb_data_p, va_list varg_list)
 int _starpu_mpi_task_build_v(MPI_Comm comm, struct starpu_codelet *codelet, struct starpu_task **task, int *xrank_p, struct starpu_data_descr **descrs_p, int *nb_data_p, va_list varg_list)
@@ -760,6 +762,7 @@ int _starpu_mpi_task_build_v(MPI_Comm comm, struct starpu_codelet *codelet, stru
 	}
 	}
 }
 }
 
 
+#ifdef HAVE_MPI_COMM_F2C
 static
 static
 int _fstarpu_mpi_task_build_v(MPI_Comm comm, struct starpu_codelet *codelet, struct starpu_task **task, int *xrank_p, struct starpu_data_descr **descrs_p, int *nb_data_p, void **arglist)
 int _fstarpu_mpi_task_build_v(MPI_Comm comm, struct starpu_codelet *codelet, struct starpu_task **task, int *xrank_p, struct starpu_data_descr **descrs_p, int *nb_data_p, void **arglist)
 {
 {
@@ -805,6 +808,7 @@ int _fstarpu_mpi_task_build_v(MPI_Comm comm, struct starpu_codelet *codelet, str
 		return 0;
 		return 0;
 	}
 	}
 }
 }
+#endif
 
 
 static
 static
 int _starpu_mpi_task_postbuild_v(MPI_Comm comm, int xrank, int do_execute, struct starpu_data_descr *descrs, int nb_data)
 int _starpu_mpi_task_postbuild_v(MPI_Comm comm, int xrank, int do_execute, struct starpu_data_descr *descrs, int nb_data)
@@ -860,6 +864,7 @@ int _starpu_mpi_task_insert_v(MPI_Comm comm, struct starpu_codelet *codelet, va_
 	return _starpu_mpi_task_postbuild_v(comm, xrank, do_execute, descrs, nb_data);
 	return _starpu_mpi_task_postbuild_v(comm, xrank, do_execute, descrs, nb_data);
 }
 }
 
 
+#ifdef HAVE_MPI_COMM_F2C
 static
 static
 int _fstarpu_mpi_task_insert_v(MPI_Comm comm, struct starpu_codelet *codelet, void **arglist)
 int _fstarpu_mpi_task_insert_v(MPI_Comm comm, struct starpu_codelet *codelet, void **arglist)
 {
 {
@@ -892,6 +897,7 @@ int _fstarpu_mpi_task_insert_v(MPI_Comm comm, struct starpu_codelet *codelet, vo
 	}
 	}
 	return _starpu_mpi_task_postbuild_v(comm, xrank, do_execute, descrs, nb_data);
 	return _starpu_mpi_task_postbuild_v(comm, xrank, do_execute, descrs, nb_data);
 }
 }
+#endif
 
 
 int starpu_mpi_task_insert(MPI_Comm comm, struct starpu_codelet *codelet, ...)
 int starpu_mpi_task_insert(MPI_Comm comm, struct starpu_codelet *codelet, ...)
 {
 {
@@ -904,6 +910,7 @@ int starpu_mpi_task_insert(MPI_Comm comm, struct starpu_codelet *codelet, ...)
 	return ret;
 	return ret;
 }
 }
 
 
+#ifdef HAVE_MPI_COMM_F2C
 int fstarpu_mpi_task_insert(MPI_Fint comm, void ***_arglist)
 int fstarpu_mpi_task_insert(MPI_Fint comm, void ***_arglist)
 {
 {
 	void **arglist = *_arglist;
 	void **arglist = *_arglist;
@@ -917,6 +924,7 @@ int fstarpu_mpi_task_insert(MPI_Fint comm, void ***_arglist)
 	ret = _fstarpu_mpi_task_insert_v(MPI_Comm_f2c(comm), codelet, arglist+1);
 	ret = _fstarpu_mpi_task_insert_v(MPI_Comm_f2c(comm), codelet, arglist+1);
 	return ret;
 	return ret;
 }
 }
+#endif
 
 
 int starpu_mpi_insert_task(MPI_Comm comm, struct starpu_codelet *codelet, ...)
 int starpu_mpi_insert_task(MPI_Comm comm, struct starpu_codelet *codelet, ...)
 {
 {
@@ -944,6 +952,7 @@ struct starpu_task *starpu_mpi_task_build(MPI_Comm comm, struct starpu_codelet *
 	if (ret > 0) return NULL; else return task;
 	if (ret > 0) return NULL; else return task;
 }
 }
 
 
+#ifdef HAVE_MPI_COMM_F2C
 struct starpu_task *fstarpu_mpi_task_build(MPI_Fint comm, void ***_arglist)
 struct starpu_task *fstarpu_mpi_task_build(MPI_Fint comm, void ***_arglist)
 {
 {
 	void **arglist = *_arglist;
 	void **arglist = *_arglist;
@@ -959,6 +968,7 @@ struct starpu_task *fstarpu_mpi_task_build(MPI_Fint comm, void ***_arglist)
 	STARPU_ASSERT(ret >= 0);
 	STARPU_ASSERT(ret >= 0);
 	if (ret > 0) return NULL; else return task;
 	if (ret > 0) return NULL; else return task;
 }
 }
+#endif
 
 
 int starpu_mpi_task_post_build(MPI_Comm comm, struct starpu_codelet *codelet, ...)
 int starpu_mpi_task_post_build(MPI_Comm comm, struct starpu_codelet *codelet, ...)
 {
 {
@@ -980,6 +990,7 @@ int starpu_mpi_task_post_build(MPI_Comm comm, struct starpu_codelet *codelet, ..
 	return _starpu_mpi_task_postbuild_v(comm, xrank, do_execute, descrs, nb_data);
 	return _starpu_mpi_task_postbuild_v(comm, xrank, do_execute, descrs, nb_data);
 }
 }
 
 
+#ifdef HAVE_MPI_COMM_F2C
 int fstarpu_mpi_task_post_build(MPI_Fint _comm, void ***_arglist)
 int fstarpu_mpi_task_post_build(MPI_Fint _comm, void ***_arglist)
 {
 {
 	void **arglist = *_arglist;
 	void **arglist = *_arglist;
@@ -1003,6 +1014,7 @@ int fstarpu_mpi_task_post_build(MPI_Fint _comm, void ***_arglist)
 
 
 	return _starpu_mpi_task_postbuild_v(comm, xrank, do_execute, descrs, nb_data);
 	return _starpu_mpi_task_postbuild_v(comm, xrank, do_execute, descrs, nb_data);
 }
 }
+#endif
 
 
 void starpu_mpi_get_data_on_node_detached(MPI_Comm comm, starpu_data_handle_t data_handle, int node, void (*callback)(void*), void *arg)
 void starpu_mpi_get_data_on_node_detached(MPI_Comm comm, starpu_data_handle_t data_handle, int node, void (*callback)(void*), void *arg)
 {
 {