feat: Klausur SS2018
This commit is contained in:
parent
e2cd0cb7aa
commit
1a7f32b9db
@ -116,6 +116,10 @@ public class App {
|
||||
java.util.Arrays.fill(b, 1);
|
||||
OpenCLPrefix2.start(b);
|
||||
break;
|
||||
case 33:
|
||||
// Klausur SS2018
|
||||
PraefixSumme.start();
|
||||
break;
|
||||
case 40:
|
||||
// multiParam defines smoothing
|
||||
System.out.println("Spawning window Filter");
|
||||
|
52
src/main/java/edu/thi/phga/aparapi_test/PraefixSumme.java
Normal file
52
src/main/java/edu/thi/phga/aparapi_test/PraefixSumme.java
Normal file
@ -0,0 +1,52 @@
|
||||
package edu.thi.phga.aparapi_test;
|
||||
|
||||
import java.util.Arrays;
|
||||
|
||||
import com.aparapi.Kernel;
|
||||
|
||||
public class PraefixSumme {
|
||||
public static void start() {
|
||||
int[] a = {4, 3, 6, 2, 1, 5, 9, 7};
|
||||
praefixsummme(a);
|
||||
System.out.println(Arrays.toString(a));
|
||||
}
|
||||
|
||||
public static void praefixsummme(int[] a) {
|
||||
int N = a.length;
|
||||
int[] b = Arrays.copyOf(a, N * 2);
|
||||
|
||||
class PraefixKernel extends Kernel {
|
||||
private int offset = 0;
|
||||
private int stepSize;
|
||||
|
||||
public void setOffset() {
|
||||
offset = N - offset;
|
||||
}
|
||||
|
||||
public int getOffset() {
|
||||
return offset;
|
||||
}
|
||||
|
||||
public void setStepSize(int s) {
|
||||
stepSize = s;
|
||||
}
|
||||
|
||||
@Override public void run() {
|
||||
int i = getGlobalId(0);
|
||||
if (i >= stepSize) {
|
||||
b[offset + i] = b[N - offset + i] + b[N - offset + i - stepSize];
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
PraefixKernel k = new PraefixKernel();
|
||||
|
||||
for (int j = 1; j < N; j *= 2) {
|
||||
k.setOffset();
|
||||
k.setStepSize(j);
|
||||
k.execute(N);
|
||||
}
|
||||
|
||||
Arrays.parallelSetAll(a, i -> b[k.getOffset() + i]);
|
||||
}
|
||||
}
|
Loading…
x
Reference in New Issue
Block a user