fslaborg / RProvider

Access R packages from F#
http://fslab.org/RProvider/
Other
235 stars 69 forks source link

Parallel processing fails #151

Open evelinag opened 9 years ago

evelinag commented 9 years ago

I tried calling R from a parallel loop but it fails with Error: unprotect_ptr: pointer not found, the sequential version works without problems.

#r "packages/R.NET.Community/lib/net40/RDotNet.dll"
#r "packages/RProvider/lib/net40/RProvider.dll"
#r "packages/RProvider/lib/net40/RProvider.Runtime.dll"
open RProvider
open RProvider.stats
open RDotNet

// this works
[| 0..10 |]
|> Array.map (fun _ -> R.rnorm(10) )

// this fails
[| 0..10 |]
|> Array.Parallel.map (fun _ -> R.rnorm(10) )
mae1st0rm commented 8 years ago

Hi! I have the similar question: Is it possible to call RProvider functions in parallel? For example cal R.lm from different Threads/Tasks (PLINQ) simultaneously?

tpetricek commented 8 years ago

As far as I understand it, the underlying R engine can only be called from a single thread - so only a single thread can access it (and additionally, I think it also starts doing odd things when you call it from multiple threads, even when the calls are not concurrent).

In principle, I suspect that you can create multiple instances of the R.NET engine (@jmp75 would probably know), but this is not something that we are currently exposing in the R type provider (you cannot really currently initialize the R provider multiple times in a single process).