[petsc-dev] Extending Petsc

Jose David Bermeol jbermeol at purdue.edu
Thu Sep 12 12:50:22 CDT 2013


Well maybe I didn't explain myself right. I'm creating a linear solver(mat class like SuperLu) that uses intel MKL pardiso function. So I don't want to use MKL through  blas/lapack, neither to be depended if a uses blas/lapack with MKL or not. Thats why I want to compile Petcs with MKL. I'm going to check blas/lapack to see how it does it. Attached is the configure.log. So any ideas or a different strategy are welcome.

 Thanks



----- Original Message -----
From: "William D Nystrom" <wdn at lanl.gov>
To: "Barry Smith" <bsmith at mcs.anl.gov>, "Jose David Bermeol" <jbermeol at purdue.edu>
Cc: petsc-dev at mcs.anl.gov, "William D Nystrom" <wdn at lanl.gov>
Sent: Thursday, September 12, 2013 12:12:39 PM
Subject: RE: [petsc-dev] Extending Petsc

Jose,

I don't really understand why it is necessary to make an MKL package for PETSc.  I use MKL with
PETSc all the time.  I configure PETSc to use MKL for blas/lapack with a configure option like the
following:

  configure \
      --PETSC_DIR=$PETSC_DIR \
      --PETSC_ARCH=$PETSC_ARCH \
      --download-cmake=yes \
      --with-mpi=1 \
      --with-mpi-dir=$MPI_ROOT \
      --with-blas-lapack-dir=$MKL_ROOT \
      <...>

A consequence of this is that the MKL libraries wind up on the link line when building PETSc
examples.  The link line info is also in the make.log file from a successful build of PETSc.  If MKL
is on the link line, then it seems you should be able to resolve the other symbols that your
application might use from MKL with no problems - unless your application needs to use
different libraries from the MKL suite that what the PETSc build system selected.  But I think
there would be other ways to deal with that besides making an MKL package for PETSc.  I
think PETSc may currently in at least some situations force the use of the sequential version
of MKL, especially if you are using the PETSc threadcomm package.  There are probably ways
to get around that if you need to use the threaded version of MKL.

Also, whenever I have these sorts of problems that require getting help from the PETSc team,
I always send a gzipped copy of configure.log and make.log if the build got that far.  It is
difficult for them to do much without that info.

Best regards,

Dave

--
Dave Nystrom
LANL HPC-5
Phone: 505-667-7913
Email: wdn at lanl.gov
Smail: Mail Stop B272
       Group HPC-5
       Los Alamos National Laboratory
       Los Alamos, NM 87545


________________________________________
From: petsc-dev-bounces at mcs.anl.gov [petsc-dev-bounces at mcs.anl.gov] on behalf of Barry Smith [bsmith at mcs.anl.gov]
Sent: Thursday, September 12, 2013 9:53 AM
To: Jose David Bermeol
Cc: petsc-dev at mcs.anl.gov
Subject: Re: [petsc-dev] Extending Petsc

   We absolutely need configure.log to debug this. All the information about what variants were tried and why they failed are listed in configure.log


On Sep 12, 2013, at 10:41 AM, Jose David Bermeol <jbermeol at purdue.edu> wrote:

> Hi, now I'm trying to compile Petsc with mkl, not just for BLAS/LAPACK functions, but for all functionalities of mkl. What I did until now is to add the file mkl.py to config/PETSc/packages, with the following code:
>
> import PETSc.package
>
> class Configure(PETSc.package.NewPackage):
>  def __init__(self, framework):
>    PETSc.package.NewPackage.__init__(self, framework)
>    self.functions    = ['set_default_options']
>    self.includes     = ['mkl.h']
>    self.liblist      = [['libmkl_intel_lp64.so', 'libmkl_intel_thread.so', 'libmkl_core.so']]
>    self.double       = 1
>    self.complex      = 1
>    #self.worksonWindows   = 1
>    #self.downloadonWindows= 1
>    return
>
> I base the implementation in papi.py and SuperLu.py. Then I'run
>
> ./configure --with-mpi-dir=$MPI_HOME --with-mkl-lib=$MKL_ROOT/lib/intel64 --with-mkl-include=$MKL_ROOT/include
>
> And it throws the following error:
>
> *******************************************************************************
>         UNABLE to CONFIGURE with GIVEN OPTIONS    (see configure.log for details):
> -------------------------------------------------------------------------------
> --with-mkl-lib=['PATH/lib/intel64'] and
> --with-mkl-include=['PATH/include'] did not work
> *******************************************************************************
>
> the trace in configure.log is not clear, and I'm not sure if the problem is because all the libraries are shared object libraries (.so) and not static(.a). So maybe you have ideas of why this is happening.
>
> Thanks
>
> ----- Original Message -----
> From: "Barry Smith" <bsmith at mcs.anl.gov>
> To: "Jose David Bermeol" <jbermeol at purdue.edu>
> Cc: petsc-dev at mcs.anl.gov
> Sent: Wednesday, September 11, 2013 8:27:23 PM
> Subject: Re: [petsc-dev] Extending Petsc
>
>
> On Sep 11, 2013, at 5:23 PM, Jose David Bermeol <jbermeol at purdue.edu> wrote:
>
>> So a couple of more question:
>>
>> 1. My code in Petsc and my package depends on intel mkl, I was thinking to compile Petsc to use mkl using --with-mkl-dir flag, do I have to add something in the setupDependencies() method, and because mkl is not in config.packages how can I do that?
>
>   You copy something like superlu.py to mkl.py and edit that.
>
>    PETSc automatically loads up all the files in the config/PETSc/packages directory so you don't have to list your new file anywhere in setup dependencies or anything
>
>>
>> 2. My package is already installed, so do I have to code the install method?
>
>    Nope
>
>>
>> Thanks
>>
>> ----- Original Message -----
>> From: "Barry Smith" <bsmith at mcs.anl.gov>
>> To: "Jose David Bermeol" <jbermeol at purdue.edu>
>> Cc: petsc-dev at mcs.anl.gov
>> Sent: Wednesday, September 11, 2013 5:25:36 PM
>> Subject: Re: [petsc-dev] Extending Petsc
>>
>>
>>  You need to put a file in config/PETSc/packages   with the name package.py (name of your package) you can, for example, copy superlu.py and edit it to match your package. This is the file that will make sure that PETSC_HAVE_PACKAGE is defined.
>>
>>  Barry
>>
>>
>>
>> On Sep 11, 2013, at 4:21 PM, Jose David Bermeol <jbermeol at purdue.edu> wrote:
>>
>>> Hi, right now I'm working in add a new solver for seq aij matrices. What I have until this point are the following files inside the folder aij/seq/:
>>>
>>>  - package/       folder with my code
>>>  - package.c      a initial implementation of the solver.
>>>  - makefile       is basically a copy of the make file in superlu, but using the name of my package instead of "superlu".
>>>
>>> Also I add to petscmat.h my solver type. Then I run ./configure with the flag --with-package-dir=PATH_TO_PACKAGE. The thing is that when I'm compiling the variable PETSC_HAVE_PACKAGE doesn't show up, I guess that means the variable is 0 or something else happens, and my code is not going to be compile. So if you could give some ideas of why Petsc doesn't compile my code.
>>>
>>>
>>> Thanks
>>>
-------------- next part --------------
A non-text attachment was scrubbed...
Name: configure.log
Type: text/x-log
Size: 2309594 bytes
Desc: not available
URL: <http://lists.mcs.anl.gov/pipermail/petsc-dev/attachments/20130912/69f8c16d/attachment.bin>


More information about the petsc-dev mailing list