/*
* Copyright 2012 Phil Pratt-Szeliga and other contributors
* http://chirrup.org/
*
* See the file LICENSE for copying permission.
*/
package org.trifort.rootbeer.testcases.rootbeertest.serialization;
import org.trifort.rootbeer.runtime.Kernel;
public class MMultRunOnGpu implements Kernel {
private int[] a;
private int[] b;
private int[] c;
private int index;
private int size;
public MMultRunOnGpu(int[] a, int[] b, int[] c, int index, int size){
this.a = a;
this.b = b;
this.c = c;
this.index = index;
this.size = size;
}
@Override
public void gpuMethod() {
int len = a.length;
int lsize = size;
int lindex = index;
int[] la = a;
int[] lb = b;
int[] lc = c;
for(int j = 0; j < lsize; ++j){
int sum = 0;
for(int k = 0; k < lsize; ++k){
sum += (la[lindex*lsize+j]*lb[j*lsize+k]);
}
lc[lindex*lsize+j] = sum + len;
}
}
boolean compare(MMultRunOnGpu brhs) {
if(c.length != brhs.c.length){
System.out.println("len failed");
System.out.println("c.length: "+c.length);
System.out.println("brhs.c.length: "+brhs.c.length);
return false;
}
for(int i = index*size; i < (index+1)*size; ++i){
int lhs = c[i];
int rhs = brhs.c[i];
if(lhs != rhs){
System.out.println("c value failed");
System.out.println("i: "+i);
System.out.println("lhs: "+lhs+" rhs: "+rhs);
return false;
}
}
return true;
}
}