diff --git a/configure.ac b/configure.ac index 9fa9a1de591d63794dde5db6a8dd733cfcaada09..a02dcc57c720f1a9a792b160485caee728a91b98 100644 --- a/configure.ac +++ b/configure.ac @@ -351,7 +351,7 @@ AC_ARG_WITH([tcmalloc], [with_tcmalloc="no"] ) if test "x$with_tcmalloc" != "xno"; then - if test "x$with_tcmalloc" != "xyes" && test "x$with_tcmalloc" != "x"; then + if test "x$with_tcmalloc" != "xyes" -a "x$with_tcmalloc" != "x"; then tclibs="-L$with_tcmalloc -ltcmalloc" else tclibs="-ltcmalloc" @@ -361,7 +361,7 @@ if test "x$with_tcmalloc" != "xno"; then # Could just have the minimal version. if test "$have_tcmalloc" = "no"; then - if test "x$with_tcmalloc" != "xyes" && test "x$with_tcmalloc" != "x"; then + if test "x$with_tcmalloc" != "xyes" -a "x$with_tcmalloc" != "x"; then tclibs="-L$with_tcmalloc -ltcmalloc_minimal" else tclibs="-ltcmalloc_minimal" @@ -394,7 +394,7 @@ AC_ARG_WITH([profiler], [with_profiler="yes"] ) if test "x$with_profiler" != "xno"; then - if test "x$with_profiler" != "xyes" && test "x$with_profiler" != "x"; then + if test "x$with_profiler" != "xyes" -a "x$with_profiler" != "x"; then proflibs="-L$with_profiler -lprofiler" else proflibs="-lprofiler" @@ -411,6 +411,38 @@ fi AC_SUBST([PROFILER_LIBS]) AM_CONDITIONAL([HAVEPROFILER],[test -n "$PROFILER_LIBS"]) +# Check for jemalloc another fast malloc that is good with contention. +have_jemalloc="no" +AC_ARG_WITH([jemalloc], + [AS_HELP_STRING([--with-jemalloc], + [use jemalloc library or specify the directory with lib @<:@yes/no@:>@] + )], + [with_jemalloc="$withval"], + [with_jemalloc="no"] +) +if test "x$with_jemalloc" != "xno"; then + if test "x$with_jemalloc" != "xyes" -a "x$with_jemalloc" != "x"; then + jelibs="-L$with_jemalloc -ljemalloc" + else + jelibs="-ljemalloc" + fi + AC_CHECK_LIB([jemalloc],[malloc_usable_size],[have_jemalloc="yes"],[have_jemalloc="no"], + $jelibs) + + if test "$have_jemalloc" = "yes"; then + JEMALLOC_LIBS="$jelibs" + else + JEMALLOC_LIBS="" + fi +fi +AC_SUBST([JEMALLOC_LIBS]) +AM_CONDITIONAL([HAVEJEMALLOC],[test -n "$JEMALLOC_LIBS"]) + +# Don't allow both tcmalloc and jemalloc. +if test "x$have_tcmalloc" != "xno" -a "x$have_jemalloc" != "xno"; then + AC_MSG_ERROR([Cannot use tcmalloc at same time as jemalloc]) +fi + # Check for HDF5. This is required. AX_LIB_HDF5 @@ -781,6 +813,7 @@ AC_MSG_RESULT([ FFTW3 enabled : $have_fftw3 libNUMA enabled : $have_numa Using tcmalloc : $have_tcmalloc + Using jemalloc : $have_jemalloc CPU profiler : $have_profiler Hydro scheme : $with_hydro diff --git a/examples/Makefile.am b/examples/Makefile.am index 4da84788a485dacd2103fe85ad3e729ade6b582a..28a4629bdb401c0736379a2fe14a3a5f19caf650 100644 --- a/examples/Makefile.am +++ b/examples/Makefile.am @@ -24,7 +24,7 @@ AM_CFLAGS = -I$(top_srcdir)/src $(HDF5_CPPFLAGS) AM_LDFLAGS = $(HDF5_LDFLAGS) # Extra libraries. -EXTRA_LIBS = $(HDF5_LIBS) $(FFTW_LIBS) $(PROFILER_LIBS) $(TCMALLOC_LIBS) +EXTRA_LIBS = $(HDF5_LIBS) $(FFTW_LIBS) $(PROFILER_LIBS) $(TCMALLOC_LIBS) $(JEMALLOC_LIBS) # MPI libraries. MPI_LIBS = $(METIS_LIBS) $(MPI_THREAD_LIBS) diff --git a/src/Makefile.am b/src/Makefile.am index 826ec687d0b9c72768a798ba692755258320227f..9a75870bcbcf25cb675899f54d6361452a19a55f 100644 --- a/src/Makefile.am +++ b/src/Makefile.am @@ -25,7 +25,7 @@ AM_LDFLAGS = $(HDF5_LDFLAGS) $(FFTW_LIBS) -version-info 0:0:0 GIT_CMD = @GIT_CMD@ # Additional dependencies for shared libraries. -EXTRA_LIBS = $(HDF5_LIBS) $(PROFILER_LIBS) $(TCMALLOC_LIBS) +EXTRA_LIBS = $(HDF5_LIBS) $(PROFILER_LIBS) $(TCMALLOC_LIBS) $(JEMALLOC_LIBS) # MPI libraries. MPI_LIBS = $(METIS_LIBS) $(MPI_THREAD_LIBS)