19d310bb7SBarry Smith#!/usr/bin/env python 29d310bb7SBarry Smithfrom __future__ import generators 39d310bb7SBarry Smithimport config.base 49d310bb7SBarry Smithimport os 59d310bb7SBarry Smith 69d310bb7SBarry Smithclass Configure(config.base.Configure): 79d310bb7SBarry Smith def __init__(self, framework): 89d310bb7SBarry Smith config.base.Configure.__init__(self, framework) 99d310bb7SBarry Smith self.headerPrefix = '' 109d310bb7SBarry Smith self.substPrefix = '' 119d310bb7SBarry Smith return 129d310bb7SBarry Smith 139d310bb7SBarry Smith def __str__(self): 149d310bb7SBarry Smith return '' 159d310bb7SBarry Smith 169d310bb7SBarry Smith def setupHelp(self, help): 179d310bb7SBarry Smith import nargs 189d310bb7SBarry Smith help.addArgument('PETSc', '-with-log=<bool>', nargs.ArgBool(None, 1, 'Activate logging code in PETSc')) 1922b6d1caSBarry Smith help.addArgument('PETSc', '-with-threadsafety=<bool>', nargs.ArgBool(None, 0, 'Allow individual threads in PETSc to call PETSc routines')) 209d310bb7SBarry Smith help.addArgument('PETSc', '-with-info=<bool>', nargs.ArgBool(None, 1, 'Activate PetscInfo() (i.e. -info) code in PETSc')) 219d310bb7SBarry Smith help.addArgument('PETSc', '-with-ctable=<bool>', nargs.ArgBool(None, 1, 'Activate CTABLE hashing for certain search functions - to conserve memory')) 22*984ed092SMark Adams help.addArgument('PETSc', '-with-dmlandau-2d=<bool>', nargs.ArgBool(None, 0, 'Enable 2.5D DM Landau, default use full 3D')) 239d310bb7SBarry Smith help.addArgument('PETSc', '-with-fortran-kernels=<bool>', nargs.ArgBool(None, 0, 'Use Fortran for linear algebra kernels')) 2415681d7cSHong Zhang help.addArgument('PETSc', '-with-avx512-kernels=<bool>', nargs.ArgBool(None, 1, 'Use AVX-512 intrinsics for linear algebra kernels when available')) 259d310bb7SBarry Smith help.addArgument('PETSc', '-with-is-color-value-type=<char,short>',nargs.ArgString(None, 'short', 'char, short can store 256, 65536 colors')) 269d310bb7SBarry Smith return 279d310bb7SBarry Smith 289d310bb7SBarry Smith def setupDependencies(self, framework): 299d310bb7SBarry Smith config.base.Configure.setupDependencies(self, framework) 309d310bb7SBarry Smith self.compilers = framework.require('config.compilers', self) 3160da17ecSBarry Smith self.setCompilers = framework.require('config.setCompilers', self) 329d310bb7SBarry Smith self.libraries = framework.require('config.libraries', self) 339d310bb7SBarry Smith self.types = framework.require('config.types', self) 343d744f9eSBarry Smith self.compilerFlags = framework.require('config.compilerFlags', self) 3560da17ecSBarry Smith self.sharedLibraries = framework.require('PETSc.options.sharedLibraries', None) 3660da17ecSBarry Smith self.petscConfigure = framework.require('PETSc.Configure', None) 379d310bb7SBarry Smith return 389d310bb7SBarry Smith 399d310bb7SBarry Smith def configureLibraryOptions(self): 40*984ed092SMark Adams '''Sets PETSC_USE_DEBUG, PETSC_USE_INFO, PETSC_USE_LOG, PETSC_USE_CTABLE, PETSC_USE_DMLANDAU_2D, PETSC_USE_FORTRAN_KERNELS, and PETSC_USE_AVX512_KERNELS''' 419d310bb7SBarry Smith '''Also sets PETSC_AssertAlignx() in Fortran and PETSC_Alignx() in C for IBM BG/P compiler ''' 4222b6d1caSBarry Smith if self.framework.argDB['with-threadsafety']: 43f79c285dSBarry Smith self.addDefine('HAVE_THREADSAFETY',1) 4422b6d1caSBarry Smith self.useThreadSafety = 1 4522b6d1caSBarry Smith else: 4622b6d1caSBarry Smith self.useThreadSafety = 0 4722b6d1caSBarry Smith 4822b6d1caSBarry Smith if self.useThreadSafety and self.framework.argDB['with-log']: 4922b6d1caSBarry Smith raise RuntimeError('Must use --with-log=0 with --with-threadsafety') 5022b6d1caSBarry Smith 51fb33c7d2SBarry Smith if self.useThreadSafety and not ((self.sharedLibraries.useShared and self.setCompilers.dynamicLibraries) or self.framework.argDB['with-single-library']): 5260da17ecSBarry Smith raise RuntimeError('Must use --with-shared-libraries or --with-single-library with --with-threadsafety') 5360da17ecSBarry Smith 549d310bb7SBarry Smith self.useLog = self.framework.argDB['with-log'] 559d310bb7SBarry Smith self.addDefine('USE_LOG', self.useLog) 569d310bb7SBarry Smith 573d744f9eSBarry Smith if self.compilerFlags.debugging: 582e3e7a57SBarry Smith if self.useThreadSafety: 592e3e7a57SBarry Smith raise RuntimeError('Must use --with-debugging=0 with --with-threadsafety') 60f79c285dSBarry Smith self.addDefine('USE_DEBUG',1) 617fca349cSMatthew G. Knepley elif not config.setCompilers.Configure.isIBM(self.framework.getCompiler(), self.log): 629d310bb7SBarry Smith # IBM XLC version 12.1 (BG/Q and POWER) miscompiles PetscMalloc3() 639d310bb7SBarry Smith # by reordering "*(void**)&ptr = x" as though ptr was not modified 649d310bb7SBarry Smith # by this statement. 659d310bb7SBarry Smith self.addDefine('USE_MALLOC_COALESCED',1) 669d310bb7SBarry Smith 679d310bb7SBarry Smith self.useInfo = self.framework.argDB['with-info'] 689d310bb7SBarry Smith self.addDefine('USE_INFO', self.useInfo) 699d310bb7SBarry Smith 709d310bb7SBarry Smith self.useCtable = self.framework.argDB['with-ctable'] 719d310bb7SBarry Smith if self.useCtable: 729d310bb7SBarry Smith self.addDefine('USE_CTABLE', '1') 739d310bb7SBarry Smith 74*984ed092SMark Adams self.useDmLandau2d = self.framework.argDB['with-dmlandau-2d'] 75*984ed092SMark Adams if self.useDmLandau2d: 76*984ed092SMark Adams self.addDefine('USE_DMLANDAU_2D',1) 77*984ed092SMark Adams 789d310bb7SBarry Smith # used in src/mat/impls/sbaij/seq/relax.h 793cafa982SMatthew G. Knepley self.libraries.saveLog() 809d310bb7SBarry Smith if not self.libraries.isBGL(): 819d310bb7SBarry Smith self.addDefine('USE_BACKWARD_LOOP','1') 823cafa982SMatthew G. Knepley self.logWrite(self.libraries.restoreLog()) 839d310bb7SBarry Smith 849d310bb7SBarry Smith self.useFortranKernels = self.framework.argDB['with-fortran-kernels'] 859d310bb7SBarry Smith if not hasattr(self.compilers, 'FC') and self.useFortranKernels: 869d310bb7SBarry Smith raise RuntimeError('Cannot use fortran kernels without a Fortran compiler') 879d310bb7SBarry Smith if self.useFortranKernels: 889d310bb7SBarry Smith self.addDefine('USE_FORTRAN_KERNELS', 1) 899d310bb7SBarry Smith if self.libraries.isBGL(): 909d310bb7SBarry Smith self.addDefine('AssertAlignx(a,b)','call ALIGNX(a,b)') 919d310bb7SBarry Smith else: 929d310bb7SBarry Smith self.addDefine('AssertAlignx(a,b)',' ') 939d310bb7SBarry Smith 94ef4c6e81SRichard Tran Mills self.useAVX512Kernels = self.framework.argDB['with-avx512-kernels'] 95ef4c6e81SRichard Tran Mills if self.useAVX512Kernels: 96ef4c6e81SRichard Tran Mills self.addDefine('USE_AVX512_KERNELS', 1) 97ef4c6e81SRichard Tran Mills 989d310bb7SBarry Smith if self.libraries.isBGL(): 999d310bb7SBarry Smith self.addDefine('Alignx(a,b)','__alignx(a,b)') 1009d310bb7SBarry Smith else: 1019d310bb7SBarry Smith self.addDefine('Alignx(a,b)',' ') 1029d310bb7SBarry Smith return 1039d310bb7SBarry Smith 1049d310bb7SBarry Smith def configureISColorValueType(self): 105569ea7c4SPierre Jolivet '''Sets PETSC_IS_COLORING_VALUE_TYPE, PETSC_MPIU_IS_COLORING_VALUE_TYPE, and PETSC_IS_COLORING_MAX as required by ISColoring''' 1069d310bb7SBarry Smith self.isColorValueType = self.framework.argDB['with-is-color-value-type'] 1079d310bb7SBarry Smith if self.isColorValueType != 'char' and self.isColorValueType != 'short': 1089d310bb7SBarry Smith raise RuntimeError('Incorrect --with-is-color-value-type value specified. Can be either char or short. Specified value is :'+self.isColorValueType) 1099d310bb7SBarry Smith if self.isColorValueType == 'char': 11015a5570dSLisandro Dalcin max_value = 'UCHAR_MAX' 1119d310bb7SBarry Smith mpi_type = 'MPI_UNSIGNED_CHAR' 1126564ec32SJed Brown type_f = 'integer1' 1139d310bb7SBarry Smith else: 11415a5570dSLisandro Dalcin max_value = 'USHRT_MAX' 1159d310bb7SBarry Smith mpi_type = 'MPI_UNSIGNED_SHORT' 1166564ec32SJed Brown type_f = 'integer2' 1179d310bb7SBarry Smith 118569ea7c4SPierre Jolivet self.addDefine('MPIU_IS_COLORING_VALUE_TYPE',mpi_type) 119569ea7c4SPierre Jolivet self.addDefine('IS_COLORING_MAX',max_value) 120569ea7c4SPierre Jolivet self.addDefine('IS_COLORING_VALUE_TYPE',self.isColorValueType) 121569ea7c4SPierre Jolivet self.addDefine('IS_COLORING_VALUE_TYPE_F',type_f) 1229d310bb7SBarry Smith return 1239d310bb7SBarry Smith 1249d310bb7SBarry Smith def configure(self): 1259d310bb7SBarry Smith self.executeTest(self.configureLibraryOptions) 1269d310bb7SBarry Smith self.executeTest(self.configureISColorValueType) 1279d310bb7SBarry Smith return 128