这两天的收获
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。