From 967e76060da0fec6d93bee18fbc5b5b5b1fef375 Mon Sep 17 00:00:00 2001 From: "Kurt A. O'Hearn" <ohearnk@msu.edu> Date: Tue, 22 May 2018 18:13:38 -0400 Subject: [PATCH] PG-PuReMD: fix CUDA compilation error. Revert library building via libtool due to issues with recognizing custom suffix rules for building CUDA source files and revisit at a later date. --- PG-PuReMD/Makefile.am | 75 +++++++++++++++++------------------------- PG-PuReMD/aclocal.m4 | 65 ------------------------------------ PG-PuReMD/configure.ac | 58 ++++++++++++++++---------------- PG-PuReMD/src/puremd.c | 5 +-- configure.ac | 8 ++--- 5 files changed, 67 insertions(+), 144 deletions(-) diff --git a/PG-PuReMD/Makefile.am b/PG-PuReMD/Makefile.am index c5c84052..913614d2 100644 --- a/PG-PuReMD/Makefile.am +++ b/PG-PuReMD/Makefile.am @@ -16,15 +16,17 @@ NVCCFLAGS += --compiler-options "$(DEFS) $(NVCC_OPT_CODE_DEFS) -O3 -funroll-loop endif -lib_LTLIBRARIES = lib/libpuremd.la -lib_libpuremd_la_SOURCES = src/allocate.c src/basic_comm.c src/ffield.c src/grid.c src/list.c \ +bin_PROGRAMS = bin/pg-puremd + +bin_pg_puremd_SOURCES = src/allocate.c src/basic_comm.c src/ffield.c src/grid.c src/list.c \ src/lookup.c src/io_tools.c src/reset_tools.c src/restart.c src/random.c \ src/tool_box.c src/traj.c src/analyze.c src/box.c src/system_props.c \ src/control.c src/comm_tools.c src/geo_tools.c src/lin_alg.c src/neighbors.c \ src/charges.c src/bond_orders.c src/multi_body.c src/bonds.c src/valence_angles.c \ src/hydrogen_bonds.c src/torsion_angles.c src/nonbonded.c src/forces.c \ - src/integrate.c src/init_md.c src/puremd.c -lib_libpuremd_la_SOURCES += src/reax_types.h src/index_utils.h \ + src/integrate.c src/init_md.c src/puremd.c \ + src/driver.c \ + src/reax_types.h src/index_utils.h \ src/allocate.h src/basic_comm.h src/ffield.h src/grid.h src/list.h \ src/lookup.h src/io_tools.h src/reset_tools.h src/restart.h src/random.h src/vector.h \ src/tool_box.h src/traj.h src/analyze.h src/box.h src/system_props.h \ @@ -32,52 +34,37 @@ lib_libpuremd_la_SOURCES += src/reax_types.h src/index_utils.h \ src/charges.h src/bond_orders.h src/multi_body.h src/bonds.h src/valence_angles.h \ src/hydrogen_bonds.h src/torsion_angles.h src/nonbonded.h src/forces.h \ src/integrate.h src/init_md.h -include_HEADERS = src/puremd.h - if USE_CUDA -lib_libpuremd_la_SOURCES += src/cuda/cuda_utils.cu src/cuda/cuda_allocate.cu src/cuda/cuda_environment.cu \ - src/cuda/cuda_system_props.cu src/cuda/cuda_reduction.cu src/cuda/cuda_box.cu src/cuda/cuda_list.cu \ - src/cuda/cuda_copy.cu src/cuda/cuda_reset_tools.cu src/cuda/cuda_random.cu \ - src/cuda/cuda_neighbors.cu src/cuda/cuda_bond_orders.cu src/cuda/cuda_bonds.cu \ - src/cuda/cuda_multi_body.cu src/cuda/cuda_valence_angles.cu \ - src/cuda/cuda_torsion_angles.cu src/cuda/cuda_hydrogen_bonds.cu src/cuda/cuda_forces.cu \ - src/cuda/cuda_charges.cu src/cuda/cuda_lin_alg.cu \ - src/cuda/cuda_nonbonded.cu src/cuda/cuda_integrate.cu src/cuda/cuda_post_evolve.cu \ - src/cuda/cuda_init_md.cu src/cuda/cuda_lookup.cu -lib_libpuremd_la_SOURCES += src/cuda/cuda_helpers.h src/cuda/cuda_shuffle.h \ - src/cuda/cuda_utils.h src/cuda/cuda_allocate.h src/cuda/cuda_environment.h \ - src/cuda/cuda_system_props.h src/cuda/cuda_reduction.h src/cuda/cuda_box.h src/cuda/cuda_list.h \ - src/cuda/cuda_copy.h src/cuda/cuda_reset_tools.h src/cuda/cuda_random.h src/cuda/cuda_vector.h \ - src/cuda/cuda_neighbors.h src/cuda/cuda_bond_orders.h src/cuda/cuda_bonds.h \ - src/cuda/cuda_multi_body.h src/cuda/cuda_valence_angles.h \ - src/cuda/cuda_torsion_angles.h src/cuda/cuda_hydrogen_bonds.h src/cuda/cuda_forces.h \ - src/cuda/cuda_charges.h src/cuda/cuda_lin_alg.h \ - src/cuda/cuda_nonbonded.h src/cuda/cuda_integrate.h src/cuda/cuda_post_evolve.h \ - src/cuda/cuda_init_md.h src/cuda/cuda_lookup.h - +bin_pg_puremd_SOURCES += src/cuda/cuda_utils.cu src/cuda/cuda_allocate.cu src/cuda/cuda_environment.cu \ + src/cuda/cuda_system_props.cu src/cuda/cuda_reduction.cu src/cuda/cuda_box.cu src/cuda/cuda_list.cu \ + src/cuda/cuda_copy.cu src/cuda/cuda_reset_tools.cu src/cuda/cuda_random.cu \ + src/cuda/cuda_neighbors.cu src/cuda/cuda_bond_orders.cu src/cuda/cuda_bonds.cu \ + src/cuda/cuda_multi_body.cu src/cuda/cuda_valence_angles.cu \ + src/cuda/cuda_torsion_angles.cu src/cuda/cuda_hydrogen_bonds.cu src/cuda/cuda_forces.cu \ + src/cuda/cuda_charges.cu src/cuda/cuda_lin_alg.cu \ + src/cuda/cuda_nonbonded.cu src/cuda/cuda_integrate.cu src/cuda/cuda_post_evolve.cu \ + src/cuda/cuda_init_md.cu src/cuda/cuda_lookup.cu \ + src/cuda/cuda_helpers.h src/cuda/cuda_shuffle.h \ + src/cuda/cuda_utils.h src/cuda/cuda_allocate.h src/cuda/cuda_environment.h \ + src/cuda/cuda_system_props.h src/cuda/cuda_reduction.h src/cuda/cuda_box.h src/cuda/cuda_list.h \ + src/cuda/cuda_copy.h src/cuda/cuda_reset_tools.h src/cuda/cuda_random.h src/cuda/cuda_vector.h \ + src/cuda/cuda_neighbors.h src/cuda/cuda_bond_orders.h src/cuda/cuda_bonds.h \ + src/cuda/cuda_multi_body.h src/cuda/cuda_valence_angles.h \ + src/cuda/cuda_torsion_angles.h src/cuda/cuda_hydrogen_bonds.h src/cuda/cuda_forces.h \ + src/cuda/cuda_charges.h src/cuda/cuda_lin_alg.h \ + src/cuda/cuda_nonbonded.h src/cuda/cuda_integrate.h src/cuda/cuda_post_evolve.h \ + src/cuda/cuda_init_md.h src/cuda/cuda_lookup.h if DEBUG -lib_libpuremd_la_SOURCES += src/cuda/cuda_validation.cu -lib_libpuremd_la_SOURCES += src/cuda/cuda_validation.h +bin_pg_puremd_SOURCES += src/cuda/cuda_validation.cu \ + src/cuda/cuda_validation.h endif - -# dummy source to cause C linking -nodist_EXTRA_lib_libpuremd_la_SOURCES = src/dummy.c +# dummy source to trigger C linking +nodist_EXTRA_bin_pg_puremd_SOURCES = src/dummy.c endif -lib_libpuremd_la_CFLAGS = $(AM_CFLAGS) $(MPI_CFLAGS) $(CFLAGS) -lib_libpuremd_la_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS) -lib_libpuremd_la_LIBADD = $(AM_LDADD) $(MPI_LIBS) $(LDADD) -lstdc++ -lib_libpuremd_la_LDFLAGS = -version-info 1:0:0 -if USE_CUDA -lib_libpuremd_la_CFLAGS += $(CUDA_CFLAGS) -lib_libpuremd_la_LIBADD += $(CUDA_LIBS) -endif - -bin_PROGRAMS = bin/pg-puremd -bin_pg_puremd_SOURCES = src/driver.c bin_pg_puremd_CFLAGS = $(AM_CFLAGS) $(MPI_CFLAGS) $(CFLAGS) -bin_pg_puremd_CPPFLAGS = -I src $(AM_CPPFLAGS) $(CPPFLAGS) -bin_pg_puremd_LDADD = lib/libpuremd.la $(AM_LDADD) $(MPI_LIBS) $(LDADD) -lstdc++ +bin_pg_puremd_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS) +bin_pg_puremd_LDADD = $(AM_LDADD) $(MPI_LIBS) $(LDADD) -lstdc++ if USE_CUDA bin_pg_puremd_CFLAGS += $(CUDA_CFLAGS) bin_pg_puremd_LDADD += $(CUDA_LIBS) diff --git a/PG-PuReMD/aclocal.m4 b/PG-PuReMD/aclocal.m4 index 8206dbb6..e1a7aded 100644 --- a/PG-PuReMD/aclocal.m4 +++ b/PG-PuReMD/aclocal.m4 @@ -56,66 +56,6 @@ m4_ifndef([AC_AUTOCONF_VERSION], [m4_copy([m4_PACKAGE_VERSION], [AC_AUTOCONF_VERSION])])dnl _AM_AUTOCONF_VERSION(m4_defn([AC_AUTOCONF_VERSION]))]) -# Copyright (C) 2011-2017 Free Software Foundation, Inc. -# -# This file is free software; the Free Software Foundation -# gives unlimited permission to copy and/or distribute it, -# with or without modifications, as long as this notice is preserved. - -# AM_PROG_AR([ACT-IF-FAIL]) -# ------------------------- -# Try to determine the archiver interface, and trigger the ar-lib wrapper -# if it is needed. If the detection of archiver interface fails, run -# ACT-IF-FAIL (default is to abort configure with a proper error message). -AC_DEFUN([AM_PROG_AR], -[AC_BEFORE([$0], [LT_INIT])dnl -AC_BEFORE([$0], [AC_PROG_LIBTOOL])dnl -AC_REQUIRE([AM_AUX_DIR_EXPAND])dnl -AC_REQUIRE_AUX_FILE([ar-lib])dnl -AC_CHECK_TOOLS([AR], [ar lib "link -lib"], [false]) -: ${AR=ar} - -AC_CACHE_CHECK([the archiver ($AR) interface], [am_cv_ar_interface], - [AC_LANG_PUSH([C]) - am_cv_ar_interface=ar - AC_COMPILE_IFELSE([AC_LANG_SOURCE([[int some_variable = 0;]])], - [am_ar_try='$AR cru libconftest.a conftest.$ac_objext >&AS_MESSAGE_LOG_FD' - AC_TRY_EVAL([am_ar_try]) - if test "$ac_status" -eq 0; then - am_cv_ar_interface=ar - else - am_ar_try='$AR -NOLOGO -OUT:conftest.lib conftest.$ac_objext >&AS_MESSAGE_LOG_FD' - AC_TRY_EVAL([am_ar_try]) - if test "$ac_status" -eq 0; then - am_cv_ar_interface=lib - else - am_cv_ar_interface=unknown - fi - fi - rm -f conftest.lib libconftest.a - ]) - AC_LANG_POP([C])]) - -case $am_cv_ar_interface in -ar) - ;; -lib) - # Microsoft lib, so override with the ar-lib wrapper script. - # FIXME: It is wrong to rewrite AR. - # But if we don't then we get into trouble of one sort or another. - # A longer-term fix would be to have automake use am__AR in this case, - # and then we could set am__AR="$am_aux_dir/ar-lib \$(AR)" or something - # similar. - AR="$am_aux_dir/ar-lib $AR" - ;; -unknown) - m4_default([$1], - [AC_MSG_ERROR([could not determine $AR interface])]) - ;; -esac -AC_SUBST([AR])dnl -]) - # AM_AUX_DIR_EXPAND -*- Autoconf -*- # Copyright (C) 2001-2017 Free Software Foundation, Inc. @@ -1213,8 +1153,3 @@ AC_SUBST([am__untar]) m4_include([../m4/acx_mpi.m4]) m4_include([../m4/ax_compiler_vendor.m4]) m4_include([../m4/ax_cuda.m4]) -m4_include([../m4/libtool.m4]) -m4_include([../m4/ltoptions.m4]) -m4_include([../m4/ltsugar.m4]) -m4_include([../m4/ltversion.m4]) -m4_include([../m4/lt~obsolete.m4]) diff --git a/PG-PuReMD/configure.ac b/PG-PuReMD/configure.ac index ff85bf94..650bd7c6 100644 --- a/PG-PuReMD/configure.ac +++ b/PG-PuReMD/configure.ac @@ -10,9 +10,9 @@ sav_CFLAGS="$CFLAGS" AM_INIT_AUTOMAKE([1.15 subdir-objects -Wall -Werror foreign]) # Enable silent build rules by default. m4_ifdef([AM_SILENT_RULES], [AM_SILENT_RULES([yes])], [AC_SUBST([AM_DEFAULT_VERBOSITY],[1])]) -AM_PROG_AR -LT_PREREQ([2.2]) -LT_INIT([dlopen]) +#AM_PROG_AR +#LT_PREREQ([2.2]) +#LT_INIT([dlopen]) AC_CONFIG_MACRO_DIR([../m4]) @@ -55,15 +55,15 @@ AC_CHECK_FUNCS([gettimeofday memset]) # Check for compiler vendor AX_COMPILER_VENDOR -if test "x$ax_cv_c_compiler_vendor" = "xgnu"; then - if test "x$BUILD_DEBUG" = "x"; then - CFLAGS="$CFLAGS -Wall -O3 -funroll-loops -fstrict-aliasing" +if test "x${ax_cv_c_compiler_vendor}" = "xgnu"; then + if test "x${BUILD_DEBUG}" = "x"; then + CFLAGS="${CFLAGS} -Wall -O3 -funroll-loops -fstrict-aliasing" else - CFLAGS="$CFLAGS -Wall -O0 -g" + CFLAGS="${CFLAGS} -Wall -O0 -g" fi fi -if test "x$ax_cv_c_compiler_vendor" = "xintel"; then - if test "x$BUILD_DEBUG" = "x"; then +if test "x${ax_cv_c_compiler_vendor}" = "xintel"; then + if test "x${BUILD_DEBUG}" = "x"; then CFLAGS="$CFLAGS -fast" fi fi @@ -75,10 +75,10 @@ AC_CHECK_PROG(MPIRUN, mpirun, mpirun) AC_SUBST(MPIRUN) # try to find if we are using OpenMPI / MPICH by looking inside mpi.h -sav_CC="$CC" -sav_CFLAGS="$CFLAGS" -CC="$MPICC" -CFLAGS="$CFLAGS" +sav_CC="${CC}" +sav_CFLAGS="${CFLAGS}" +CC="${MPICC}" +CFLAGS="${CFLAGS}" AC_CHECK_DECL([OPEN_MPI], [mpi_vendor="OpenMPI"], [], [#include "mpi.h"]) # MPICH v2 @@ -87,45 +87,45 @@ AC_CHECK_DECL([MPICH2], [mpi_vendor="MPICH2"], # MPICH v3 AC_CHECK_DECL([MPICH_VERSION], [mpi_vendor="MPICH3"], [], [#include "mpi.h"]) -CC="$sav_CC" -CFLAGS="$sav_CFLAGS" +CC="${sav_CC}" +CFLAGS="${sav_CFLAGS}" # try to set MPI_CFLAGS and MPI_LIBS MPI_CFLAGS= MPI_LIBS= -if test "$mpi_vendor" = "OpenMPI" +if test "x${mpi_vendor}" = "xOpenMPI" then - MPI_CFLAGS=`$MPICC --showme:compile` - MPI_LIBS=`$MPICC --showme:link` + MPI_CFLAGS=`${MPICC} --showme:compile` + MPI_LIBS=`${MPICC} --showme:link` AC_MSG_NOTICE([OpenMPI found]) - AC_MSG_NOTICE([MPI_CFLAGS=$MPI_CFLAGS]) - AC_MSG_NOTICE([MPI_LIBS=$MPI_LIBS]) -elif test "$mpi_vendor" = "MPICH2" || test "$mpi_vendor" = "MPICH3" + AC_MSG_NOTICE([MPI_CFLAGS=${MPI_CFLAGS}]) + AC_MSG_NOTICE([MPI_LIBS=${MPI_LIBS}]) +elif test "x${mpi_vendor}" = "xMPICH2" || test "x${mpi_vendor}" = "xMPICH3" then # build MPI_CFLAGS - tmp=`$MPICC -compile-info | awk '{$1=""; print $0 }'` + tmp=`${MPICC} -compile-info | awk '{$1=""; print $0 }'` MPI_CFLAGS= for i in $tmp do case $i in -[[DIUbi]]*) - MPI_CFLAGS="$MPI_CFLAGS $i" + MPI_CFLAGS="${MPI_CFLAGS} ${i}" ;; esac done # build MPI_LIBS - tmp=`$MPICC -link-info | awk '{$1=""; print $0 }'` + tmp=`${MPICC} -link-info | awk '{$1=""; print $0 }'` for i in $tmp do case $i in [[\\/]]*.a | ?:[[\\/]]*.a | -[[lLRu]]* | -Wl* ) - MPI_LIBS="$MPI_LIBS $i" + MPI_LIBS="${MPI_LIBS} ${i}" ;; esac done AC_MSG_NOTICE([MPICH found]) - AC_MSG_NOTICE([MPI_CFLAGS=$MPI_CFLAGS]) - AC_MSG_NOTICE([MPI_LIBS=$MPI_LIBS]) + AC_MSG_NOTICE([MPI_CFLAGS=${MPI_CFLAGS}]) + AC_MSG_NOTICE([MPI_LIBS=${MPI_LIBS}]) else AC_MSG_WARN([Neither OpenMPI and MPICH have been recognized...]) fi @@ -141,12 +141,12 @@ AC_PROG_CXXCPP AX_COMPILER_VENDOR # Check for CUDA support. -if test "x$BUILD_GPU" = "xyes"; then +if test "x${BUILD_GPU}" = "xyes"; then CONFIGURE_HEADLINE([ CUDA support ]) AX_CUDA NVCCFLAGS= - NVCCFLAGS+=" -ccbin=$CXX" + NVCCFLAGS+=" -ccbin=${CXX}" if test "x${BUILD_DEBUG}" = "xtrue" then NVCCFLAGS+=" -g -G" diff --git a/PG-PuReMD/src/puremd.c b/PG-PuReMD/src/puremd.c index 9439ac96..029509af 100644 --- a/PG-PuReMD/src/puremd.c +++ b/PG-PuReMD/src/puremd.c @@ -216,14 +216,15 @@ void* setup( const char * const geo_file, const char * const ffield_file, #ifdef HAVE_CUDA /* setup the CUDA Device for this process */ - Setup_Cuda_Environment( system->my_rank, control->nprocs, control->gpus_per_node ); + Setup_Cuda_Environment( pmd_handle->system->my_rank, + pmd_handle->control->nprocs, pmd_handle->control->gpus_per_node ); #if defined(DEBUG) print_device_mem_usage( ); #endif /* init blocks sizes */ - init_blocks( system ); + init_blocks( pmd_handle->system ); #endif return (void*) pmd_handle; diff --git a/configure.ac b/configure.ac index 3f792d1e..95a04436 100644 --- a/configure.ac +++ b/configure.ac @@ -30,7 +30,7 @@ AC_ARG_ENABLE([openmp], [pack_openmp_enabled=${enableval}], [pack_openmp_enabled=yes]) AC_ARG_ENABLE([mpi-old], [AS_HELP_STRING([--enable-mpi-old], - [enable MPI support @<:@default: no@:>@])], + [enable MPI support (old) @<:@default: no@:>@])], [pack_mpi_old_enabled=${enableval}], [pack_mpi_old_enabled=no]) AC_ARG_ENABLE([gpu], [AS_HELP_STRING([--enable-gpu], @@ -38,7 +38,7 @@ AC_ARG_ENABLE([gpu], [pack_gpu_enabled=${enableval}], [pack_gpu_enabled=no]) AC_ARG_ENABLE([mpi], [AS_HELP_STRING([--enable-mpi], - [enable MPI but not CUDA support @<:@default: no@:>@])], + [enable MPI support @<:@default: no@:>@])], [pack_mpi_enabled=${enableval}], [pack_mpi_enabled=no]) AC_ARG_ENABLE([mpi-gpu], [AS_HELP_STRING([--enable-mpi-gpu], @@ -80,7 +80,7 @@ AC_ARG_ENABLE([debug], [enable debug support @<:@default: no@:>@])], [DEBUG=${enableval}], [DEBUG=no] ) -if test "x$DEBUG" = "xyes" +if test "x${DEBUG}" = "xyes" then # #TODO: fix exporting to subdirs # # See: http://stackoverflow.com/questions/34124337/changing-flags-in-configure-ac-vs-caching-with-subprojects @@ -125,7 +125,7 @@ fi AC_ARG_WITH([superlu-mt], [AS_HELP_STRING([--with-superlu-mt], - [enable usage of SuperLU MT for QEq preconditioner computation @<:@default: no@:>@])], + [enable usage of SuperLU MT for preconditioning @<:@default: no@:>@])], [package_superlu_mt=${withval}], [package_superlu_mt=no]) if test "x${package_superlu_mt}" != "xno" -- GitLab