This is the complexity with maintaining dependencies (and dependencies of dependencies), and different build systems
- Its not easy to keep the "defaults" in both builds exactly the same. - And its not easy to expose all "variants" or keep the same variants in both builds. - And each pkg has its own issues that prevents some combinations to work or not [or tested combinations vs untested]. This e-mail query has multiple things: - understand "why" the current impl of [spack, petsc] build tools are the way they are. - if they can be improved - and build use cases that you need working - [and subsequently your code working] Addressing them all is not easy - so lets stick with what you need to make progress. For one - we recommend using latest petsc version [i.e 3.21 - not 3.19] - any fixes we have will address the current release. > - spack: ptscotch will always be built without parmetis wrappers, can't turn > on diff --git a/var/spack/repos/builtin/packages/petsc/package.py b/var/spack/repos/builtin/packages/petsc/package.py index b7b1d86b15..ae27ba4c4e 100644 --- a/var/spack/repos/builtin/packages/petsc/package.py +++ b/var/spack/repos/builtin/packages/petsc/package.py @@ -268,9 +268,7 @@ def check_fortran_compiler(self): depends_on("metis@5:~int64", when="@3.8:+metis~int64") depends_on("metis@5:+int64", when="@3.8:+metis+int64") - # PTScotch: Currently disable Parmetis wrapper, this means - # nested disection won't be available thought PTScotch - depends_on("scotch+esmumps~metis+mpi", when="+ptscotch") + depends_on("scotch+esmumps+mpi", when="+ptscotch") depends_on("scotch+int64", when="+ptscotch+int64") depends_on("hdf5@:1.10+mpi", when="@:3.12+hdf5+mpi") Now you can try: spack install petsc~metis+ptscotch ^scotch+metis vs spack install petsc~metis+ptscotch ^scotch~metis [~metis is the default for scotch] Note the following comment in spack/var/spack/repos/builtin/packages/scotch/package.py >>>> # Vendored dependency of METIS/ParMETIS conflicts with standard # installations conflicts("metis", when="+metis") conflicts("parmetis", when="+metis") <<<<< > - classical: ptscotch will always be built with parmetis wrappers, can't seem > to turn off Looks like spack uses cmake build of ptscotch. PETSc uses Makefile interface. It likely doesn't support turning off metis wrappers [without hacks]. So you might either need to hack scotch build via petsc - or just install it separately - and use it with petsc. I see an effort to migrate scotch build in petsc to cmake https://urldefense.us/v3/__https://gitlab.com/petsc/petsc/-/merge_requests/7242/__;!!G_uCfscf7eWS!dL00pokNVI6oaNk_chaSyfI1zWFeTgYA9jbRW6n9YT73s51VwLBuXYc-MAJWEKXr8uBgEFrmhFQ_VJOSlvzW6OA$ https://urldefense.us/v3/__https://gitlab.com/petsc/petsc/-/merge_requests/7495/__;!!G_uCfscf7eWS!dL00pokNVI6oaNk_chaSyfI1zWFeTgYA9jbRW6n9YT73s51VwLBuXYc-MAJWEKXr8uBgEFrmhFQ_VJOS6OuSrPs$ Satish On Wed, 24 Apr 2024, Daniel Stone wrote: > Hi PETSc community, > > I've been looking at using Spack to build PETSc, in particular I need to > disable the default metis/parmetis dependencies and use PTScotch instead, > for our software. > I've had quite a bit of trouble with this - it seems like something in the > resulting build of our simulator ends up badly optimised and an mpi > bottleneck, when I build against > PETSc built with Spack. > > I've been trying to track this down, and noticed this in the PETSc Spack > build recipe: > > # PTScotch: Currently disable Parmetis wrapper, this means > # nested disection won't be available thought PTScotch > depends_on("scotch+esmumps~metis+mpi", when="+ptscotch") > depends_on("scotch+int64", when="+ptscotch+int64") > > > Sure enough - when I compare the build with Spack and a traditional build > with ./configure etc, I see that, in the traditional build, Scotch is > always built with the parmetis wrapper, > but not in the Scotch build. In fact, I'm not sure how to turn off the > parmetis wrapper option for scotch, in the case of a traditional build > (i.e. there doesn't seem to be a flag in the > configure script for it) - which would be a very useful test for me (I can > of course do similar experiments by doing a classical build of petsc > against ptscotch built separately without the > wrappers, etc - will try that). > > Does anyone know why the parmetis wrapper is always disabled in the spack > build options? Is there something about Spack that would prevent it from > working? It's notable - but I might > be missing it - that there's no warning that there's a difference in the > way ptscotch is built between the spack and classical builds: > - classical: ptscotch will always be built with parmetis wrappers, can't > seem to turn off > - spack: ptscotch will always be built without parmetis wrappers, can't > turn on > > Any insight at all would be great, I'm new to Spack and am not super > familiar with the logic that goes into setting up builds for the system. > > Here is the kind of command I give to Spack for PETSc builds, which may > well be less than ideal: > > spack install petsc@3.19.1 ~metis +ptscotch ^hdf5 +fortran +hl > > Separate tiny note: when building with hdf5, I have to ensure that the > fortran flag is set for it, as above. There's a fortran flag for the petsc > module, default true, and a fortran flag for the hdf5 > module, default false. A naive user (i.e. me), will see the fortran flag > for the petsc module, and assume that all dependencies will correspondingly > be built with fortran capability - then see that > hdf5.mod is missing when trying to build their software against petsc. It's > the old "did you forget --with-hdf5-fortran-bindings?" issue, resurrected > for a new build system. > > Thanks, > > Daniel >