这两天的收获

import x10.util.Random;
import x10.io.Console;

public class Histogram {

  /**
    * Compute the histogram of the array a in the rail b.
    */
    public static def run(a:Array[int](1), b: Rail[int]) {//定义一个数组a元素都是1
 finish
     foreach((i) in a.region) {
        val bin = a(i)% b.length;//a(i)对b的长度求余,存在bin里
        atomic b(bin)++;//
     }
    }//因为bin的值相同,那么这样下来a有几个元素b[bin]就加几,bin的值与b的长度成反比
    public static def main(args:Rail[String]) {
 if (args.length != 2) {
     Console.OUT.println("Usage: Histogram SizeOfArray Buckets");
     System.exit(-1);
        }
 val N = int.parseInt(args(0));//输入两个参数,数组a的长度
 val S=int.parseInt(args(1));//
 val a = Array.make[int](0..N-1, ((i):Point)=> i);
 val b = Rail.makeVar[int](S);//长度为S的rail,每个元素值为0
 //Console.OUT.println(b(12));
 val v = b(0);
 
    var ok:boolean = true;
for (x in b) ok &= (x==v);
if (ok) {
    Console.OUT.println("Test ok.");
} else {
    Console.OUT.println("Test failed.");
 run(a, b);
}
 
    }
}

 

 

Test ok.

 val v = b(0);
  run(a, b);
    var ok:boolean = true;
for (x in b) ok &= (x==v);
if (ok) {
    Console.OUT.println("Test ok.");
} else {
    Console.OUT.println("Test failed.");

 

Test failed.

这段X10的程序里有两个地方比较另类,一个就是并行部分,finish引导的那些,另一段就是for (x in b) ok &= (x==v);这句话,比较另类,其实是我老师提醒了我,这是两个布尔量先与,然后再把结果赋值给ok。

 

 

 

 

posted @ 2009-11-21 10:05  ninahan  阅读(137)  评论(0编辑  收藏  举报