我使用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();发布于 2013-03-21 02:26:25
这里有几个问题。
首先,你的代码不是数据并行的。您在“res”上存在“race”条件,因此无法在GPU上计算此代码。
其次,执行的范围太小了。您正在尝试执行6个线程(x 2,3,4 *y 3,4)。这不会真正从GPU中获得任何好处。
回答关于如何在上面的2dim网格上实现的问题。
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();https://stackoverflow.com/questions/15487721
复制相似问题