package org.trifort.rootbeer.testcases.rootbeertest.kerneltemplate;
import java.util.Arrays;
import org.trifort.rootbeer.runtime.Kernel;
import org.trifort.rootbeer.runtime.ThreadConfig;
import org.trifort.rootbeer.test.TestKernelTemplate;
public class GpuVectorMapTest2 implements TestKernelTemplate {
public static final int blockSize = 1;
public static final int gridSize = 2;
public static final boolean isDebugging = true;
@Override
public Kernel create() {
GpuVectorMap2 vectorMap = new GpuVectorMap2(gridSize);
if (isDebugging) {
System.out.println("input: ");
}
for (int i = 0; i < gridSize; i++) {
double[] vector = new double[blockSize];
for (int j = 0; j < blockSize; j++) {
vector[j] = (i * gridSize) + j;
}
vectorMap.put(i, vector);
if (isDebugging) {
System.out.println("(" + i + "," + Arrays.toString(vector) + ")");
}
}
return new GpuVectorMapRunOnGpu2(vectorMap);
}
@Override
public ThreadConfig getThreadConfig() {
return new ThreadConfig(blockSize, 1, 1, gridSize, 1, blockSize * gridSize);
}
@Override
public boolean compare(Kernel original, Kernel from_heap) {
GpuVectorMapRunOnGpu2 lhs = (GpuVectorMapRunOnGpu2) original;
GpuVectorMapRunOnGpu2 rhs = (GpuVectorMapRunOnGpu2) from_heap;
System.out.println("verify lhs: ");
for (int i = 0; i < gridSize; i++) {
double[] v = lhs.m_map.get(i);
System.out.println("(" + i + "," + Arrays.toString(v) + ")");
for (int j = 0; j < blockSize; j++) {
double value = v[j];
double expectedValue = (i * gridSize) + j + 1;
if (value != expectedValue) {
System.out.println("Error at position: " + j + " expectedValue: "
+ expectedValue + " != " + value);
return false;
}
}
}
System.out.println("verify rhs: ");
for (int i = 0; i < gridSize; i++) {
double[] v = rhs.m_map.get(i);
System.out.println("(" + i + "," + Arrays.toString(v) + ")");
for (int j = 0; j < blockSize; j++) {
double value = v[j];
double expectedValue = (i * gridSize) + j + 1;
if (value != expectedValue) {
System.out.println("Error at position: " + j + " expectedValue: "
+ expectedValue + " != " + value);
return false;
}
}
}
return true;
}
}