From ripley at stats.ox.ac.uk  Thu Nov 21 09:58:28 2013
From: ripley at stats.ox.ac.uk (Prof Brian Ripley)
Date: Thu, 21 Nov 2013 08:58:28 +0000
Subject: [Rd] Running R embedded in an mpiexec spawned process - Fatal
 error: you must specify '--save', '--no-save' or '--vanilla'
In-Reply-To: <528DB37F.9090508@stats.ox.ac.uk>
References: <9657E5F32D0E5F4599B08172DA6CE8810C95F119@exmbx02-cdc.nexus.csiro.au>
	<528DB37F.9090508@stats.ox.ac.uk>
Message-ID: <528DCB34.7030502@stats.ox.ac.uk>

You can test my guess by

mpiexec -n 1 R --interactive

Works for me ....


On 21/11/2013 07:17, Prof Brian Ripley wrote:
> On 21/11/2013 06:39, Jean-Michel.Perraud at csiro.au wrote:
>> I'd like someone familiar with the R options initialization to comment
>> on a difference of behavior within/without mpiexec
>
>> I have a (.NET) application with embedded R that is proven to run in a
>> single process:
>>
>>      ./Sample1.exe
>>
>> on a Debian Linux with R 3.0.2
>>
>> Running the same code with mpiexec, it fails at the R engine
>> initialization:
>>
>>      mpiexec -n 1 ./Sample1.exe
>>      Fatal error: you must specify '--save', '--no-save' or '--vanilla'
>>
>> -------------------------------------------------------------------------
>>
>> The behavior is actually reproducible with the straight R
>>      mpiexec -n 1 R
>>      Fatal error: you must specify '--save', '--no-save' or '--vanilla'
>>
>> -------------------------------------------------------------------------
>> The following is working:
>>      mpiexec -n 1 R --no-save
>>
>> However in my Sample1 application, I do set up R init options that
>> should be suitable AFAIK:
>>
>>              rEngine = REngine.CreateInstance("RDotNet");
>>              StartupParameter rStartParams = new StartupParameter
>>              {
>>                  Quiet = true,
>>                  SaveAction = StartupSaveAction.NoSave,
>>                  Slave = false,
>>                  Interactive = true,
>>                  Verbose = false,
>>                  LoadInitFile = true,
>>                  LoadSiteFile = true,
>>                  RestoreAction = StartupRestoreAction.NoRestore,
>>                  NoRenviron = false
>>              };
>>              rEngine.Initialize(rStartParams); // calls the R API
>> R_SetParams, then setup_Rmainloop
>>
>>
>> I gather that the following is hit in src/R-3.0.2/src/unix/system.c,
>> in the function Rf_initialize_R:
>>
>>      if (!R_Interactive && Rp->SaveAction != SA_SAVE &&
>>     Rp->SaveAction != SA_NOSAVE)
>>     R_Suicide(_("you must specify '--save', '--no-save' or
>> '--vanilla'"));
>>
>> I don't understand why it would complain if spawned by mpiexec and
>> fine otherwise.
>
> Most likely because the way you are running R is considered to be batch
> use, and R_Interactive is false.  You've mixed up two scenarios here:
> one an embedded use where we don't have all the code, and mpiexec.  In
> the mpiexec case, it is likely that stdin is not a ptty.
>
>> I do not have a suitable debugging environment to step through a R
>> with debug symbols, and no stack trace is given as console output.
>> As an aside, the same code (barring platform specifics) works on Windows.
>
> Deciding if Rterm is interactive is clearly done differently on an OS
> without pttys.
>
>


-- 
Brian D. Ripley,                  ripley at stats.ox.ac.uk
Professor of Applied Statistics,  http://www.stats.ox.ac.uk/~ripley/
University of Oxford,             Tel:  +44 1865 272861 (self)
1 South Parks Road,                     +44 1865 272866 (PA)
Oxford OX1 3TG, UK                Fax:  +44 1865 272595



[Rd] Running R embedded in an mpiexec spawned process - Fatal error: you must specify '--save', '--no-save' or '--vanilla'
Prof Brian Ripley