/* * 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; import org.trifort.rootbeer.runtime.RootbeerGpu; public class SharedMemSimpleRunOnGpu implements Kernel { private boolean m_boolean; private byte m_byte; private char m_char; private short m_short; private int m_integer; private long m_long; private float m_float; private double m_double; public void gpuMethod() { RootbeerGpu.setSharedBoolean(0, true); RootbeerGpu.setSharedByte(1, (byte) 2); RootbeerGpu.setSharedChar(2, (char) 3); RootbeerGpu.setSharedShort(4, (short) 4); RootbeerGpu.setSharedInteger(6, 5); RootbeerGpu.setSharedLong(10, 6); RootbeerGpu.setSharedFloat(18, 7.1f); RootbeerGpu.setSharedDouble(22, 8.2); RootbeerGpu.syncthreads(); m_boolean = RootbeerGpu.getSharedBoolean(0); m_byte = RootbeerGpu.getSharedByte(1); m_char = RootbeerGpu.getSharedChar(2); m_short = RootbeerGpu.getSharedShort(4); m_integer = RootbeerGpu.getSharedInteger(6); m_long = RootbeerGpu.getSharedLong(10); m_float = RootbeerGpu.getSharedFloat(18); m_double = RootbeerGpu.getSharedDouble(22); } private String floatToString(float value){ int bits = Float.floatToIntBits(value); String str = Integer.toBinaryString(bits); while(str.length() < 32){ str = "0" + str; } return str; } private String doubleToString(double value){ long bits = Double.doubleToLongBits(value); String str = Long.toBinaryString(bits); while(str.length() < 64){ str = "0" + str; } return str; } private String byteToString(byte value){ String str = Integer.toBinaryString(value); while(str.length() < 8){ str = "0" + str; } return str; } private String longToString(long value){ String str = Long.toBinaryString(value); while(str.length() < 64){ str = "0" + str; } return str; } public boolean compare(SharedMemSimpleRunOnGpu rhs) { if(m_boolean != rhs.m_boolean){ System.out.println("m_boolean"); return false; } if(m_byte != rhs.m_byte){ System.out.println("m_byte"); return false; } if(m_char != rhs.m_char){ System.out.println("m_char"); return false; } if(m_short != rhs.m_short){ System.out.println("m_short"); return false; } if(m_integer != rhs.m_integer){ System.out.println("m_integer"); return false; } if(m_long != rhs.m_long){ System.out.println("m_long"); System.out.println("org: "+longToString(6)); System.out.println("lhs: "+longToString(m_long)); System.out.println("rhs: "+longToString(rhs.m_long)); System.out.println(" rhs byte 0: "+byteToString(RootbeerGpu.getSharedByte(10))); System.out.println(" rhs byte 7: "+byteToString(RootbeerGpu.getSharedByte(17))); return false; } if(m_float != rhs.m_float){ System.out.println("m_float"); System.out.println("org: "+floatToString(7.1f)); System.out.println("lhs: "+floatToString(m_float)); System.out.println("rhs: "+floatToString(rhs.m_float)); return false; } if(m_double != rhs.m_double){ System.out.println("m_double"); System.out.println("org: "+doubleToString(8.2)); System.out.println("lhs: "+doubleToString(m_double)); System.out.println(" lhs byte 0: "+byteToString(RootbeerGpu.getSharedByte(22))); System.out.println(" lhs byte 1: "+byteToString(RootbeerGpu.getSharedByte(22+1))); System.out.println(" lhs byte 2: "+byteToString(RootbeerGpu.getSharedByte(22+2))); System.out.println(" lhs byte 3: "+byteToString(RootbeerGpu.getSharedByte(22+3))); System.out.println(" lhs byte 4: "+byteToString(RootbeerGpu.getSharedByte(22+4))); System.out.println(" lhs byte 5: "+byteToString(RootbeerGpu.getSharedByte(22+5))); System.out.println(" lhs byte 6: "+byteToString(RootbeerGpu.getSharedByte(22+6))); System.out.println(" lhs byte 7: "+byteToString(RootbeerGpu.getSharedByte(22+7))); System.out.println("rhs: "+doubleToString(rhs.m_double)); return false; } return true; } }