[Rcpp-devel] RInside and MPI master slave model proper usage
Dirk Eddelbuettel
edd at debian.org
Sat Jan 19 23:52:56 CET 2013
On 19 January 2013 at 17:44, Nicholas Pezolano wrote:
| Maybe I did not describe my question/problem clearly,
|
| I've seen the examples and you would call
|
| RInside R(int argc, int argv); after int main and mpi_init, and all nodes
| should have an embedded R instance.
It works with MPI, and hence works the other way around.
A controller/master node lauches all the worker nodes. Then __each worker
node launches its own R instance via RInside__.
How you get data and programs there is up for you. I like packages for many
reasons, they work here too.
And sorry, I am in the middle of a few other things and cannot debug what you
have described in what is after all incomplete (or I missed it) and not
reproducible.
Dirk
| However the problem with using MPI and RInside in the above master slave model
| is the RInside objects/R instance will not be callable from the do_work
| function.
|
| for instance the following code snippet works in the examples with mpi but
| produces an error when used in a function or with the master slave model.
|
| do_work(.......){
|
| R["data"] = data;
| R.parseEvalQ();
| R.parseEvalQ(garch);
|
| }
|
| test.cpp: In function ‘void do_work(std::string, int&)’:
| test.cpp:278:4: error: expected primary-expression before ‘[’ token
| test.cpp:279:4: error: expected primary-expression before ‘.’ token
| test.cpp:280:4: error: expected primary-expression before ‘.’ token
|
| The error is because the function doesn't have access to the the R object
|
|
| On Sat, Jan 19, 2013 at 5:14 PM, Dirk Eddelbuettel <edd at debian.org> wrote:
|
|
| On 19 January 2013 at 16:29, Nicholas Pezolano wrote:
| | Hi I'm using Rinside with MPI and testing out a simple master slave
| model.
| |
| | heres a basic example of what i'm trying to do.
| | http://www.lam-mpi.org/tutorials/one-step/ezstart.php
| |
| | The function do_work(unit_of_work_t work){ ..... gets run across all
| the
| | N nodes until the M units of work are done.
| | I am calling many R functions from C++, as well as loading R
| libraries,
| | in the do_work function.
| |
| | Is there a way to load R once on each of the slaves and have the do_work
| | function have access to RInside for every iteration of the master-slave
| model?
| |
| | Do I have to run RInside R(argc, argv); for
| every-time
| | the function do_work is called by the master?
| |
| | Is there a way to free the R instance or is this handled automatically?
| or is
| | there a better approach?
|
| Do you know that there is a working example, contributed in the early days
| by
| Jianping Hua?
|
| All this assumes that you are a tad familiar with basic MPI. The model used
| here uses straight MPI from C (or C++), and each (worker/slave) node just
| happens to do its work with R.
|
| There are other models, notably Rmpi and you are not forced to use RInside
| in
| order to deploy MPI with R. If you have basic questions, r-sig-hpc may be
| a
| better place.
|
| Dirk
|
|
|
| --
| Dirk Eddelbuettel | edd at debian.org | http://dirk.eddelbuettel.com
|
|
|
|
| --
| Nicholas Pezolano
| Department of Applied Math & Statistics
| State University of New York at Stony Brook
|
--
Dirk Eddelbuettel | edd at debian.org | http://dirk.eddelbuettel.com
More information about the Rcpp-devel
mailing list