Browse Source

update the StarPU Gordon driver to the recent changes in Gordon

Cédric Augonnet 16 years ago
parent
commit
c1f00e8c91

+ 14 - 32
configure.ac

@@ -65,6 +65,8 @@ fi
 # This defines HAVE_SYNC_BUILTINS
 STARPU_CHECK_SYNC_BUILTINS
 
+CPPFLAGS="${CPPFLAGS} -D_GNU_SOURCE "
+
 ###############################################################################
 #                                                                             #
 #                                 CPUs settings                               #
@@ -82,8 +84,8 @@ AM_CONDITIONAL(USE_CPU, test x$enable_cpu = xyes)
 if test x$enable_cpu = xyes; then
 	AC_DEFINE(USE_CPUS, [1], [CPU driver is activated])
 
-	# This value is set quite randomly, but StarPU should not take more
-	# core than there are in the system
+	# This value is set quite randomly, but StarPU should not take more
+	# core than there are in the system
 	AC_DEFINE(NMAXCORES, [16], [Maximum number of CPUs supported])
 fi
 
@@ -168,50 +170,30 @@ if test x$enable_gordon = xyes -o x$enable_gordon = xmaybe; then
 	# do we have a valid Gordon setup ?
 	have_valid_gordon=yes
 	
-	# can we use dynamic code loading facilities ?
+	# can we use dynamic code loading facilities ?
 	AC_CHECK_LIB(elf, elf_memory,, [have_valid_gordon=no])
 
 	AC_CHECK_LIB(spe2, spe_context_create,,[have_valid_gordon=no])
 	AC_CHECK_FUNC(spe_in_mbox_write, [], [have_valid_gordon=no])
 
 	if test -d "$gordon_dir"; then
-		CPPFLAGS="${CPPFLAGS} -I$gordon_dir/ "
-	fi
-
-	# XXX Scalp is weird ...
-	CPPFLAGS="${CPPFLAGS} -D_GNU_SOURCE "
-	AC_CHECK_HEADER([hinch/hmain.h],,[have_valid_gordon=no])
-
-#	if test -d "$gordon_dir/cell/gordon/"; then
-#		LDFLAGS="${LDFLAGS} -L$gordon_dir/cell/gordon/"
-#	fi
-#	if test -d "$gordon_dir/util/"; then
-#		LDFLAGS="${LDFLAGS} -L$gordon_dir/util/"
-#	fi
-#
-#	AC_SEARCH_LIBS([scalp_malloc],[libsp@ceutil],,[have_valid_gordon=no])
-#	AC_SEARCH_LIBS([scalp_malloc],[libsp@ceutil.spu],,[have_valid_gordon=no])
-#	AC_SEARCH_LIBS([gordon_init],[gordon],,[have_valid_gordon=no])
-
-	if test -f $gordon_dir/cell/gordon/libgordon.a; then
-		LIBS="${LIBS} $gordon_dir/cell/gordon/libgordon.a"
+		PKG_PROG_PKG_CONFIG
+		PKG_CONFIG_PATH="${PKG_CONFIG_PATH}:$gordon_dir"
+		AC_SUBST(PKG_CONFIG_PATH)
+		PKG_CHECK_MODULES([GORDON], [libgordon], [], have_valid_gordon=no)
 	fi
 
-	if test -f $gordon_dir/util/libsp@ceutil.a; then
-		LIBS="${LIBS} $gordon_dir/util/libsp@ceutil.a"
-	fi
+	CPPFLAGS="${CPPFLAGS} ${GORDON_CFLAGS}"
+	LIBS="${LIBS} ${GORDON_LIBS}"
 
-	if test -f $gordon_dir/util/libsp@ceutil.spu.a; then
-		LIBS="${LIBS} $gordon_dir/util/libsp@ceutil.spu.a"
-	fi
-
-	AC_CHECK_FUNC(gordon_init, [], [have_valid_gordon=no])
+	# AC_CHECK_FUNC(gordon_init, [gordon], [have_valid_gordon=no])
 
 	# in case Gordon was explicitely required, but is not available, this is an error
 	if test x$enable_gordon = xyes -a x$have_valid_gordon = no; then
 		AC_MSG_ERROR([cannot find Gordon])
 	fi
 
+
 	# now we enable Gordon if and only if a proper setup is available
 	enable_gordon=$have_valid_gordon
 fi
@@ -427,7 +409,7 @@ AC_SUBST(OPENGL_RENDER, $enable_opengl_render)
 AC_MSG_RESULT($enable_opengl_render)
 
 # In case there are BLAS kernels that are used by the example applications
-# we may specify which library to use. Note that this is not used for StarPU
+# we may specify which library to use. Note that this is not used for StarPU
 # itself.
 
 blas_lib=maybe

+ 0 - 4
examples/mult/dw_mult.h

@@ -34,10 +34,6 @@
 #include <cublas.h>
 #endif
 
-#ifdef USE_GORDON
-#include <cell/gordon/spu/functions.h> 
-#endif
-
 #define MAXSLICESX	64
 #define MAXSLICESY	64
 #define MAXSLICESZ	64

+ 0 - 2
src/datawizard/interfaces/blas_interface.c

@@ -56,8 +56,6 @@ struct data_interface_ops_t interface_blas_ops = {
 #ifdef USE_GORDON
 int convert_blas_to_gordon(starpu_data_interface_t *interface, uint64_t *ptr, gordon_strideSize_t *ss) 
 {
-	STARPU_ASSERT(gordon_interface);
-
 	size_t elemsize = (*interface).blas.elemsize;
 	uint32_t nx = (*interface).blas.nx;
 	uint32_t ny = (*interface).blas.ny;

+ 1 - 1
src/datawizard/interfaces/data_interface.h

@@ -29,7 +29,7 @@
 
 #ifdef USE_GORDON
 /* to get the gordon_strideSize_t data structure from gordon */
-#include <cell/gordon/gordon.h>
+#include <gordon.h>
 #endif
 
 #include <starpu.h>

+ 0 - 2
src/datawizard/interfaces/vector_interface.c

@@ -56,8 +56,6 @@ struct data_interface_ops_t interface_vector_ops = {
 #ifdef USE_GORDON
 int convert_vector_to_gordon(starpu_data_interface_t *interface, uint64_t *ptr, gordon_strideSize_t *ss) 
 {
-	STARPU_ASSERT(gordon_interface);
-
 	*ptr = (*interface).vector.ptr;
 	(*ss).size = (*interface).vector.nx * (*interface).vector.elemsize;
 

+ 8 - 3
src/drivers/gordon/driver_gordon.c

@@ -246,8 +246,10 @@ static void gordon_callback_list_func(void *arg)
 		struct starpu_perfmodel_t *model = j->task->cl->model;
 		if (model && model->benchmarking)
 		{
-			/* XXX we do not retrieve the SPU id yet */
-			update_perfmodel_history(j, STARPU_GORDON_DEFAULT, 0, gordon_task->measured);
+			double measured = (double)gordon_task->measured;
+			unsigned cpuid = 0; /* XXX */
+
+			update_perfmodel_history(j, STARPU_GORDON_DEFAULT, cpuid, measured);
 		}
 
 		job_list_push_back(terminated_list, j);
@@ -330,6 +332,8 @@ int inject_task_list(struct job_list_s *list, struct worker_s *worker)
 	nvalids = job_list_size(list);
 //	fprintf(stderr, "nvalids %d \n", nvalids);
 
+	
+
 	struct gordon_task_wrapper_s *task_wrapper = malloc(sizeof(struct gordon_task_wrapper_s));
 	gordon_job_t *gordon_jobs = gordon_alloc_jobs(nvalids, 0);
 
@@ -352,7 +356,7 @@ int inject_task_list(struct job_list_s *list, struct worker_s *worker)
 
 		struct starpu_perfmodel_t *model = j->task->cl->model;
 		if (model && model->benchmarking)
-			gordon_jobs[index].sampling = 1;
+			gordon_jobs[index].flags.sampling = 1;
 
 		/* we should not hardcore the memory node ... XXX */
 		unsigned memory_node = 0;
@@ -386,6 +390,7 @@ void *gordon_worker_inject(struct worker_set_s *arg)
 				/* partition lists */
 				unsigned size = job_list_size(list);
 				unsigned nchunks = (size<2*arg->nworkers)?size:(2*arg->nworkers);
+				//unsigned nchunks = (size<arg->nworkers)?size:(arg->nworkers);
 
 				/* last element may be a little smaller (by 1) */
 				unsigned chunksize = size/nchunks;

+ 1 - 1
src/drivers/gordon/gordon_interface.h

@@ -18,6 +18,6 @@
 #define __GORDON_INTERFACE_H__
 
 //#include <util/util.h>
-#include <cell/gordon/gordon.h>
+#include <gordon.h>
 
 #endif // __GORDON_INTERFACE_H__

+ 1 - 1
tests/microbenchs/sync_and_notify_data.c

@@ -20,7 +20,7 @@
 #include <starpu.h>
 
 #ifdef USE_GORDON
-#include <cell/gordon/gordon.h>
+#include <gordon.h>
 #endif
 
 #define N	100