Hi All,
I took Igor's advice on using a cell to pass results back to the calling place.
I recoded my function for translating a distarray into a string as follows.
The "boo/hoo" statements are line counters:
public def place_str(): String
{
Console.OUT.println("hoo");
var s : String = "";
//var is mutable
Console.OUT.println("hoo1");
var first : Boolean = true;
//var declaration must include type
Console.OUT.println("place_str "+here.id);
for (pt in a_prefix_sum | here) {
if (first) {
first = false;
}
else {
s += ", ";
}
Console.OUT.println("place_str point = "+pt);
s += a_prefix_sum(pt).toString();
//works because toString is global
}
return s;
}
public def str():String
{
var s : String = "";
//var is mutable
for (p in a_prefix_sum.dist.places()) {
Console.OUT.println("str "+p.id);
val z = new Cell[String](null);
Console.OUT.println("boo");
val h = here;
Console.OUT.println("boo2");
at (p) {
Console.OUT.println("boo3");
val q = place_str();
Console.OUT.println("boo4");
at (h) z.set(q);
Console.OUT.println("boo5");
}
s += z();
if (p.id != (Place.MAX_PLACES - 1)) {
s += ", ";
} //if
Console.OUT.println("s = "+s);
} //for i
return s;
}
I am causing an exception when I call the place_str method from any place other
that place 0. Here is the output:
dhu...@oscnet166 77%> mpirun -np 8 Driver
<...snip>
str 0
boo
boo2
boo3
hoo
hoo1
place_str 0
place_str point = (1)
place_str point = (2)
place_str point = (3)
place_str point = (4)
boo4
boo5
s = 1, 2, 3, 4,
str 1
boo
boo2
boo3
Uncaught exception at place 0: x10.lang.ClassCastException (home==1):
DistPrefixSum{self.home==here}
x10.lang.ClassCastException (home==1): DistPrefixSum{self.home==here}
at x10::lang::Throwable::fillInStackTrace()
Any ideas?
Thanks,
Dave
On Jul 28, 2010, at 8:05 PM, Igor Peshansky wrote:
> Igor Peshansky/Watson/i...@ibmus wrote on 07/28/2010 07:15:02 PM:
>
>> Dave Hudak <[email protected]> wrote on 07/28/2010 02:37:22 PM:
>>
>>> Hi All,
>>>
>>> I am trying to write a class that will do a prefix sum on an array. I
>>> have written the single-place version and a single-place version that
>>> uses multiple activities to compute the sums. I am now trying to
>>> write the distributed version. Both classes are included (I will
>>> eventually write an interface for these classes).
>>>
>>> I have been able to write the constructors and call them without run-
>>> time exceptions occurring. Now, I want to write a function that
>>> returns a single string representation of a dist array. I wrote a
>>> function that should create a string representation of all dist array
>>> elements at a given location (I called it place_str), and then I want
>>> to loop over all places:
>>>
>>> (from DistPrefixSum.x10):
>>>
>>> public def str():String
>>> {
>>> var s : String = ""; //var is mutable
>>> for (var place_id:int=0; place_id<Place.MAX_PLACES; place_id++)
> {
>>> s += at (Place.places(place_id)) place_str();
>>> if (place_id != (Place.MAX_PLACES - 1)) {
>>> s += ", ";
>>> } //if
>>> } //for i
>>> return s;
>>> }
>>>
>>> My error occurs on the at statement:
>>>
>>> dhu...@oscnet166 35%> x10c++ -O -o Driver Driver.x10 PrefixSum.x10
>>> AsyncPrefixSum.x10 DistPrefixSum.x10
>>>
>>
> /Users/dhudak/osc/research/x10/tutorial/examples/GoodPrefixSum/src/DistPrefixSum.
>>> x10:49: Local variable "place_id" is accessed from an inner class or a
>>> closure, and must be declared final or shared.
>>> 1 error.
>>>
>>> Does anyone have any recommendations? Creating a single string from a
>>> dist array of integers is a reduction just like finding the sum or max
>>> of the entries, so I figure its well understood...
>>
>> Dave,
>>
>> This is a bug in the typechecking of at expressions. You can work
> around
>> this by changing the body of the for loop to
>>
>> val z = new Cell[String](null);
>> val h = here;
>> at (Place.places(place_id)) { val q = place_str(); at (h)
> z.set(q);
>> }
>> s += z();
>> if (place_id != (Place.MAX_PLACES - 1)) {
>> s += ", ";
>> } //if
>>
>> The above code is less efficient, but it should work.
>> I've opened a JIRA issue: http://jira.codehaus.org/browse/XTENLANG-1632
> .
>> Please watch that issue for updates on the fix.
>> Igor
>
> Dave,
>
> The fix turned out to be simple. This is now fixed in SVN HEAD (r15224),
> and will be available in the next X10 release (or you can build from SVN
> to pick up the fix).
> Igor
> --
> Igor Peshansky (note the spelling change!)
> IBM T.J. Watson Research Center
> X10: Parallel Productivity and Performance (http://x10-lang.org/)
> XJ: No More Pain for XML's Gain (http://www.research.ibm.com/xj/)
> "I hear and I forget. I see and I remember. I do and I understand" --
> Confucius
>
>
> ------------------------------------------------------------------------------
> The Palm PDK Hot Apps Program offers developers who use the
> Plug-In Development Kit to bring their C/C++ apps to Palm for a share
> of $1 Million in cash or HP Products. Visit us here for more details:
> http://p.sf.net/sfu/dev2dev-palm
> _______________________________________________
> X10-users mailing list
> [email protected]
> https://lists.sourceforge.net/lists/listinfo/x10-users
---
David E. Hudak, Ph.D. [email protected]
Program Director, HPC Engineering
Ohio Supercomputer Center
http://www.osc.edu
------------------------------------------------------------------------------
The Palm PDK Hot Apps Program offers developers who use the
Plug-In Development Kit to bring their C/C++ apps to Palm for a share
of $1 Million in cash or HP Products. Visit us here for more details:
http://p.sf.net/sfu/dev2dev-palm
_______________________________________________
X10-users mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/x10-users