Przeglądaj źródła

On OS X, there is no posix_memalign, and sched_setaffinity is specific to
Linux.

Cédric Augonnet 16 lat temu
rodzic
commit
8068ea824d

+ 12 - 0
configure.ac

@@ -45,6 +45,18 @@ AC_SUBST(STARPUDIR, $PWD)
 
 AC_SEARCH_LIBS([pthread_create],[pthread],,AC_MSG_ERROR([pthread library unavailable]))
 AC_SEARCH_LIBS([sqrt],[m],,AC_MSG_ERROR([math library unavailable]))
+AC_SEARCH_LIBS([sysconf],[c],,AC_MSG_ERROR([sysconf unavailable]))
+
+AC_CHECK_FUNC(sched_setaffinity,
+	[], [AC_DEFINE(DONTBIND, [1], [Threads are not bound on a CPU])])
+
+
+# There is no posix_memalign on Mac OS X
+AC_CHECK_FUNC(posix_memalign, have_posix_memalign=yes, have_posix_memalign=no)
+if test x$have_posix_memalign = xyes; then
+	AC_DEFINE(HAVE_POSIX_MEMALIGN,[],[posix_memalign is available])
+fi
+
 
 ###############################################################################
 #                                                                             #

+ 4 - 0
examples/cholesky/dw_cholesky_no_stride.c

@@ -262,7 +262,11 @@ int main(int argc, char **argv)
 	for (x = 0; x < nblocks; x++)
 	{
 		if (x <= y) {
+#ifdef HAVE_POSIX_MEMALIGN
 			posix_memalign((void **)&A[y][x], 128, BLOCKSIZE*BLOCKSIZE*sizeof(float));
+#else
+			A[y][x] = malloc(BLOCKSIZE*BLOCKSIZE*sizeof(float));
+#endif
 			assert(A[y][x]);
 		}
 	}

+ 6 - 0
examples/mult/dw_mult.c

@@ -163,9 +163,15 @@ static void init_problem_data(void)
 	} else
 #endif
 	{
+#ifdef HAVE_POSIX_MEMALIGN
 		posix_memalign((void **)&A, 4096, zdim*ydim*sizeof(float));
 		posix_memalign((void **)&B, 4096, xdim*zdim*sizeof(float));
 		posix_memalign((void **)&C, 4096, xdim*ydim*sizeof(float));
+#else
+		A = malloc(zdim*ydim*sizeof(float));
+		B = malloc(xdim*zdim*sizeof(float));
+		C = malloc(xdim*ydim*sizeof(float));
+#endif
 	}
 
 	/* fill the A and B matrices */

+ 12 - 0
examples/mult/dw_mult_no_stride.c

@@ -152,7 +152,11 @@ static void init_problem_data(void)
 	{
 		for (z = 0; z < nslicesz; z++)
 		{
+#ifdef HAVE_POSIX_MEMALIGN
 			posix_memalign((void **)&A[y][z], MEM_ALIGNMENT, BLOCKSIZEZ*BLOCKSIZEY*sizeof(float));
+#else
+			A[y][z] = malloc(BLOCKSIZEZ*BLOCKSIZEY*sizeof(float));
+#endif
 			assert(A[y][z]);
 		}
 	}
@@ -161,7 +165,11 @@ static void init_problem_data(void)
 	{
 		for (x = 0; x < nslicesx; x++)
 		{
+#ifdef HAVE_POSIX_MEMALIGN
 			posix_memalign((void **)&B[z][x], MEM_ALIGNMENT, BLOCKSIZEX*BLOCKSIZEZ*sizeof(float));
+#else
+			B[z][x] = malloc(BLOCKSIZEX*BLOCKSIZEZ*sizeof(float));
+#endif
 			assert(B[z][x]);
 		}
 	}
@@ -170,7 +178,11 @@ static void init_problem_data(void)
 	{
 		for (x = 0; x < nslicesx; x++)
 		{
+#ifdef HAVE_POSIX_MEMALIGN
 			posix_memalign((void **)&C[y][x], MEM_ALIGNMENT, BLOCKSIZEX*BLOCKSIZEY*sizeof(float));
+#else
+			C[y][x] = malloc(BLOCKSIZEX*BLOCKSIZEY*sizeof(float));
+#endif
 			assert(C[y][x]);
 		}
 	}

+ 12 - 0
examples/mult/dw_mult_no_stride_no_tag.c

@@ -145,7 +145,11 @@ static void init_problem_data(void)
 	{
 		for (z = 0; z < nslicesz; z++)
 		{
+#ifdef HAVE_POSIX_MEMALIGN
 			posix_memalign((void **)&A[y][z], MEM_ALIGNMENT, BLOCKSIZEZ*BLOCKSIZEY*sizeof(float));
+#else
+			A[y][z] = malloc(BLOCKSIZEZ*BLOCKSIZEY*sizeof(float));
+#endif
 			assert(A[y][z]);
 		}
 	}
@@ -154,7 +158,11 @@ static void init_problem_data(void)
 	{
 		for (x = 0; x < nslicesx; x++)
 		{
+#ifdef HAVE_POSIX_MEMALIGN
 			posix_memalign((void **)&B[z][x], MEM_ALIGNMENT, BLOCKSIZEX*BLOCKSIZEZ*sizeof(float));
+#else
+			B[z][x] = malloc(BLOCKSIZEX*BLOCKSIZEZ*sizeof(float));
+#endif
 			assert(B[z][x]);
 		}
 	}
@@ -163,7 +171,11 @@ static void init_problem_data(void)
 	{
 		for (x = 0; x < nslicesx; x++)
 		{
+#ifdef HAVE_POSIX_MEMALIGN
 			posix_memalign((void **)&C[y][x], MEM_ALIGNMENT, BLOCKSIZEX*BLOCKSIZEY*sizeof(float));
+#else
+			C[y][x] = malloc(BLOCKSIZEX*BLOCKSIZEY*sizeof(float));
+#endif
 			currentpos[y][x].x = x;
 			currentpos[y][x].y = y;
 			currentpos[y][x].z = 0;

+ 10 - 0
examples/strassen2/strassen2.c

@@ -162,7 +162,11 @@ starpu_data_handle allocate_tmp_matrix(unsigned size, unsigned reclevel)
         } else
 #endif
         {
+#ifdef HAVE_POSIX_MEMALIGN
 		posix_memalign((void **)&buffer, 4096, size*size*sizeof(float));
+#else
+		buffer = malloc(size*size*sizeof(float));
+#endif
         }
 
 	assert(buffer);
@@ -768,9 +772,15 @@ int main(int argc, char **argv)
         } else
 #endif
         {
+#ifdef HAVE_POSIX_MEMALIGN
                 posix_memalign((void **)&A, 4096, size*size*sizeof(float));
                 posix_memalign((void **)&B, 4096, size*size*sizeof(float));
                 posix_memalign((void **)&C, 4096, size*size*sizeof(float));
+#else
+		A = malloc(size*size*sizeof(float));
+		B = malloc(size*size*sizeof(float));
+		C = malloc(size*size*sizeof(float));
+#endif
         }
 
 	assert(A);

+ 4 - 0
include/starpu_config.h.in

@@ -15,4 +15,8 @@
 
 #undef USE_GTK
 
+#undef DONTBIND
+
+#undef HAVE_POSIX_MEMALIGN
+
 #endif