我使用aparapi进行并行化,我想转换这个java代码:
public static void main(String[] args) {
float res = 0;
for (int i = 2; i < 5; i++) {
for (int j = 3; j < 5; j++) {
res += i * j;
}
}
System.out.println(res);
}
等同于aparapi:
Kernel kernel = new Kernel() {
@Override
public void run() {
int i = getGlobalId();
...
}
};
kernel.execute();
kernel.dispose();
答案 0 :(得分:2)
这里有一些问题。
首先,您的代码不是数据并行的。你在'res'上有一个'race'条件,所以这个代码不能在GPU上计算。
其次,执行范围太小。您正在尝试执行6个线程(x [2,3,4] * y [3,4])。这不会从GPU中获得任何好处。
回答有关如何在上面的2 dim网格上实施的问题。
Range range = Range.create2D(3, 2) ; // A two dimension grid 3x2
Kernel kernel = new Kernel() {
@Override
public void run() {
int x = getGlobalId(0)+2; // x starts at 2
int y = getGlobalId(1)+3; // y starts at 3
...
}
};
kernel.execute(range);
kernel.dispose();