[R] RMPI Question

Martin Morgan mtmorgan at fhcrc.org
Mon Sep 8 20:08:06 CEST 2008


Hi Tolga --

tolga.i.uzuner at jpmorgan.com writes:

> Dear R Users,
>
> I have a relatively simple rmpi question. 
>
> My configation is:
> - R version 2.7.2
> - rmpi 0.5-6
> - Deino MPI 1.1.0
> - Windows XP SP2
>
> After succesfully spawning slaves, I am trying to assign values to 
> variables in the environment of each slave and run some simple calcs. This 
> appears to fail, as below: my assignment of value "1" to variable "a" 
> appears to come back OK, but then when I try and retrieve it, it fails. 
>
> Could someone please point out what I might be doing wrong ? 
>
> I spawn 8 slaves below, but have deleted the output from slaves 3-7 just 
> to save space and make the output easier to read.
>
>> mpi.spawn.Rslaves() 
>         8 slaves are spawned successfully. 0 failed.
> master (rank 0, comm 1) of size 9 is running on: Personal 
> slave1 (rank 1, comm 1) of size 9 is running on: Personal 
> slave2 (rank 2, comm 1) of size 9 is running on: Personal 
> ...
> slave8 (rank 8, comm 1) of size 9 is running on: Personal 
>> mpi.remote.exec(paste("I am",mpi.comm.rank(),"of",mpi.comm.size())) 
> $slave1
> [1] "I am 1 of 9"
>
> $slave2
> [1] "I am 2 of 9"
> ...
> $slave8
> [1] "I am 8 of 9"
>
>> mpi.remote.exec(eval(assign("a","1")))
> $slave1
> [1] "1"
>
> $slave2
> [1] "1"
> ...
> $slave8
> [1] "1"
>

mpi.remote.exec can be thought of as evaluating each command in a new
environment. so once mpi.remote.exec returns, the environment (and any
side effects like assignment) disappear.

You could:

> mpi.remote.exec(a <<- 2)
  X1 X2
1  2  2
> mpi.remote.exec(a)
  X1 X2
1  2  2

the <<- forces assignment to the first 'a' found in the scope of the
invoking function, or in .GlobalEnv if no variable 'a' currently
exists. mpi.remote.exec(a) looks for a variable named a, first in the
environment where the remote request is being evaluated, and
eventually in the global environment. The <<- is dangerous because you
could accidentally clobber other variables named 'a' that exist before
the global environment is found. I think mpi.remote.exec is meant to
be used to evaluate a command that has no side effects (like variable
assignmnet).

On the other hand,

> mpi.bcast.cmd(a <- 1)
> mpi.remote.exec(a)
  X1 X2
1  1  1

Here mpi.bcast.cmd is arranging to evaluate the expression in the
global environment, and so this is more like interacting at the
command prompt. mpi.remote.exec 'works' because R does not find the
variable 'a' until it reaches the global environment. A more reliable
solution would be

> mpi.remote.exec(get("a", .GlobalEnv))
  X1 X2
1  1  1

Martin


>> mpi.remote.exec(eval(assign("b","2")))
> $slave1
> [1] "2"
>
> $slave2
> [1] "2"
> ...
> $slave8
> [1] "2"
>
>> mpi.remote.exec(a)
> $slave1
> [1] "Error in eval(expr, envir, enclos) : object \"a\" not found\n"
> attr(,"class")
> [1] "try-error"
>
> $slave2
> [1] "Error in eval(expr, envir, enclos) : object \"a\" not found\n"
> attr(,"class")
> [1] "try-error"
> ...
> $slave8
> [1] "Error in eval(expr, envir, enclos) : object \"a\" not found\n"
> attr(,"class")
> [1] "try-error"
>
>
> Thanks in advance,
> Tolga
>
> Generally, this communication is for informational purposes only
> and it is not intended as an offer or solicitation for the purchase
> or sale of any financial instrument or as an official confirmation
> of any transaction. In the event you are receiving the offering
> materials attached below related to your interest in hedge funds or
> private equity, this communication may be intended as an offer or
> solicitation for the purchase or sale of such fund(s).  All market
> prices, data and other information are not warranted as to
> completeness or accuracy and are subject to change without notice.
> Any comments or statements made herein do not necessarily reflect
> those of JPMorgan Chase & Co., its subsidiaries and affiliates.
>
> This transmission may contain information that is privileged,
> confidential, legally privileged, and/or exempt from disclosure
> under applicable law. If you are not the intended recipient, you
> are hereby notified that any disclosure, copying, distribution, or
> use of the information contained herein (including any reliance
> thereon) is STRICTLY PROHIBITED. Although this transmission and any
> attachments are believed to be free of any virus or other defect
> that might affect any computer system into which it is received and
> opened, it is the responsibility of the recipient to ensure that it
> is virus free and no responsibility is accepted by JPMorgan Chase &
> Co., its subsidiaries and affiliates, as applicable, for any loss
> or damage arising in any way from its use. If you received this
> transmission in error, please immediately contact the sender and
> destroy the material in its entirety, whether in electronic or hard
> copy format. Thank you.
> Please refer to http://www.jpmorgan.com/pages/disclosures for
> disclosures relating to UK legal entities.
> 	[[alternative HTML version deleted]]
>
> ______________________________________________
> R-help at r-project.org mailing list
> https://stat.ethz.ch/mailman/listinfo/r-help
> PLEASE do read the posting guide http://www.R-project.org/posting-guide.html
> and provide commented, minimal, self-contained, reproducible code.

-- 
Martin Morgan
Computational Biology / Fred Hutchinson Cancer Research Center
1100 Fairview Ave. N.
PO Box 19024 Seattle, WA 98109

Location: Arnold Building M2 B169
Phone: (206) 667-2793



More information about the R-help mailing list