Re: [Rd] Parallel R expression evaluations

2013-10-21 Thread peter dalgaard

On Oct 21, 2013, at 02:24 , Simon Urbanek wrote:

> Jai,
> 
> On Oct 19, 2013, at 1:37 AM, JaiReddy wrote:
> 
>> Thanks Simon.
>> 
>> May I know how R works if two expressions come at the same time for
>> evaluation. When I debug my case I found that issue was found with indexed
>> values of protected items. 
>> 
>> As R is single threaded engine, I just want to know how does R behave when
>> 2nd expression comes for parsing and evaluation even before 1st expression
>> evaluation does complete?
>> 
> 
> As I said, no API calls may be performed in parallel, that includes parsing 
> and evaluation. Typically, R is run in a sequential loop: read, parse, eval, 
> print so anything that is not processed is blocked until the loop is back to 
> reading. However, given that R can be called from arbitrary front-ends, it's 
> really up to the front-end to decide what to do - as long as it serializes 
> the calls appropriately.
> 

Things like GUI callbacks can get evaluated while other evaluation is in 
progress. In that case, a stack discipline is maintained, i.e. expression1 does 
not continue until expression2 is evaluated, but expression3 may arrive and 
block the other two. This isn't really much different from what happens if 
expression1 encounters an object that requires lazy evaluation. If the 
intermittent calls have no side effects, or at least keep them within a 
well-defined universe, the interrupted call should be unaffected.

However, this will not happen while expression1 is evaluating C code, only when 
the R evaluator is called. 

-pd


> Cheers,
> Simon
> 
> 
>> 
>> Thanks
>> Jai
>> 
>> 
>> 
>> --
>> View this message in context: 
>> http://r.789695.n4.nabble.com/Parallel-R-expression-evaluations-tp4678352p4678587.html
>> Sent from the R devel mailing list archive at Nabble.com.
>> 
>> __
>> R-devel@r-project.org mailing list
>> https://stat.ethz.ch/mailman/listinfo/r-devel
>> 
> 
> __
> R-devel@r-project.org mailing list
> https://stat.ethz.ch/mailman/listinfo/r-devel

-- 
Peter Dalgaard, Professor,
Center for Statistics, Copenhagen Business School
Solbjerg Plads 3, 2000 Frederiksberg, Denmark
Phone: (+45)38153501
Email: pd@cbs.dk  Priv: pda...@gmail.com

__
R-devel@r-project.org mailing list
https://stat.ethz.ch/mailman/listinfo/r-devel


Re: [Rd] Parallel R expression evaluations

2013-10-20 Thread Simon Urbanek
Jai,

On Oct 19, 2013, at 1:37 AM, JaiReddy wrote:

> Thanks Simon.
> 
> May I know how R works if two expressions come at the same time for
> evaluation. When I debug my case I found that issue was found with indexed
> values of protected items. 
> 
> As R is single threaded engine, I just want to know how does R behave when
> 2nd expression comes for parsing and evaluation even before 1st expression
> evaluation does complete?
> 

As I said, no API calls may be performed in parallel, that includes parsing and 
evaluation. Typically, R is run in a sequential loop: read, parse, eval, print 
so anything that is not processed is blocked until the loop is back to reading. 
However, given that R can be called from arbitrary front-ends, it's really up 
to the front-end to decide what to do - as long as it serializes the calls 
appropriately.

Cheers,
Simon


> 
> Thanks
> Jai
> 
> 
> 
> --
> View this message in context: 
> http://r.789695.n4.nabble.com/Parallel-R-expression-evaluations-tp4678352p4678587.html
> Sent from the R devel mailing list archive at Nabble.com.
> 
> __
> R-devel@r-project.org mailing list
> https://stat.ethz.ch/mailman/listinfo/r-devel
> 

__
R-devel@r-project.org mailing list
https://stat.ethz.ch/mailman/listinfo/r-devel


Re: [Rd] Parallel R expression evaluations

2013-10-19 Thread JaiReddy
Thanks Simon.

May I know how R works if two expressions come at the same time for
evaluation. When I debug my case I found that issue was found with indexed
values of protected items. 

As R is single threaded engine, I just want to know how does R behave when
2nd expression comes for parsing and evaluation even before 1st expression
evaluation does complete?


Thanks
Jai



--
View this message in context: 
http://r.789695.n4.nabble.com/Parallel-R-expression-evaluations-tp4678352p4678587.html
Sent from the R devel mailing list archive at Nabble.com.

__
R-devel@r-project.org mailing list
https://stat.ethz.ch/mailman/listinfo/r-devel


Re: [Rd] Parallel R expression evaluations

2013-10-18 Thread Simon Urbanek
On Oct 16, 2013, at 9:57 AM, JaiReddy wrote:

> Hi all,
> 
> I am using R-3.0.1 under Linux platform to embed R into my C++ code.
> 
> I am facing an error while executing more than 1 R-expressions parallelly.
> 

R is not thread-safe so you cannot execute any API calls in parallel. Also you 
can use the embedded init only once. If you break any of these rules, the 
behavior is undefined (and everything comes down crashing).

Cheers,
Simon



> I am executing round(X) and abs(X) parallelly on a set of 50 input rows 
> which resulted in segmentation fault after getting the following errors.
> 
> Error: unprotect_ptr: pointer not found
> Error: argument to 'findVar' is not an environment
> 
> I am using the following code snippet for initializing R, parsing and
> evaluation of R expression
> 
> // For initialization
> 
>int res= Rf_initEmbeddedR(R_argc, (char**)R_argv);
> 
> // For parsing and evaluation
> 
>SEXP cmd1= Rf_mkChar(rscript);
>   SEXP cmdSexp, cmdexpr, sresult = R_NilValue;
>   ParseStatus status;
>   R_len_t i=0;
> 
>   PROTECT(cmdSexp = Rf_allocVector(STRSXP, 1));
>   SET_STRING_ELT(cmdSexp, 0, cmd1);
>   // parsing vector for R expressions
>   cmdexpr = PROTECT(R_ParseVector(cmdSexp, -1, &status, R_NilValue));
>   if (status != PARSE_OK) {
>   UNPROTECT(2);
>   // error handling
>   return;
>   }
>   
>   for(i = 0; i < Rf_length(cmdexpr); i++)
>   {
>   int error;
>   sresult = R_tryEval(VECTOR_ELT(cmdexpr, i), R_GlobalEnv, 
> &error);   // R
> expression evaluation 
>   if(error)   // checking for error
>   {
>   // error handling
>   return;
>   }
>   }
>   UNPROTECT(2);
> 
> 
> I wonder if R supports parallel evaluations within a single session. I have
> seen parallel evaluations of R using Rserve package. As I am trying to
> overcome the overhead (using Rserve) in creating new connection for each
> evaluation, here I am trying using embeded R.
> 
> I tried Rf_endEmbeddedR each time after one evaluation and initializing R
> for the next set of evaluation. Even that did't work.
> 
> Please suggest me possible solution if any.
> 
> Thanks in advance.
> 
> Jai
> 
> 
> 
> 
> 
> --
> View this message in context: 
> http://r.789695.n4.nabble.com/Parallel-R-expression-evaluations-tp4678352.html
> Sent from the R devel mailing list archive at Nabble.com.
> 
> __
> R-devel@r-project.org mailing list
> https://stat.ethz.ch/mailman/listinfo/r-devel
> 

__
R-devel@r-project.org mailing list
https://stat.ethz.ch/mailman/listinfo/r-devel


[Rd] Parallel R expression evaluations

2013-10-17 Thread JaiReddy
Hi all,

I am using R-3.0.1 under Linux platform to embed R into my C++ code.

I am facing an error while executing more than 1 R-expressions parallelly.

I am executing round(X) and abs(X) parallelly on a set of 50 input rows 
which resulted in segmentation fault after getting the following errors.

Error: unprotect_ptr: pointer not found
Error: argument to 'findVar' is not an environment

I am using the following code snippet for initializing R, parsing and
evaluation of R expression

// For initialization

int res= Rf_initEmbeddedR(R_argc, (char**)R_argv);

// For parsing and evaluation

SEXP cmd1= Rf_mkChar(rscript);
SEXP cmdSexp, cmdexpr, sresult = R_NilValue;
ParseStatus status;
R_len_t i=0;

PROTECT(cmdSexp = Rf_allocVector(STRSXP, 1));
SET_STRING_ELT(cmdSexp, 0, cmd1);
// parsing vector for R expressions
cmdexpr = PROTECT(R_ParseVector(cmdSexp, -1, &status, R_NilValue));
if (status != PARSE_OK) {
UNPROTECT(2);
// error handling
return;
}

for(i = 0; i < Rf_length(cmdexpr); i++)
{
int error;
sresult = R_tryEval(VECTOR_ELT(cmdexpr, i), R_GlobalEnv, 
&error);   // R
expression evaluation 
if(error)   // checking for error
{
// error handling
return;
}
}
UNPROTECT(2);


I wonder if R supports parallel evaluations within a single session. I have
seen parallel evaluations of R using Rserve package. As I am trying to
overcome the overhead (using Rserve) in creating new connection for each
evaluation, here I am trying using embeded R.

I tried Rf_endEmbeddedR each time after one evaluation and initializing R
for the next set of evaluation. Even that did't work.

Please suggest me possible solution if any.

Thanks in advance.

Jai
 




--
View this message in context: 
http://r.789695.n4.nabble.com/Parallel-R-expression-evaluations-tp4678352.html
Sent from the R devel mailing list archive at Nabble.com.

__
R-devel@r-project.org mailing list
https://stat.ethz.ch/mailman/listinfo/r-devel