/*
* Copyright 2012 Phil Pratt-Szeliga and other contributors
* http://chirrup.org/
*
* See the file LICENSE for copying permission.
*/
package org.trifort.rootbeer.testcases.rootbeertest.gpurequired;
import org.trifort.rootbeer.runtime.Kernel;
public class BruteForceFFTRunOnGpu implements Kernel {
public float[] a;
public float[] b;
private int index;
private int count;
public BruteForceFFTRunOnGpu(float[] a, float[] b, int index, int count){
this.a = a;
this.b = b;
this.index = index;
this.count = count;
}
@Override
public void gpuMethod() {
int N = a.length;
for(int k = index; k < index + count; ++k){
float sum = 0;
for(int i = 0; i < N; ++i){
float term = a[i] * (float) Math.pow(Math.E, (-2*Math.PI/N)*i*k);
sum += term;
}
a[k] = sum;
}
}
boolean compare(BruteForceFFTRunOnGpu brhs) {
if(a.length != brhs.a.length){
System.out.println("len failed");
System.out.println("c.length: "+a.length);
System.out.println("brhs.c.length: "+brhs.a.length);
return false;
}
if(a[index] != brhs.a[index]){
System.out.println("a failed");
System.out.println("lhs: "+a[index]);
System.out.println("rhs: "+brhs.a[index]);
return false;
}
if(b[index] != brhs.b[index]){
System.out.println("b failed");
System.out.println("lhs: "+b[index]);
System.out.println("rhs: "+brhs.b[index]);
return false;
}
return true;
}
}