From 50c32ce6bd17b7a92f0b9f3a6c49753d92abfd45 Mon Sep 17 00:00:00 2001 From: liuyang Date: Mon, 3 Sep 2018 00:10:30 -0700 Subject: [PATCH] merged from master branch, commit d6c690f --- .travis_tests.sh | 56 ++++----- CMakeLists.txt | 90 +++++++++++--- DOC/ug.pdf | Bin 687318 -> 688543 bytes DoxyConfig | 4 +- EXAMPLE/Makefile | 5 +- EXAMPLE/bak/pxdrive.c.base.bak | 209 +++++++++++++++++++++++++++++++++ EXAMPLE/pddrive.c | 16 +-- EXAMPLE/pddrive1.c | 2 +- EXAMPLE/pddrive1_ABglobal.c | 2 +- EXAMPLE/pddrive2.c | 2 +- EXAMPLE/pddrive2_ABglobal.c | 2 +- EXAMPLE/pddrive3.c | 2 +- EXAMPLE/pddrive3_ABglobal.c | 2 +- EXAMPLE/pddrive4.c | 4 +- EXAMPLE/pddrive4_ABglobal.c | 4 +- EXAMPLE/pddrive_ABglobal.c | 2 +- EXAMPLE/pzdrive.c | 5 +- EXAMPLE/pzdrive1.c | 2 +- EXAMPLE/pzdrive1_ABglobal.c | 2 +- EXAMPLE/pzdrive2.c | 2 +- EXAMPLE/pzdrive2_ABglobal.c | 2 +- EXAMPLE/pzdrive3.c | 2 +- EXAMPLE/pzdrive3_ABglobal.c | 2 +- EXAMPLE/pzdrive4.c | 4 +- EXAMPLE/pzdrive4_ABglobal.c | 4 +- EXAMPLE/pzdrive_ABglobal.c | 2 +- FORTRAN/Makefile | 4 +- README.md | 124 ++++++++++++++----- SRC/AWPM_CombBLAS.hpp | 126 ++++++++++++++++++++ SRC/CMakeLists.txt | 28 +++-- SRC/Makefile | 34 ++++-- SRC/c2cpp_GetAWPM.cpp | 63 ++++++++++ SRC/cp_new | 12 ++ SRC/dSchCompUdt-2Ddynamic.c | 23 ++-- SRC/dlook_ahead_update.c | 24 ++-- SRC/dmemory_dist.c | 4 +- SRC/dsp_blas2_dist.c | 72 ++++++------ SRC/dutil_dist.c | 123 ++++++++++++++++++- SRC/extrall | 65 ++++++++++ SRC/get_perm_c_parmetis.c | 6 +- SRC/memory.c | 22 ++-- SRC/pdgssvx.c | 21 +++- SRC/pdgssvx_ABglobal.c | 14 ++- SRC/pdgstrf.c | 29 +++-- SRC/psymbfact.c | 25 ++-- SRC/psymbfact.h | 5 +- SRC/pzgssvx.c | 21 +++- SRC/pzgssvx_ABglobal.c | 18 +-- SRC/pzgstrf.c | 29 +++-- SRC/static_schedule.c | 8 +- SRC/superlu_ddefs.h | 7 ++ SRC/superlu_defs.h | 41 ++----- SRC/superlu_dist_config.h | 12 +- SRC/superlu_dist_config.h.in | 6 +- SRC/superlu_enum_consts.h | 6 +- SRC/superlu_zdefs.h | 7 ++ SRC/svn-commit.tmp | 5 + SRC/symbfact.c | 3 +- SRC/util.c | 20 ++-- SRC/util_dist.h | 44 +++---- SRC/zSchCompUdt-2Ddynamic.c | 23 ++-- SRC/zlook_ahead_update.c | 24 ++-- SRC/zmemory_dist.c | 4 +- SRC/zsp_blas2_dist.c | 72 ++++++------ SRC/zutil_dist.c | 119 +++++++++++++++++++ TEST/.dropbox.attr | 1 + TEST/CMakeLists.txt | 4 +- TEST/Makefile | 4 +- TEST/dcreate_matrix.c | 5 - TEST/pdcompute_resid.c | 14 +-- TEST/pdtest.c | 55 +++++++-- TEST/pztest.c | 55 +++++++-- config.sh | 16 +++ make.inc.in | 25 ++-- make.inc_knl | 63 ++++++++++ 75 files changed, 1507 insertions(+), 457 deletions(-) create mode 100644 EXAMPLE/bak/pxdrive.c.base.bak create mode 100644 SRC/AWPM_CombBLAS.hpp create mode 100644 SRC/c2cpp_GetAWPM.cpp create mode 100644 SRC/cp_new create mode 100644 SRC/extrall create mode 100644 SRC/svn-commit.tmp create mode 100755 TEST/.dropbox.attr create mode 100644 config.sh create mode 100644 make.inc_knl diff --git a/.travis_tests.sh b/.travis_tests.sh index d9504b10..a92250b6 100755 --- a/.travis_tests.sh +++ b/.travis_tests.sh @@ -1,28 +1,28 @@ -#!/bin/sh -set -e - -export RED="\033[31;1m" -export BLUE="\033[34;1m" -printf "${BLUE} GC; Entered tests file:\n" - -export DATA_FOLDER=$TRAVIS_BUILD_DIR/EXAMPLE -export EXAMPLE_FOLDER=$TRAVIS_BUILD_DIR/build/EXAMPLE -export TEST_FOLDER=$TRAVIS_BUILD_DIR/build/TEST - -case "${TEST_NUMBER}" in -1) mpirun "-n" "1" "$TEST_FOLDER/pdtest" "-r" "1" "-c" "1" "-s" "1" "-b" "2" "-x" "8" "-m" "20" "-f" "$DATA_FOLDER/g20.rua" ;; -2) mpirun "-n" "1" "$TEST_FOLDER/pdtest" "-r" "1" "-c" "1" "-s" "3" "-b" "2" "-x" "8" "-m" "20" "-f" "$DATA_FOLDER/g20.rua" ;; -3) mpirun "-n" "3" "$TEST_FOLDER/pdtest" "-r" "1" "-c" "3" "-s" "1" "-b" "2" "-x" "8" "-m" "20" "-f" "$DATA_FOLDER/g20.rua" ;; -4) mpirun "-n" "3" "$TEST_FOLDER/pdtest" "-r" "1" "-c" "3" "-s" "3" "-b" "2" "-x" "8" "-m" "20" "-f" "$DATA_FOLDER/g20.rua" ;; -5) mpirun "-n" "2" "$TEST_FOLDER/pdtest" "-r" "2" "-c" "1" "-s" "1" "-b" "2" "-x" "8" "-m" "20" "-f" "$DATA_FOLDER/g20.rua" ;; -6) mpirun "-n" "2" "$TEST_FOLDER/pdtest" "-r" "2" "-c" "1" "-s" "3" "-b" "2" "-x" "8" "-m" "20" "-f" "$DATA_FOLDER/g20.rua" ;; -7) mpirun "-n" "6" "$TEST_FOLDER/pdtest" "-r" "2" "-c" "3" "-s" "1" "-b" "2" "-x" "8" "-m" "20" "-f" "$DATA_FOLDER/g20.rua" ;; -8) mpirun "-n" "6" "$TEST_FOLDER/pdtest" "-r" "2" "-c" "3" "-s" "3" "-b" "2" "-x" "8" "-m" "20" "-f" "$DATA_FOLDER/g20.rua" ;; -9) mpirun "-n" "4" "$EXAMPLE_FOLDER/pddrive1" "-r" "2" "-c" "2" "$DATA_FOLDER/big.rua" ;; -10) mpirun "-n" "4" "$EXAMPLE_FOLDER/pddrive2" "-r" "2" "-c" "2" "$DATA_FOLDER/big.rua" ;; -11) mpirun "-n" "4" "$EXAMPLE_FOLDER/pddrive3" "-r" "2" "-c" "2" "$DATA_FOLDER/big.rua" ;; -12) mpirun "-n" "4" "$EXAMPLE_FOLDER/pzdrive1" "-r" "2" "-c" "2" "$DATA_FOLDER/cg20.cua" ;; -13) mpirun "-n" "4" "$EXAMPLE_FOLDER/pzdrive2" "-r" "2" "-c" "2" "$DATA_FOLDER/cg20.cua" ;; -14) mpirun "-n" "4" "$EXAMPLE_FOLDER/pzdrive3" "-r" "2" "-c" "2" "$DATA_FOLDER/cg20.cua" ;; -*) printf "${RED} ###GC: Unknown test\n" ;; -esac +#!/bin/sh +set -e + +export RED="\033[31;1m" +export BLUE="\033[34;1m" +printf "${BLUE} GC; Entered tests file:\n" + +export DATA_FOLDER=$TRAVIS_BUILD_DIR/EXAMPLE +export EXAMPLE_FOLDER=$TRAVIS_BUILD_DIR/build/EXAMPLE +export TEST_FOLDER=$TRAVIS_BUILD_DIR/build/TEST + +case "${TEST_NUMBER}" in +1) mpirun "-n" "1" "$TEST_FOLDER/pdtest" "-r" "1" "-c" "1" "-s" "1" "-b" "2" "-x" "8" "-m" "20" "-f" "$DATA_FOLDER/g20.rua" ;; +2) mpirun "-n" "1" "$TEST_FOLDER/pdtest" "-r" "1" "-c" "1" "-s" "3" "-b" "2" "-x" "8" "-m" "20" "-f" "$DATA_FOLDER/g20.rua" ;; +3) mpirun "-n" "3" "$TEST_FOLDER/pdtest" "-r" "1" "-c" "3" "-s" "1" "-b" "2" "-x" "8" "-m" "20" "-f" "$DATA_FOLDER/g20.rua" ;; +4) mpirun "-n" "3" "$TEST_FOLDER/pdtest" "-r" "1" "-c" "3" "-s" "3" "-b" "2" "-x" "8" "-m" "20" "-f" "$DATA_FOLDER/g20.rua" ;; +5) mpirun "-n" "2" "$TEST_FOLDER/pdtest" "-r" "2" "-c" "1" "-s" "1" "-b" "2" "-x" "8" "-m" "20" "-f" "$DATA_FOLDER/g20.rua" ;; +6) mpirun "-n" "2" "$TEST_FOLDER/pdtest" "-r" "2" "-c" "1" "-s" "3" "-b" "2" "-x" "8" "-m" "20" "-f" "$DATA_FOLDER/g20.rua" ;; +7) mpirun "-n" "6" "$TEST_FOLDER/pdtest" "-r" "2" "-c" "3" "-s" "1" "-b" "2" "-x" "8" "-m" "20" "-f" "$DATA_FOLDER/g20.rua" ;; +8) mpirun "-n" "6" "$TEST_FOLDER/pdtest" "-r" "2" "-c" "3" "-s" "3" "-b" "2" "-x" "8" "-m" "20" "-f" "$DATA_FOLDER/g20.rua" ;; +9) mpirun "-n" "4" "$EXAMPLE_FOLDER/pddrive1" "-r" "2" "-c" "2" "$DATA_FOLDER/big.rua" ;; +10) mpirun "-n" "4" "$EXAMPLE_FOLDER/pddrive2" "-r" "2" "-c" "2" "$DATA_FOLDER/big.rua" ;; +11) mpirun "-n" "4" "$EXAMPLE_FOLDER/pddrive3" "-r" "2" "-c" "2" "$DATA_FOLDER/big.rua" ;; +12) mpirun "-n" "4" "$EXAMPLE_FOLDER/pzdrive1" "-r" "2" "-c" "2" "$DATA_FOLDER/cg20.cua" ;; +13) mpirun "-n" "4" "$EXAMPLE_FOLDER/pzdrive2" "-r" "2" "-c" "2" "$DATA_FOLDER/cg20.cua" ;; +14) mpirun "-n" "4" "$EXAMPLE_FOLDER/pzdrive3" "-r" "2" "-c" "2" "$DATA_FOLDER/cg20.cua" ;; +*) printf "${RED} ###GC: Unknown test\n" ;; +esac diff --git a/CMakeLists.txt b/CMakeLists.txt index 95f101b3..4d8a8975 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -8,13 +8,32 @@ cmake_minimum_required(VERSION 2.8.12 FATAL_ERROR) # Project version numbers -project(SuperLU_DIST NONE) +project(SuperLU_DIST C) set(VERSION_MAJOR "5") -set(VERSION_MINOR "3") +set(VERSION_MINOR "4") set(VERSION_BugFix "0") set(PROJECT_VERSION ${VERSION_MAJOR}.${VERSION_MINOR}.${VERSION_BugFix}) list(APPEND CMAKE_MODULE_PATH "${PROJECT_SOURCE_DIR}/cmake") + +# Set up options +option(enable_blaslib "Build the CBLAS library" ${enable_blaslib_DEFAULT}) +option(enable_doc "Build doxygen documentation" OFF) +option(enable_double "Enable double precision library" ON) +option(enable_complex16 "Enable complex16 precision library" ON) +option(enable_tests "Build tests" ON) +option(enable_examples "Build examples" ON) +option(enable_parmetislib "Build the ParMETIS library" ON) +option(TPL_PARMETIS_LIBRARIES "List of absolute paths to ParMETIS link libraries [].") +option(TPL_PARMETIS_INCLUDE_DIRS "List of absolute paths to ParMETIS include directories [].") +option(enable_combblaslib "Build the CombBLAS library" OFF) +option(TPL_COMBBLAS_LIBRARIES "List of absolute paths to CombBLAS link libraries [].") +option(TPL_COMBBLAS_INCLUDE_DIRS "List of absolute paths to CombBLAS include directories [].") + +# if (NOT enable_combblaslib) + SET(XSDK_ENABLE_CXX ON) +# endif() + ###################################################################### # # IDEAS: xSDK standards module @@ -22,7 +41,6 @@ MESSAGE("\nProcess XSDK defaults ...") # SET(USE_XSDK_DEFAULTS_DEFAULT TRUE) # Set to false if desired INCLUDE("cmake/XSDKDefaults.cmake") INCLUDE(CTest) - ###################################################################### ###################################################################### @@ -51,6 +69,7 @@ SET(CMAKE_INSTALL_RPATH_USE_LINK_PATH TRUE) #---- SET(BUILD_STATIC_LIBS TRUE CACHE BOOL "Include static libs when building shared") + if (BUILD_SHARED_LIBS) message("-- SuperLU_DIST will be built as a shared library.") set(PROJECT_NAME_LIB_EXPORT libsuperlu_dist.so) @@ -62,9 +81,10 @@ else() set(PROJECT_NAME_LIB_EXPORT libsuperlu_dist.a) endif() -enable_language (C) -enable_language (CXX) -set(CMAKE_CXX_STANDARD 11) +if (XSDK_ENABLE_CXX) + enable_language (CXX) + set(NOCXX FALSE) +endif() if (XSDK_ENABLE_Fortran) enable_language (Fortran) set(NOFORTRAN FALSE) @@ -84,17 +104,6 @@ if (NOT CMAKE_INSTALL_PREFIX) endif() -# setup options -option(enable_blaslib "Build the CBLAS library" ${enable_blaslib_DEFAULT}) -option(enable_parmetislib "Build the ParMETIS library" ON) -option(enable_doc "Build doxygen documentation" OFF) -option(enable_double "Enable double precision library" ON) -option(enable_complex16 "Enable complex16 precision library" ON) -option(enable_tests "Build tests" ON) -option(enable_examples "Build examples" ON) -option(TPL_PARMETIS_LIBRARIES "List of absolute paths to ParMETIS link libraries [].") -option(TPL_PARMETIS_INCLUDE_DIRS "List of absolute paths to ParMETIS include directories [].") - if(NOT MSVC) include(GNUInstallDirs) set(default_install_inc_dir ${CMAKE_INSTALL_INCLUDEDIR}) @@ -110,6 +119,7 @@ set(INSTALL_INC_DIR "${default_install_inc_dir}" CACHE STRING "The folder where set(INSTALL_LIB_DIR "${default_install_lib_dir}" CACHE STRING "The folder where libraries will be installed.") set(INSTALL_BIN_DIR "${default_install_bin_dir}" CACHE STRING "The folder where runtime files will be installed.") + # Set up required compiler defines and options. ## get_directory_property( DirDefs COMPILE_DEFINITIONS ) # set(CMAKE_C_FLAGS "-DDEBUGlevel=0 -DPRNTlevel=0 ${CMAKE_C_FLAGS}") @@ -117,6 +127,7 @@ if(XSDK_INDEX_SIZE EQUAL 64) message("-- Using 64 bit integer for index size") endif() set(CMAKE_C_FLAGS_RELEASE "-O3" CACHE STRING "") +set(CMAKE_CXX_FLAGS_RELEASE "-O3" CACHE STRING "") ###################################################################### # @@ -128,6 +139,7 @@ set(CMAKE_C_FLAGS_RELEASE "-O3" CACHE STRING "") find_package(MPI) if(MPI_C_FOUND) set(CMAKE_C_FLAGS "${MPI_C_COMPILE_FLAGS} ${CMAKE_C_FLAGS}") + set(CMAKE_CXX_FLAGS "${MPI_CXX_COMPILE_FLAGS} ${CMAKE_CXX_FLAGS}") set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} ${MPI_C_LINK_FLAGS}" ) endif() #--------------------- OpenMP --------------------- @@ -139,6 +151,7 @@ if (enable_openmp) ## include(FindOpenMP) # Strumpack uses this if(OPENMP_FOUND) set(CMAKE_C_FLAGS "${OpenMP_C_FLAGS} ${CMAKE_C_FLAGS}") + set(CMAKE_CXX_FLAGS "${OpenMP_CXX_FLAGS} ${CMAKE_CXX_FLAGS}") # On edison, OpenMP_EXE_LINKER_FLAGS is empty # set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} ${OpenMP_EXE_LINKER_FLAGS}") set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} ${OpenMP_C_FLAGS}") @@ -219,6 +232,42 @@ if(PARMETIS_FOUND) set(HAVE_PARMETIS TRUE) endif() +#--------------------- CombBLAS --------------------- +if (enable_combblaslib) ## want to use CombBLAS + if (NOT TPL_COMBBLAS_LIBRARIES) + message(FATAL_ERROR "TPL_COMBBLAS_LIBRARIES option should be set for COMBBLAS support to be enabled.") + endif() + + if (NOT TPL_COMBBLAS_INCLUDE_DIRS) + message(FATAL_ERROR "TPL_COMBBLAS_INCLUDE_DIRS option be set for COMBBLAS support to be enabled.") + endif() + foreach(dir ${TPL_COMBBLAS_INCLUDE_DIRS}) + if (NOT EXISTS ${dir}) + message(FATAL_ERROR "COMBBLAS include directory not found: ${dir}") + endif() + set(CMAKE_CXX_FLAGS "-I${dir} ${CMAKE_CXX_FLAGS}") + endforeach() + + message("-- Enabled support for COMBBLAS") + set(COMBBLAS_FOUND TRUE) + + set(COMBBLAS_LIB ${TPL_COMBBLAS_LIBRARIES}) + # fix up COMBBLAS library names + string (REPLACE ";" " " COMBBLAS_LIB_STR "${COMBBLAS_LIB}") + set(COMBBLAS_LIB_EXPORT ${COMBBLAS_LIB_STR}) + +else() + message("-- Will not link with CombBLAS.") +endif() + +if(COMBBLAS_FOUND) + set(HAVE_COMBBLAS TRUE) + set(LOADER $(CXX)) +else() + set(LOADER $(CC)) +endif() + + ###################################################################### # # Include directories @@ -230,7 +279,11 @@ include_directories(${CMAKE_SOURCE_DIR}/SRC) if (TPL_PARMETIS_INCLUDE_DIRS) include_directories(${TPL_PARMETIS_INCLUDE_DIRS}) ## parmetis endif () +if (TPL_COMBBLAS_INCLUDE_DIRS) + include_directories(${TPL_COMBBLAS_INCLUDE_DIRS}) ## CombBLAS +endif () include_directories(${MPI_C_INCLUDE_PATH}) + ###################################################################### # # Add subdirectories @@ -254,11 +307,10 @@ if(enable_examples) add_subdirectory(EXAMPLE) endif() -# file(WRITE "make.defs" "# can be exposed to users" ${CMAKE_C_COMPILER}) # configure_file(${CMAKE_SOURCE_DIR}/make.inc.in ${CMAKE_BINARY_DIR}/make.inc) configure_file(${SuperLU_DIST_SOURCE_DIR}/make.inc.in ${SuperLU_DIST_SOURCE_DIR}/make.inc) configure_file(${SuperLU_DIST_SOURCE_DIR}/SRC/superlu_dist_config.h.in ${SuperLU_DIST_BINARY_DIR}/SRC/superlu_dist_config.h) -# configure_file(${SuperLU_DIST_SOURCE_DIR}/SRC/superlu_dist_config.h.in ${SuperLU_DIST_SOURCE_DIR}/SRC/superlu_dist_config.h) +configure_file(${SuperLU_DIST_SOURCE_DIR}/SRC/superlu_dist_config.h.in ${SuperLU_DIST_SOURCE_DIR}/SRC/superlu_dist_config.h) # Add pkg-config support configure_file(${CMAKE_CURRENT_SOURCE_DIR}/superlu_dist.pc.in ${CMAKE_CURRENT_BINARY_DIR}/superlu_dist.pc @ONLY) diff --git a/DOC/ug.pdf b/DOC/ug.pdf index f8544055607358370ffe8fdc73584e323784166a..c7c7b20effbff88f564a421cc1dc0de1c3bc9bb6 100644 GIT binary patch delta 135378 zcmV(#K;*yH`6-`+Dv%@sF*uV!mneUYSX*=3Iu3sCukhQ-Ge-<>x}B#wj?#T?P-Ml?)Rw%I)KfQqegT4#r9^4_Vv`^UkhpvVbbkBl>{5g?5iuzOJ-fZ1Nf|Jq z^ej}I$w#BI$(ThVp7{g5x9L8wN%Fs}hRD0f_xpS|p(P1fsKijq zkKff&J(Q$m?UcMJc6VS~xSoG$CRD|OsW2L<`u>}$-leTcN!J@wY%4QmuZS}pjl@4r zdPhZ)g%Nm1Ml2ML^j&o*aMW}0K?Jchl>T)}y5=nA(dh8+bCBIR{9#gd7{G~= zp>T|?m*PtYjB7d4ag||IJrqr9D$?}tc`UtjpZ-X{P8lmvObI;-uE~Gs@2Ya2$H2HsqXm`kPr13>z@~o-MA23an_u&f{VdlhE_xLZpo2+FFUgxPHACr9n!gK43&8BFIs!Vqz${7~z?sRu{$Ghr{ z4-k6~XMYvjhv)J?KG={3-Sye!9Ad4l!Br!^iIexIx^A-_r~rO=EeEokeYHryN2Y46 zYG9#Y9~&VWe0DC*2Ui{Ef5H^**QFG7$rg3cMZJTQMdPSLC&{sKi%VB%?L4Z_JE zUC05#)}(tj0Ww0dCSTlLDw5(G_68m}~F-4RHkg(idUC9a#`{dCYcIW6)r`Y^n?~2#EyB*t74x$-<(?~ylY9yzF{ALjbPDC+^Wk0A3nYhOyNFL*XZx)?!!ZrqqK91LTg^q;Htbg zP_>vgYg&^Ntyfaht|j5lV;o5t#W68CQK!`ekW2*OFS1FE>f)ax&eJzta6oX3H9I(^ znw_4WHz9>^sTGe>>&gCMa={)BWwCo}9LIloYVJ~#b|NvgfUZ4=H6H#XQ!wAQ)G6Qr z8qB&jtM5)p<_92;5(;qNU@rr?+`Vf=wMhj}bn{TuL`mD`p)y20WfM#W*#vRgSWwu| z9-CCa;*ts|eNtK3?g&?9-4spRTVj@V?`tP}33=#P;86MwTf@A>9^}!1%r>%e=18DRzIS122YrbTOpd4R%vZ_KAnf z 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 Um#usX9t$@!F*OP$B}Gq03Yj!e!2kdN delta 134265 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

o>}@4=cFe-b&ut4(k!rqWlnjhfZF)q_nQY2 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 v>?=?eh +#include "superlu_@(pre)defs.h" + + +main(int argc, char *argv[]) +/* + * Purpose + * ======= + * + * The driver program P@(PRE)DRIVE. + * + * This example illustrates how to use P@(PRE)GSSVX with the full + * (default) options to solve a linear system. + * + * Five basic steps are required: + * 1. Initialize the MPI environment and the SuperLU process grid + * 2. Set up the input matrix and the right-hand side + * 3. Set the options argument + * 4. Call p@(pre)gssvx + * 5. Release the process grid and terminate the MPI environment + * + * On an IBM SP, the program may be run by typing + * poe p@(pre)drive -r -c -procs

+ * + */ +{ + superlu_options_t options; + SuperLUStat_t stat; + SuperMatrix A; + ScalePermstruct_t ScalePermstruct; + LUstruct_t LUstruct; + SOLVEstruct_t SOLVEstruct; + gridinfo_t grid; + double *berr; + @(type) *b, *xtrue; + int_t m, n; + int_t nprow, npcol; + int iam, info, ldb, ldx, nrhs; + char **cpp, c; + FILE *fp, *fopen(); + extern int cpp_defs(); + + nprow = 1; /* Default process rows. */ + npcol = 1; /* Default process columns. */ + nrhs = 1; /* Number of right-hand side. */ + + /* ------------------------------------------------------------ + INITIALIZE MPI ENVIRONMENT. + ------------------------------------------------------------*/ + MPI_Init( &argc, &argv ); + + /* Parse command line argv[]. */ + for (cpp = argv+1; *cpp; ++cpp) { + if ( **cpp == '-' ) { + c = *(*cpp+1); + ++cpp; + switch (c) { + case 'h': + printf("Options:\n"); + printf("\t-r : process rows (default %d)\n", nprow); + printf("\t-c : process columns (default %d)\n", npcol); + exit(0); + break; + case 'r': nprow = atoi(*cpp); + break; + case 'c': npcol = atoi(*cpp); + break; + } + } else { /* Last arg is considered a filename */ + if ( !(fp = fopen(*cpp, "r")) ) { + ABORT("File does not exist"); + } + break; + } + } + + /* ------------------------------------------------------------ + INITIALIZE THE SUPERLU PROCESS GRID. + ------------------------------------------------------------*/ + superlu_gridinit(MPI_COMM_WORLD, nprow, npcol, &grid); + + /* Bail out if I do not belong in the grid. */ + iam = grid.iam; + if ( iam >= nprow * npcol ) goto out; + if ( !iam ) printf("\tProcess grid\t%d X %d\n", grid.nprow, grid.npcol); + +#if ( VAMPIR>=1 ) + VT_traceoff(); +#endif + +#if ( DEBUGlevel>=1 ) + CHECK_MALLOC(iam, "Enter main()"); +#endif + + /* ------------------------------------------------------------ + GET THE MATRIX FROM FILE AND SETUP THE RIGHT HAND SIDE. + ------------------------------------------------------------*/ + @(pre)create_matrix(&A, nrhs, &b, &ldb, &xtrue, &ldx, fp, &grid); + + if ( !(berr = doubleMalloc_dist(nrhs)) ) + ABORT("Malloc fails for berr[]."); + + /* ------------------------------------------------------------ + NOW WE SOLVE THE LINEAR SYSTEM. + ------------------------------------------------------------*/ + + /* Set the default input options: + options.Fact = DOFACT; + options.Equil = YES; + options.ParSymbFact = NO; + options.ColPerm = MMD_AT_PLUS_A; + options.RowPerm = LargeDiag; + options.ReplaceTinyPivot = YES; + options.IterRefine = DOUBLE; + options.Trans = NOTRANS; + options.SolveInitialized = NO; + options.RefineInitialized = NO; + options.PrintStat = YES; + */ + set_default_options_dist(&options); +#if 0 + options.RowPerm = NOROWPERM; + options.IterRefine = NOREFINE; + options.ColPerm = NATURAL; + options.Equil = NO; + options.ReplaceTinyPivot = NO; +#endif + + m = A.nrow; + n = A.ncol; + + /* Initialize ScalePermstruct and LUstruct. */ + ScalePermstructInit(m, n, &ScalePermstruct); + LUstructInit(m, n, &LUstruct); + + /* Initialize the statistics variables. */ + PStatInit(&stat); + + /* Call the linear equation solver. */ + p@(pre)gssvx(&options, &A, &ScalePermstruct, b, ldb, nrhs, &grid, + &LUstruct, &SOLVEstruct, berr, &stat, &info); + + + /* Check the accuracy of the solution. */ + p@(pre)inf_norm_error(iam, ((NRformat_loc *)A.Store)->m_loc, + nrhs, b, ldb, xtrue, ldx, &grid); + + PStatPrint(&options, &stat, &grid); /* Print the statistics. */ + + /* ------------------------------------------------------------ + DEALLOCATE STORAGE. + ------------------------------------------------------------*/ + + PStatFree(&stat); + Destroy_CompRowLoc_Matrix_dist(&A); + ScalePermstructFree(&ScalePermstruct); + Destroy_LU(n, &grid, &LUstruct); + LUstructFree(&LUstruct); + if ( options.SolveInitialized ) { + @(pre)SolveFinalize(&options, &SOLVEstruct); + } + SUPERLU_FREE(b); + SUPERLU_FREE(xtrue); + SUPERLU_FREE(berr); + + /* ------------------------------------------------------------ + RELEASE THE SUPERLU PROCESS GRID. + ------------------------------------------------------------*/ +out: + superlu_gridexit(&grid); + + /* ------------------------------------------------------------ + TERMINATES THE MPI EXECUTION ENVIRONMENT. + ------------------------------------------------------------*/ + MPI_Finalize(); + +#if ( DEBUGlevel>=1 ) + CHECK_MALLOC(iam, "Exit main()"); +#endif + +} + + +int cpp_defs() +{ + printf(".. CPP definitions:\n"); +#if ( PRNTlevel>=1 ) + printf("\tPRNTlevel = %d\n", PRNTlevel); +#endif +#if ( DEBUGlevel>=1 ) + printf("\tDEBUGlevel = %d\n", DEBUGlevel); +#endif +#if ( PROFlevel>=1 ) + printf("\tPROFlevel = %d\n", PROFlevel); +#endif +#if ( StaticPivot>=1 ) + printf("\tStaticPivot = %d\n", StaticPivot); +#endif + printf("....\n"); + return 0; +} diff --git a/EXAMPLE/pddrive.c b/EXAMPLE/pddrive.c index e9c25328..706f1bf9 100644 --- a/EXAMPLE/pddrive.c +++ b/EXAMPLE/pddrive.c @@ -183,25 +183,17 @@ int main(int argc, char *argv[]) options.Equil = YES; options.ParSymbFact = NO; options.ColPerm = METIS_AT_PLUS_A; - options.RowPerm = LargeDiag; + options.RowPerm = LargeDiag_MC64; options.ReplaceTinyPivot = NO; options.IterRefine = DOUBLE; options.Trans = NOTRANS; options.SolveInitialized = NO; options.RefineInitialized = NO; options.PrintStat = YES; - options.DiagInv = NO; + options.DiagInv = NO; */ set_default_options_dist(&options); - // options.DiagInv = YES; - options.Equil = YES; - //options.IterRefine = NO; - options.ColPerm = METIS_AT_PLUS_A; - - // options.ParSymbFact = YES; - // options.ColPerm == PARMETIS; - - + options.IterRefine = NOREFINE; #if 0 options.RowPerm = NOROWPERM; options.IterRefine = NOREFINE; @@ -210,6 +202,8 @@ int main(int argc, char *argv[]) options.ReplaceTinyPivot = YES; #endif + + if (!iam) { print_sp_ienv_dist(&options); print_options_dist(&options); diff --git a/EXAMPLE/pddrive1.c b/EXAMPLE/pddrive1.c index 6721fde2..683105d6 100644 --- a/EXAMPLE/pddrive1.c +++ b/EXAMPLE/pddrive1.c @@ -149,7 +149,7 @@ int main(int argc, char *argv[]) options.Fact = DOFACT; options.Equil = YES; options.ColPerm = METIS_AT_PLUS_A; - options.RowPerm = LargeDiag; + options.RowPerm = LargeDiag_MC64; options.ReplaceTinyPivot = NO; options.Trans = NOTRANS; options.IterRefine = DOUBLE; diff --git a/EXAMPLE/pddrive1_ABglobal.c b/EXAMPLE/pddrive1_ABglobal.c index 66d4b4aa..f9d9d0da 100644 --- a/EXAMPLE/pddrive1_ABglobal.c +++ b/EXAMPLE/pddrive1_ABglobal.c @@ -180,7 +180,7 @@ int main(int argc, char *argv[]) options.Fact = DOFACT; options.Equil = YES; options.ColPerm = METIS_AT_PLUS_A; - options.RowPerm = LargeDiag; + options.RowPerm = LargeDiag_MC64; options.ReplaceTinyPivot = YES; options.Trans = NOTRANS; options.IterRefine = DOUBLE; diff --git a/EXAMPLE/pddrive2.c b/EXAMPLE/pddrive2.c index e688ac01..e3cc7df5 100644 --- a/EXAMPLE/pddrive2.c +++ b/EXAMPLE/pddrive2.c @@ -157,7 +157,7 @@ int main(int argc, char *argv[]) options.Fact = DOFACT; options.Equil = YES; options.ColPerm = METIS_AT_PLUS_A; - options.RowPerm = LargeDiag; + options.RowPerm = LargeDiag_MC64; options.ReplaceTinyPivot = NO; options.Trans = NOTRANS; options.IterRefine = DOUBLE; diff --git a/EXAMPLE/pddrive2_ABglobal.c b/EXAMPLE/pddrive2_ABglobal.c index 28c943bc..1e494d07 100644 --- a/EXAMPLE/pddrive2_ABglobal.c +++ b/EXAMPLE/pddrive2_ABglobal.c @@ -188,7 +188,7 @@ int main(int argc, char *argv[]) options.Fact = DOFACT; options.Equil = YES; options.ColPerm = METIS_AT_PLUS_A; - options.RowPerm = LargeDiag; + options.RowPerm = LargeDiag_MC64; options.ReplaceTinyPivot = YES; options.Trans = NOTRANS; options.IterRefine = DOUBLE; diff --git a/EXAMPLE/pddrive3.c b/EXAMPLE/pddrive3.c index e3ef0f4b..a41bd686 100644 --- a/EXAMPLE/pddrive3.c +++ b/EXAMPLE/pddrive3.c @@ -173,7 +173,7 @@ int main(int argc, char *argv[]) options.Fact = DOFACT; options.Equil = YES; options.ColPerm = METIS_AT_PLUS_A; - options.RowPerm = LargeDiag; + options.RowPerm = LargeDiag_MC64; options.ReplaceTinyPivot = NO; options.Trans = NOTRANS; options.IterRefine = DOUBLE; diff --git a/EXAMPLE/pddrive3_ABglobal.c b/EXAMPLE/pddrive3_ABglobal.c index 84554567..aea392fb 100644 --- a/EXAMPLE/pddrive3_ABglobal.c +++ b/EXAMPLE/pddrive3_ABglobal.c @@ -194,7 +194,7 @@ int main(int argc, char *argv[]) options.Fact = DOFACT; options.Equil = YES; options.ColPerm = METIS_AT_PLUS_A; - options.RowPerm = LargeDiag; + options.RowPerm = LargeDiag_MC64; options.ReplaceTinyPivot = YES; options.Trans = NOTRANS; options.IterRefine = DOUBLE; diff --git a/EXAMPLE/pddrive4.c b/EXAMPLE/pddrive4.c index 6242a73a..d660d7fb 100644 --- a/EXAMPLE/pddrive4.c +++ b/EXAMPLE/pddrive4.c @@ -160,7 +160,7 @@ int main(int argc, char *argv[]) options.Fact = DOFACT; options.Equil = YES; options.ColPerm = METIS_AT_PLUS_A; - options.RowPerm = LargeDiag; + options.RowPerm = LargeDiag_MC64; options.ReplaceTinyPivot = NO; options.Trans = NOTRANS; options.IterRefine = DOUBLE; @@ -231,7 +231,7 @@ int main(int argc, char *argv[]) options.Fact = DOFACT; options.Equil = YES; options.ColPerm = MMD_AT_PLUS_A; - options.RowPerm = LargeDiag; + options.RowPerm = LargeDiag_MC64; options.ReplaceTinyPivot = YES; options.Trans = NOTRANS; options.IterRefine = DOUBLE; diff --git a/EXAMPLE/pddrive4_ABglobal.c b/EXAMPLE/pddrive4_ABglobal.c index 34e13ac6..2f3d32eb 100644 --- a/EXAMPLE/pddrive4_ABglobal.c +++ b/EXAMPLE/pddrive4_ABglobal.c @@ -196,7 +196,7 @@ int main(int argc, char *argv[]) options.Fact = DOFACT; options.Equil = YES; options.ColPerm = METIS_AT_PLUS_A; - options.RowPerm = LargeDiag; + options.RowPerm = LargeDiag_MC64; options.ReplaceTinyPivot = YES; options.Trans = NOTRANS; options.IterRefine = DOUBLE; @@ -302,7 +302,7 @@ int main(int argc, char *argv[]) options.Fact = DOFACT; options.Equil = YES; options.ColPerm = MMD_AT_PLUS_A; - options.RowPerm = LargeDiag; + options.RowPerm = LargeDiag_MC64; options.ReplaceTinyPivot = YES; options.Trans = NOTRANS; options.IterRefine = DOUBLE; diff --git a/EXAMPLE/pddrive_ABglobal.c b/EXAMPLE/pddrive_ABglobal.c index cfb93496..d1a4e2e8 100644 --- a/EXAMPLE/pddrive_ABglobal.c +++ b/EXAMPLE/pddrive_ABglobal.c @@ -182,7 +182,7 @@ int main(int argc, char *argv[]) options.Fact = DOFACT; options.Equil = YES; options.ColPerm = METIS_AT_PLUS_A; - options.RowPerm = LargeDiag; + options.RowPerm = LargeDiag_MC64; options.ReplaceTinyPivot = YES; options.Trans = NOTRANS; options.IterRefine = DOUBLE; diff --git a/EXAMPLE/pzdrive.c b/EXAMPLE/pzdrive.c index 3f1aaadd..c8f7bc2c 100644 --- a/EXAMPLE/pzdrive.c +++ b/EXAMPLE/pzdrive.c @@ -182,7 +182,7 @@ int main(int argc, char *argv[]) options.Equil = YES; options.ParSymbFact = NO; options.ColPerm = METIS_AT_PLUS_A; - options.RowPerm = LargeDiag; + options.RowPerm = LargeDiag_MC64; options.ReplaceTinyPivot = NO; options.IterRefine = DOUBLE; options.Trans = NOTRANS; @@ -192,9 +192,6 @@ int main(int argc, char *argv[]) options.DiagInv = NO; */ set_default_options_dist(&options); - // options.DiagInv = YES; - options.IterRefine = NOREFINE; - options.ColPerm = MMD_AT_PLUS_A; #if 0 options.RowPerm = NOROWPERM; options.IterRefine = NOREFINE; diff --git a/EXAMPLE/pzdrive1.c b/EXAMPLE/pzdrive1.c index 106153dc..1db2ae8e 100644 --- a/EXAMPLE/pzdrive1.c +++ b/EXAMPLE/pzdrive1.c @@ -148,7 +148,7 @@ int main(int argc, char *argv[]) options.Fact = DOFACT; options.Equil = YES; options.ColPerm = METIS_AT_PLUS_A; - options.RowPerm = LargeDiag; + options.RowPerm = LargeDiag_MC64; options.ReplaceTinyPivot = NO; options.Trans = NOTRANS; options.IterRefine = DOUBLE; diff --git a/EXAMPLE/pzdrive1_ABglobal.c b/EXAMPLE/pzdrive1_ABglobal.c index f2ee46da..cf61d914 100644 --- a/EXAMPLE/pzdrive1_ABglobal.c +++ b/EXAMPLE/pzdrive1_ABglobal.c @@ -179,7 +179,7 @@ int main(int argc, char *argv[]) options.Fact = DOFACT; options.Equil = YES; options.ColPerm = METIS_AT_PLUS_A; - options.RowPerm = LargeDiag; + options.RowPerm = LargeDiag_MC64; options.ReplaceTinyPivot = YES; options.Trans = NOTRANS; options.IterRefine = DOUBLE; diff --git a/EXAMPLE/pzdrive2.c b/EXAMPLE/pzdrive2.c index 74ac6372..a58c1167 100644 --- a/EXAMPLE/pzdrive2.c +++ b/EXAMPLE/pzdrive2.c @@ -156,7 +156,7 @@ int main(int argc, char *argv[]) options.Fact = DOFACT; options.Equil = YES; options.ColPerm = METIS_AT_PLUS_A; - options.RowPerm = LargeDiag; + options.RowPerm = LargeDiag_MC64; options.ReplaceTinyPivot = NO; options.Trans = NOTRANS; options.IterRefine = DOUBLE; diff --git a/EXAMPLE/pzdrive2_ABglobal.c b/EXAMPLE/pzdrive2_ABglobal.c index 7079f2b1..b61d08b1 100644 --- a/EXAMPLE/pzdrive2_ABglobal.c +++ b/EXAMPLE/pzdrive2_ABglobal.c @@ -187,7 +187,7 @@ int main(int argc, char *argv[]) options.Fact = DOFACT; options.Equil = YES; options.ColPerm = METIS_AT_PLUS_A; - options.RowPerm = LargeDiag; + options.RowPerm = LargeDiag_MC64; options.ReplaceTinyPivot = YES; options.Trans = NOTRANS; options.IterRefine = DOUBLE; diff --git a/EXAMPLE/pzdrive3.c b/EXAMPLE/pzdrive3.c index 54784951..a618de89 100644 --- a/EXAMPLE/pzdrive3.c +++ b/EXAMPLE/pzdrive3.c @@ -172,7 +172,7 @@ int main(int argc, char *argv[]) options.Fact = DOFACT; options.Equil = YES; options.ColPerm = METIS_AT_PLUS_A; - options.RowPerm = LargeDiag; + options.RowPerm = LargeDiag_MC64; options.ReplaceTinyPivot = NO; options.Trans = NOTRANS; options.IterRefine = DOUBLE; diff --git a/EXAMPLE/pzdrive3_ABglobal.c b/EXAMPLE/pzdrive3_ABglobal.c index 9d87af1c..127f6c3a 100644 --- a/EXAMPLE/pzdrive3_ABglobal.c +++ b/EXAMPLE/pzdrive3_ABglobal.c @@ -193,7 +193,7 @@ int main(int argc, char *argv[]) options.Fact = DOFACT; options.Equil = YES; options.ColPerm = METIS_AT_PLUS_A; - options.RowPerm = LargeDiag; + options.RowPerm = LargeDiag_MC64; options.ReplaceTinyPivot = YES; options.Trans = NOTRANS; options.IterRefine = DOUBLE; diff --git a/EXAMPLE/pzdrive4.c b/EXAMPLE/pzdrive4.c index ed55391f..b941c735 100644 --- a/EXAMPLE/pzdrive4.c +++ b/EXAMPLE/pzdrive4.c @@ -159,7 +159,7 @@ int main(int argc, char *argv[]) options.Fact = DOFACT; options.Equil = YES; options.ColPerm = METIS_AT_PLUS_A; - options.RowPerm = LargeDiag; + options.RowPerm = LargeDiag_MC64; options.ReplaceTinyPivot = NO; options.Trans = NOTRANS; options.IterRefine = DOUBLE; @@ -230,7 +230,7 @@ int main(int argc, char *argv[]) options.Fact = DOFACT; options.Equil = YES; options.ColPerm = MMD_AT_PLUS_A; - options.RowPerm = LargeDiag; + options.RowPerm = LargeDiag_MC64; options.ReplaceTinyPivot = YES; options.Trans = NOTRANS; options.IterRefine = DOUBLE; diff --git a/EXAMPLE/pzdrive4_ABglobal.c b/EXAMPLE/pzdrive4_ABglobal.c index 94147f7f..2d9de882 100644 --- a/EXAMPLE/pzdrive4_ABglobal.c +++ b/EXAMPLE/pzdrive4_ABglobal.c @@ -195,7 +195,7 @@ int main(int argc, char *argv[]) options.Fact = DOFACT; options.Equil = YES; options.ColPerm = METIS_AT_PLUS_A; - options.RowPerm = LargeDiag; + options.RowPerm = LargeDiag_MC64; options.ReplaceTinyPivot = YES; options.Trans = NOTRANS; options.IterRefine = DOUBLE; @@ -301,7 +301,7 @@ int main(int argc, char *argv[]) options.Fact = DOFACT; options.Equil = YES; options.ColPerm = MMD_AT_PLUS_A; - options.RowPerm = LargeDiag; + options.RowPerm = LargeDiag_MC64; options.ReplaceTinyPivot = YES; options.Trans = NOTRANS; options.IterRefine = DOUBLE; diff --git a/EXAMPLE/pzdrive_ABglobal.c b/EXAMPLE/pzdrive_ABglobal.c index 06ea87bd..6a36011b 100644 --- a/EXAMPLE/pzdrive_ABglobal.c +++ b/EXAMPLE/pzdrive_ABglobal.c @@ -178,7 +178,7 @@ int main(int argc, char *argv[]) options.Fact = DOFACT; options.Equil = YES; options.ColPerm = METIS_AT_PLUS_A; - options.RowPerm = LargeDiag; + options.RowPerm = LargeDiag_MC64; options.ReplaceTinyPivot = YES; options.Trans = NOTRANS; options.IterRefine = DOUBLE; diff --git a/FORTRAN/Makefile b/FORTRAN/Makefile index 8d8952fb..2ad7a23f 100644 --- a/FORTRAN/Makefile +++ b/FORTRAN/Makefile @@ -10,7 +10,7 @@ .SUFFIXES: .SUFFIXES: .f90 .c .o include ../make.inc -INCLUDEDIR = -I../SRC + #F90FLAGS = $(FFLAGS) -qfree -qsuffix=f=f90 -qflag=w:w @@ -34,7 +34,7 @@ f_pzdrive: $(F_ZEXM) $(C_ZWRAP) $(DSUPERLULIB) $(FORTRAN) $(LOADOPTS) $(F_ZEXM) $(C_ZWRAP) $(LIBS) -o $@ .c.o: - $(CC) $(CFLAGS) $(CDEFS) $(BLASDEF) $(INCLUDEDIR) -c $< $(VERBOSE) + $(CC) $(CFLAGS) $(CDEFS) $(BLASDEF) -I$(INCLUDEDIR) -c $< $(VERBOSE) .f90.o: $(FORTRAN) $(F90FLAGS) -c $< $(VERBOSE) diff --git a/README.md b/README.md index 733e19b9..327163e3 100644 --- a/README.md +++ b/README.md @@ -1,4 +1,4 @@ -# SuperLU_DIST (version 5.3) +# SuperLU_DIST (version 5.4) [![Build Status](https://travis-ci.org/xiaoyeli/superlu_dist.svg?branch=master)](https://travis-ci.org/xiaoyeli/superlu_dist) [Nightly tests](http://my.cdash.org/index.php?project=superlu_dist) @@ -44,14 +44,14 @@ SuperLU_DIST/MAKE_INC/ sample machine-specific make.inc files ## INSTALLATION There are two ways to install the package. One requires users to -edit makefile manually, the other uses CMake build system. +edit makefile manually, the other uses CMake automatic build system. The procedures are described below. ### Installation option 1: Manual installation with makefile. Before installing the package, please examine the three things dependent on your system setup: -1.1 Edit the make.inc include file. +#### 1.1 Edit the make.inc include file. This make include file is referenced inside each of the Makefiles in the various subdirectories. As a result, there is no need to @@ -83,7 +83,8 @@ printing level to show solver's execution details. (default 0) diagnostic printing level for debugging purpose. (default 0) ``` -1.2. The BLAS library. +#### 1.2. The BLAS library. + The parallel routines in SuperLU_DIST use some BLAS routines on each MPI process. Moreover, if you enable OpenMP with multiple threads, you need to link with a multithreaded BLAS library. Otherwise performance will be poor. @@ -109,9 +110,11 @@ top-level SuperLU_DIST/ directory and do the following: to make the BLAS library from the routines in the ` CBLAS/ subdirectory.` -1.3. External libraries: Metis and ParMetis. +#### 1.3. External libraries. + + ##### 1.3.1 Metis and ParMetis. -If you will use Metis or ParMetis ordering, you will +If you will use Metis or ParMetis for sparsity ordering, you will need to install them yourself. Since ParMetis package already contains the source code for the Metis library, you can just download and compile ParMetis from: @@ -127,7 +130,28 @@ You can disable ParMetis with the following line in SRC/superlu_dist_config.h: ``` #undef HAVE_PARMETIS ``` -1.4. C preprocessor definition CDEFS. + + ##### 1.3.2 CombBLAS. + +You can use parallel approximate weight perfect matching (AWPM) algorithm +to perform numerical pre-pivoting for stability. The default pre-pivoting +is to use MC64 provided internally, which is an exact algorithm, but serial. +In order to use AWPM, you will need to install CombBLAS yourself, at the +download site: +[https://people.eecs.berkeley.edu/~aydin/CombBLAS/html/index.html](https://people.eecs.berkeley.edu/~aydin/CombBLAS/html/index.html) + +After you have installed it, you should define the following in make.inc: +``` +COMBBLASLIB = /_build/libCombBLAS.a +I_COMBBLAS=-I/_install/include -I/Applications/BipartiteMatchings +``` +You can disable CombBLAS with the following line in SRC/superlu_dist_config.h: +``` +#undef HAVE_COMBBLAS +``` + +#### 1.4. C preprocessor definition CDEFS. + In the header file SRC/Cnames.h, we use macros to determine how C routines should be named so that they are callable by Fortran. (Some vendor-supplied BLAS libraries do not have C interfaces. So the @@ -142,7 +166,8 @@ The possible options for CDEFS are: that compiled by C; -DUpCase: Fortran expects a C routine name to be all uppercase. ``` -1.5. Multicore and GPU (optional). + +#### 1.5. Multicore and GPU (optional). To use OpenMP parallelism, need to link with an OpenMP library, and set the number of threads you wish to use as follows (bash): @@ -175,31 +200,52 @@ two environment variables: PARMETIS_ROOT and PARMETIS_BUILD_DIR export PARMETIS_ROOT= export PARMETIS_BUILD_DIR=${PARMETIS_ROOT}/build/Linux-x86_64 ``` -Then, the installation procedure is the following. -From the top level directory, do: +Second, in order to use parallel weighted matching AWPM for numerical +pre-pivoting, you need to install CombBLAS and define the environment +variable: + +``` +export COMBBLAS_ROOT= +export COMBBLAS_BUILD_DIR=${COMBBLAS_ROOT}/_build ``` -mkdir build ; cd build -cmake .. \ --DTPL_PARMETIS_LIBRARIES="${PARMETIS_BUILD_DIR}/libparmetis/libparmetis.a;${PARMETIS_BUILD_DIR}/libmetis/libmetis.a" \ --DTPL_PARMETIS_INCLUDE_DIRS="${PARMETIS_ROOT}/include;${PARMETIS_ROOT}/metis/include" -( Example cmake script: see run_cmake_build.sh +Once these needed third-party libraries are in place, SuperLU installation +can be done as follows from the top level directory: -export PARMETIS_ROOT=~/lib/dynamic/parmetis-4.0.3 -export PARMETIS_BUILD_DIR=${PARMETIS_ROOT}/build/Linux-x86_64 +For a simple installation with default setting, do: +(ParMETIS is needed, i.e., enable_parmetislib=ON) +``` +mkdir build ; cd build; cmake .. \ --DTPL_PARMETIS_INCLUDE_DIRS="${PARMETIS_ROOT}/include;${PARMETIS_ROOT}/metis/include" \ --DTPL_PARMETIS_LIBRARIES="${PARMETIS_BUILD_DIR}/libparmetis/libparmetis.a;${PARMETIS_BUILD_DIR}/libmetis/libmetis.a" \ --DCMAKE_C_FLAGS="-std=c99 -g" \ --Denable_blaslib=OFF \ --DBUILD_SHARED_LIBS=OFF \ --DCMAKE_C_COMPILER=mpicc \ --DCMAKE_INSTALL_PREFIX=. + -DTPL_PARMETIS_INCLUDE_DIRS="${PARMETIS_ROOT}/include;${PARMETIS_ROOT}/metis/include" \ + -DTPL_PARMETIS_LIBRARIES="${PARMETIS_BUILD_DIR}/libparmetis/libparmetis.a;${PARMETIS_BUILD_DIR}/libmetis/libmetis.a" \ +``` -) +For a more sophisticated installation including third-part libraries, do: ``` -To actually build, type: +cmake .. \ + -DTPL_PARMETIS_INCLUDE_DIRS="${PARMETIS_ROOT}/include;${PARMETIS_ROOT}/metis/include" \ + -DTPL_PARMETIS_LIBRARIES="${PARMETIS_BUILD_DIR}/libparmetis/libparmetis.a;${PARMETIS_BUILD_DIR}/libmetis/libmetis.a" \ + -Denable_combblaslib=ON \ + -DTPL_COMBBLAS_INCLUDE_DIRS="${COMBBLAS_ROOT}/_install/include;${COMBBLAS_R\ +OOT}/Applications/BipartiteMatchings" \ + -DTPL_COMBBLAS_LIBRARIES="${COMBBLAS_BUILD_DIR}/libCombBLAS.a" \ + -DCMAKE_C_FLAGS="-std=c99 -g -DPRNTlevel=0 -DDEBUGlevel=0" \ + -DCMAKE_C_COMPILER=mpicc \ + -DCMAKE_CXX_COMPILER=mpicxx \ + -DCMAKE_CXX_FLAGS="-std=c++11" \ + -Denable_blaslib=OFF \ + -DBUILD_SHARED_LIBS=OFF \ + -DCMAKE_INSTALL_PREFIX=. + +( see example cmake script: see run_cmake_build.sh ) +``` +You can disable ParMetis or CombBLAS with the following cmake option: +`-Denable_parmetislib=FALSE` +`-Denable_combblaslib=FALSE` + +To actually build (compile), type: `make` To install the libraries, type: @@ -277,14 +323,33 @@ dreadtriple_noheader.c : triplet, no header, which is also readable in Matlab ## REFERENCES -**[1]** SuperLU_DIST: A Scalable Distributed-Memory Sparse Direct Solver for Unsymmetric Linear Systems. Xiaoye S. Li and James W. Demmel. ACM Trans. on Math. Software, Vol. 29, No. 2, June 2003, pp. 110-140. -**[2]** Parallel Symbolic Factorization for Sparse LU with Static Pivoting. L. Grigori, J. Demmel and X.S. Li. SIAM J. Sci. Comp., Vol. 29, Issue 3, 1289-1314, 2007. -**[3]** A distributed CPU-GPU sparse direct solver. P. Sao, R. Vuduc and X.S. Li, Proc. of EuroPar-2014 Parallel Processing, August 25-29, 2014. Porto, Portugal. +**[1]** X.S. Li and J.W. Demmel, "SuperLU_DIST: A Scalable Distributed-Memory + Sparse Direct Solver for Unsymmetric Linear Systems", ACM Trans. on Math. + Software, Vol. 29, No. 2, June 2003, pp. 110-140. +**[2]** L. Grigori, J. Demmel and X.S. Li, "Parallel Symbolic Factorization + for Sparse LU with Static Pivoting", SIAM J. Sci. Comp., Vol. 29, Issue 3, + 1289-1314, 2007. +**[3]** P. Sao, R. Vuduc and X.S. Li, "A distributed CPU-GPU sparse direct + solver", Proc. of EuroPar-2014 Parallel Processing, August 25-29, 2014. + Porto, Portugal. +**[4]** P. Sao, X.S. Li, R. Vuduc, “A Communication-Avoiding 3D Factorization + for Sparse Matrices”, Proc. of IPDPS, May 21–25, 2018, Vancouver. +**[5]** Y. Liu, M. Jacquelin, P. Ghysels and X.S. Li, “Highly scalable + distributed-memory sparse triangular solution algorithms”, Proc. of + SIAM workshop on Combinatorial Scientific Computing, June 6-8, 2018, + Bergen, Norway. **Xiaoye S. Li**, Lawrence Berkeley National Lab, [xsli@lbl.gov](xsli@lbl.gov) +**Gustavo Chavez**, Lawrence Berkeley National Lab, [gichavez@lbl.gov](gichavez@lbl.gov) **Laura Grigori**, INRIA, France, [laura.grigori@inria.fr](laura.grigori@inria.fr) +**Yang Liu**, Lawrence Berkeley National Lab, [liuyangzhuan@lbl.gov](liuyangzhuan@lbl.gov) +**Meiyue Shao**, Lawrence Berkeley National Lab, [myshao@lbl.gov](myshao@lbl.gov) **Piyush Sao**, Georgia Institute of Technology, [piyush.feynman@gmail.com](piyush.feynman@gmail.com) **Ichitaro Yamazaki**, Univ. of Tennessee, [ic.yamazaki@gmail.com](ic.yamazaki@gmail.com) +**Jim Demmel**, UC Berkeley, [demmel@cs.berkeley.edu](demmel@cs.berkeley.edu) +**John Gilbert**, UC Santa Barbara, [gilbert@cs.ucsb.edu](gilbert@cs.ucsb.edu) + + ## RELEASE VERSIONS ``` @@ -305,4 +370,5 @@ October 4, 2016 Version 5.1.1 December 31, 2016 Version 5.1.3 September 30, 2017 Version 5.2.0 January 28, 2018 Version 5.3.0 +June 1, 2018 Version 5.4.0 ``` diff --git a/SRC/AWPM_CombBLAS.hpp b/SRC/AWPM_CombBLAS.hpp new file mode 100644 index 00000000..023a58e2 --- /dev/null +++ b/SRC/AWPM_CombBLAS.hpp @@ -0,0 +1,126 @@ +#ifndef AWPM_CombBLAS_h +#define AWPM_CombBLAS_h + + +#include "CombBLAS.h" +#include "ApproxWeightPerfectMatching.h" +#include "superlu_ddefs.h" + + +/*! \brief + * + *

+ * Purpose
+ * =======
+ *   Re-distribute A from distributed CSR storage to 2D block storage
+ *   conforming CombBLAS API.
+ *
+ * Arguments
+ * =========
+ *
+ * A      (input) SuperMatrix*
+ *      The distributed input matrix A of dimension (A->nrow, A->ncol).
+ *        A may be overwritten by diag(R)*A*diag(C)*Pc^T.
+ *        The type of A can be: Stype = SLU_NR_loc; Dtype = SLU_D; Mtype = SLU_GE.
+ *
+ * perm   (input) int_t*
+ *        Permutation vector describing the transformation performed to
+ *        the original matrix A.
+ *
+ * grid   (input) gridinfo_t*
+ *        SuperLU's 2D process mesh.
+ *
+ *
+ * Return value
+ * ============
+ * ScalePermstruct       = ScalePermstruct->perm_r stores the permutation
+ *
+ * 
+ */ +void +GetAWPM(SuperMatrix *A, gridinfo_t *grid, ScalePermstruct_t *ScalePermstruct) +{ + NRformat_loc *Astore; + int_t i, irow, fst_row, j, jcol, m, n, m_loc; + int_t lirow, ljcol; + int_t nnz_loc; /* number of local nonzeros */ + double *nzval_a; + int iam, p, procs; + int_t *perm=nullptr; // placeholder for load balancing permutation for CombBLAS + procs = grid->nprow * grid->npcol; + + if(grid->nprow != grid->npcol) + { + printf("AWPM only supports square process grid. Retuning without a permutation.\n"); + } + combblas::SpParMat < int_t, double, combblas::SpDCCols > Adcsc; + std::vector< std::vector < std::tuple > > data(procs); + + /* ------------------------------------------------------------ + INITIALIZATION. + ------------------------------------------------------------*/ + iam = grid->iam; +#if ( DEBUGlevel>=1 ) + CHECK_MALLOC(iam, "Enter pdCSR_loc_to_2DBlock()"); +#endif + Astore = (NRformat_loc *) A->Store; + n = A->ncol; + m = A->nrow; + m_loc = Astore->m_loc; + fst_row = Astore->fst_row; + + /* ------------------------------------------------------------ + FIRST PASS OF A: + COUNT THE NUMBER OF NONZEROS TO BE SENT TO EACH PROCESS, + THEN ALLOCATE SPACE. + ------------------------------------------------------------*/ + nzval_a = (double *) Astore->nzval; + nnz_loc = 0; + for (i = 0; i < m_loc; ++i) { + for (j = Astore->rowptr[i]; j < Astore->rowptr[i+1]; ++j) { + if(perm != NULL) + { + irow = perm[i+fst_row]; /* Row number in P*A*P^T */ + jcol = perm[Astore->colind[j]]; /* Column number in P*A*P^T */ + } + else + { + irow = i+fst_row; + jcol = Astore->colind[j]; + } + p = Adcsc.Owner(m, n , irow, jcol, lirow, ljcol); + ++ nnz_loc; + data[p].push_back(std::make_tuple(lirow,ljcol,nzval_a[j])); + + } + } + + Adcsc.SparseCommon(data, nnz_loc, m, n, std::plus()); + combblas::FullyDistVec mateRow2Col ( Adcsc.getcommgrid(), m, (int_t) -1); + combblas::FullyDistVec mateCol2Row ( Adcsc.getcommgrid(), n, (int_t) -1); + combblas::AWPM(Adcsc, mateRow2Col, mateCol2Row,true); + + // now gather the matching vector + MPI_Comm World = mateRow2Col.getcommgrid()->GetWorld(); + int * rdispls = new int[procs]; + int sendcnt = mateRow2Col.LocArrSize(); + int * recvcnt = new int[procs]; + MPI_Allgather(&sendcnt, 1, MPI_INT, recvcnt, 1, MPI_INT, World); + rdispls[0] = 0; + for(int i=0; i(), ScalePermstruct->perm_r, recvcnt, rdispls, combblas::MPIType(), World); + + delete[] rdispls; + delete[] recvcnt; + +#if ( DEBUGlevel>=1 ) + CHECK_MALLOC(iam, "Exit pdCSR_loc_to_2DBlock()"); +#endif +} + +#endif /* AWPM_CombBLAS_h */ diff --git a/SRC/CMakeLists.txt b/SRC/CMakeLists.txt index 78eb3886..7b857cc5 100644 --- a/SRC/CMakeLists.txt +++ b/SRC/CMakeLists.txt @@ -50,6 +50,10 @@ set(sources if (MSVC) list(APPEND sources wingetopt.c) endif () + +if (HAVE_COMBBLAS) + list(APPEND sources c2cpp_GetAWPM.cpp AWPM_CombBLAS.hpp) +endif() set_source_files_properties(superlu_timer.c PROPERTIES COMPILE_FLAGS -O0) if(enable_double) @@ -143,18 +147,28 @@ if (BUILD_SHARED_LIBS AND BUILD_STATIC_LIBS) list(APPEND targets superlu_dist-static) endif() -set(superlu_dist_libs ${MPI_C_LIBRARIES} ${BLAS_LIB} ${PARMETIS_LIB}) +set(superlu_dist_libs ${MPI_C_LIBRARIES} ${BLAS_LIB} + ${PARMETIS_LIB} ${COMBBLAS_LIB}) if (NOT MSVC) list(APPEND superlu_dist_libs m) endif () foreach(target ${targets}) - target_link_libraries(${target} ${superlu_dist_libs}) - set_target_properties(${target} PROPERTIES - OUTPUT_NAME superlu_dist - VERSION ${PROJECT_VERSION} - SOVERSION ${VERSION_MAJOR} - ) + target_link_libraries(${target} ${superlu_dist_libs}) + if (HAVE_COMBBLAS) + set_target_properties(${target} PROPERTIES + OUTPUT_NAME superlu_dist + VERSION ${PROJECT_VERSION} + SOVERSION ${VERSION_MAJOR} + LINKER_LANGUAGE CXX + ) + else() + set_target_properties(${target} PROPERTIES + OUTPUT_NAME superlu_dist + VERSION ${PROJECT_VERSION} + SOVERSION ${VERSION_MAJOR} + ) + endif() endforeach(target) target_compile_definitions(superlu_dist PRIVATE SUPERLU_DIST_EXPORTS) diff --git a/SRC/Makefile b/SRC/Makefile index a6cf1cbc..aa4e7b46 100644 --- a/SRC/Makefile +++ b/SRC/Makefile @@ -40,6 +40,9 @@ ifeq "${ACC}" "GPU" ALLAUX += cublas_utils.o endif +ifeq ($(HAVE_COMBBLAS),TRUE) +ALLAUX += c2cpp_GetAWPM.o +endif # # Routines literally taken from SuperLU, but renamed with suffix _dist # @@ -72,13 +75,27 @@ ZPLUSRC = pzgssvx.o pzgssvx_ABglobal.o \ all: double complex16 config_h: + rm -f superlu_dist_config.h ifeq ($(XSDK_INDEX_SIZE),64) - printf "#define XSDK_INDEX_SIZE 64\n" > superlu_dist_config.h + printf "#define XSDK_INDEX_SIZE 64\n" >> superlu_dist_config.h +else + printf "/* #define XSDK_INDEX_SIZE 64 */\n" >> superlu_dist_config.h +endif +ifeq ($(HAVE_PARMETIS),TRUE) + printf "#define HAVE_PARMETIS TRUE\n" >> superlu_dist_config.h else - printf "/* #define XSDK_INDEX_SIZE 64 */\n" > superlu_dist_config.h + printf "/* #define HAVE_PARMETIS TRUE */\n" >> superlu_dist_config.h +endif +ifeq ($(HAVE_COMBBLAS),TRUE) + printf "#define HAVE_COMBBLAS TRUE\n" >> superlu_dist_config.h +else + printf "/* #define HAVE_COMBBLAS TRUE */\n" >> superlu_dist_config.h endif printf "#if (XSDK_INDEX_SIZE == 64)\n#define _LONGINT 1\n#endif\n" >> superlu_dist_config.h + +#config_h: +# cp -f superlu_dist_config_for_makefile.h superlu_dist_config.h double: config_h $(DSLUSRC) $(DPLUSRC) $(ALLAUX) $(ARCH) $(ARCHFLAGS) $(DSUPERLULIB) \ $(DSLUSRC) $(DPLUSRC) $(ALLAUX) @@ -90,19 +107,22 @@ complex16: config_h $(ZSLUSRC) $(ZPLUSRC) $(ALLAUX) $(RANLIB) $(DSUPERLULIB) pdgstrf.o: dscatter.c dlook_ahead_update.c dSchCompUdt-2Ddynamic.c pdgstrf.c - $(CC) $(CFLAGS) $(CDEFS) $(BLASDEF) -c pdgstrf.c $(VERBOSE) + $(CC) $(CFLAGS) $(CDEFS) $(BLASDEF) -I$(INCLUDEDIR) -c pdgstrf.c $(VERBOSE) pzgstrf.o: zscatter.c zlook_ahead_update.c zSchCompUdt-2Ddynamic.c pzgstrf.c - $(CC) $(CFLAGS) $(CDEFS) $(BLASDEF) -c pzgstrf.c $(VERBOSE) + $(CC) $(CFLAGS) $(CDEFS) $(BLASDEF) -I$(INCLUDEDIR) -c pzgstrf.c $(VERBOSE) +c2cpp_GetAWPM.o: c2cpp_GetAWPM.cpp + $(CXX) $(CXXFLAGS) -I$(INCLUDEDIR) -o $@ -c $< + .c.o: - $(CC) $(CFLAGS) $(CDEFS) $(BLASDEF) -c $< $(VERBOSE) + $(CC) $(CFLAGS) $(CDEFS) $(BLASDEF) -I$(INCLUDEDIR) -c $< $(VERBOSE) .cpp.o: - $(CPP) $(CPPFLAGS) $(CDEFS) $(BLASDEF) -c $< $(VERBOSE) + $(CPP) $(CPPFLAGS) $(CDEFS) $(BLASDEF) -I$(INCLUDEDIR) -c $< $(VERBOSE) .f.o: $(FORTRAN) $(FFLAGS) -c $< $(VERBOSE) clean: - rm -f *.o $(DSUPERLULIB) + rm -f *.o $(DSUPERLULIB) superlu_dist_config.h diff --git a/SRC/c2cpp_GetAWPM.cpp b/SRC/c2cpp_GetAWPM.cpp new file mode 100644 index 00000000..6e9500a9 --- /dev/null +++ b/SRC/c2cpp_GetAWPM.cpp @@ -0,0 +1,63 @@ +/*! \file +Copyright (c) 2003, The Regents of the University of California, through +Lawrence Berkeley National Laboratory (subject to receipt of any required +approvals from U.S. Dept. of Energy) + +All rights reserved. + +The source code is distributed under BSD license, see the file License.txt +at the top-level directory. +*/ + +/*! @file + * \brief Get approximate weight perfect matching (AWPM). + * + *
+ * -- Distributed SuperLU routine (version 5.4) --
+ * Lawrence Berkeley National Lab, Univ. of California Berkeley.
+ * April 1, 2018
+ * 
+ */ +#include +#include "AWPM_CombBLAS.hpp" +#include "superlu_ddefs.h" + +/*! \brief + * + *
+ * Purpose
+ * =======
+ *
+ * Get approximate weight perfect matching (AWPM).
+ * 
+ * Reference:
+ * 
+ *
+ * Arguments
+ * =========
+ *
+ * A      (input) SuperMatrix*
+ *        The distributed input matrix A of dimension (A->nrow, A->ncol).
+ *        The type of A can be: Stype = SLU_NR_loc; Dtype = SLU_D; Mtype = SLU_GE.
+ *
+ * perm   (input) int_t*
+ *        Permutation vector describing the transformation performed to
+ *        the original matrix A.
+ *
+ * grid   (input) gridinfo_t*
+ *        SuperLU's 2D process mesh.
+ *
+ *
+ * Return value
+ * ============
+ * ScalePermstruct       = ScalePermstruct->perm_r stores the permutation
+ *
+ * 
+ */ +int +c2cpp_GetAWPM(SuperMatrix *A, gridinfo_t *grid, + ScalePermstruct_t *ScalePermstruct) +{ + GetAWPM(A, grid, ScalePermstruct); + return 0; +} diff --git a/SRC/cp_new b/SRC/cp_new new file mode 100644 index 00000000..149d71a0 --- /dev/null +++ b/SRC/cp_new @@ -0,0 +1,12 @@ +/* + Copyright (c) 1994 by Xerox Corporation. All rights reserved. + + THIS MATERIAL IS PROVIDED AS IS, WITH ABSOLUTELY NO WARRANTY + EXPRESSED OR IMPLIED. ANY USE IS AT YOUR OWN RISK. + + Permission is hereby granted to use or copy this program for any + purpose, provided the above notices are retained on all copies. + Permission to modify the code and to distribute modified code is + granted, provided the above notices are retained, and a notice that + the code was modified is included with the above copyright notice. +*/ \ No newline at end of file diff --git a/SRC/dSchCompUdt-2Ddynamic.c b/SRC/dSchCompUdt-2Ddynamic.c index 915a0080..19f05cfe 100644 --- a/SRC/dSchCompUdt-2Ddynamic.c +++ b/SRC/dSchCompUdt-2Ddynamic.c @@ -16,16 +16,18 @@ at the top-level directory. * Uses 2D partitioning for the scatter phase. * *
- * -- Distributed SuperLU routine (version 5.2) --
+ * -- Distributed SuperLU routine (version 5.4) --
  * Lawrence Berkeley National Lab, Univ. of California Berkeley.
  * October 1, 2014
  *
- * Modified: September 14, 2017
+ * Modified:
+ *   September 14, 2017
  *   - First gather U-panel, then depending on "ldu" (excluding leading zeros), 
  *     gather only trailing columns of the L-panel corresponding to the nonzero
  *     of U-rows.
  *   - Padding zeros for nice dimensions of GEMM.
  *
+ *  June 1, 2018  add parallel AWPM pivoting; add back arrive_at_ublock()
  */
 
 #define SCHEDULE_STRATEGY guided 
@@ -141,7 +143,7 @@ if ( msg0 && msg2 ) { /* L(:,k) and U(k,:) are not empty. */
 	 /* jj0 contains the look-ahead window that was updated in 
 	    dlook_ahead_update.c. Now the search can continue from that point,
 	    not to start from block 0. */
-#if 0 //Sherry comment out 5/21/2018
+#if 0 // Sherry comment out 5/21/208
 	 /* Save pointers at location right after look-ahead window
 	    for later restart. */
 	 iukp0 = iukp;
@@ -158,7 +160,7 @@ if ( msg0 && msg2 ) { /* L(:,k) and U(k,:) are not empty. */
 	 for (j = jj0; j < nub; ++j) { /* jj0 starts after look-ahead window. */
 	     temp_ncols = 0;
 #if 1
-	     /* Sherry - can remove following call, since perm_u == Identity  */
+	     /* Cannot remove following call, since perm_u != Identity  */
 	     arrive_at_ublock(
 			      j, &iukp, &rukp, &jb, &ljb, &nsupc,
 			      iukp0, rukp0, usub, perm_u, xsup, grid
@@ -179,7 +181,7 @@ if ( msg0 && msg2 ) { /* L(:,k) and U(k,:) are not empty. */
 			j, Ublock_info[j].iukp, Ublock_info[j].rukp,
 			Ublock_info[j].jb, nsupc); */
 
-	     /* Prepare to call GEMM: compute ldu and # of nonzero columns. */
+	     /* Prepare to call GEMM. */
 	     jj = iukp;
 	     for (; jj < iukp+nsupc; ++jj) {
 		 segsize = klst - usub[jj];
@@ -191,7 +193,7 @@ if ( msg0 && msg2 ) { /* L(:,k) and U(k,:) are not empty. */
 
 	     Ublock_info[j].full_u_cols = temp_ncols;
 	     ncols += temp_ncols;
-#if 0 // Sherry comment out 5/31/2018 */	     
+#if 0 // Sherry comment out 5/31/2018 */
 	     /* Jump number of nonzeros in block U(k,jj);
 		Move to block U(k,j+1) in nzval[] array.  */
 	     rukp += usub[iukp - 1];
@@ -250,7 +252,7 @@ if ( msg0 && msg2 ) { /* L(:,k) and U(k,:) are not empty. */
 
             /* == processing each of the remaining columns in parallel == */
 #if 0
-	    /* Can remove following call, since the search was already done. */
+	    /* Can remove following call, since search was already done.  */
             arrive_at_ublock(j, &iukp, &rukp, &jb, &ljb, &nsupc,
 			     iukp0, rukp0, usub,perm_u, xsup, grid);
 #else
@@ -269,15 +271,12 @@ if ( msg0 && msg2 ) { /* L(:,k) and U(k,:) are not empty. */
 #if (_OPENMP>=201307)
 #pragma omp simd
 #endif
-		    for (i=0; i
- * -- Distributed SuperLU routine (version 5.2) --
+ * -- Distributed SuperLU routine (version 5.4) --
  * Lawrence Berkeley National Lab, Univ. of California Berkeley.
  * October 1, 2014
  *
- * Modified: September 18, 2017
+ * Modified:
+ *  September 18, 2017
+ *  June 1, 2018  add parallel AWPM pivoting; add back arrive_at_ublock()
  *   
  */
-#include 
+
+#include   /* assertion doesn't work if NDEBUG is defined */
 
 iukp = iukp0; /* point to the first block in index[] */
 rukp = rukp0; /* point to the start of nzval[] */
+j = jj0 = 0;  /* After the j-loop, jj0 points to the first block in U
+                 outside look-ahead window. */
 
-j = jj0 = 0;
 #if 0
 for (jj = 0; jj < nub; ++jj) assert(perm_u[jj] == jj); /* Sherry */
 #endif
@@ -40,12 +44,12 @@ while (j < nub && perm_u[2 * j] <= k0 + num_look_aheads)
 {
     double zero = 0.0;
 
-#if 1 // Sherry: no need to search
-    /* Caveat: There is a permutation perm_u involved for j  */
+#if 1
+    /* Search is needed because a permutation perm_u is involved for j  */
     /* Search along the row for the pointers {iukp, rukp} pointing to
      * block U(k,j).
      * j    -- current block in look-ahead window, initialized to 0 on entry
-     * iukp -- point to the start of index[] medadata
+     * iukp -- point to the start of index[] metadata
      * rukp -- point to the start of nzval[] array
      * jb   -- block number of block U(k,j), update destination column
      */
@@ -103,9 +107,6 @@ while (j < nub && perm_u[2 * j] <= k0 + num_look_aheads)
         }
     }
     tempu = bigU; /* set back to the beginning of the buffer */
-#if 0
-    rukp -= usub[iukp - 1]; /* Return to start of U(k,j). */
-#endif
 
     nbrow = lsub[1]; /* number of row subscripts in L(:,k) */
     if (myrow == krow) nbrow = lsub[1] - lsub[3]; /* skip diagonal block for those rows. */
@@ -201,9 +202,6 @@ while (j < nub && perm_u[2 * j] <= k0 + num_look_aheads)
 #endif
     } /* end parallel for lb = 0, nlb ... all blocks in L(:,k) */
 
-#if 0
-    rukp += usub[iukp - 1]; /* Move to block U(k,j+1) */
-#endif
     iukp += nsupc; /* Mov to block U(k,j+1) */
 
     /* =========================================== *
diff --git a/SRC/dmemory_dist.c b/SRC/dmemory_dist.c
index 47f541f6..1fa98612 100644
--- a/SRC/dmemory_dist.c
+++ b/SRC/dmemory_dist.c
@@ -24,14 +24,14 @@ at the top-level directory.
 
 
 /* Variables external to this file */
-extern LU_stack_t stack;
+extern SuperLU_LU_stack_t stack;
 
 
 void *duser_malloc_dist(int_t bytes, int_t which_end)
 {
     void *buf;
     
-    if ( StackFull(bytes) ) return (NULL);
+    if ( SuperLU_StackFull(bytes) ) return (NULL);
 
     if ( which_end == HEAD ) {
 	buf = (char*) stack.array + stack.top1;
diff --git a/SRC/dsp_blas2_dist.c b/SRC/dsp_blas2_dist.c
index fef56c02..657e0c20 100644
--- a/SRC/dsp_blas2_dist.c
+++ b/SRC/dsp_blas2_dist.c
@@ -140,19 +140,19 @@ sp_dtrsv_dist(char *uplo, char *trans, char *diag, SuperMatrix *L,
     	    if ( L->nrow == 0 ) return 0; /* Quick return */
 	    
 	    for (k = 0; k <= Lstore->nsuper; k++) {
-		fsupc = L_FST_SUPC(k);
-		istart = L_SUB_START(fsupc);
-		nsupr = L_SUB_START(fsupc+1) - istart;
-		nsupc = L_FST_SUPC(k+1) - fsupc;
-		luptr = L_NZ_START(fsupc);
+		fsupc = SuperLU_L_FST_SUPC(k);
+		istart = SuperLU_L_SUB_START(fsupc);
+		nsupr = SuperLU_L_SUB_START(fsupc+1) - istart;
+		nsupc = SuperLU_L_FST_SUPC(k+1) - fsupc;
+		luptr = SuperLU_L_NZ_START(fsupc);
 		nrow = nsupr - nsupc;
 
 	        solve_ops += nsupc * (nsupc - 1);
 	        solve_ops += 2 * nrow * nsupc;
 
 		if ( nsupc == 1 ) {
-		    for (iptr=istart+1; iptr < L_SUB_START(fsupc+1); ++iptr) {
-			irow = L_SUB(iptr);
+		    for (iptr=istart+1; iptr < SuperLU_L_SUB_START(fsupc+1); ++iptr) {
+			irow = SuperLU_L_SUB(iptr);
 			++luptr;
 			x[irow] -= x[fsupc] * Lval[luptr];
 		    }
@@ -183,7 +183,7 @@ sp_dtrsv_dist(char *uplo, char *trans, char *diag, SuperMatrix *L,
 		
 		    iptr = istart + nsupc;
 		    for (i = 0; i < nrow; ++i, ++iptr) {
-			irow = L_SUB(iptr);
+			irow = SuperLU_L_SUB(iptr);
 			x[irow] -= work[i];	/* Scatter */
 			work[i] = 0.0;
 
@@ -197,17 +197,17 @@ sp_dtrsv_dist(char *uplo, char *trans, char *diag, SuperMatrix *L,
 	    if ( U->nrow == 0 ) return 0; /* Quick return */
 	    
 	    for (k = Lstore->nsuper; k >= 0; k--) {
-	    	fsupc = L_FST_SUPC(k);
-	    	nsupr = L_SUB_START(fsupc+1) - L_SUB_START(fsupc);
-	    	nsupc = L_FST_SUPC(k+1) - fsupc;
-	    	luptr = L_NZ_START(fsupc);
+	    	fsupc = SuperLU_L_FST_SUPC(k);
+	    	nsupr = SuperLU_L_SUB_START(fsupc+1) - SuperLU_L_SUB_START(fsupc);
+	    	nsupc = SuperLU_L_FST_SUPC(k+1) - fsupc;
+	    	luptr = SuperLU_L_NZ_START(fsupc);
 		
     	        solve_ops += nsupc * (nsupc + 1);
 
 		if ( nsupc == 1 ) {
 		    x[fsupc] /= Lval[luptr];
-		    for (i = U_NZ_START(fsupc); i < U_NZ_START(fsupc+1); ++i) {
-			irow = U_SUB(i);
+		    for (i = SuperLU_U_NZ_START(fsupc); i < SuperLU_U_NZ_START(fsupc+1); ++i) {
+			irow = SuperLU_U_SUB(i);
 			x[irow] -= x[fsupc] * Uval[i];
 		    }
 		} else {
@@ -225,11 +225,11 @@ sp_dtrsv_dist(char *uplo, char *trans, char *diag, SuperMatrix *L,
 		    dusolve ( nsupr, nsupc, &Lval[luptr], &x[fsupc] );
 #endif		
 
-		    for (jcol = fsupc; jcol < L_FST_SUPC(k+1); jcol++) {
-		        solve_ops += 2*(U_NZ_START(jcol+1) - U_NZ_START(jcol));
-		    	for (i = U_NZ_START(jcol); i < U_NZ_START(jcol+1); 
+		    for (jcol = fsupc; jcol < SuperLU_L_FST_SUPC(k+1); jcol++) {
+		        solve_ops += 2*(SuperLU_U_NZ_START(jcol+1) - SuperLU_U_NZ_START(jcol));
+		    	for (i = SuperLU_U_NZ_START(jcol); i < SuperLU_U_NZ_START(jcol+1); 
 				i++) {
-			    irow = U_SUB(i);
+			    irow = SuperLU_U_SUB(i);
 			    x[irow] -= x[jcol] * Uval[i];
 		    	}
                     }
@@ -244,19 +244,19 @@ sp_dtrsv_dist(char *uplo, char *trans, char *diag, SuperMatrix *L,
     	    if ( L->nrow == 0 ) return 0; /* Quick return */
 	    
 	    for (k = Lstore->nsuper; k >= 0; --k) {
-	    	fsupc = L_FST_SUPC(k);
-	    	istart = L_SUB_START(fsupc);
-	    	nsupr = L_SUB_START(fsupc+1) - istart;
-	    	nsupc = L_FST_SUPC(k+1) - fsupc;
-	    	luptr = L_NZ_START(fsupc);
+	    	fsupc = SuperLU_L_FST_SUPC(k);
+	    	istart = SuperLU_L_SUB_START(fsupc);
+	    	nsupr = SuperLU_L_SUB_START(fsupc+1) - istart;
+	    	nsupc = SuperLU_L_FST_SUPC(k+1) - fsupc;
+	    	luptr = SuperLU_L_NZ_START(fsupc);
 
 		solve_ops += 2 * (nsupr - nsupc) * nsupc;
 
-		for (jcol = fsupc; jcol < L_FST_SUPC(k+1); jcol++) {
+		for (jcol = fsupc; jcol < SuperLU_L_FST_SUPC(k+1); jcol++) {
 		    iptr = istart + nsupc;
-		    for (i = L_NZ_START(jcol) + nsupc; 
-				i < L_NZ_START(jcol+1); i++) {
-			irow = L_SUB(iptr);
+		    for (i = SuperLU_L_NZ_START(jcol) + nsupc; 
+				i < SuperLU_L_NZ_START(jcol+1); i++) {
+			irow = SuperLU_L_SUB(iptr);
 			x[jcol] -= x[irow] * Lval[i];
 			iptr++;
 		    }
@@ -286,15 +286,15 @@ sp_dtrsv_dist(char *uplo, char *trans, char *diag, SuperMatrix *L,
 	    if ( U->nrow == 0 ) return 0; /* Quick return */
 	    
 	    for (k = 0; k <= Lstore->nsuper; k++) {
-	    	fsupc = L_FST_SUPC(k);
-	    	nsupr = L_SUB_START(fsupc+1) - L_SUB_START(fsupc);
-	    	nsupc = L_FST_SUPC(k+1) - fsupc;
-	    	luptr = L_NZ_START(fsupc);
-
-		for (jcol = fsupc; jcol < L_FST_SUPC(k+1); jcol++) {
-		    solve_ops += 2*(U_NZ_START(jcol+1) - U_NZ_START(jcol));
-		    for (i = U_NZ_START(jcol); i < U_NZ_START(jcol+1); i++) {
-			irow = U_SUB(i);
+	    	fsupc = SuperLU_L_FST_SUPC(k);
+	    	nsupr = SuperLU_L_SUB_START(fsupc+1) - SuperLU_L_SUB_START(fsupc);
+	    	nsupc = SuperLU_L_FST_SUPC(k+1) - fsupc;
+	    	luptr = SuperLU_L_NZ_START(fsupc);
+
+		for (jcol = fsupc; jcol < SuperLU_L_FST_SUPC(k+1); jcol++) {
+		    solve_ops += 2*(SuperLU_U_NZ_START(jcol+1) - SuperLU_U_NZ_START(jcol));
+		    for (i = SuperLU_U_NZ_START(jcol); i < SuperLU_U_NZ_START(jcol+1); i++) {
+			irow = SuperLU_U_SUB(i);
 			x[jcol] -= x[irow] * Uval[i];
 		    }
 		}
diff --git a/SRC/dutil_dist.c b/SRC/dutil_dist.c
index 39bc78db..fcce0cad 100644
--- a/SRC/dutil_dist.c
+++ b/SRC/dutil_dist.c
@@ -280,6 +280,123 @@ dCreate_SuperNode_Matrix_dist(SuperMatrix *L, int_t m, int_t n, int_t nnz,
 
 }
 
+/**** The following utilities are added per request of SUNDIALS ****/
+
+/*! \brief Clone: Allocate memory for a new matrix B, which is of the same type
+ *  and shape as A.
+ *  The clone operation would copy all the non-pointer structure members like
+ *  nrow, ncol, Stype, Dtype, Mtype from A and allocate a new nested Store
+ *  structure. It would also copy nnz_loc, m_loc, fst_row from A->Store 
+ *  into B->Store. It does not copy the matrix entries, row pointers,
+ *  or column indices.
+ */
+void dClone_CompRowLoc_Matrix_dist(SuperMatrix *A, SuperMatrix *B)
+{
+    NRformat_loc  *Astore, *Bstore;
+
+    B->Stype = A->Stype;
+    B->Dtype = A->Dtype;
+    B->Mtype = A->Mtype;
+    B->nrow  = A->nrow;;
+    B->ncol  = A->ncol;
+    Astore   = (NRformat_loc *) A->Store;
+    B->Store = (void *) SUPERLU_MALLOC( sizeof(NRformat_loc) );
+    if ( !(B->Store) ) ABORT("SUPERLU_MALLOC fails for B->Store");
+    Bstore = (NRformat_loc *) B->Store;
+
+    Bstore->nnz_loc = Astore->nnz_loc;
+    Bstore->m_loc = Astore->m_loc;
+    Bstore->fst_row = Astore->fst_row;
+    if ( !(Bstore->nzval = (double *) doubleMalloc_dist(Bstore->nnz_loc)) )
+	ABORT("doubleMalloc_dist fails for Bstore->nzval");
+    if ( !(Bstore->colind = (int_t *) intMalloc_dist(Bstore->nnz_loc)) )
+	ABORT("intMalloc_dist fails for Bstore->colind");
+    if ( !(Bstore->rowptr = (int_t *) intMalloc_dist(Bstore->m_loc + 1)) )
+	ABORT("intMalloc_dist fails for Bstore->rowptr");
+
+    return;
+}
+
+/* \brief Copy: Call the clone operation and then copies all entries,
+ *  row pointers, and column indices of a matrix into another matrix of
+ *  the same type, B_{i,j}=A_{i,j}, for i,j=1,...,n
+ */
+void dCopy_CompRowLoc_Matrix_dist(SuperMatrix *A, SuperMatrix *B)
+{
+    NRformat_loc  *Astore, *Bstore;
+
+    dClone_CompRowLoc_Matrix_dist(A, B);
+
+    Astore = (NRformat_loc *) A->Store;
+    Bstore = (NRformat_loc *) B->Store;
+
+    memcpy(Bstore->nzval, Astore->nzval, Astore->nnz_loc * sizeof(double));
+    memcpy(Bstore->colind, Astore->colind, Astore->nnz_loc * sizeof(int_t));
+    memcpy(Bstore->rowptr, Astore->rowptr, (Astore->m_loc+1) * sizeof(int_t));
+
+    return;
+}
+
+/*! \brief Sets all entries of a matrix to zero, A_{i,j}=0, for i,j=1,..,n */
+void dZero_CompRowLoc_Matrix_dist(SuperMatrix *A)
+{
+    double zero = 0.0;
+    NRformat_loc  *Astore = A->Store;
+    double *aval;
+    int_t i;
+
+    aval = (double *) Astore->nzval;
+    for (i = 0; i < Astore->nnz_loc; ++i) aval[i] = zero;
+
+    return;
+}
+
+/*! \brief Scale and add I: scales a matrix and adds an identity.
+ *  A_{i,j} = c * A_{i,j} + \delta_{i,j} for i,j=1,...,n and
+ *  \delta_{i,j} is the Kronecker delta.
+ */
+void dScaleAddId_CompRowLoc_Matrix_dist(SuperMatrix *A, double c)
+{
+    double one = 1.0;
+    NRformat_loc  *Astore = A->Store;
+    double *aval = (double *) Astore->nzval;
+    int i, j;
+    double temp;
+
+    for (i = 0; i < Astore->m_loc; ++i) { /* Loop through each row */
+        for (j = Astore->rowptr[i]; j < Astore->rowptr[i+1]; ++j) {
+            if ( (Astore->fst_row + i) == Astore->colind[j] ) {  /* diagonal */
+                temp = aval[j] * c;
+                aval[j] = temp + one;
+            } else {
+                aval[j] *= c;
+	   }
+        }
+    }
+
+    return;
+}
+
+/*! \brief Scale and add: adds a scalar multiple of one matrix to another.
+ *  A_{i,j} = c * A_{i,j} + B_{i,j}$ for i,j=1,...,n
+ */
+void dScaleAdd_CompRowLoc_Matrix_dist(SuperMatrix *A, SuperMatrix *B, double c)
+{
+    NRformat_loc  *Astore = A->Store;
+    NRformat_loc  *Bstore = B->Store;
+    double *aval = (double *) Astore->nzval, *bval = (double *) Bstore->nzval;
+    int_t i;
+    double temp;
+
+    for (i = 0; i < Astore->nnz_loc; ++i) { /* Loop through each nonzero */
+        aval[i] = c * aval[i] + bval[i];
+    }
+
+    return;
+}
+
+
+/**** Other utilities ****/
 void
 dGenXtrue_dist(int_t n, int_t nrhs, double *x, int_t ldx)
 {
@@ -532,7 +649,7 @@ GenXtrueRHS(int nrhs, SuperMatrix *A, Glu_persist_t *Glu_persist,
     int_t *supno, *xsup, *lxsup;
     double *x, *bb;
     NCformat *Astore;
-    double   *Aval;
+    double   *aval;
 
     n = A->ncol;
     *ldb = 0;
@@ -542,7 +659,7 @@ GenXtrueRHS(int nrhs, SuperMatrix *A, Glu_persist_t *Glu_persist,
     iam = grid->iam;
     myrow = MYROW( iam, grid );
     Astore = (NCformat *) A->Store;
-    Aval = (double *) Astore->nzval;
+    aval = (double *) Astore->nzval;
     lb = CEILING( nsupers, grid->nprow ) + 1;
     if ( !(lxsup = intMalloc_dist(lb)) )
 	ABORT("Malloc fails for lxsup[].");
@@ -575,7 +692,7 @@ GenXtrueRHS(int nrhs, SuperMatrix *A, Glu_persist_t *Glu_persist,
 	    if ( myrow == gbrow ) {
 		rel = irow - xsup[gb];
 		lb = LBi( gb, grid );
-		bb[lxsup[lb] + rel] += Aval[i] * x[j];
+		bb[lxsup[lb] + rel] += aval[i] * x[j];
 	    }
 	}
 
diff --git a/SRC/extrall b/SRC/extrall
new file mode 100644
index 00000000..5b5c24c4
--- /dev/null
+++ b/SRC/extrall
@@ -0,0 +1,65 @@
+@beginskip
+	Filename:  extrall
+	Purpose :  for extracting all base files
+	Usage   :  extract -b extrall precision= 
+
+@endskip
+
+@extract -b ../Typedef.inc
+
+@precision SINGLE
+	@extract -b xgssv.base -o ../../SuperLU/SRC/sgssv.c precision=single
+	@extract -b xgssvx.base -o ../../SuperLU/SRC/sgssvx.c precision=single
+	@extract -b xgstrf.base -o ../../SuperLU/SRC/sgstrf.c precision=single
+	@extract -b xgstrs.base -o ../../SuperLU/SRC/sgstrs.c precision=single
+	@extract -b xgscon.base -o ../../SuperLU/SRC/sgscon.c precision=single
+	@extract -b xmemory.base -o ../../SuperLU/SRC/smemory.c precision=single
+	@extract -b xgsequ.base -o ../../SuperLU/SRC/sgsequ.c precision=single
+	@extract -b xlaqgs.base -o ../../SuperLU/SRC/slaqgs.c precision=single
+	@extract -b xgsrfs.base -o ../../SuperLU/SRC/sgsrfs.c precision=single
+	@extract -b xlacon.base -o ../../SuperLU/SRC/slacon.c precision=single
+	@extract -b xlangs.base -o ../../SuperLU/SRC/slangs.c precision=single
+	@extract -b xcolumn_bmod.base -o ../../SuperLU/SRC/scolumn_bmod.c precision=single
+	@extract -b xcolumn_dfs.base -o ../../SuperLU/SRC/scolumn_dfs.c precision=single
+	@extract -b xpanel_bmod.base -o ../../SuperLU/SRC/spanel_bmod.c precision=single
+	@extract -b xpanel_dfs.base -o ../../SuperLU/SRC/spanel_dfs.c precision=single
+
+	@extract -b xpivotL.base -o ../../SuperLU/SRC/spivotL.c precision=single
+	@extract -b xpivotgrowth.base -o ../../SuperLU/SRC/spivotgrowth.c precision=single
+	@extract -b xpruneL.base -o ../../SuperLU/SRC/spruneL.c precision=single
+	@extract -b xreadmt.base -o ../../SuperLU/SRC/sreadmt.c precision=single
+	@extract -b xsnode_bmod.base -o ../../SuperLU/SRC/ssnode_bmod.c precision=single
+	@extract -b xsnode_dfs.base -o ../../SuperLU/SRC/ssnode_dfs.c precision=single
+	@extract -b xsp_blas2.base -o ../../SuperLU/SRC/ssp_blas2.c precision=single
+	@extract -b xsp_blas3.base -o ../../SuperLU/SRC/ssp_blas3.c precision=single
+	@extract -b xutil.base -o ../../SuperLU/SRC/sutil.c precision=single
+	@extract -b xsp_defs.h.base -o ../../SuperLU/SRC/ssp_defs.h precision=single
+
+
+@precision DOUBLE
+	@extract -b xgssv.base -o ../../SuperLU/SRC/dgssv.c precision=double
+	@extract -b xgssvx.base -o ../../SuperLU/SRC/dgssvx.c precision=double
+	@extract -b xgstrf.base -o ../../SuperLU/SRC/dgstrf.c precision=double
+	@extract -b xgstrs.base -o ../../SuperLU/SRC/dgstrs.c precision=double
+	@extract -b xgscon.base -o ../../SuperLU/SRC/dgscon.c precision=double
+	@extract -b xmemory.base -o ../../SuperLU/SRC/dmemory.c precision=double
+	@extract -b xgsequ.base -o ../../SuperLU/SRC/dgsequ.c precision=double
+	@extract -b xlaqgs.base -o ../../SuperLU/SRC/dlaqgs.c precision=double
+	@extract -b xgsrfs.base -o ../../SuperLU/SRC/dgsrfs.c precision=double
+	@extract -b xlacon.base -o ../../SuperLU/SRC/dlacon.c precision=double
+	@extract -b xlangs.base -o ../../SuperLU/SRC/dlangs.c precision=double
+	@extract -b xcolumn_bmod.base -o ../../SuperLU/SRC/dcolumn_bmod.c precision=double
+	@extract -b xcolumn_dfs.base -o ../../SuperLU/SRC/dcolumn_dfs.c precision=double
+	@extract -b xpanel_bmod.base -o ../../SuperLU/SRC/dpanel_bmod.c precision=double
+	@extract -b xpanel_dfs.base -o ../../SuperLU/SRC/dpanel_dfs.c precision=double
+
+	@extract -b xpivotL.base -o ../../SuperLU/SRC/dpivotL.c precision=double
+	@extract -b xpivotgrowth.base -o ../../SuperLU/SRC/dpivotgrowth.c precision=double
+	@extract -b xpruneL.base -o ../../SuperLU/SRC/dpruneL.c precision=double
+	@extract -b xreadmt.base -o ../../SuperLU/SRC/dreadmt.c precision=double
+	@extract -b xsnode_bmod.base -o ../../SuperLU/SRC/dsnode_bmod.c precision=double
+	@extract -b xsnode_dfs.base -o ../../SuperLU/SRC/dsnode_dfs.c precision=double
+	@extract -b xsp_blas2.base -o ../../SuperLU/SRC/dsp_blas2.c precision=double
+	@extract -b xsp_blas3.base -o ../../SuperLU/SRC/dsp_blas3.c precision=double
+	@extract -b xutil.base -o ../../SuperLU/SRC/dutil.c precision=double
+	@extract -b xsp_defs.h.base -o ../../SuperLU/SRC/dsp_defs.h precision=double
diff --git a/SRC/get_perm_c_parmetis.c b/SRC/get_perm_c_parmetis.c
index 22feb259..9cce4fad 100644
--- a/SRC/get_perm_c_parmetis.c
+++ b/SRC/get_perm_c_parmetis.c
@@ -148,8 +148,8 @@ get_perm_c_parmetis (SuperMatrix *A, int_t *perm_r, int_t *perm_c,
   colind = Astore->colind;
   
 #if ( PRNTlevel>=1 )
-  if ( !iam ) printf(".. Use parMETIS ordering on A'+A with %d sub-domains.\n",
-		     noDomains);
+  if ( !iam ) printf(".. Use parMETIS ordering on A'+A with %d sub-domains. sizeof(int_t) %d\n",
+		     noDomains, sizeof(int_t));
 #endif
 
   numflag = 0;
@@ -249,7 +249,7 @@ get_perm_c_parmetis (SuperMatrix *A, int_t *perm_r, int_t *perm_c,
 
 #endif
 #endif
-    
+
   if ( iam < noDomains) {
 
     ParMETIS_V3_NodeND(vtxdist_o, b_rowptr, b_colind, 
diff --git a/SRC/memory.c b/SRC/memory.c
index 4846242c..67d306c2 100644
--- a/SRC/memory.c
+++ b/SRC/memory.c
@@ -26,8 +26,8 @@ at the top-level directory.
 /*
  * Global variables
  */
-ExpHeader *expanders; /* Array of pointers to 4 types of memory */
-LU_stack_t stack;
+SuperLU_ExpHeader *expanders; /* Array of pointers to 4 types of memory */
+SuperLU_LU_stack_t stack;
 int_t no_expand;
 
 
@@ -189,7 +189,7 @@ void *user_malloc_dist(int_t bytes, int_t which_end)
 {
     void *buf;
     
-    if ( StackFull(bytes) ) return (NULL);
+    if ( SuperLU_StackFull(bytes) ) return (NULL);
 
     if ( which_end == HEAD ) {
 	buf = (char*) stack.array + stack.top1;
@@ -273,7 +273,7 @@ int_t symbfact_SubInit
     no_expand = 0;
     iword     = sizeof(int_t);
 
-    expanders = (ExpHeader *) SUPERLU_MALLOC( NO_MEMTYPE*sizeof(ExpHeader) );
+    expanders = (SuperLU_ExpHeader *) SUPERLU_MALLOC( NO_MEMTYPE*sizeof(SuperLU_ExpHeader) );
     if ( !expanders ) ABORT("SUPERLU_MALLOC fails for expanders");
     
     if ( fact == DOFACT || fact == SamePattern ) {
@@ -282,7 +282,7 @@ int_t symbfact_SubInit
 	nzumax = FILL/2.0 * annz;
 
 	if ( lwork == -1 ) {
-	    return ( GluIntArray(n) * iword + TempSpace(m,1)
+	    return ( SuperLU_GluIntArray(n) * iword + SuperLU_TempSpace(m,1)
 		    + (nzlmax+nzumax)*iword + n );
         } else {
 	    SetupSpace(work, lwork, &Glu_freeable->MemModel);
@@ -324,7 +324,7 @@ int_t symbfact_SubInit
 	    }
 #if ( PRNTlevel>=1 )
 	    printf("(%d).. symbfact_SubInit() reduce size:"
-		   "nzlmax %ld, nzumax %ld\n", iam, (long long) nzlmax, (long long) nzumax);
+		   "nzlmax %lld, nzumax %lld\n", iam, (long long) nzlmax, (long long) nzumax);
 	    fflush(stdout);
 #endif
 	    lsub  = (int_t *) expand( &nzlmax, (MemType) LSUB, 0, 0, Glu_freeable );
@@ -342,7 +342,7 @@ int_t symbfact_SubInit
     } else {
 	/* fact == SamePattern_SameRowPerm */
 	if ( lwork == -1 ) {
-	    return ( GluIntArray(n) * iword + TempSpace(m, 1)
+	    return ( SuperLU_GluIntArray(n) * iword + SuperLU_TempSpace(m, 1)
 		    + (nzlmax+nzumax)*iword + n );
         } else if ( lwork == 0 ) {
 	    Glu_freeable->MemModel = SYSTEM;
@@ -492,7 +492,7 @@ static void *expand
 	    } else {
 		while ( !new_mem ) {
 		    if ( ++tries > 10 ) return (NULL);
-		    alpha = Reduce(alpha);
+		    alpha = SuperLU_Reduce(alpha);
 		    new_len = alpha * *prev_len;
 		    new_mem = (void*) SUPERLU_MALLOC((size_t)new_len * lword); 
 		    /* new_mem = (void *) calloc(new_len, lword); */
@@ -512,11 +512,11 @@ static void *expand
 	    tries = 0;
 	    extra = (new_len - *prev_len) * lword;
 	    if ( keep_prev ) {
-		if ( StackFull(extra) ) return (NULL);
+		if ( SuperLU_StackFull(extra) ) return (NULL);
 	    } else {
-		while ( StackFull(extra) ) {
+		while ( SuperLU_StackFull(extra) ) {
 		    if ( ++tries > 10 ) return (NULL);
-		    alpha = Reduce(alpha);
+		    alpha = SuperLU_Reduce(alpha);
 		    new_len = alpha * *prev_len;
 		    extra = (new_len - *prev_len) * lword;	    
 		}
diff --git a/SRC/pdgssvx.c b/SRC/pdgssvx.c
index 0592b15e..0f4b1be1 100644
--- a/SRC/pdgssvx.c
+++ b/SRC/pdgssvx.c
@@ -22,6 +22,7 @@ at the top-level directory.
  * April 5, 2015
  * December 31, 2015  version 4.3
  * December 31, 2016  version 5.1.3
+ * April 10, 2018  version 5.3							  
  * 
*/ @@ -319,9 +320,13 @@ at the top-level directory. * o RowPerm (rowperm_t) * Specifies how to permute rows of the matrix A. * = NATURAL: use the natural ordering. - * = LargeDiag: use the Duff/Koster algorithm to permute rows of + * = LargeDiag_MC64: use the Duff/Koster algorithm to permute rows of * the original matrix to make the diagonal large * relative to the off-diagonal. + * = LargeDiag_APWM: use the parallel approximate-weight perfect + * matching to permute rows of the original matrix + * to make the diagonal large relative to the + * off-diagonal. * = MY_PERMR: use the ordering given in ScalePermstruct->perm_r * input by the user. * @@ -760,7 +765,7 @@ pdgssvx(superlu_dist_options_t *options, SuperMatrix *A, (parSymbFact == NO || options->RowPerm != NO) ) { /* Performs serial symbolic factorzation and/or MC64 */ - need_value = (options->RowPerm == LargeDiag); + need_value = (options->RowPerm == LargeDiag_MC64); pdCompRow_loc_to_CompCol_global(need_value, A, grid, &GA); @@ -789,8 +794,8 @@ pdgssvx(superlu_dist_options_t *options, SuperMatrix *A, irow = rowind[i]; rowind[i] = perm_r[irow]; } - } else { /* options->RowPerm == LargeDiag */ - /* Get a new perm_r[] */ + } else if ( options->RowPerm == LargeDiag_MC64 ) { + /* Get a new perm_r[] from MC64 */ if ( job == 5 ) { /* Allocate storage for scaling factors. */ if ( !(R1 = doubleMalloc_dist(m)) ) @@ -901,6 +906,14 @@ pdgssvx(superlu_dist_options_t *options, SuperMatrix *A, } else if ( job == 5 ) { if ( !iam ) printf("\t product of diagonal %e\n", dprod); } +#endif + } else { /* use largeDiag_AWPM */ +#ifdef HAVE_COMBBLAS + c2cpp_GetAWPM(A, grid, ScalePermstruct); +#else + if ( iam == 0 ) { + printf("CombBLAS is not available\n"); fflush(stdout); + } #endif } /* end if options->RowPerm ... */ diff --git a/SRC/pdgssvx_ABglobal.c b/SRC/pdgssvx_ABglobal.c index 2935ffbf..7ac71ca3 100644 --- a/SRC/pdgssvx_ABglobal.c +++ b/SRC/pdgssvx_ABglobal.c @@ -289,9 +289,13 @@ at the top-level directory. * o RowPerm (rowperm_t) * Specifies how to permute rows of the matrix A. * = NATURAL: use the natural ordering. - * = LargeDiag: use the Duff/Koster algorithm to permute rows of - * the original matrix to make the diagonal large + * = LargeDiag_MC64: use the Duff/Koster algorithm to permute rows + * of the original matrix to make the diagonal large * relative to the off-diagonal. + * = LargeDiag_APWM: use the parallel approximate-weight perfect + * matching to permute rows of the original matrix + * to make the diagonal large relative to the + * off-diagonal. * = MY_PERMR: use the ordering given in ScalePermstruct->perm_r * input by the user. * @@ -888,9 +892,9 @@ pdgssvx_ABglobal(superlu_dist_options_t *options, SuperMatrix *A, QuerySpace_dist(n, -iinfo, Glu_freeable, &symb_mem_usage); #if ( PRNTlevel>=1 ) if ( !iam ) { - printf("\tNo of supers %ld\n", (long long)Glu_persist->supno[n-1]+1); - printf("\tSize of G(L) %ld\n", (long long)Glu_freeable->xlsub[n]); - printf("\tSize of G(U) %ld\n", (long long)Glu_freeable->xusub[n]); + printf("\tNo of supers " IFMT "\n", Glu_persist->supno[n-1]+1); + printf("\tSize of G(L) " IFMT "\n", Glu_freeable->xlsub[n]); + printf("\tSize of G(U) " IFMT "\n", Glu_freeable->xusub[n]); printf("\tint %d, short %d, float %d, double %d\n", (int) sizeof(int_t), (int) sizeof(short), (int) sizeof(float), (int) sizeof(double)); diff --git a/SRC/pdgstrf.c b/SRC/pdgstrf.c index 5b2c767d..f6e669bb 100644 --- a/SRC/pdgstrf.c +++ b/SRC/pdgstrf.c @@ -14,19 +14,20 @@ at the top-level directory. * \brief Performs LU factorization in parallel * *
- * -- Distributed SuperLU routine (version 5.2) --
+ * -- Distributed SuperLU routine (version 5.4) --
  * Lawrence Berkeley National Lab, Univ. of California Berkeley.
  * October 1, 2014
  *
  * Modified:
- *     September 1, 1999
- *     Feburary 7, 2001  use MPI_Isend/MPI_Irecv
- *     October 15, 2008  latency-reducing panel factorization
- *     July    12, 2011  static scheduling and arbitrary look-ahead
- *     March   13, 2013  change NTAGS to MPI_TAG_UB value
- *     September 24, 2015 replace xLAMCH by xMACH, using C99 standard.
- *     December 31, 2015 rename xMACH to xMACH_DIST.
- *     September 30, 2017 optimization for Intel Knights Landing (KNL) node .
+ *   September 1, 1999
+ *   Feburary 7, 2001  use MPI_Isend/MPI_Irecv
+ *   October 15, 2008  latency-reducing panel factorization
+ *   July    12, 2011  static scheduling and arbitrary look-ahead
+ *   March   13, 2013  change NTAGS to MPI_TAG_UB value
+ *   September 24, 2015 replace xLAMCH by xMACH, using C99 standard.
+ *   December 31, 2015 rename xMACH to xMACH_DIST.
+ *   September 30, 2017 optimization for Intel Knights Landing (KNL) node .
+ *   June 1, 2018      add parallel AWPM pivoting; add back arrive_at_ublock()
  *
  * Sketch of the algorithm 
  *
@@ -315,8 +316,11 @@ pdgstrf(superlu_dist_options_t * options, int m, int n, double anorm,
     int nnodes, *sendcnts, *sdispls, *recvcnts, *rdispls, *srows, *rrows;
     etree_node *head, *tail, *ptr;
     int *num_child;
-    int num_look_aheads, look_id, *look_ahead;
+    int num_look_aheads, look_id;
+    int *look_ahead; /* global look_ahead table */
     int_t *perm_c_supno, *iperm_c_supno;
+          /* perm_c_supno[k] = j means at the k-th step of elimination,
+	   * the j-th supernode is chosen. */
     MPI_Request *recv_req, **recv_reqs, **send_reqs, **send_reqs_u,
         **recv_reqs_u;
     MPI_Request *send_req, *U_diag_blk_send_req = NULL;
@@ -1623,12 +1627,13 @@ pdgstrf(superlu_dist_options_t * options, int m, int n, double anorm,
             }
             iukp = iukp0;
 #ifdef ISORT
-            isort (nub, iperm_u, perm_u);
+            /* iperm_u is sorted based on elimination order; 
+               perm_u reorders the U blocks to match the elimination order. */
+            isort (nub, iperm_u, perm_u); 
 #else
             qsort (perm_u, (size_t) nub, 2 * sizeof (int_t),
                    &superlu_sort_perm);
 #endif
-            // j = jj0 = 0;
 
 /************************************************************************/
             double ttx =SuperLU_timer_();
diff --git a/SRC/psymbfact.c b/SRC/psymbfact.c
index 00d24c24..b7a4693f 100644
--- a/SRC/psymbfact.c
+++ b/SRC/psymbfact.c
@@ -31,7 +31,7 @@ at the top-level directory.
  * 
*/ -/* limits.h: the largest positive integer (INT_MAX) */ +/* limits.h: the largest positive integer (INT_MAX) (LONG_MAX) */ #include #include #include "superlu_ddefs.h" @@ -512,10 +512,10 @@ float symbfact_dist nsuper = Pslu_freeable->supno_loc[fstVtx_lid]; Pslu_freeable->xsup_beg_loc[nsuper] = fstVtx; szsn = 1; - if (INT_MAX - nnzL <= Llu_symbfact.xlsub[fstVtx_lid + 1] - + if (LONG_MAX - nnzL <= Llu_symbfact.xlsub[fstVtx_lid + 1] - Llu_symbfact.xlsub[fstVtx_lid]) printf ("PE[%d] ERR nnzL %lld\n", iam, nnzL); - if (INT_MAX - nnzU <= Llu_symbfact.xusub[fstVtx_lid + 1] - + if (LONG_MAX - nnzU <= Llu_symbfact.xusub[fstVtx_lid + 1] - Llu_symbfact.xusub[fstVtx_lid]) printf ("PE[%d] ERR nnzU %lld\n", iam, nnzU); @@ -587,9 +587,9 @@ float symbfact_dist stat_loc[22] = PS.fill_pelt[5]; MPI_Allreduce (stat_loc, stat_glob, 23, MPI_FLOAT, - MPI_SUM, (*symb_comm)); + MPI_SUM, (*symb_comm)); MPI_Allreduce (&(stat_loc[5]), mem_glob, 14, MPI_FLOAT, - MPI_MAX, (*symb_comm)); + MPI_MAX, (*symb_comm)); fill_rcmd = (int_t) mem_glob[10]; PS.fill_pelt[0] = stat_glob[19]; PS.fill_pelt[1] = mem_glob[12]; @@ -628,7 +628,7 @@ float symbfact_dist if (stat_msgs_g[6] == 0) stat_msgs_g[6] = 1; if (stat_msgs_g[7] == 0) stat_msgs_g[7] = 1; - Pslu_freeable->nnzLU=(long long) stat_glob[0]+(long long) stat_glob[1]; + Pslu_freeable->nnzLU=(long long) stat_glob[0]+(long long) stat_glob[1]; if (!iam) { nnzL = (long long) stat_glob[0]; nnzU = (long long) stat_glob[1]; nsuper = (int_t) stat_glob[2]; @@ -638,11 +638,12 @@ float symbfact_dist printf("\t relax_gen %.2f, relax_curSep %.2f, relax_seps %.2f\n", PS.relax_gen, PS.relax_curSep, PS.relax_seps); #endif + printf("LONG_MAX %ld\n", LONG_MAX); printf("\tParameters: fill mem %ld fill pelt %ld\n", (long long) sp_ienv_dist(6), (long long) PS.fill_par); printf("\tNonzeros in L %ld\n", nnzL); printf("\tNonzeros in U %ld\n", nnzU); - nnzLU = nnzL + nnzU; + nnzLU = nnzL + nnzU; printf("\tnonzeros in L+U-I %ld\n", nnzLU); printf("\tNo of supers %ld\n", (long long) nsuper); printf("\tSize of G(L) %ld\n", (long long) szLGr); @@ -1471,9 +1472,9 @@ symbfact_distributeMatrix intBuf4 = intBuf1 + 3 * nprocs_num; for (p=0; p INT_MAX || ptr_toSnd[p] > INT_MAX || - nnzToRecv[p] > INT_MAX || ptr_toRcv[p] > INT_MAX) - ABORT("ERROR in symbfact_distributeMatrix size to send > INT_MAX\n"); + if (nnzToSend[p] > LONG_MAX || ptr_toSnd[p] > LONG_MAX || + nnzToRecv[p] > LONG_MAX || ptr_toRcv[p] > LONG_MAX) + ABORT("ERROR in symbfact_distributeMatrix size to send > LONG_MAX\n"); intBuf1[p] = (int) nnzToSend[p]; intBuf2[p] = (int) ptr_toSnd[p]; intBuf3[p] = (int) nnzToRecv[p]; @@ -4773,8 +4774,8 @@ intraLvl_symbfact MPI_Irecv (&sz_msg, 1, mpi_int_t, MPI_ANY_SOURCE, tag_intraLvl_szMsg, (*symb_comm), &(request[0])); - if (sz_msg > INT_MAX) - ABORT("ERROR in intraLvl_symbfact size to send > INT_MAX\n"); + if (sz_msg > LONG_MAX) + ABORT("ERROR in intraLvl_symbfact size to send > LONG_MAX\n"); } MPI_Waitany (2, request, index_req, status); if (index_req[0] == 1) { diff --git a/SRC/psymbfact.h b/SRC/psymbfact.h index e737acb3..2ef18fb1 100644 --- a/SRC/psymbfact.h +++ b/SRC/psymbfact.h @@ -69,7 +69,7 @@ typedef struct { int_t nvtcs_loc; /* number of local vertices */ int_t *globToLoc; /* global to local indexing */ int_t maxNvtcsPProc; /* max number of vertices on the processors */ - long long int nnzLU; /* number of nonzeros in L+U*/ + int64_t nnzLU; /* number of nonzeros in L+U*/ } Pslu_freeable_t; @@ -300,6 +300,3 @@ typedef struct { #endif /* __SUPERLU_DIST_PSYMBFACT */ - - - diff --git a/SRC/pzgssvx.c b/SRC/pzgssvx.c index c7d8230a..a5ccf7c4 100644 --- a/SRC/pzgssvx.c +++ b/SRC/pzgssvx.c @@ -21,6 +21,7 @@ at the top-level directory. * April 5, 2015 * December 31, 2015 version 4.3 * December 31, 2016 version 5.1.3 + * April 10, 2018 version 5.3 * */ @@ -318,9 +319,13 @@ at the top-level directory. * o RowPerm (rowperm_t) * Specifies how to permute rows of the matrix A. * = NATURAL: use the natural ordering. - * = LargeDiag: use the Duff/Koster algorithm to permute rows of + * = LargeDiag_MC64: use the Duff/Koster algorithm to permute rows of * the original matrix to make the diagonal large * relative to the off-diagonal. + * = LargeDiag_APWM: use the parallel approximate-weight perfect + * matching to permute rows of the original matrix + * to make the diagonal large relative to the + * off-diagonal. * = MY_PERMR: use the ordering given in ScalePermstruct->perm_r * input by the user. * @@ -760,7 +765,7 @@ pzgssvx(superlu_dist_options_t *options, SuperMatrix *A, (parSymbFact == NO || options->RowPerm != NO) ) { /* Performs serial symbolic factorzation and/or MC64 */ - need_value = (options->RowPerm == LargeDiag); + need_value = (options->RowPerm == LargeDiag_MC64); pzCompRow_loc_to_CompCol_global(need_value, A, grid, &GA); @@ -789,8 +794,8 @@ pzgssvx(superlu_dist_options_t *options, SuperMatrix *A, irow = rowind[i]; rowind[i] = perm_r[irow]; } - } else { /* options->RowPerm == LargeDiag */ - /* Get a new perm_r[] */ + } else if ( options->RowPerm == LargeDiag_MC64 ) { + /* Get a new perm_r[] from MC64 */ if ( job == 5 ) { /* Allocate storage for scaling factors. */ if ( !(R1 = doubleMalloc_dist(m)) ) @@ -902,6 +907,14 @@ pzgssvx(superlu_dist_options_t *options, SuperMatrix *A, } else if ( job == 5 ) { if ( !iam ) printf("\t product of diagonal %e\n", dprod); } +#endif + } else { /* use largeDiag_AWPM */ +#ifdef HAVE_COMBBLAS + c2cpp_GetAWPM(A, grid, ScalePermstruct); +#else + if ( iam == 0 ) { + printf("CombBLAS is not available\n"); fflush(stdout); + } #endif } /* end if options->RowPerm ... */ diff --git a/SRC/pzgssvx_ABglobal.c b/SRC/pzgssvx_ABglobal.c index 247f9e87..4ac427a1 100644 --- a/SRC/pzgssvx_ABglobal.c +++ b/SRC/pzgssvx_ABglobal.c @@ -209,7 +209,7 @@ at the top-level directory. * * The user must also supply * - * - A, the unfactored matrix, only in the case that iterative refinment + * - A, the unfactored matrix, only in the case that iterative refinement * is to be done (specifically A must be the output A from * the previous call, so that it has been scaled and permuted) * - all of ScalePermstruct @@ -288,9 +288,13 @@ at the top-level directory. * o RowPerm (rowperm_t) * Specifies how to permute rows of the matrix A. * = NATURAL: use the natural ordering. - * = LargeDiag: use the Duff/Koster algorithm to permute rows of - * the original matrix to make the diagonal large + * = LargeDiag_MC64: use the Duff/Koster algorithm to permute rows + * of the original matrix to make the diagonal large * relative to the off-diagonal. + * = LargeDiag_APWM: use the parallel approximate-weight perfect + * matching to permute rows of the original matrix + * to make the diagonal large relative to the + * off-diagonal. * = MY_PERMR: use the ordering given in ScalePermstruct->perm_r * input by the user. * @@ -312,7 +316,7 @@ at the top-level directory. * = SLU_DOUBLE: accumulate residual in double precision. * = SLU_EXTRA: accumulate residual in extra precision. * - * NOTE: all options must be indentical on all processes when + * NOTE: all options must be identical on all processes when * calling this routine. * * A (input/output) SuperMatrix* @@ -887,9 +891,9 @@ pzgssvx_ABglobal(superlu_dist_options_t *options, SuperMatrix *A, QuerySpace_dist(n, -iinfo, Glu_freeable, &symb_mem_usage); #if ( PRNTlevel>=1 ) if ( !iam ) { - printf("\tNo of supers %ld\n", (long long)Glu_persist->supno[n-1]+1); - printf("\tSize of G(L) %ld\n", (long long)Glu_freeable->xlsub[n]); - printf("\tSize of G(U) %ld\n", (long long)Glu_freeable->xusub[n]); + printf("\tNo of supers " IFMT "\n", Glu_persist->supno[n-1]+1); + printf("\tSize of G(L) " IFMT "\n", Glu_freeable->xlsub[n]); + printf("\tSize of G(U) " IFMT "\n", Glu_freeable->xusub[n]); printf("\tint %d, short %d, float %d, double %d\n", (int) sizeof(int_t), (int) sizeof(short), (int) sizeof(float), (int) sizeof(double)); diff --git a/SRC/pzgstrf.c b/SRC/pzgstrf.c index 2d3d4f76..03696cce 100644 --- a/SRC/pzgstrf.c +++ b/SRC/pzgstrf.c @@ -13,19 +13,20 @@ at the top-level directory. * \brief Performs LU factorization in parallel * *
- * -- Distributed SuperLU routine (version 5.2) --
+ * -- Distributed SuperLU routine (version 5.4) --
  * Lawrence Berkeley National Lab, Univ. of California Berkeley.
  * October 1, 2014
  *
  * Modified:
- *     September 1, 1999
- *     Feburary 7, 2001  use MPI_Isend/MPI_Irecv
- *     October 15, 2008  latency-reducing panel factorization
- *     July    12, 2011  static scheduling and arbitrary look-ahead
- *     March   13, 2013  change NTAGS to MPI_TAG_UB value
- *     September 24, 2015 replace xLAMCH by xMACH, using C99 standard.
- *     December 31, 2015 rename xMACH to xMACH_DIST.
- *     September 30, 2017 optimization for Intel Knights Landing (KNL) node .
+ *   September 1, 1999
+ *   Feburary 7, 2001  use MPI_Isend/MPI_Irecv
+ *   October 15, 2008  latency-reducing panel factorization
+ *   July    12, 2011  static scheduling and arbitrary look-ahead
+ *   March   13, 2013  change NTAGS to MPI_TAG_UB value
+ *   September 24, 2015 replace xLAMCH by xMACH, using C99 standard.
+ *   December 31, 2015 rename xMACH to xMACH_DIST.
+ *   September 30, 2017 optimization for Intel Knights Landing (KNL) node .
+ *   June 1, 2018      add parallel AWPM pivoting; add back arrive_at_ublock()
  *
  * Sketch of the algorithm 
  *
@@ -315,8 +316,11 @@ pzgstrf(superlu_dist_options_t * options, int m, int n, double anorm,
     int nnodes, *sendcnts, *sdispls, *recvcnts, *rdispls, *srows, *rrows;
     etree_node *head, *tail, *ptr;
     int *num_child;
-    int num_look_aheads, look_id, *look_ahead;
+    int num_look_aheads, look_id;
+    int *look_ahead; /* global look_ahead table */
     int_t *perm_c_supno, *iperm_c_supno;
+          /* perm_c_supno[k] = j means at the k-th step of elimination,
+	   * the j-th supernode is chosen. */
     MPI_Request *recv_req, **recv_reqs, **send_reqs, **send_reqs_u,
         **recv_reqs_u;
     MPI_Request *send_req, *U_diag_blk_send_req = NULL;
@@ -1623,12 +1627,13 @@ pzgstrf(superlu_dist_options_t * options, int m, int n, double anorm,
             }
             iukp = iukp0;
 #ifdef ISORT
-            isort (nub, iperm_u, perm_u);
+            /* iperm_u is sorted based on elimination order; 
+               perm_u reorders the U blocks to match the elimination order. */
+            isort (nub, iperm_u, perm_u); 
 #else
             qsort (perm_u, (size_t) nub, 2 * sizeof (int_t),
                    &superlu_sort_perm);
 #endif
-            // j = jj0 = 0;
 
 /************************************************************************/
             double ttx =SuperLU_timer_();
diff --git a/SRC/static_schedule.c b/SRC/static_schedule.c
index bc1933be..e1abec80 100644
--- a/SRC/static_schedule.c
+++ b/SRC/static_schedule.c
@@ -47,10 +47,14 @@ static_schedule(superlu_dist_options_t * options, int m, int n,
 {
 /* 
  * Arguments
+ * =========
  *
  * perm_c_supno (output) 
- *      perm_c_superno[k] = j means at the k-th step of elimination, the j-th
- *      panel is chosen.
+ *      perm_c_supno[k] = j means at the k-th step of elimination, the j-th
+ *      supernode is chosen.
+ * iperm_c_supno (output), inverse of perm_c_supno[]
+ *      iperm_c_supno[j] = k means the j-th supernode will be scheduled
+ *      at the k-th step of elimination.
  * 
  */
     int_t *xsup;
diff --git a/SRC/superlu_ddefs.h b/SRC/superlu_ddefs.h
index 1a79c6db..49c2f69d 100644
--- a/SRC/superlu_ddefs.h
+++ b/SRC/superlu_ddefs.h
@@ -342,6 +342,12 @@ extern int_t dQuerySpace_dist(int_t, LUstruct_t *, gridinfo_t *,
 			      SuperLUStat_t *, superlu_dist_mem_usage_t *);
 
 /* Auxiliary routines */
+
+extern void dClone_CompRowLoc_Matrix_dist(SuperMatrix *, SuperMatrix *);
+extern void dCopy_CompRowLoc_Matrix_dist(SuperMatrix *, SuperMatrix *);
+extern void dZero_CompRowLoc_Matrix_dist(SuperMatrix *);
+extern void dScaleAddId_CompRowLoc_Matrix_dist(SuperMatrix *, double);
+extern void dScaleAdd_CompRowLoc_Matrix_dist(SuperMatrix *, SuperMatrix *, double);
 extern void    dfill_dist (double *, int_t, double);
 extern void    dinf_norm_error_dist (int_t, int_t, double*, int_t,
                                      double*, int_t, gridinfo_t*);
@@ -373,6 +379,7 @@ extern void  dPrintUblocks(int, int_t, gridinfo_t *, Glu_persist_t *,
 extern void  dPrint_CompCol_Matrix_dist(SuperMatrix *);
 extern void  dPrint_Dense_Matrix_dist(SuperMatrix *);
 extern int   dPrint_CompRowLoc_Matrix_dist(SuperMatrix *);
+extern int   file_dPrint_CompRowLoc_Matrix_dist(FILE *fp, SuperMatrix *A);																			   
 extern int   file_PrintDouble5(FILE *, char *, int_t, double *);
 
 
diff --git a/SRC/superlu_defs.h b/SRC/superlu_defs.h
index 171fe687..6286c236 100644
--- a/SRC/superlu_defs.h
+++ b/SRC/superlu_defs.h
@@ -12,7 +12,7 @@ at the top-level directory.
  * \brief Definitions which are precision-neutral
  *
  * 
- * -- Distributed SuperLU routine (version 5.2) --
+ * -- Distributed SuperLU routine (version 5.4) --
  * Lawrence Berkeley National Lab, Univ. of California Berkeley.
  * November 1, 2007
  *
@@ -44,14 +44,14 @@ at the top-level directory.
 #include 
 //#include 
 #include 
-
+#include 
 // /* Following is for vtune */
 // #if 0
 // #include 
 // #define USE_VTUNE
 // #endif
 #if ( VTUNE>=1 )
-#include 
+#include 			 
 #endif
 /*************************************************************************
  * Constants
@@ -67,18 +67,18 @@ at the top-level directory.
  * Versions 4.x and earlier do not include a #define'd version numbers.
  */
 #define SUPERLU_DIST_MAJOR_VERSION     5
-#define SUPERLU_DIST_MINOR_VERSION     3
+#define SUPERLU_DIST_MINOR_VERSION     4
 #define SUPERLU_DIST_PATCH_VERSION     0
-#define SUPERLU_DIST_RELEASE_DATE      "January 28, 2018"					  
+#define SUPERLU_DIST_RELEASE_DATE      "June 1, 2018"
 
-#include "superlu_dist_config.h"							   
+#include "superlu_dist_config.h"
 /* Define my integer size int_t */
 #ifdef _CRAY
   typedef short int_t;
   /*#undef int   Revert back to int of default size. */
   #define mpi_int_t   MPI_SHORT
 #elif defined (_LONGINT)
-  typedef long long int int_t;
+  typedef int64_t int_t;
   #define mpi_int_t   MPI_LONG_LONG_INT
   #define IFMT "%lld"
 #else /* Default */
@@ -87,21 +87,6 @@ at the top-level directory.
   #define IFMT "%8d"
 #endif
 
- 
-
-
-// /* Define atomic int_t */
-// #ifdef _CRAY
-  // typedef atomic_short int_t_ato  ;
-// #elif defined (_LONGINT)
-  // typedef atomic_llong int_t_ato  ;
-// #else /* Default */
-  // typedef atomic_int int_t_ato  ;
-// #endif
-
-
-
-
 #include "superlu_enum_consts.h"
 #include "Cnames.h"
 #include "supermatrix.h"
@@ -413,7 +398,7 @@ typedef struct {
     LU_space_t MemModel; /* 0 - system malloc'd; 1 - user provided */
     int_t     *llvl;     /* keep track of level in L for level-based ILU */
     int_t     *ulvl;     /* keep track of level in U for level-based ILU */
-	long long int nnzLU;   /* number of nonzeros in L+U*/		  
+	int64_t nnzLU;   /* number of nonzeros in L+U*/
 } Glu_freeable_t;
 
 
@@ -655,7 +640,7 @@ typedef struct {
     float for_lu;
     float total;
     int_t expansions;
-    long long int nnzL, nnzU;
+    int64_t nnzL, nnzU;
 } superlu_dist_mem_usage_t;
 
 /* 
@@ -730,10 +715,9 @@ extern int_t symbfact_SubInit(fact_t, void *, int_t, int_t, int_t, int_t,
 extern int_t symbfact_SubXpand(int_t, int_t, int_t, MemType, int_t *,
 			       Glu_freeable_t *);
 extern int_t symbfact_SubFree(Glu_freeable_t *);
-extern void    countnz_dist (const int_t, int_t *, 
-			     long long int *, long long int *,
+extern void    countnz_dist (const int_t, int_t *, int64_t *, int64_t *,
 			     Glu_persist_t *, Glu_freeable_t *);
-extern long long int fixupL_dist (const int_t, const int_t *, Glu_persist_t *,
+extern int64_t fixupL_dist (const int_t, const int_t *, Glu_persist_t *,
 				  Glu_freeable_t *);
 extern int_t   *TreePostorder_dist (int_t, int_t *);
 extern float   smach_dist(char *);
@@ -743,6 +727,7 @@ extern void    superlu_free_dist (void*);
 extern int_t   *intMalloc_dist (int_t);
 extern int_t   *intCalloc_dist (int_t);
 extern int_t   mc64id_dist(int_t *);
+extern int     c2cpp_GetAWPM(SuperMatrix *, gridinfo_t *, ScalePermstruct_t *);
 extern void  arrive_at_ublock (int_t, int_t *, int_t *, int_t *,
 			       int_t *, int_t *, int_t, int_t, 
 			       int_t *, int_t *, int_t *, gridinfo_t *);
@@ -766,7 +751,7 @@ extern void  pxerr_dist (char *, gridinfo_t *, int_t);
 extern void  PStatInit(SuperLUStat_t *);
 extern void  PStatFree(SuperLUStat_t *);
 extern void  PStatPrint(superlu_dist_options_t *, SuperLUStat_t *, gridinfo_t *);
-extern void  log_memory(long long, SuperLUStat_t *);
+extern void  log_memory(int64_t, SuperLUStat_t *);
 extern void  print_memorylog(SuperLUStat_t *, char *);
 extern int   superlu_dist_GetVersionNumber(int *, int *, int *);
 extern void  quickSort( int_t*, int_t, int_t, int_t);
diff --git a/SRC/superlu_dist_config.h b/SRC/superlu_dist_config.h
index 7cda561c..80f1ec02 100644
--- a/SRC/superlu_dist_config.h
+++ b/SRC/superlu_dist_config.h
@@ -1,4 +1,14 @@
-/* #define XSDK_INDEX_SIZE 64 */
+/* superlu_dist_config.h.in */
+
+/* Enable parmetis */
+#define HAVE_PARMETIS TRUE
+
+/* Enable CombBLAS */
+/* #undef HAVE_COMBBLAS */
+
+/* enable 64bit index mode */
+#define XSDK_INDEX_SIZE 32
+
 #if (XSDK_INDEX_SIZE == 64)
 #define _LONGINT 1
 #endif
diff --git a/SRC/superlu_dist_config.h.in b/SRC/superlu_dist_config.h.in
index c27b4531..dbc24401 100644
--- a/SRC/superlu_dist_config.h.in
+++ b/SRC/superlu_dist_config.h.in
@@ -3,10 +3,12 @@
 /* Enable parmetis */
 #cmakedefine HAVE_PARMETIS @HAVE_PARMETIS@
 
+/* Enable CombBLAS */
+#cmakedefine HAVE_COMBBLAS @HAVE_COMBBLAS@
+
 /* enable 64bit index mode */
 #cmakedefine XSDK_INDEX_SIZE @XSDK_INDEX_SIZE@
 
 #if (XSDK_INDEX_SIZE == 64)
 #define _LONGINT 1
-#endif
-
+#endif
\ No newline at end of file
diff --git a/SRC/superlu_enum_consts.h b/SRC/superlu_enum_consts.h
index 657ffa0a..872cf5e9 100644
--- a/SRC/superlu_enum_consts.h
+++ b/SRC/superlu_enum_consts.h
@@ -26,14 +26,14 @@ at the top-level directory.
  ***********************************************************************/
 typedef enum {NO, YES}                                          yes_no_t;
 typedef enum {DOFACT, SamePattern, SamePattern_SameRowPerm, FACTORED} fact_t;
-typedef enum {NOROWPERM, LargeDiag, MY_PERMR}                   rowperm_t;
+typedef enum {NOROWPERM, LargeDiag_MC64, LargeDiag_AWPM, MY_PERMR} rowperm_t;
 typedef enum {NATURAL, MMD_ATA, MMD_AT_PLUS_A, COLAMD,
 	      METIS_AT_PLUS_A, PARMETIS, ZOLTAN, MY_PERMC}      colperm_t;
 typedef enum {NOTRANS, TRANS, CONJ}                             trans_t;
 typedef enum {NOEQUIL, ROW, COL, BOTH}                          DiagScale_t;
 typedef enum {NOREFINE, SLU_SINGLE=1, SLU_DOUBLE, SLU_EXTRA}    IterRefine_t;
 //typedef enum {LUSUP, UCOL, LSUB, USUB, LLVL, ULVL, NO_MEMTYPE}  MemType;
-typedef enum {USUB, LSUB, UCOL, LUSUP, LLVL, ULVL, NO_MEMTYPE}  MemType;																		
+typedef enum {USUB, LSUB, UCOL, LUSUP, LLVL, ULVL, NO_MEMTYPE}  MemType;
 typedef enum {HEAD, TAIL}                                       stack_end_t;
 typedef enum {SYSTEM, USER}                                     LU_space_t;
 typedef enum {ONE_NORM, TWO_NORM, INF_NORM}			norm_t;
@@ -71,7 +71,7 @@ typedef enum {
     COMM,    /* communication for factorization */
     COMM_DIAG, /* Bcast diagonal block to process column */
     COMM_RIGHT, /* communicate L panel */
-    COMM_DOWN, /* communicate U panel */										
+    COMM_DOWN, /* communicate U panel */
     SOL_COMM,/* communication for solve */
     SOL_GEMM,/* gemm for solve */
     SOL_TRSM,/* trsm for solve */
diff --git a/SRC/superlu_zdefs.h b/SRC/superlu_zdefs.h
index 9e6cc7ea..e1945ee9 100644
--- a/SRC/superlu_zdefs.h
+++ b/SRC/superlu_zdefs.h
@@ -344,6 +344,12 @@ extern int_t zQuerySpace_dist(int_t, LUstruct_t *, gridinfo_t *,
 			      SuperLUStat_t *, superlu_dist_mem_usage_t *);
 
 /* Auxiliary routines */
+
+extern void zClone_CompRowLoc_Matrix_dist(SuperMatrix *, SuperMatrix *);
+extern void zCopy_CompRowLoc_Matrix_dist(SuperMatrix *, SuperMatrix *);
+extern void zZero_CompRowLoc_Matrix_dist(SuperMatrix *);
+extern void zScaleAddId_CompRowLoc_Matrix_dist(SuperMatrix *, doublecomplex);
+extern void zScaleAdd_CompRowLoc_Matrix_dist(SuperMatrix *, SuperMatrix *, doublecomplex);
 extern void    zfill_dist (doublecomplex *, int_t, doublecomplex);
 extern void    zinf_norm_error_dist (int_t, int_t, doublecomplex*, int_t,
                                      doublecomplex*, int_t, gridinfo_t*);
@@ -375,6 +381,7 @@ extern void  zPrintUblocks(int, int_t, gridinfo_t *, Glu_persist_t *,
 extern void  zPrint_CompCol_Matrix_dist(SuperMatrix *);
 extern void  zPrint_Dense_Matrix_dist(SuperMatrix *);
 extern int   zPrint_CompRowLoc_Matrix_dist(SuperMatrix *);
+extern int   file_zPrint_CompRowLoc_Matrix_dist(FILE *fp, SuperMatrix *A);																			   
 extern void  PrintDoublecomplex(char *, int_t, doublecomplex *);
 extern int   file_PrintDoublecomplex(FILE *fp, char *, int_t, doublecomplex *);
 
diff --git a/SRC/svn-commit.tmp b/SRC/svn-commit.tmp
new file mode 100644
index 00000000..2684f6e7
--- /dev/null
+++ b/SRC/svn-commit.tmp
@@ -0,0 +1,5 @@
+
+--This line, and those below, will be ignored--
+
+M    pxgssvx.c.base
+M    pxgssvx_ABglobal.c.base
diff --git a/SRC/symbfact.c b/SRC/symbfact.c
index 6c108f7c..bbf320e2 100644
--- a/SRC/symbfact.c
+++ b/SRC/symbfact.c
@@ -94,7 +94,8 @@ int_t symbfact
     int_t *iwork, *perm_r, *segrep, *repfnz;
     int_t *xprune, *marker, *parent, *xplore;
     int_t relax, *desc, *relax_end;
-    long long int nnzL, nnzU, nnzLU, nnzLSUB;
+    long long int nnzLU, nnzLSUB;
+    int64_t nnzL, nnzU;
 	NRformat_loc *Astore;
 
 #if ( DEBUGlevel>=1 )
diff --git a/SRC/util.c b/SRC/util.c
index 6327792e..df9b7747 100644
--- a/SRC/util.c
+++ b/SRC/util.c
@@ -12,7 +12,7 @@ at the top-level directory.
  * \brief Utilities functions
  *
  * 
- * -- Distributed SuperLU routine (version 5.3) --
+ * -- Distributed SuperLU routine (version 5.4) --
  * Lawrence Berkeley National Lab, Univ. of California Berkeley.
  * February 1, 2003
  *
@@ -257,7 +257,7 @@ void LUstructFree(LUstruct_t *LUstruct)
  */
 void
 countnz_dist(const int_t n, int_t *xprune,
-	     long long int *nnzL, long long int *nnzU, 
+	     int64_t *nnzL, int64_t *nnzU, 
 	     Glu_persist_t *Glu_persist, Glu_freeable_t *Glu_freeable)
 {
     int_t  fnz, fsupc, i, j, nsuper;
@@ -314,7 +314,7 @@ countnz_dist(const int_t n, int_t *xprune,
  * subscripts.
  * 
*/ -long long int +int64_t fixupL_dist(const int_t n, const int_t *perm_r, Glu_persist_t *Glu_persist, Glu_freeable_t *Glu_freeable) { @@ -362,8 +362,8 @@ void set_default_options_dist(superlu_dist_options_t *options) options->ColPerm = METIS_AT_PLUS_A; #else options->ColPerm = MMD_AT_PLUS_A; -#endif - options->RowPerm = LargeDiag; +#endif + options->RowPerm = LargeDiag_MC64; options->ReplaceTinyPivot = NO; options->IterRefine = SLU_DOUBLE; options->Trans = NOTRANS; @@ -671,7 +671,7 @@ PStatPrint(superlu_dist_options_t *options, SuperLUStat_t *stat, gridinfo_t *gri double *utime1,*utime2,*utime3,*utime4; flops_t *ops1; #if ( PROFlevel>=1 ) - + fflush(stdout); MPI_Barrier( grid->comm ); { @@ -974,11 +974,11 @@ void isort(int_t N, int_t *ARRAY1, int_t *ARRAY2) * N (input) INTEGER * On entry, specifies the size of the arrays. * - * ARRAY1 (input/output) DOUBLE PRECISION ARRAY of LENGTH N + * ARRAY1 (input/output) integer array of length N * On entry, contains the array to be sorted. * On exit, contains the sorted array. * - * ARRAY2 (input/output) DOUBLE PRECISION ARRAY of LENGTH N + * ARRAY2 (input/output) integer array of length N * On entry, contains the array to be sorted. * On exit, contains the sorted array. */ @@ -993,7 +993,7 @@ void isort(int_t N, int_t *ARRAY1, int_t *ARRAY2) TEMP = ARRAY1[J]; ARRAY1[J] = ARRAY1[J + IGAP]; ARRAY1[J + IGAP] = TEMP; - TEMP = ARRAY2[J]; + TEMP = ARRAY2[J]; ARRAY2[J] = ARRAY2[J + IGAP]; ARRAY2[J + IGAP] = TEMP; J = J - IGAP; @@ -1045,7 +1045,7 @@ void isort1(int_t N, int_t *ARRAY) } } -void log_memory(long long cur_bytes, SuperLUStat_t *stat) { +void log_memory(int64_t cur_bytes, SuperLUStat_t *stat) { stat->current_buffer += (float) cur_bytes; if (cur_bytes > 0) { stat->peak_buffer = diff --git a/SRC/util_dist.h b/SRC/util_dist.h index 1320b9fb..45718069 100644 --- a/SRC/util_dist.h +++ b/SRC/util_dist.h @@ -99,7 +99,7 @@ typedef struct { typedef struct e_node { int size; /* length of the memory that has been used */ void *mem; /* pointer to the new malloc'd store */ -} ExpHeader; +} SuperLU_ExpHeader; typedef struct { int size; @@ -107,30 +107,30 @@ typedef struct { int top1; /* grow upward, relative to &array[0] */ int top2; /* grow downward */ void *array; -} LU_stack_t; +} SuperLU_LU_stack_t; /* Constants */ -#define GluIntArray(n) (5 * (n) + 5) +#define SuperLU_GluIntArray(n) (5 * (n) + 5) #if 0 // defined in superlu_enum_consts.h -- 1/20/2018 -#define NO_MEMTYPE 6 /* 0: lusup; - 1: ucol; - 2: lsub; - 3: usub - 4: llvl; level number in L for ILU(k) - 5: ulvl; level number in U for ILU(k) - */ +#define SuperLU_NO_MEMTYPE 6 /* 0: lusup; + 1: ucol; + 2: lsub; + 3: usub + 4: llvl; level number in L for ILU(k) + 5: ulvl; level number in U for ILU(k) + */ #endif /* Macros to manipulate stack */ -#define StackFull(x) ( x + stack.used >= stack.size ) -#define NotDoubleAlign(addr) ( (long)addr & 7 ) -#define DoubleAlign(addr) ( ((long)addr + 7) & ~7L ) -#define TempSpace(n, w) ( (2*w + 4 + NO_MARKER)*m*sizeof(int) + \ +#define SuperLU_StackFull(x) ( x + stack.used >= stack.size ) +#define SuperLU_NotDoubleAlign(addr) ( (long)addr & 7 ) +#define SuperLU_DoubleAlign(addr) ( ((long)addr + 7) & ~7L ) +#define SuperLU_TempSpace(n, w) ( (2*w + 4 + NO_MARKER)*m*sizeof(int) + \ (w + 1)*n*sizeof(double) ) -#define Reduce(alpha) ((alpha + 1) / 2) /* i.e. (alpha-1)/2 + 1 */ +#define SuperLU_Reduce(alpha) ((alpha + 1) / 2) /* i.e. (alpha-1)/2 + 1 */ -#define FIRSTCOL_OF_SNODE(i) (xsup[i]) +#define SuperLU_FIRSTCOL_OF_SNODE(i) (xsup[i]) #if ( PROFlevel>=1 ) #define TIC(t) t = SuperLU_timer_() @@ -143,11 +143,11 @@ typedef struct { /********************************************************* * Macros used for easy access of sparse matrix entries. * *********************************************************/ -#define L_SUB_START(col) ( Lstore->rowind_colptr[col] ) -#define L_SUB(ptr) ( Lstore->rowind[ptr] ) -#define L_NZ_START(col) ( Lstore->nzval_colptr[col] ) -#define L_FST_SUPC(superno) ( Lstore->sup_to_col[superno] ) -#define U_NZ_START(col) ( Ustore->colptr[col] ) -#define U_SUB(ptr) ( Ustore->rowind[ptr] ) +#define SuperLU_L_SUB_START(col) ( Lstore->rowind_colptr[col] ) +#define SuperLU_L_SUB(ptr) ( Lstore->rowind[ptr] ) +#define SuperLU_L_NZ_START(col) ( Lstore->nzval_colptr[col] ) +#define SuperLU_L_FST_SUPC(superno) ( Lstore->sup_to_col[superno] ) +#define SuperLU_U_NZ_START(col) ( Ustore->colptr[col] ) +#define SuperLU_U_SUB(ptr) ( Ustore->rowind[ptr] ) #endif /* __SUPERLU_UTIL */ diff --git a/SRC/zSchCompUdt-2Ddynamic.c b/SRC/zSchCompUdt-2Ddynamic.c index 2ad73068..b743c79e 100644 --- a/SRC/zSchCompUdt-2Ddynamic.c +++ b/SRC/zSchCompUdt-2Ddynamic.c @@ -15,16 +15,18 @@ at the top-level directory. * Uses 2D partitioning for the scatter phase. * *
- * -- Distributed SuperLU routine (version 5.2) --
+ * -- Distributed SuperLU routine (version 5.4) --
  * Lawrence Berkeley National Lab, Univ. of California Berkeley.
  * October 1, 2014
  *
- * Modified: September 14, 2017
+ * Modified:
+ *   September 14, 2017
  *   - First gather U-panel, then depending on "ldu" (excluding leading zeros), 
  *     gather only trailing columns of the L-panel corresponding to the nonzero
  *     of U-rows.
  *   - Padding zeros for nice dimensions of GEMM.
  *
+ *  June 1, 2018  add parallel AWPM pivoting; add back arrive_at_ublock()
  */
 
 #define SCHEDULE_STRATEGY guided 
@@ -140,7 +142,7 @@ if ( msg0 && msg2 ) { /* L(:,k) and U(k,:) are not empty. */
 	 /* jj0 contains the look-ahead window that was updated in 
 	    dlook_ahead_update.c. Now the search can continue from that point,
 	    not to start from block 0. */
-#if 0 //Sherry comment out 5/21/2018
+#if 0 // Sherry comment out 5/21/208
 	 /* Save pointers at location right after look-ahead window
 	    for later restart. */
 	 iukp0 = iukp;
@@ -157,7 +159,7 @@ if ( msg0 && msg2 ) { /* L(:,k) and U(k,:) are not empty. */
 	 for (j = jj0; j < nub; ++j) { /* jj0 starts after look-ahead window. */
 	     temp_ncols = 0;
 #if 1
-	     /* Sherry - can remove following call, since perm_u == Identity  */
+	     /* Cannot remove following call, since perm_u != Identity  */
 	     arrive_at_ublock(
 			      j, &iukp, &rukp, &jb, &ljb, &nsupc,
 			      iukp0, rukp0, usub, perm_u, xsup, grid
@@ -178,7 +180,7 @@ if ( msg0 && msg2 ) { /* L(:,k) and U(k,:) are not empty. */
 			j, Ublock_info[j].iukp, Ublock_info[j].rukp,
 			Ublock_info[j].jb, nsupc); */
 
-	     /* Prepare to call GEMM: compute ldu and # of nonzero columns. */
+	     /* Prepare to call GEMM. */
 	     jj = iukp;
 	     for (; jj < iukp+nsupc; ++jj) {
 		 segsize = klst - usub[jj];
@@ -190,7 +192,7 @@ if ( msg0 && msg2 ) { /* L(:,k) and U(k,:) are not empty. */
 
 	     Ublock_info[j].full_u_cols = temp_ncols;
 	     ncols += temp_ncols;
-#if 0 // Sherry comment out 5/31/2018 */	     
+#if 0 // Sherry comment out 5/31/2018 */
 	     /* Jump number of nonzeros in block U(k,jj);
 		Move to block U(k,j+1) in nzval[] array.  */
 	     rukp += usub[iukp - 1];
@@ -249,7 +251,7 @@ if ( msg0 && msg2 ) { /* L(:,k) and U(k,:) are not empty. */
 
             /* == processing each of the remaining columns in parallel == */
 #if 0
-	    /* Can remove following call, since the search was already done. */
+	    /* Can remove following call, since search was already done.  */
             arrive_at_ublock(j, &iukp, &rukp, &jb, &ljb, &nsupc,
 			     iukp0, rukp0, usub,perm_u, xsup, grid);
 #else
@@ -268,15 +270,12 @@ if ( msg0 && msg2 ) { /* L(:,k) and U(k,:) are not empty. */
 #if (_OPENMP>=201307)
 #pragma omp simd
 #endif
-		    for (i=0; i
- * -- Distributed SuperLU routine (version 5.2) --
+ * -- Distributed SuperLU routine (version 5.4) --
  * Lawrence Berkeley National Lab, Univ. of California Berkeley.
  * October 1, 2014
  *
- * Modified: September 18, 2017
+ * Modified:
+ *  September 18, 2017
+ *  June 1, 2018  add parallel AWPM pivoting; add back arrive_at_ublock()
  *   
  */
-#include 
+
+#include   /* assertion doesn't work if NDEBUG is defined */
 
 iukp = iukp0; /* point to the first block in index[] */
 rukp = rukp0; /* point to the start of nzval[] */
+j = jj0 = 0;  /* After the j-loop, jj0 points to the first block in U
+                 outside look-ahead window. */
 
-j = jj0 = 0;
 #if 0
 for (jj = 0; jj < nub; ++jj) assert(perm_u[jj] == jj); /* Sherry */
 #endif
@@ -39,12 +43,12 @@ while (j < nub && perm_u[2 * j] <= k0 + num_look_aheads)
 {
     doublecomplex zero = {0.0, 0.0};
 
-#if 1 // Sherry: no need to search
-    /* Caveat: There is a permutation perm_u involved for j  */
+#if 1
+    /* Search is needed because a permutation perm_u is involved for j  */
     /* Search along the row for the pointers {iukp, rukp} pointing to
      * block U(k,j).
      * j    -- current block in look-ahead window, initialized to 0 on entry
-     * iukp -- point to the start of index[] medadata
+     * iukp -- point to the start of index[] metadata
      * rukp -- point to the start of nzval[] array
      * jb   -- block number of block U(k,j), update destination column
      */
@@ -102,9 +106,6 @@ while (j < nub && perm_u[2 * j] <= k0 + num_look_aheads)
         }
     }
     tempu = bigU; /* set back to the beginning of the buffer */
-#if 0
-    rukp -= usub[iukp - 1]; /* Return to start of U(k,j). */
-#endif
 
     nbrow = lsub[1]; /* number of row subscripts in L(:,k) */
     if (myrow == krow) nbrow = lsub[1] - lsub[3]; /* skip diagonal block for those rows. */
@@ -200,9 +201,6 @@ while (j < nub && perm_u[2 * j] <= k0 + num_look_aheads)
 #endif
     } /* end parallel for lb = 0, nlb ... all blocks in L(:,k) */
 
-#if 0
-    rukp += usub[iukp - 1]; /* Move to block U(k,j+1) */
-#endif
     iukp += nsupc; /* Mov to block U(k,j+1) */
 
     /* =========================================== *
diff --git a/SRC/zmemory_dist.c b/SRC/zmemory_dist.c
index bbaa3aa8..bf4cf502 100644
--- a/SRC/zmemory_dist.c
+++ b/SRC/zmemory_dist.c
@@ -23,14 +23,14 @@ at the top-level directory.
 
 
 /* Variables external to this file */
-extern LU_stack_t stack;
+extern SuperLU_LU_stack_t stack;
 
 
 void *zuser_malloc_dist(int_t bytes, int_t which_end)
 {
     void *buf;
     
-    if ( StackFull(bytes) ) return (NULL);
+    if ( SuperLU_StackFull(bytes) ) return (NULL);
 
     if ( which_end == HEAD ) {
 	buf = (char*) stack.array + stack.top1;
diff --git a/SRC/zsp_blas2_dist.c b/SRC/zsp_blas2_dist.c
index c8b3ba35..4f8990eb 100644
--- a/SRC/zsp_blas2_dist.c
+++ b/SRC/zsp_blas2_dist.c
@@ -144,19 +144,19 @@ sp_ztrsv_dist(char *uplo, char *trans, char *diag, SuperMatrix *L,
     	    if ( L->nrow == 0 ) return 0; /* Quick return */
 	    
 	    for (k = 0; k <= Lstore->nsuper; k++) {
-		fsupc = L_FST_SUPC(k);
-		istart = L_SUB_START(fsupc);
-		nsupr = L_SUB_START(fsupc+1) - istart;
-		nsupc = L_FST_SUPC(k+1) - fsupc;
-		luptr = L_NZ_START(fsupc);
+		fsupc = SuperLU_L_FST_SUPC(k);
+		istart = SuperLU_L_SUB_START(fsupc);
+		nsupr = SuperLU_L_SUB_START(fsupc+1) - istart;
+		nsupc = SuperLU_L_FST_SUPC(k+1) - fsupc;
+		luptr = SuperLU_L_NZ_START(fsupc);
 		nrow = nsupr - nsupc;
 
 	        solve_ops += 4 * nsupc * (nsupc - 1);
 	        solve_ops += 8 * nrow * nsupc;
 
 		if ( nsupc == 1 ) {
-		    for (iptr=istart+1; iptr < L_SUB_START(fsupc+1); ++iptr) {
-			irow = L_SUB(iptr);
+		    for (iptr=istart+1; iptr < SuperLU_L_SUB_START(fsupc+1); ++iptr) {
+			irow = SuperLU_L_SUB(iptr);
 			++luptr;
 			zz_mult(&comp_zero, &x[fsupc], &Lval[luptr]);
 			z_sub(&x[irow], &x[irow], &comp_zero);
@@ -185,7 +185,7 @@ sp_ztrsv_dist(char *uplo, char *trans, char *diag, SuperMatrix *L,
 		
 		    iptr = istart + nsupc;
 		    for (i = 0; i < nrow; ++i, ++iptr) {
-			irow = L_SUB(iptr);
+			irow = SuperLU_L_SUB(iptr);
 			z_sub(&x[irow], &x[irow], &work[i]); /* Scatter */
 			work[i] = comp_zero;
 
@@ -199,17 +199,17 @@ sp_ztrsv_dist(char *uplo, char *trans, char *diag, SuperMatrix *L,
 	    if ( U->nrow == 0 ) return 0; /* Quick return */
 	    
 	    for (k = Lstore->nsuper; k >= 0; k--) {
-	    	fsupc = L_FST_SUPC(k);
-	    	nsupr = L_SUB_START(fsupc+1) - L_SUB_START(fsupc);
-	    	nsupc = L_FST_SUPC(k+1) - fsupc;
-	    	luptr = L_NZ_START(fsupc);
+	    	fsupc = SuperLU_L_FST_SUPC(k);
+	    	nsupr = SuperLU_L_SUB_START(fsupc+1) - SuperLU_L_SUB_START(fsupc);
+	    	nsupc = SuperLU_L_FST_SUPC(k+1) - fsupc;
+	    	luptr = SuperLU_L_NZ_START(fsupc);
 		
     	        solve_ops += 4 * nsupc * (nsupc + 1);
 
 		if ( nsupc == 1 ) {
 		    slud_z_div(&x[fsupc], &x[fsupc], &Lval[luptr]);
-		    for (i = U_NZ_START(fsupc); i < U_NZ_START(fsupc+1); ++i) {
-			irow = U_SUB(i);
+		    for (i = SuperLU_U_NZ_START(fsupc); i < SuperLU_U_NZ_START(fsupc+1); ++i) {
+			irow = SuperLU_U_SUB(i);
 			zz_mult(&comp_zero, &x[fsupc], &Uval[i]);
 			z_sub(&x[irow], &x[irow], &comp_zero);
 		    }
@@ -226,11 +226,11 @@ sp_ztrsv_dist(char *uplo, char *trans, char *diag, SuperMatrix *L,
 		    zusolve ( nsupr, nsupc, &Lval[luptr], &x[fsupc] );
 #endif		
 
-		    for (jcol = fsupc; jcol < L_FST_SUPC(k+1); jcol++) {
-		        solve_ops += 8*(U_NZ_START(jcol+1) - U_NZ_START(jcol));
-		    	for (i = U_NZ_START(jcol); i < U_NZ_START(jcol+1); 
+		    for (jcol = fsupc; jcol < SuperLU_L_FST_SUPC(k+1); jcol++) {
+		        solve_ops += 8*(SuperLU_U_NZ_START(jcol+1) - SuperLU_U_NZ_START(jcol));
+		    	for (i = SuperLU_U_NZ_START(jcol); i < SuperLU_U_NZ_START(jcol+1); 
 				i++) {
-			    irow = U_SUB(i);
+			    irow = SuperLU_U_SUB(i);
 			zz_mult(&comp_zero, &x[jcol], &Uval[i]);
 			z_sub(&x[irow], &x[irow], &comp_zero);
 		    	}
@@ -246,19 +246,19 @@ sp_ztrsv_dist(char *uplo, char *trans, char *diag, SuperMatrix *L,
     	    if ( L->nrow == 0 ) return 0; /* Quick return */
 	    
 	    for (k = Lstore->nsuper; k >= 0; --k) {
-	    	fsupc = L_FST_SUPC(k);
-	    	istart = L_SUB_START(fsupc);
-	    	nsupr = L_SUB_START(fsupc+1) - istart;
-	    	nsupc = L_FST_SUPC(k+1) - fsupc;
-	    	luptr = L_NZ_START(fsupc);
+	    	fsupc = SuperLU_L_FST_SUPC(k);
+	    	istart = SuperLU_L_SUB_START(fsupc);
+	    	nsupr = SuperLU_L_SUB_START(fsupc+1) - istart;
+	    	nsupc = SuperLU_L_FST_SUPC(k+1) - fsupc;
+	    	luptr = SuperLU_L_NZ_START(fsupc);
 
 		solve_ops += 8 * (nsupr - nsupc) * nsupc;
 
-		for (jcol = fsupc; jcol < L_FST_SUPC(k+1); jcol++) {
+		for (jcol = fsupc; jcol < SuperLU_L_FST_SUPC(k+1); jcol++) {
 		    iptr = istart + nsupc;
-		    for (i = L_NZ_START(jcol) + nsupc; 
-				i < L_NZ_START(jcol+1); i++) {
-			irow = L_SUB(iptr);
+		    for (i = SuperLU_L_NZ_START(jcol) + nsupc; 
+				i < SuperLU_L_NZ_START(jcol+1); i++) {
+			irow = SuperLU_L_SUB(iptr);
 			zz_mult(&comp_zero, &x[irow], &Lval[i]);
 		    	z_sub(&x[jcol], &x[jcol], &comp_zero);
 			iptr++;
@@ -289,15 +289,15 @@ sp_ztrsv_dist(char *uplo, char *trans, char *diag, SuperMatrix *L,
 	    if ( U->nrow == 0 ) return 0; /* Quick return */
 	    
 	    for (k = 0; k <= Lstore->nsuper; k++) {
-	    	fsupc = L_FST_SUPC(k);
-	    	nsupr = L_SUB_START(fsupc+1) - L_SUB_START(fsupc);
-	    	nsupc = L_FST_SUPC(k+1) - fsupc;
-	    	luptr = L_NZ_START(fsupc);
-
-		for (jcol = fsupc; jcol < L_FST_SUPC(k+1); jcol++) {
-		    solve_ops += 8*(U_NZ_START(jcol+1) - U_NZ_START(jcol));
-		    for (i = U_NZ_START(jcol); i < U_NZ_START(jcol+1); i++) {
-			irow = U_SUB(i);
+	    	fsupc = SuperLU_L_FST_SUPC(k);
+	    	nsupr = SuperLU_L_SUB_START(fsupc+1) - SuperLU_L_SUB_START(fsupc);
+	    	nsupc = SuperLU_L_FST_SUPC(k+1) - fsupc;
+	    	luptr = SuperLU_L_NZ_START(fsupc);
+
+		for (jcol = fsupc; jcol < SuperLU_L_FST_SUPC(k+1); jcol++) {
+		    solve_ops += 8*(SuperLU_U_NZ_START(jcol+1) - SuperLU_U_NZ_START(jcol));
+		    for (i = SuperLU_U_NZ_START(jcol); i < SuperLU_U_NZ_START(jcol+1); i++) {
+			irow = SuperLU_U_SUB(i);
 			zz_mult(&comp_zero, &x[irow], &Uval[i]);
 		    	z_sub(&x[jcol], &x[jcol], &comp_zero);
 		    }
diff --git a/SRC/zutil_dist.c b/SRC/zutil_dist.c
index a795e84c..da36eb7d 100644
--- a/SRC/zutil_dist.c
+++ b/SRC/zutil_dist.c
@@ -279,6 +279,125 @@ zCreate_SuperNode_Matrix_dist(SuperMatrix *L, int_t m, int_t n, int_t nnz,
 
 }
 
+/**** The following utilities are added per request of SUNDIALS ****/
+
+/*! \brief Clone: Allocate memory for a new matrix B, which is of the same type
+ *  and shape as A.
+ *  The clone operation would copy all the non-pointer structure members like
+ *  nrow, ncol, Stype, Dtype, Mtype from A and allocate a new nested Store
+ *  structure. It would also copy nnz_loc, m_loc, fst_row from A->Store 
+ *  into B->Store. It does not copy the matrix entries, row pointers,
+ *  or column indices.
+ */
+void zClone_CompRowLoc_Matrix_dist(SuperMatrix *A, SuperMatrix *B)
+{
+    NRformat_loc  *Astore, *Bstore;
+
+    B->Stype = A->Stype;
+    B->Dtype = A->Dtype;
+    B->Mtype = A->Mtype;
+    B->nrow  = A->nrow;;
+    B->ncol  = A->ncol;
+    Astore   = (NRformat_loc *) A->Store;
+    B->Store = (void *) SUPERLU_MALLOC( sizeof(NRformat_loc) );
+    if ( !(B->Store) ) ABORT("SUPERLU_MALLOC fails for B->Store");
+    Bstore = (NRformat_loc *) B->Store;
+
+    Bstore->nnz_loc = Astore->nnz_loc;
+    Bstore->m_loc = Astore->m_loc;
+    Bstore->fst_row = Astore->fst_row;
+    if ( !(Bstore->nzval = (doublecomplex *) doublecomplexMalloc_dist(Bstore->nnz_loc)) )
+	ABORT("doublecomplexMalloc_dist fails for Bstore->nzval");
+    if ( !(Bstore->colind = (int_t *) intMalloc_dist(Bstore->nnz_loc)) )
+	ABORT("intMalloc_dist fails for Bstore->colind");
+    if ( !(Bstore->rowptr = (int_t *) intMalloc_dist(Bstore->m_loc + 1)) )
+	ABORT("intMalloc_dist fails for Bstore->rowptr");
+
+    return;
+}
+
+/* \brief Copy: Call the clone operation and then copies all entries,
+ *  row pointers, and column indices of a matrix into another matrix of
+ *  the same type, B_{i,j}=A_{i,j}, for i,j=1,...,n
+ */
+void zCopy_CompRowLoc_Matrix_dist(SuperMatrix *A, SuperMatrix *B)
+{
+    NRformat_loc  *Astore, *Bstore;
+
+    zClone_CompRowLoc_Matrix_dist(A, B);
+
+    Astore = (NRformat_loc *) A->Store;
+    Bstore = (NRformat_loc *) B->Store;
+
+    memcpy(Bstore->nzval, Astore->nzval, Astore->nnz_loc * sizeof(doublecomplex));
+    memcpy(Bstore->colind, Astore->colind, Astore->nnz_loc * sizeof(int_t));
+    memcpy(Bstore->rowptr, Astore->rowptr, (Astore->m_loc+1) * sizeof(int_t));
+
+    return;
+}
+
+/*! \brief Sets all entries of a matrix to zero, A_{i,j}=0, for i,j=1,..,n */
+void zZero_CompRowLoc_Matrix_dist(SuperMatrix *A)
+{
+    doublecomplex zero = {0.0, 0.0};
+    NRformat_loc  *Astore = A->Store;
+    doublecomplex *aval;
+    int_t i;
+
+    aval = (doublecomplex *) Astore->nzval;
+    for (i = 0; i < Astore->nnz_loc; ++i) aval[i] = zero;
+
+    return;
+}
+
+/*! \brief Scale and add I: scales a matrix and adds an identity.
+ *  A_{i,j} = c * A_{i,j} + \delta_{i,j} for i,j=1,...,n and
+ *  \delta_{i,j} is the Kronecker delta.
+ */
+void zScaleAddId_CompRowLoc_Matrix_dist(SuperMatrix *A, doublecomplex c)
+{
+    doublecomplex one = {1.0, 0.0};
+    NRformat_loc  *Astore = A->Store;
+    doublecomplex *aval = (doublecomplex *) Astore->nzval;
+    int i, j;
+    doublecomplex temp;
+
+    for (i = 0; i < Astore->m_loc; ++i) { /* Loop through each row */
+        for (j = Astore->rowptr[i]; j < Astore->rowptr[i+1]; ++j) {
+            if ( (Astore->fst_row + i) == Astore->colind[j] ) {  /* diagonal */
+                zz_mult(&temp, &aval[j], &c);
+		z_add(&aval[j], &temp, &one);
+            } else {
+                zz_mult(&temp, &aval[j], &c);
+		aval[j] = temp;
+	   }
+        }
+    }
+
+    return;
+}
+
+/*! \brief Scale and add: adds a scalar multiple of one matrix to another.
+ *  A_{i,j} = c * A_{i,j} + B_{i,j}$ for i,j=1,...,n
+ */
+void zScaleAdd_CompRowLoc_Matrix_dist(SuperMatrix *A, SuperMatrix *B, doublecomplex c)
+{
+    NRformat_loc  *Astore = A->Store;
+    NRformat_loc  *Bstore = B->Store;
+    doublecomplex *aval = (doublecomplex *) Astore->nzval, *bval = (doublecomplex *) Bstore->nzval;
+    int_t i;
+    doublecomplex temp;
+
+    for (i = 0; i < Astore->nnz_loc; ++i) { /* Loop through each nonzero */
+        zz_mult (&temp, &aval[i], &c);
+	z_add (&aval[i], &temp, &bval[i]);
+    }
+
+    return;
+}
+
+
+/**** Other utilities ****/
 void
 zGenXtrue_dist(int_t n, int_t nrhs, doublecomplex *x, int_t ldx)
 {
diff --git a/TEST/.dropbox.attr b/TEST/.dropbox.attr
new file mode 100755
index 00000000..9e26dfee
--- /dev/null
+++ b/TEST/.dropbox.attr
@@ -0,0 +1 @@
+{}
\ No newline at end of file
diff --git a/TEST/CMakeLists.txt b/TEST/CMakeLists.txt
index c140aeac..979fa9ae 100644
--- a/TEST/CMakeLists.txt
+++ b/TEST/CMakeLists.txt
@@ -7,8 +7,8 @@ if (NOT MSVC)
 endif ()
 
 set(MATRICES ../EXAMPLE/g20.rua)  # sample sparse matrix from a file
-set(NPROWS 1 2)		  # process rows
-set(NPCOLS 1 3) 	  # process columns 
+set(NPROWS 1 2 5)		  # process rows
+set(NPCOLS 1 2 3) 	  # process columns 
 set(NVAL 9 19)	  	  # generated matrix dimensions
 set(NRHS 1 3)		  # number of RHS
 # set(FILLRATIO 2 10)	  # estimated fill ratio
diff --git a/TEST/Makefile b/TEST/Makefile
index c219d70c..ae3c9134 100644
--- a/TEST/Makefile
+++ b/TEST/Makefile
@@ -28,7 +28,7 @@
 #######################################################################
 
 include ../make.inc
-HEADER  = ../SRC
+				
 
 DLINTST = pdtest.o dcreate_matrix.o pdcompute_resid.o
 
@@ -49,7 +49,7 @@ double: ./pdtest
 complex16: ./pztest
 
 .c.o:
-	$(CC) $(CFLAGS) $(CDEFS) -I$(HEADER) -c $< $(VERBOSE)
+	$(CC) $(CFLAGS) $(CDEFS) -I$(INCLUDEDIR) -c $< $(VERBOSE)
 
 clean:	
 	rm -f *.o *test *.out
diff --git a/TEST/dcreate_matrix.c b/TEST/dcreate_matrix.c
index a6224632..77292d79 100644
--- a/TEST/dcreate_matrix.c
+++ b/TEST/dcreate_matrix.c
@@ -89,14 +89,9 @@ int dcreate_matrix(SuperMatrix *A, int nrhs, double **rhs,
 #endif
 
     if ( !iam ) {
-        double t = SuperLU_timer_();
-
         /* Read the matrix stored on disk in Harwell-Boeing format. */
         dreadhb_dist(iam, fp, &m, &n, &nnz, &nzval, &rowind, &colptr);
 
-	printf("Time to read and distribute matrix %.2f\n", 
-	        SuperLU_timer_() - t);  fflush(stdout);
-
 	/* Broadcast matrix A to the other PEs. */
 	MPI_Bcast( &m,     1,   mpi_int_t,  0, grid->comm );
 	MPI_Bcast( &n,     1,   mpi_int_t,  0, grid->comm );
diff --git a/TEST/pdcompute_resid.c b/TEST/pdcompute_resid.c
index 120a087f..dd5de5e4 100644
--- a/TEST/pdcompute_resid.c
+++ b/TEST/pdcompute_resid.c
@@ -9,13 +9,12 @@ The source code is distributed under BSD license, see the file License.txt
 at the top-level directory.
 */
 
-
-/*! @file
+/*! @filee
  * \brief Test for small residual.
  *
- * -- Distributed SuperLU routine (version 5.2) --
+ * -- Distributed SuperLU routine (version 5.0) --
  * Lawrence Berkeley National Lab, Univ. of California Berkeley.
- * September 30, 2017
+ * APril 1, 2017
  *
  */
 #include "superlu_ddefs.h"
@@ -71,7 +70,7 @@ int pdcompute_resid(int m, int n, int nrhs, SuperMatrix *A,
 
     GRID    (input) gridinfo_t*
 	    
-    RESID   (output) double PRECISION   
+    RESID   (output) DOUBLE PRECISION   
             The maximum over the number of right-hand sides of
             norm(B - A*X) / ( norm(A) * norm(X) * EPS ).   
 
@@ -79,6 +78,8 @@ int pdcompute_resid(int m, int n, int nrhs, SuperMatrix *A,
 */
 
     /* Table of constant values */
+    double alpha = -1.;
+    double beta  = 1.;
     int    inc  = 1;
     
     /* Local variables */
@@ -89,7 +90,7 @@ int pdcompute_resid(int m, int n, int nrhs, SuperMatrix *A,
     char transc[1];
     double *ax, *R;
     pdgsmv_comm_t gsmv_comm; 
-    int m_loc = ((NRformat_loc*) A->Store)->m_loc;
+    int_t m_loc = ((NRformat_loc*) A->Store)->m_loc;
 
     /* Function prototypes */
     extern double dasum_(int *, double *, int *);
@@ -131,7 +132,6 @@ int pdcompute_resid(int m, int n, int nrhs, SuperMatrix *A,
 
 	rnorm = dasum_(&m_loc, R, &inc);
 	xnorm = dasum_(&m_loc, X_col, &inc);
-
 	/* */
 	MPI_Allreduce( &rnorm, &rnorm_g, 1, MPI_DOUBLE, MPI_SUM, grid->comm );
 	MPI_Allreduce( &xnorm, &xnorm_g, 1, MPI_DOUBLE, MPI_SUM, grid->comm );
diff --git a/TEST/pdtest.c b/TEST/pdtest.c
index ec261a1b..fe78460d 100644
--- a/TEST/pdtest.c
+++ b/TEST/pdtest.c
@@ -25,9 +25,14 @@ at the top-level directory.
  */
 #include 
 #include 
-#include 
+//#include 
+#ifdef _MSC_VER
+#include 
+#else
 #include 
+#endif
 #include 
+#include "superlu_dist_config.h"					
 #include "superlu_ddefs.h"
 
 #define NTESTS 1 /*5*/      /* Number of test types */
@@ -50,6 +55,7 @@ pdcompute_resid(int m, int n, int nrhs, SuperMatrix *A,
 		double *x, int ldx, double *b, int ldb,
 		gridinfo_t *grid, SOLVEstruct_t *SOLVEstruct, double *resid);
 
+#if 0	 
 /*! \brief Copy matrix A into matrix B, in distributed compressed row format. */
 void
 dCopy_CompRowLoc_Matrix_dist(SuperMatrix *A, SuperMatrix *B)
@@ -74,6 +80,7 @@ dCopy_CompRowLoc_Matrix_dist(SuperMatrix *A, SuperMatrix *B)
     memcpy(Bstore->colind, Astore->colind, nnz_loc * sizeof(int_t));
     memcpy(Bstore->rowptr, Astore->rowptr, (m_loc+1) * sizeof(int_t));
 }
+#endif	  
 
 /*! \brief Print a summary of the testing results. */
 void
@@ -447,6 +454,8 @@ parse_command_line(int argc, char *argv[], int *nprow, int *npcol,
     int c;
     extern char *optarg;
     char  str[20];
+    char *xenvstr, *menvstr, *benvstr, *genvstr;
+    xenvstr = menvstr = benvstr = genvstr = 0;
 
     while ( (c = getopt(argc, argv, "hr:c:t:n:x:m:b:g:s:f:")) != EOF ) {
 	switch (c) {
@@ -469,24 +478,44 @@ parse_command_line(int argc, char *argv[], int *nprow, int *npcol,
 	            break;
 	  case 'n': *n = atoi(optarg);
 	            break;
-	  case 'x': c = atoi(optarg); 
-	            sprintf(str, "%d", c);
-	            setenv("NREL", str, 1);
+// Use putenv as exists on Windows
+#ifdef _MSC_VER
+#define putenv _putenv
+#endif
+	  case 'x': // c = atoi(optarg); 
+	            // sprintf(str, "%d", c);
+	            // setenv("NREL", str, 1);
+		    xenvstr = (char*) malloc((6+strlen(optarg))*sizeof(char));
+		    strcpy(xenvstr, "NREL=");
+		    strcat(xenvstr, optarg);
+		    putenv(xenvstr);
 	            //printf("Reset relax env. variable to %d\n", c);
 	            break;
-	  case 'm': c = atoi(optarg); 
-	            sprintf(str, "%d", c);
-		    setenv("NSUP", str, 1);
+	  case 'm': // c = atoi(optarg); 
+	            // sprintf(str, "%d", c);
+		    // setenv("NSUP", str, 1);
+		    menvstr = (char*) malloc((6+strlen(optarg))*sizeof(char));
+		    strcpy(menvstr, "NSUP=");
+		    strcat(menvstr, optarg);
+		    putenv(menvstr);
 		    //printf("Reset maxsuper env. variable to %d\n", c);
 	            break;
-	  case 'b': c = atoi(optarg); 
-	            sprintf(str, "%d", c);
-		    setenv("FILL", str, 1);
+	  case 'b': // c = atoi(optarg); 
+	            // sprintf(str, "%d", c);
+		    // setenv("FILL", str, 1);
+		    benvstr = (char*) malloc((6+strlen(optarg))*sizeof(char));
+		    strcpy(benvstr, "FILL=");
+		    strcat(benvstr, optarg);
+		    putenv(benvstr);
 		    //printf("Reset fill_ratio env. variable to %d\n", c);
 	            break;
-	  case 'g': c = atoi(optarg); 
-	            sprintf(str, "%d", c);
-		    setenv("N_GEMM", str, 1);
+	  case 'g': // c = atoi(optarg); 
+	            // sprintf(str, "%d", c);
+		    // setenv("N_GEMM", str, 1);
+		    genvstr = (char*) malloc((8+strlen(optarg))*sizeof(char));
+		    strcpy(genvstr, "N_GEMM=");
+		    strcat(genvstr, optarg);
+		    putenv(genvstr);		  
 		    //printf("Reset min_gemm_gpu_offload env. variable to %d\n", c);
 	            break;
 	  case 's': *nrhs = atoi(optarg); 
diff --git a/TEST/pztest.c b/TEST/pztest.c
index d168e832..39d16f37 100644
--- a/TEST/pztest.c
+++ b/TEST/pztest.c
@@ -24,9 +24,14 @@ at the top-level directory.
  */
 #include 
 #include 
-#include 
+//#include 
+#ifdef _MSC_VER
+#include 
+#else
 #include 
+#endif
 #include 
+#include "superlu_dist_config.h"					
 #include "superlu_zdefs.h"
 
 #define NTESTS 1 /*5*/      /* Number of test types */
@@ -49,6 +54,7 @@ pzcompute_resid(int m, int n, int nrhs, SuperMatrix *A,
 		doublecomplex *x, int ldx, doublecomplex *b, int ldb,
 		gridinfo_t *grid, SOLVEstruct_t *SOLVEstruct, double *resid);
 
+#if 0	 
 /*! \brief Copy matrix A into matrix B, in distributed compressed row format. */
 void
 zCopy_CompRowLoc_Matrix_dist(SuperMatrix *A, SuperMatrix *B)
@@ -73,6 +79,7 @@ zCopy_CompRowLoc_Matrix_dist(SuperMatrix *A, SuperMatrix *B)
     memcpy(Bstore->colind, Astore->colind, nnz_loc * sizeof(int_t));
     memcpy(Bstore->rowptr, Astore->rowptr, (m_loc+1) * sizeof(int_t));
 }
+#endif	  
 
 /*! \brief Print a summary of the testing results. */
 void
@@ -446,6 +453,8 @@ parse_command_line(int argc, char *argv[], int *nprow, int *npcol,
     int c;
     extern char *optarg;
     char  str[20];
+    char *xenvstr, *menvstr, *benvstr, *genvstr;
+    xenvstr = menvstr = benvstr = genvstr = 0;
 
     while ( (c = getopt(argc, argv, "hr:c:t:n:x:m:b:g:s:f:")) != EOF ) {
 	switch (c) {
@@ -468,24 +477,44 @@ parse_command_line(int argc, char *argv[], int *nprow, int *npcol,
 	            break;
 	  case 'n': *n = atoi(optarg);
 	            break;
-	  case 'x': c = atoi(optarg); 
-	            sprintf(str, "%d", c);
-	            setenv("NREL", str, 1);
+// Use putenv as exists on Windows
+#ifdef _MSC_VER
+#define putenv _putenv
+#endif
+	  case 'x': // c = atoi(optarg); 
+	            // sprintf(str, "%d", c);
+	            // setenv("NREL", str, 1);
+		    xenvstr = (char*) malloc((6+strlen(optarg))*sizeof(char));
+		    strcpy(xenvstr, "NREL=");
+		    strcat(xenvstr, optarg);
+		    putenv(xenvstr);
 	            //printf("Reset relax env. variable to %d\n", c);
 	            break;
-	  case 'm': c = atoi(optarg); 
-	            sprintf(str, "%d", c);
-		    setenv("NSUP", str, 1);
+	  case 'm': // c = atoi(optarg); 
+	            // sprintf(str, "%d", c);
+		    // setenv("NSUP", str, 1);
+		    menvstr = (char*) malloc((6+strlen(optarg))*sizeof(char));
+		    strcpy(menvstr, "NSUP=");
+		    strcat(menvstr, optarg);
+		    putenv(menvstr);
 		    //printf("Reset maxsuper env. variable to %d\n", c);
 	            break;
-	  case 'b': c = atoi(optarg); 
-	            sprintf(str, "%d", c);
-		    setenv("FILL", str, 1);
+	  case 'b': // c = atoi(optarg); 
+	            // sprintf(str, "%d", c);
+		    // setenv("FILL", str, 1);
+		    benvstr = (char*) malloc((6+strlen(optarg))*sizeof(char));
+		    strcpy(benvstr, "FILL=");
+		    strcat(benvstr, optarg);
+		    putenv(benvstr);
 		    //printf("Reset fill_ratio env. variable to %d\n", c);
 	            break;
-	  case 'g': c = atoi(optarg); 
-	            sprintf(str, "%d", c);
-		    setenv("N_GEMM", str, 1);
+	  case 'g': // c = atoi(optarg); 
+	            // sprintf(str, "%d", c);
+		    // setenv("N_GEMM", str, 1);
+		    genvstr = (char*) malloc((8+strlen(optarg))*sizeof(char));
+		    strcpy(genvstr, "N_GEMM=");
+		    strcat(genvstr, optarg);
+		    putenv(genvstr);		  
 		    //printf("Reset min_gemm_gpu_offload env. variable to %d\n", c);
 	            break;
 	  case 's': *nrhs = atoi(optarg); 
diff --git a/config.sh b/config.sh
new file mode 100644
index 00000000..ec0662ff
--- /dev/null
+++ b/config.sh
@@ -0,0 +1,16 @@
+ module unload darshan
+ module swap craype-haswell craype-mic-knl
+ module load cray-fftw
+ module load gsl
+ module load cray-hdf5-parallel
+ module load idl
+ module load craype-hugepages2M
+ module unload cray-libsci
+ cd SRC
+ make clean
+ make
+ cd ../EXAMPLE
+ make clean
+ make 
+
+ 
diff --git a/make.inc.in b/make.inc.in
index 3f06155e..4ac92ea9 100644
--- a/make.inc.in
+++ b/make.inc.in
@@ -8,17 +8,19 @@
 #
 #  Creation date:   March 1, 2016	version 5.0.0
 #
-#  Modified:	    
+#  Modified:	    October 13, 2017    version 5.2.1
 #		    
 #
 ############################################################################
 #
 #  The name of the libraries to be created/linked to
 #
-SuperLUroot	= ${CMAKE_INSTALL_PREFIX}
-DSUPERLULIB   	= $(SuperLUroot)/SRC/${PROJECT_NAME_LIB_EXPORT}
+SuperLUroot = ${CMAKE_INSTALL_PREFIX}
+DSUPERLULIB = $(SuperLUroot)/SRC/${PROJECT_NAME_LIB_EXPORT}
+INCLUDEDIR  = $(SuperLUroot)/@CMAKE_INSTALL_INCLUDEDIR@
 
-LIBS		= $(DSUPERLULIB) ${BLAS_LIB_EXPORT} ${PARMETIS_LIB_EXPORT}
+LIBS 	    = $(DSUPERLULIB) ${BLAS_LIB_EXPORT} ${PARMETIS_LIB_EXPORT}
+LIBS 	    += ${COMBBLAS_LIB_EXPORT}
 
 #
 #  The archiver and the flag(s) to use when building archive (library)
@@ -30,11 +32,16 @@ RANLIB       = @CMAKE_RANLIB@
 
 CC           = @CMAKE_C_COMPILER@
 CFLAGS 	     = @CMAKE_C_FLAGS_RELEASE@ @CMAKE_C_FLAGS@
-# CFLAGS       += -D_LONGINT   ## 64-bit integer
-# CFLAGS       += -D${DirDefs}
-# CFLAGS       += @COMPILE_DEFINITIONS@ 
+												
+#CFLAGS      += -D${DirDefs}
+# CFLAGS     += @COMPILE_DEFINITIONS@ 
+CXX          = @CMAKE_CXX_COMPILER@
+CXXFLAGS     = @CMAKE_CXX_FLAGS_RELEASE@ @CMAKE_CXX_FLAGS@
+XSDK_INDEX_SIZE=@XSDK_INDEX_SIZE@
+HAVE_PARMETIS=@HAVE_PARMETIS@
+HAVE_COMBBLAS=@HAVE_COMBBLAS@
 NOOPTS       = -O0
 FORTRAN	     = @CMAKE_Fortran_COMPILER@
 
-LOADER       = $(CC)
-LOADOPTS     = -Wl,-rpath,@OpenMP_CXX_FLAGS@ @CMAKE_EXE_LINKER_FLAGS@
+LOADER       = @LOADER@
+LOADOPTS     = @CMAKE_EXE_LINKER_FLAGS@
diff --git a/make.inc_knl b/make.inc_knl
new file mode 100644
index 00000000..86490209
--- /dev/null
+++ b/make.inc_knl
@@ -0,0 +1,63 @@
+############################################################################
+#
+#  Program:         SuperLU_DIST
+#
+#  Module:          make.inc for Cori KNL
+#
+#  Purpose:         Top-level Definitions
+#
+#  Creation date:   March 1, 2016	version 5.0.0
+#
+#  Modified:	    
+#		    
+#
+############################################################################
+#
+#  The name of the libraries to be created/linked to
+#
+SuperLUroot	= /global/homes/l/liuyangz/Cori/my_research/github/superlu_dist_trisolve_done_knl_02_21_2018
+#DSUPERLULIB   	= $(SuperLUroot)/lib/libsuperlu_dist.so
+DSUPERLULIB   	= $(SuperLUroot)/lib/libsuperlu_dist_knl_trisolve.a
+# DSUPERLULIB   	= $(SuperLUroot)/lib/libsuperlu_dist_haswell.a
+
+VTUNE_DIR 	= /usr/common/software/intel/vtune_amplifier_xe_2016.3.0.463186
+
+LIBS		= $(DSUPERLULIB)
+LIBS += /global/homes/x/xiaoye/Cori/KNL/lib/parmetis-4.0.3/static-build/Linux-x86_64/libparmetis/libparmetis.a \
+   /global/homes/x/xiaoye/Cori/KNL/lib/parmetis-4.0.3/static-build/Linux-x86_64/libmetis/libmetis.a
+ 
+#     		   -L${VTUNE_DIR}/lib64 -littnotify
+
+# MKL can be used with Intel mpiicc compiler
+# -mkl 
+
+# Following are shared libraries
+#LIBS += /project/projectdirs/sparse/xiaoye/Carl-test/libparmetis.so \
+#     /project/projectdirs/sparse/xiaoye/Carl-test/libmetis.so \
+
+#
+#  The archiver and the flag(s) to use when building archive (library)
+#  If your system has no ranlib, set RANLIB = echo.
+#
+ARCH         = /usr/bin/ar
+ARCHFLAGS    = cr
+RANLIB       = /usr/bin/ranlib
+
+# CC           = mpiicc
+CC           = cc
+#CFLAGS 	     = -Ofast -DUSE_VENDOR_BLAS -DDEBUGlevel=0 -std=c11 -fpic -DPRNTlevel=1 -qopenmp -I/global/homes/x/xiaoye/Cori/KNL/lib/parmetis-4.0.3/include -I/global/homes/x/xiaoye/Cori/KNL/lib/parmetis-4.0.3/ -I${VTUNE_DIR}/include
+CFLAGS       = -g -dynamic -DUSE_VENDOR_BLAS -DDEBUGlevel=0 -std=c11 -fpic -DPRNTlevel=1 -qopenmp -I/global/homes/x/xiaoye/Cori/KNL/lib/parmetis-4.0.3/include -I/global/homes/x/xiaoye/Cori/KNL/lib/parmetis-4.0.3/ -I${VTUNE_DIR}/include
+CFLAGS += -align   # Steve Leak suggested this
+CFLAGS += -qopt-report=5 ##-DPROFlevel=1
+CFLAGS += -fno-alias
+NOOPTS       = -O0
+# FORTRAN	     = ifort
+FORTRAN	     = ftn
+CPP          =/opt/cray/pe/craype/2.5.12/bin/CC
+CPPFLAGS     = -Ofast -std=c++11 -DAdd_ 											 
+
+LOADER       = $(CPP)
+# LOADOPTS     = -Wl,-rpath,/global/homes/x/xiaoye/Carl/SuperLU_DIST_5.1.0/lib -qopenmp
+LOADOPTS     = -qopenmp
+# LIBS += -Wl,--start-group ${MKLROOT}/lib/mic/libmkl_intel_lp64.a ${MKLROOT}/lib/mic/libmkl_intel_thread.a ${MKLROOT}/lib/mic/libmkl_core.a -Wl,--end-group -liomp5 -lpthread -lm -ldl
+LOADOPTS += -mkl  #-craype-verbose