/* * Copyright 2012 Phil Pratt-Szeliga and other contributors * http://chirrup.org/ * * See the file LICENSE for copying permission. */ package org.trifort.rootbeer.configuration; import java.util.List; import org.trifort.rootbeer.generate.opencl.tweaks.GencodeOptions.CompileArchitecture; import org.trifort.rootbeer.generate.opencl.tweaks.GencodeOptions.ComputeCapability; import org.trifort.rootbeer.util.ResourceReader; public class Configuration { public static final int MODE_GPU = 0; public static final int MODE_NEMU = 1; public static final int MODE_JEMU = 2; private static Configuration m_Instance; public static Configuration compilerInstance(){ if(m_Instance == null){ m_Instance = new Configuration(); } return m_Instance; } public static Configuration runtimeInstance(){ if(m_Instance == null){ m_Instance = new Configuration(true); } else if(m_Instance.m_compilerInstance){ m_Instance = new Configuration(true); } return m_Instance; } private int m_mode; private boolean m_compilerInstance; private static boolean m_runAll; private static boolean m_printMem; private boolean m_remapAll; private boolean m_maxRegCountSet; private int m_maxRegCount; private boolean m_arrayChecks; private boolean m_doubles; private boolean m_recursion; private boolean m_exceptions; private boolean m_keepMains; private int m_sharedMemSize; private CompileArchitecture m_arch; private boolean m_manualCuda; private String m_manualCudaFilename; private ComputeCapability m_computeCapability; static { m_printMem = false; } private Configuration() { m_compilerInstance = true; m_remapAll = true; m_maxRegCountSet = false; m_arrayChecks = true; m_doubles = true; m_recursion = true; m_exceptions = true; m_keepMains = false; m_sharedMemSize = 40*1024; m_arch = CompileArchitecture.Arch32bit64bit; m_manualCuda = false; m_computeCapability = ComputeCapability.ALL; } private Configuration(boolean load) { m_compilerInstance = false; try { List<byte[]> data = ResourceReader.getResourceArray("org/trifort/rootbeer/runtime/config.txt"); int mode = data.get(0)[0]; int exceptions = data.get(0)[1]; m_mode = mode; if(exceptions == 1){ m_exceptions = true; } else { m_exceptions = false; } } catch(Exception ex){ m_mode = MODE_GPU; } } public void setMode(int mode) { m_mode = mode; } public int getMode() { return m_mode; } public void setRemapSparse() { m_remapAll = false; } public boolean getRemapAll() { return m_remapAll; } public static void setRunAllTests(boolean run_all) { m_runAll = run_all; } public static boolean getRunAllTests() { return m_runAll; } public static boolean getPrintMem() { return m_printMem; } public static void setPrintMem(boolean print) { m_printMem = print; } public void setMaxRegCount(int value) { m_maxRegCount = value; m_maxRegCountSet = true; } public boolean isMaxRegCountSet() { return m_maxRegCountSet; } public int getMaxRegCount() { return m_maxRegCount; } public void setArrayChecks(boolean value) { m_arrayChecks = value; } public boolean getArrayChecks() { return m_arrayChecks; } public void setDoubles(boolean value) { m_doubles = value; } public void setRecursion(boolean value) { m_recursion = value; } public boolean getDoubles() { return m_doubles; } public boolean getRecursion() { return m_recursion; } public void setExceptions(boolean value) { m_exceptions = value; } public boolean getExceptions() { return m_exceptions; } public boolean getKeepMains() { return m_keepMains; } public void setKeepMains(boolean value) { m_keepMains = value; } public void setSharedMemSize(int size) { m_sharedMemSize = size; } public int getSharedMemSize() { return m_sharedMemSize; } public CompileArchitecture getCompileArchitecture() { return m_arch; } public void setCompileArchitecture(CompileArchitecture arch) { m_arch = arch; } public void setManualCuda() { m_manualCuda = true; } public void setManualCudaFilename(String filename) { m_manualCudaFilename = filename; } public boolean isManualCuda(){ return m_manualCuda; } public String getManualCudaFilename(){ return m_manualCudaFilename; } public void setComputeCapability(ComputeCapability computeCapability) { m_computeCapability = computeCapability; } public ComputeCapability getComputeCapability() { return m_computeCapability; } }