[petsc-users] Calling MATLAB code within a parallel C/C++ code

Amneet Bhalla mail2amneet at gmail.com
Thu Jun 11 14:47:24 CDT 2020


Ok, I'm able to call and use MATLAB functionality from PETSc. If I'm
understanding correctly, when PetscMatlabEngineCreate() is called, a
MATLAB workspace is created, that persists until PetscMatlabEngineDestroy()
is called. PETSc can access/put/manipulate variables in this workspace, and
can also call several MATLAB scripts and MATLAB functions, and subsequently
access/manipulate new data created in the existing workspace. Is there
something else that I should keep in mind to take advantage of Engine
functionality or to avoid pitfalls. Also are there any limitations on
MATLAB toolboxes that cannot be used via the Engine framework? I don't
anticipate using any graphical interface functionality via MatlabEngine.



On Tue, Jun 9, 2020 at 4:26 PM Barry Smith <bsmith at petsc.dev> wrote:

>
>   Great, yes you should not need the DYLIB paths
>
>   The branch is off master but what you can do is copy the
> config/BuildSystem/config/MatlabEngine.py to your PETSc 3.12.2 version and
> the configure
> should work (it won't automatically run the test case but you can test it
> manually).
>
>    Barry
>
>
> On Jun 9, 2020, at 5:48 PM, Amneet Bhalla <mail2amneet at gmail.com> wrote:
>
> That worked!
>
> amneetb at Amneets-MBP:~/Softwares/PETSc-Gitlab/petsc-matlab$ make
> PETSC_DIR=/Users/amneetb/Softwares/PETSc-Gitlab/petsc-matlab
> PETSC_ARCH=darwin-dbg check
> Running check examples to verify correct installation
> Using PETSC_DIR=/Users/amneetb/Softwares/PETSc-Gitlab/petsc-matlab and
> PETSC_ARCH=darwin-dbg
> C/C++ example src/snes/tutorials/ex19 run successfully with 1 MPI process
> C/C++ example src/snes/tutorials/ex19 run successfully with 2 MPI processes
> C/C++ example src/snes/tutorials/ex19 run successfully with hypre
> Fortran example src/snes/tutorials/ex5f run successfully with 1 MPI process
> C/C++ example src/vec/vec/tutorials/ex31 run successfully with Matlab
> engine
> Completed test examples
>
> Should I remove DYLIB paths from .profile since these are now baked in the
> linker?
>
> Also, Is this branch based-off of latest master? I'm currently using PETSc
> v3.12.2 for IBAMR. Anything close to this version should work for me.
>
>
> On Tue, Jun 9, 2020 at 3:17 PM Barry Smith <bsmith at petsc.dev> wrote:
>
>>
>>    I tried including the directories into my DYLD environmental variables
>> and it didn't work; I am not sure why. This might be why
>> https://stackoverflow.com/questions/35568122/why-isnt-dyld-library-path-being-propagated-here
>>
>>    Anyways try my branch and that should work.
>>
>>    Barry
>>
>>
>>
>> On Jun 9, 2020, at 5:09 PM, Amneet Bhalla <mail2amneet at gmail.com> wrote:
>>
>>
>> That's where I also found it. Thanks, Sanjay!
>>
>> (This path is included in my .profile file
>>
>> export DYLD_FALLBACK_LIBRARY_PATH=
>> /Applications/MATLAB_R2019b.app/bin/maci64:/Applications/MATLAB_R2019b.app/sys/os/maci64:
>> $DYLD_FALLBACK_LIBRARY_PATH
>>
>> export DYLD_LIBRARY_PATH=
>> /Applications/MATLAB_R2019b.app/bin/maci64:/Applications/MATLAB_R2019b.app/sys/os/maci64:
>> $DYLD_LIBRARY_PATH
>>
>>
>>
>> )
>>
>> Do I need to tell PETSc about this path as well? Something like:
>>
>>
>> --with-matlab-engine-lib=/Applications/MATLAB_R2019b.app/bin/maci64/libeng.dylib
>>
>>
>> On Tue, Jun 9, 2020 at 2:56 PM Sanjay Govindjee <s_g at berkeley.edu> wrote:
>>
>>> Try looking in:
>>>
>>> $(MLROOT)/bin/maci64
>>>
>>> where MLROOT = /Applications/MATLAB_R2019a.app or the like
>>>
>>>
>>>
>>> On 6/9/20 2:51 PM, Junchao Zhang wrote:
>>>
>>> Find recursively where is libeng.dylib under
>>> /Applications/MATLAB_R2019b.app/extern/engines/
>>>
>>> --Junchao Zhang
>>>
>>>
>>> On Tue, Jun 9, 2020 at 4:27 PM Amneet Bhalla <mail2amneet at gmail.com>
>>> wrote:
>>>
>>>> Forgot to mention that configure found the following about MATLAB
>>>>
>>>> Matlab:
>>>>   Includes: -I/Applications/MATLAB_R2019b.app/extern/include
>>>>   /Applications/MATLAB_R2019b.app
>>>> MatlabEngine:
>>>>   Library:  -L/Applications/MATLAB_R2019b.app/bin/maci64
>>>> -L/Applications/MATLAB_R2019b.app/extern/lib/maci64 -leng -lmex -lmx -lmat
>>>> -lut -licudata -licui18n -licuuc
>>>>
>>>> On Tue, Jun 9, 2020 at 2:20 PM Amneet Bhalla <mail2amneet at gmail.com>
>>>> wrote:
>>>>
>>>>> Do these additional configure flags for MATLAB look OK?
>>>>>
>>>>> --with-matlab=1 --with-matlab-dir=/Applications/MATLAB_R2019b.app
>>>>> --with-matlab-engine=1
>>>>> --with-matlab-engine-dir=/Applications/MATLAB_R2019b.app/extern/engines/
>>>>>
>>>>>
>>>>>
>>>>> With this configuration make compiled files like:
>>>>>
>>>>>           CC darwin-dbg/obj/sys/classes/viewer/impls/matlab/vmatlab.o
>>>>>           CC
>>>>> darwin-dbg/obj/sys/classes/viewer/impls/matlab/ftn-custom/zvmatlabf.o
>>>>>           CC darwin-dbg/obj/sys/classes/matlabengine/matlab.o
>>>>>           CC darwin-dbg/obj/sys/classes/matlabengine/ftn-auto/matlabf.o
>>>>>           CC
>>>>> darwin-dbg/obj/sys/classes/matlabengine/ftn-custom/zmatlabf.o
>>>>>           CC darwin-dbg/obj/vec/pf/impls/matlab/cmatlab.o
>>>>>           CC darwin-dbg/obj/vec/vec/utils/matlab/gcreatev.o
>>>>>
>>>>> make[2]: Leaving directory
>>>>> `/Users/amneetb/Softwares/PETSc-Gitlab/PETSc'
>>>>> BEGINNING TO COMPILE MATLAB INTERFACE
>>>>> Building with 'Xcode with Clang'.
>>>>> ld: warning: cannot export hidden symbol _mexfilerequiredapiversion
>>>>> from c_mexapi_version.o
>>>>>
>>>>> ld: warning: cannot export hidden symbol _mexfilerequiredapiversion
>>>>> from c_mexapi_version.o
>>>>>
>>>>> MEX completed successfully.
>>>>> Building with 'Xcode with Clang'.
>>>>> ld: warning: cannot export hidden symbol _mexfilerequiredapiversion
>>>>> from c_mexapi_version.o
>>>>>
>>>>> ld: warning: cannot export hidden symbol _mexfilerequiredapiversion
>>>>> from c_mexapi_version.o
>>>>>
>>>>> MEX completed successfully.
>>>>> Building with 'Xcode with Clang'.
>>>>> ld: warning: cannot export hidden symbol _mexfilerequiredapiversion
>>>>> from c_mexapi_version.o
>>>>>
>>>>> MEX completed successfully.
>>>>> Building with 'Xcode with Clang'.
>>>>> ld: warning: cannot export hidden symbol _mexfilerequiredapiversion
>>>>> from c_mexapi_version.o
>>>>>
>>>>> ld: warning: cannot export hidden symbol _mexfilerequiredapiversion
>>>>> from c_mexapi_version.o
>>>>>
>>>>> MEX completed successfully.
>>>>>
>>>>>
>>>>> However, make check gives error
>>>>>
>>>>> amneetb at Amneets-MBP:~/Softwares/PETSc-Gitlab/PETSc$ make
>>>>> PETSC_DIR=/Users/amneetb/Softwares/PETSc-Gitlab/PETSc PETSC_ARCH=darwin-dbg
>>>>> check
>>>>> Running test examples to verify correct installation
>>>>> Using PETSC_DIR=/Users/amneetb/Softwares/PETSc-Gitlab/PETSc and
>>>>> PETSC_ARCH=darwin-dbg
>>>>> Possible error running C/C++ src/snes/examples/tutorials/ex19 with 1
>>>>> MPI process
>>>>> See http://www.mcs.anl.gov/petsc/documentation/faq.html
>>>>> dyld: Library not loaded: @rpath/libeng.dylib
>>>>>   Referenced from:
>>>>> /Users/amneetb/Softwares/PETSc-Gitlab/PETSc/src/snes/examples/tutorials/./ex19
>>>>>   Reason: image not found
>>>>>
>>>>>
>>>>> ===================================================================================
>>>>> =   BAD TERMINATION OF ONE OF YOUR APPLICATION PROCESSES
>>>>> =   PID 14057 RUNNING AT Amneets-MBP
>>>>> =   EXIT CODE: 6
>>>>> =   CLEANING UP REMAINING PROCESSES
>>>>> =   YOU CAN IGNORE THE BELOW CLEANUP MESSAGES
>>>>>
>>>>> ===================================================================================
>>>>> YOUR APPLICATION TERMINATED WITH THE EXIT STRING: Abort trap: 6
>>>>> (signal 6)
>>>>> This typically refers to a problem with your application.
>>>>> Please see the FAQ page for debugging suggestions
>>>>> Possible error running C/C++ src/snes/examples/tutorials/ex19 with 2
>>>>> MPI processes
>>>>> See http://www.mcs.anl.gov/petsc/documentation/faq.html
>>>>> dyld: Library not loaded: @rpath/libeng.dylib
>>>>>   Referenced from:
>>>>> /Users/amneetb/Softwares/PETSc-Gitlab/PETSc/src/snes/examples/tutorials/./ex19
>>>>>   Reason: image not found
>>>>> dyld: Library not loaded: @rpath/libeng.dylib
>>>>>   Referenced from:
>>>>> /Users/amneetb/Softwares/PETSc-Gitlab/PETSc/src/snes/examples/tutorials/./ex19
>>>>>   Reason: image not found
>>>>>
>>>>>
>>>>> ===================================================================================
>>>>> =   BAD TERMINATION OF ONE OF YOUR APPLICATION PROCESSES
>>>>> =   PID 14062 RUNNING AT Amneets-MBP
>>>>> =   EXIT CODE: 6
>>>>> =   CLEANING UP REMAINING PROCESSES
>>>>> =   YOU CAN IGNORE THE BELOW CLEANUP MESSAGES
>>>>>
>>>>> ===================================================================================
>>>>> YOUR APPLICATION TERMINATED WITH THE EXIT STRING: Abort trap: 6
>>>>> (signal 6)
>>>>> This typically refers to a problem with your application.
>>>>> Please see the FAQ page for debugging suggestions
>>>>> 1,5c1,17
>>>>> < lid velocity = 0.0016, prandtl # = 1., grashof # = 1.
>>>>> <   0 SNES Function norm 0.0406612
>>>>> <   1 SNES Function norm 4.12227e-06
>>>>> <   2 SNES Function norm 6.098e-11
>>>>> < Number of SNES iterations = 2
>>>>> ---
>>>>> > dyld: Library not loaded: @rpath/libeng.dylib
>>>>> >   Referenced from:
>>>>> /Users/amneetb/Softwares/PETSc-Gitlab/PETSc/src/snes/examples/tutorials/./ex19
>>>>> >   Reason: image not found
>>>>> > dyld: Library not loaded: @rpath/libeng.dylib
>>>>> >   Referenced from:
>>>>> /Users/amneetb/Softwares/PETSc-Gitlab/PETSc/src/snes/examples/tutorials/./ex19
>>>>> >   Reason: image not found
>>>>> >
>>>>> >
>>>>> ===================================================================================
>>>>> > =   BAD TERMINATION OF ONE OF YOUR APPLICATION PROCESSES
>>>>> > =   PID 14072 RUNNING AT Amneets-MBP
>>>>> > =   EXIT CODE: 6
>>>>> > =   CLEANING UP REMAINING PROCESSES
>>>>> > =   YOU CAN IGNORE THE BELOW CLEANUP MESSAGES
>>>>> >
>>>>> ===================================================================================
>>>>> > YOUR APPLICATION TERMINATED WITH THE EXIT STRING: Abort trap: 6
>>>>> (signal 6)
>>>>> > This typically refers to a problem with your application.
>>>>> > Please see the FAQ page for debugging suggestions
>>>>> /Users/amneetb/Softwares/PETSc-Gitlab/PETSc/src/snes/examples/tutorials
>>>>> Possible problem with ex19 running with hypre, diffs above
>>>>> =========================================
>>>>> Possible error running Fortran example
>>>>> src/snes/examples/tutorials/ex5f with 1 MPI process
>>>>> See http://www.mcs.anl.gov/petsc/documentation/faq.html
>>>>> dyld: Library not loaded: @rpath/libeng.dylib
>>>>>   Referenced from:
>>>>> /Users/amneetb/Softwares/PETSc-Gitlab/PETSc/src/snes/examples/tutorials/./ex5f
>>>>>   Reason: image not found
>>>>>
>>>>>
>>>>> ===================================================================================
>>>>> =   BAD TERMINATION OF ONE OF YOUR APPLICATION PROCESSES
>>>>> =   PID 14211 RUNNING AT Amneets-MBP
>>>>> =   EXIT CODE: 6
>>>>> =   CLEANING UP REMAINING PROCESSES
>>>>> =   YOU CAN IGNORE THE BELOW CLEANUP MESSAGES
>>>>>
>>>>> ===================================================================================
>>>>> YOUR APPLICATION TERMINATED WITH THE EXIT STRING: Abort trap: 6
>>>>> (signal 6)
>>>>> This typically refers to a problem with your application.
>>>>> Please see the FAQ page for debugging suggestions
>>>>> Completed test examples
>>>>>
>>>>>
>>>>> I have added the following paths in my .profile and sourced it before
>>>>> make all and make check
>>>>>
>>>>> export DYLD_FALLBACK_LIBRARY_PATH=
>>>>> /Applications/MATLAB_R2019b.app/bin/maci64:/Applications/MATLAB_R2019b.app/sys/os/maci64:
>>>>> $DYLD_FALLBACK_LIBRARY_PATH
>>>>>
>>>>> export DYLD_LIBRARY_PATH=
>>>>> /Applications/MATLAB_R2019b.app/bin/maci64:/Applications/MATLAB_R2019b.app/sys/os/maci64:
>>>>> $DYLD_LIBRARY_PATH
>>>>>
>>>>>
>>>>>
>>>>> On Mon, Jun 8, 2020 at 6:39 PM Barry Smith <bsmith at petsc.dev> wrote:
>>>>>
>>>>>>
>>>>>>   Looks like the tool to list the examples in the manual pages is
>>>>>> broken since it didn't find these other examples, I'll take a look at it.
>>>>>>
>>>>>>   There is also a discussion in the users manual
>>>>>>
>>>>>> $ git grep MatlabEngine | grep ex
>>>>>> src/docs/tex/manual/part2.tex:PetscMatlabEngineCreate(MPI_Comm
>>>>>> comm,char *machine,PetscMatlabEngine *e);
>>>>>> src/docs/tex/manual/part2.tex:PetscMatlabEnginePut(PetscMatlabEngine
>>>>>> e,PetscObject obj);
>>>>>> src/docs/tex/manual/part2.tex:PetscMatlabEngineGet(PetscMatlabEngine
>>>>>> e,PetscObject obj);
>>>>>> src/docs/tex/manual/part2.tex:PetscMatlabEnginePutArray(PetscMatlabEngine
>>>>>> e,int m,int n,PetscScalar *array,char *name);
>>>>>> src/docs/tex/manual/part2.tex:PetscMatlabEngineGetArray(PetscMatlabEngine
>>>>>> e,int m,int n,PetscScalar *array,char *name);
>>>>>>
>>>>>> src/docs/tex/manual/part2.tex:PetscMatlabEngineEvaluate(PetscMatlabEngine,"format",...);
>>>>>> src/docs/tex/manual/part2.tex:PetscMatlabEngineEvaluate(PetscMatlabEngine,"x
>>>>>> = \%g *y + z;",avalue);
>>>>>> src/docs/tex/manual/part2.tex:PetscMatlabEngineGetOutput(PetscMatlabEngine,char
>>>>>> **);
>>>>>>
>>>>>> src/docs/tex/manual/part2.tex:PetscMatlabEnginedPrintOutput(PetscMatlabEngine,FILE*).
>>>>>> src/snes/tutorials/ex5.c:  ierr =
>>>>>> PetscMatlabEnginePut(PETSC_MATLAB_ENGINE_(comm),(PetscObject)localX);CHKERRQ(ierr);
>>>>>> src/snes/tutorials/ex5.c:  ierr =
>>>>>> PetscMatlabEngineEvaluate(PETSC_MATLAB_ENGINE_(comm),"localF=ex5m(localX,%18.16e,%18.16e,%18.16e)",hx,hy,lambda);CHKERRQ(ierr);
>>>>>> src/snes/tutorials/ex5.c:  ierr =
>>>>>> PetscMatlabEngineGet(PETSC_MATLAB_ENGINE_(comm),(PetscObject)localF);CHKERRQ(ierr);
>>>>>> src/sys/tests/ex16.c:static char help[] = "Demonstrates
>>>>>> PetscMatlabEngineXXX()\n";
>>>>>> src/sys/tests/ex16.c:  ierr =
>>>>>> PetscMatlabEngineGetOutput(PETSC_MATLAB_ENGINE_(PETSC_COMM_WORLD),&output);CHKERRQ(ierr);
>>>>>> src/sys/tests/ex16.c:  ierr =
>>>>>> PetscMatlabEngineEvaluate(PETSC_MATLAB_ENGINE_(PETSC_COMM_WORLD),"MPI_Comm_rank");CHKERRQ(ierr);
>>>>>> src/sys/tests/ex16.c:    ierr =
>>>>>> PetscMatlabEngineEvaluate(PETSC_MATLAB_ENGINE_(PETSC_COMM_WORLD),user);CHKERRQ(ierr);
>>>>>> src/vec/vec/tests/ex31.c:static const char help[] = "Demonstrates
>>>>>> PetscMatlabEngineXXX()\n";
>>>>>> src/vec/vec/tests/ex31.c:  ierr =
>>>>>> PetscMatlabEngineGetOutput(PETSC_MATLAB_ENGINE_WORLD,&output);
>>>>>> src/vec/vec/tests/ex31.c:  ierr =
>>>>>> PetscMatlabEngineEvaluate(PETSC_MATLAB_ENGINE_WORLD,"MPI_Comm_rank");
>>>>>> src/vec/vec/tests/ex31.c:  ierr =
>>>>>> PetscMatlabEnginePut(PETSC_MATLAB_ENGINE_WORLD,(PetscObject)x);CHKERRQ(ierr);
>>>>>> src/vec/vec/tests/ex31.c:  ierr =
>>>>>> PetscMatlabEngineEvaluate(PETSC_MATLAB_ENGINE_WORLD,"x = x +
>>>>>> MPI_Comm_rank;\n");
>>>>>> src/vec/vec/tests/ex31.c:  ierr =
>>>>>> PetscMatlabEngineGet(PETSC_MATLAB_ENGINE_WORLD,(PetscObject)x);CHKERRQ(ierr);
>>>>>> src/vec/vec/tests/ex31.c:  ierr =
>>>>>> PetscMatlabEngineEvaluate(PETSC_MATLAB_ENGINE_WORLD,"whos\n");CHKERRQ(ierr);
>>>>>>
>>>>>> On Jun 8, 2020, at 8:26 PM, Amneet Bhalla <mail2amneet at gmail.com>
>>>>>> wrote:
>>>>>>
>>>>>> Great!
>>>>>>
>>>>>> Clicking on some of the functions pointed me to this example
>>>>>> https://www.mcs.anl.gov/petsc/petsc-3.13/src/snes/tutorials/ex5.c.html
>>>>>>
>>>>>> Are there more examples, which are perhaps simpler than the above,
>>>>>> which I can refer to?
>>>>>>
>>>>>> On Mon, Jun 8, 2020 at 5:51 PM Barry Smith <bsmith at petsc.dev> wrote:
>>>>>>
>>>>>>>
>>>>>>>   You should use the PetscMatlabEngine
>>>>>>> https://www.mcs.anl.gov/petsc/petsc-3.13/docs/manualpages/Sys/PetscMatlabEngine.html
>>>>>>>
>>>>>>>   Barry
>>>>>>>
>>>>>>>
>>>>>>> On Jun 8, 2020, at 7:09 PM, Amneet Bhalla <mail2amneet at gmail.com>
>>>>>>> wrote:
>>>>>>>
>>>>>>> Hi Folks,
>>>>>>>
>>>>>>> My parallel application written in C++ (which also uses PETSc
>>>>>>> library for linear solvers) requires calling control and optimization
>>>>>>> toolbox of MATLAB at every time step to get a small number of double
>>>>>>> values. Likewise the MATLAB function will need to know some values from the
>>>>>>> parallel C++ application to return those doubles. I'm wondering if there is
>>>>>>> a recommended way of calling MATLAB from parallel C/C++/Fortran codes, and
>>>>>>> if PETSc has some interface that could be leveraged for this exchange.
>>>>>>>
>>>>>>> Thanks,
>>>>>>> --
>>>>>>> --Amneet
>>>>>>>
>>>>>>>
>>>>>>>
>>>>>>>
>>>>>>>
>>>>>>
>>>>>> --
>>>>>> --Amneet
>>>>>>
>>>>>>
>>>>>>
>>>>>>
>>>>>>
>>>>>
>>>>> --
>>>>> --Amneet
>>>>>
>>>>>
>>>>>
>>>>>
>>>>
>>>> --
>>>> --Amneet
>>>>
>>>>
>>>>
>>>>
>>>
>>
>> --
>> --Amneet
>>
>>
>>
>>
>>
>
> --
> --Amneet
>
>
>
>
>

-- 
--Amneet
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.mcs.anl.gov/pipermail/petsc-users/attachments/20200611/c817959b/attachment-0001.html>


More information about the petsc-users mailing list