Here is the updated example on using clocks to make sure both tasks are up
and running in their respective places before executing.

public class Hello {

     public static def main(args:Rail[String]) {

         val iter:Long = Long.parse(args(0));
         val hello = new Hello();
         val start:Long = System.currentTimeMillis();
         val each = iter/Place.MAX_PLACES;
         val c = Clock.make();
         finish {
             for (var i:Long = 0; i < Place.MAX_PLACES; ++i) {
                 at (Place(i)) async clocked(c) {c.advance();
hello.test(each); }
             }
             c.drop();
         }
         val stop:Long = System.currentTimeMillis();
         Console.OUT.println(  here + ": time consumed = "
                             + (stop - start) + " ms.");

     }

     private def test(val iter:Long) {

         for(var i:Long=0;i<iter;i++) {

             //Console.OUT.println("test,"+
here);

         }

     }
}





On 22 August 2014 13:56, Josh Milthorpe <josh.miltho...@gmail.com> wrote:

> Hi Wang,
>
> using 'async' is the correct way to create an asynchronous activity, and 'at
> (p) async' is the correct way to create a remote activity.  So your code
> is already correctly parallelized for two places.
>
> The reason your output is always in the same order is the buffering of
> output streams.  Calling Console.OUT.println(...) at a place performs a
> buffered write to stdout for that place.  When the buffer is flushed it is
> sent to place 0 (or the launcher process) and combined in the stdout for
> the program.  In your code, no place ever completely fills its buffer, so
> all the buffers are flushed in order when the program terminates.
>
> If you want to force the buffer to be flushed, use
>    Console.OUT.flush();
> after each call to println.  However, please be aware that X10 does not
> guarantee any ordering of output between activities or places.  Therefore
> the interleaving of output may still be different from the order in which
> the activities call Console.OUT.println().  If you do need to enforce
> ordering between activities, use a synchronization construct such as finish
> or clocks.
>
> Cheers,
>
> Josh
>
>
> On 22 August 2014 02:54, 王辰 <wang...@163.com> wrote:
>
>> Hello everyone, i'm new to x10.
>> I have a little problem about parallelization, here's my code:
>>
>> public class Hello {
>>
>>     public static def main(args:Rail[String]) {
>>
>>          val hello = new Hello();
>>
>>          at (Place(1)) async hello.test();
>>
>>         at (Place(0)) async hello.test();
>>
>>     }
>>
>>      private def test() {
>>
>>         for(var i:Int=0n;i<100n;i++) {
>>
>>             Console.OUT.println("test,"+here);
>>
>>         }
>>
>>     }
>>
>>
>> I thought the output should not be the same if i run it several time.
>> But it was always the same:
>>
>> Place(0)
>> Place(0)
>> ...
>> Place(0)
>> Place(0)
>> Place(1)
>> Place(1)
>> ...
>> Place(1)
>> Place(1)
>>
>> Can anyone tell me is it so and what should i do to implement real
>> parallelization?
>>
>> Thanks.
>>
>>
>>
>>
>> ------------------------------------------------------------------------------
>> Slashdot TV.
>> Video for Nerds.  Stuff that matters.
>> http://tv.slashdot.org/
>> _______________________________________________
>> X10-users mailing list
>> X10-users@lists.sourceforge.net
>> https://lists.sourceforge.net/lists/listinfo/x10-users
>>
>>
>
>
> ------------------------------------------------------------------------------
> Slashdot TV.
> Video for Nerds.  Stuff that matters.
> http://tv.slashdot.org/
> _______________________________________________
> X10-users mailing list
> X10-users@lists.sourceforge.net
> https://lists.sourceforge.net/lists/listinfo/x10-users
>
>
------------------------------------------------------------------------------
Slashdot TV.  
Video for Nerds.  Stuff that matters.
http://tv.slashdot.org/
_______________________________________________
X10-users mailing list
X10-users@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/x10-users

Reply via email to