[petsc-users] Using Petsc-Matlab engine on a cluster

Kaustubh Khedkar kkhedkar9879 at sdsu.edu
Thu Nov 12 01:48:40 CST 2020


Hi Barry,
I used the branch barry/2020-11-10/add-matlab-engine-host. Now it appears that the matlab engine starts can start on any node but it is not able to execute any matlab script. If I revert back to PETSc 3.13.5 the head compute node is able to execute the MATLAB script. See the following error (load_mpc_parameters.m is a MATLAB script that the code is trying to execute):



Starting Matlab engine...

Matlab engine started
Storing variables in Matlab workspace...

Undefined function or variable 'load_mpc_parameters'.
Error using save
Variable 'a' not found.
[0]PETSC ERROR: --------------------- Error Message --------------------------------------------------------------
[0]PETSC ERROR: Error in external library
[0]PETSC ERROR: Unable to get array a from matlab
[0]PETSC ERROR: See https://www.mcs.anl.gov/petsc/documentation/faq.html for trouble shooting.
[0]PETSC ERROR: Petsc Development GIT revision: unknown  GIT Date: unknown
[0]PETSC ERROR: ./main3d on a linux-opt named node35 by kkhedkar Thu Nov 12 02:39:47 2020
[0]PETSC ERROR: Configure options --CC=/home/kkhedkar/sfw/mpich3.3_mellanox/3.3/bin/mpicc --CXX=/home/kkhedkar/sfw/mpich3.3_mellanox/3.3/bin/mpicxx --FC=/home/kkhedkar/sfw/mpich3.3_mellanox/3.3/bin/mpif90 --COPTFLAGS=-O3 --CXXOPTFLAGS=-O3 --FOPTFLAGS=-O3 --PETSC_ARCH=linux-opt --with-debugging=0 --download-hypre=1 --with-x=0 --download-fblaslapack=1 --with-matlab-dir=/nas/app/MATLAB/matlab2019a/ --with-matlab-engine=1 --with-matlab-engine-dir=/nas/app/MATLAB/matlab2019a/extern/engines/
[0]PETSC ERROR: #1 PetscMatlabEngineGetArray() line 407 in /home/kkhedkar/sfw/petsc_matlab_host_fix/petsc/src/sys/classes/matlabengine/matlab.c
Error using save
Variable 'h' not found.
[0]PETSC ERROR: #2 PetscMatlabEngineGetArray() line 407 in /home/kkhedkar/sfw/petsc_matlab_host_fix/petsc/src/sys/classes/matlabengine/matlab.c
Error using save
Variable 'mpc_start_time' not found.
[0]PETSC ERROR: #3 PetscMatlabEngineGetArray() line 407 in /home/kkhedkar/sfw/petsc_matlab_host_fix/petsc/src/sys/classes/matlabengine/matlab.c
Error using save
Variable 'sample_size' not found.

sample_size = 0
[0]PETSC ERROR: #4 PetscMatlabEngineGetArray() line 407 in /home/kkhedkar/sfw/petsc_matlab_host_fix/petsc/src/sys/classes/matlabengine/matlab.c
Error using save
Variable 'dt_sampling' not found.
Storing up past excitation force samples every 0 time-steps.

[0]PETSC ERROR: #5 PetscMatlabEngineGetArray() line 407 in /home/kkhedkar/sfw/petsc_matlab_host_fix/petsc/src/sys/classes/matlabengine/matlab.c
IBRedundantInitializer:  Deallocating initialization data.


My code is using Petsc matlab engine in this way (“master” is the hostname of the head node where MATLAB is licensed):

if(SAMRAI_MPI::getRank() == 0)
        {
            std::cout << "\nStarting Matlab engine...\n" << std::endl;
            PetscMatlabEngineCreate(PETSC_COMM_SELF, "master", &(mpc->mengine));
            std::cout << "Matlab engine started" << std::endl;
            PetscMatlabEngineEvaluate(mpc->mengine,"clc;  clear all;  close all;  addpath([cd,'/MPC_matlab_code'])");

            std::cout << "Storing variables in Matlab workspace...\n" << std::endl;
            PetscMatlabEngineEvaluate(mpc->mengine,"global hydro wave;   wave.H_wave = %f ;   wave.Tp = %f;  m = %f;", input_db->getDouble("HEIGHT"), input_db->getDouble("TIME_PERIOD"), input_db->getDouble("MASS"));

            PetscMatlabEngineEvaluate(mpc->mengine,"load_mpc_parameters;   calculate_mpc_matrices");

            PetscMatlabEngineGetArray(mpc->mengine, 1, 1, &(mpc->m_plus_Ainf), "a");

            PetscMatlabEngineGetArray(mpc->mengine, 1, 1, &(mpc->dt_controller), "h");

            PetscMatlabEngineGetArray(mpc->mengine, 1, 1, &(mpc->mpc_start_time), "mpc_start_time");

            PetscScalar sample_size;
            PetscMatlabEngineGetArray(mpc->mengine, 1, 1, &sample_size, "sample_size");
            mpc->sample_size = int(sample_size);
            std::cout << "\nsample_size = " << mpc->sample_size << std::endl;

            mpc->F_past.resize(mpc->sample_size);
            mpc->t_past.resize(mpc->sample_size);

            double dt = input_db->getDouble("DT_MAX");
            mpc->initial_position = input_db->getDouble("ZCOM");
            mpc->current_position = mpc->initial_position;

            PetscScalar dt_sampling;
            PetscMatlabEngineGetArray(mpc->mengine, 1, 1, &dt_sampling, "dt_sampling");

            mpc->sampling_interval = int(dt_sampling / dt);

            std::cout << "Storing up past excitation force samples every " << mpc->sampling_interval << " time-steps.\n" << std::endl;
        }



From: Barry Smith <bsmith at petsc.dev>
Date: Tuesday, November 10, 2020 at 5:22 PM
To: Kaustubh Khedkar <kkhedkar9879 at sdsu.edu>
Cc: "petsc-users at mcs.anl.gov" <petsc-users at mcs.anl.gov>
Subject: Re: [petsc-users] Using Petsc-Matlab engine on a cluster


   In the git branch  barry/2020-11-10/add-matlab-engine-host   I have added the option -matlab_engine_host hostname

   Note this does require you have ssh access to hostname from where your PETSc program is running which may require setting up some ssh files

   Good luck

   Barry



On Nov 9, 2020, at 5:35 PM, Kaustubh Khedkar <kkhedkar9879 at sdsu.edu<mailto:kkhedkar9879 at sdsu.edu>> wrote:

Hello,
I am using PETSc with Matlab engine. I have built an application that uses Matlab engine through PETSc interface. I am trying to run this application on a cluster which has Matlab installed on a network drive (nas drive). I have made sure that I am able to access Matlab using my university details on the cluster (by activating Matlab license through Mathworks.com<http://mathworks.com/> account). I am also able to run this application using mpirun on the head node (master) which starts the Matlab engine but if I try to run this application using slurm on compute node then the Matlab engine does not start. I have also confirmed that if I login into one of the compute nodes and do a mpirun the Matlab engine does not start there. If I try to launch Matlab on a compute node it asks for Matlab license which the compute node is unable to activate possibly because it is not connected to the internet directly.

Is there a way start matlab engine on the head node through Petsc interface even though the application is running on compute nodes or is there any other work around this issue?


Thanks,
Kaustubh Khedkar

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


More information about the petsc-users mailing list