@@ -15,6 +15,7 @@ import (
1515 "github.com/sylabs/singularity-mpi/internal/pkg/impi"
1616 "github.com/sylabs/singularity-mpi/internal/pkg/job"
1717 "github.com/sylabs/singularity-mpi/pkg/buildenv"
18+ "github.com/sylabs/singularity-mpi/pkg/container"
1819 "github.com/sylabs/singularity-mpi/pkg/implem"
1920 "github.com/sylabs/singularity-mpi/pkg/mpi"
2021 "github.com/sylabs/singularity-mpi/pkg/syexec"
@@ -63,18 +64,11 @@ func NativeGetError(j *job.Job, sysCfg *sys.Config) string {
6364 return j .ErrBuffer .String ()
6465}
6566
66- // NativeSubmit is the function to call to submit a job through the native job manager
67- func NativeSubmit (j * job.Job , env * buildenv.Info , sysCfg * sys.Config ) (syexec.SyCmd , error ) {
68- var sycmd syexec.SyCmd
69-
70- if j .App .BinPath == "" {
71- return sycmd , fmt .Errorf ("application binary is undefined" )
72- }
73-
67+ func prepareMPISubmit (sycmd * syexec.SyCmd , j * job.Job , env * buildenv.Info , sysCfg * sys.Config ) error {
7468 var err error
7569 sycmd .BinPath , err = mpi .GetPathToMpirun (j .HostCfg , env )
7670 if err != nil {
77- return sycmd , err
71+ return err
7872 }
7973 if j .NP > 0 {
8074 sycmd .CmdArgs = append (sycmd .CmdArgs , "-np" )
@@ -83,7 +77,7 @@ func NativeSubmit(j *job.Job, env *buildenv.Info, sysCfg *sys.Config) (syexec.Sy
8377
8478 mpirunArgs , err := mpi .GetMpirunArgs (j .HostCfg , env , & j .App , j .Container , sysCfg )
8579 if err != nil {
86- return sycmd , fmt .Errorf ("unable to get mpirun arguments: %s" , err )
80+ return fmt .Errorf ("unable to get mpirun arguments: %s" , err )
8781 }
8882 if len (mpirunArgs ) > 0 {
8983 sycmd .CmdArgs = append (sycmd .CmdArgs , mpirunArgs ... )
@@ -98,6 +92,37 @@ func NativeSubmit(j *job.Job, env *buildenv.Info, sysCfg *sys.Config) (syexec.Sy
9892 sycmd .Env = append ([]string {"LD_LIBRARY_PATH=" + newLDPath }, os .Environ ()... )
9993 sycmd .Env = append ([]string {"PATH=" + newPath }, os .Environ ()... )
10094
95+ return nil
96+ }
97+
98+ func prepareStdSubmit (sycmd * syexec.SyCmd , j * job.Job , env * buildenv.Info , sysCfg * sys.Config ) error {
99+ sycmd .BinPath = sysCfg .SingularityBin
100+ sycmd .CmdArgs = container .GetDefaultExecCfg ()
101+ sycmd .CmdArgs = append (sycmd .CmdArgs , j .Container .Path , j .App .BinPath )
102+
103+ return nil
104+ }
105+
106+ // NativeSubmit is the function to call to submit a job through the native job manager
107+ func NativeSubmit (j * job.Job , env * buildenv.Info , sysCfg * sys.Config ) (syexec.SyCmd , error ) {
108+ var sycmd syexec.SyCmd
109+
110+ if j .App .BinPath == "" {
111+ return sycmd , fmt .Errorf ("application binary is undefined" )
112+ }
113+
114+ if implem .IsMPI (j .HostCfg ) {
115+ err := prepareMPISubmit (& sycmd , j , env , sysCfg )
116+ if err != nil {
117+ return sycmd , fmt .Errorf ("unable to prepare MPI job: %s" , err )
118+ }
119+ } else {
120+ err := prepareStdSubmit (& sycmd , j , env , sysCfg )
121+ if err != nil {
122+ return sycmd , fmt .Errorf ("unable to prepare MPI job: %s" , err )
123+ }
124+ }
125+
101126 j .GetOutput = NativeGetOutput
102127 j .GetError = NativeGetError
103128
0 commit comments