package org.trifort.rootbeer.runtime;
public class GpuDevice {
public static final int DEVICE_TYPE_CUDA = 1;
public static final int DEVICE_TYPE_OPENCL = 2;
public static final int DEVICE_TYPE_NEMU = 3;
public static final int DEVICE_TYPE_JAVA = 4;
public static GpuDevice newCudaDevice(int device_id, int major_version,
int minor_version, String device_name, long free_global_mem_size,
long total_global_mem_size, int max_registers_per_block, int warp_size,
int max_pitch, int max_threads_per_block, int max_shared_memory_per_block,
int clock_rate, int memory_clock_rate, int constant_mem_size,
boolean integrated, int max_threads_per_multiprocessor,
int multiprocessor_count, int max_block_dim_x, int max_block_dim_y,
int max_block_dim_z, int max_grid_dim_x, int max_grid_dim_y,
int max_grid_dim_z){
GpuDevice ret = new GpuDevice(DEVICE_TYPE_CUDA);
ret.setDeviceId(device_id);
ret.setVersion(major_version, minor_version, 0);
ret.setDeviceName(device_name);
ret.setFreeGlobalMemoryBytes(free_global_mem_size);
ret.setTotalGlobalMemoryBytes(total_global_mem_size);
ret.setMaxRegistersPerBlock(max_registers_per_block);
ret.setWarpSize(warp_size);
ret.setMaxPitch(max_pitch);
ret.setMaxThreadsPerBlock(max_threads_per_block);
ret.setMaxSharedMemoryPerBlock(max_shared_memory_per_block);
ret.setClockRateHz(clock_rate);
ret.setMemoryClockRateHz(memory_clock_rate);
ret.setTotalConstantMemoryBytes(constant_mem_size);
ret.setIntegrated(integrated);
ret.setMaxThreadsPerMultiprocessor(max_threads_per_multiprocessor);
ret.setMultiProcessorCount(multiprocessor_count);
ret.setMaxBlockDimX(max_block_dim_x);
ret.setMaxBlockDimY(max_block_dim_y);
ret.setMaxBlockDimZ(max_block_dim_z);
ret.setMaxGridDimX(max_grid_dim_x);
ret.setMaxGridDimY(max_grid_dim_y);
ret.setMaxGridDimZ(max_grid_dim_z);
return ret;
}
public static GpuDevice newOpenCLDevice(String device_name){
GpuDevice ret = new GpuDevice(DEVICE_TYPE_OPENCL);
ret.setDeviceName(device_name);
return ret;
}
private int m_deviceType;
private int m_deviceId;
private int m_majorVersion;
private int m_minorVersion;
private int m_patchVersion;
private String m_name;
private long m_freeGlobalMemoryBytes;
private long m_totalGlobalMemoryBytes;
private int m_maxRegistersPerBlock;
private int m_warpSize;
private int m_maxPitch;
private int m_maxThreadsPerBlock;
private int m_maxSharedMemoryPerBlock;
private int m_clockRateHz;
private int m_memoryClockRateHz;
private int m_totalConstantMemoryBytes;
private boolean m_integrated;
private int m_maxThreadsPerMultiprocessor;
private int m_multiProcessorCount;
private int m_maxBlockDimX;
private int m_maxBlockDimY;
private int m_maxBlockDimZ;
private int m_maxGridDimX;
private int m_maxGridDimY;
private int m_maxGridDimZ;
public GpuDevice(int device_type) {
m_deviceType = device_type;
}
public Context createContext(){
if(m_deviceType == DEVICE_TYPE_CUDA){
return new CUDAContext(this);
} else {
throw new UnsupportedOperationException();
}
}
public Context createContext(int memorySize){
if(m_deviceType == DEVICE_TYPE_CUDA){
CUDAContext ret = new CUDAContext(this);
ret.setMemorySize(memorySize);
return ret;
} else {
throw new UnsupportedOperationException();
}
}
public int getDeviceType(){
return m_deviceType;
}
public void setDeviceId(int device_id){
m_deviceId = device_id;
}
public int getDeviceId(){
return m_deviceId;
}
public void setVersion(int major, int minor, int patch){
m_majorVersion = major;
m_minorVersion = minor;
m_patchVersion = patch;
}
public int getMajorVersion(){
return m_majorVersion;
}
public int getMinorVersion(){
return m_minorVersion;
}
public int getPatchVersion(){
return m_patchVersion;
}
public void setDeviceName(String name){
m_name = name;
}
public String getDeviceName(){
return m_name;
}
public void setFreeGlobalMemoryBytes(long size){
m_freeGlobalMemoryBytes = size;
}
public long getFreeGlobalMemoryBytes(){
return m_freeGlobalMemoryBytes;
}
public void setTotalGlobalMemoryBytes(long size){
m_totalGlobalMemoryBytes = size;
}
public long getTotalGlobalMemoryBytes(){
return m_totalGlobalMemoryBytes;
}
public void setMaxRegistersPerBlock(int value){
m_maxRegistersPerBlock = value;
}
public int getMaxRegistersPerBlock(){
return m_maxRegistersPerBlock;
}
public void setWarpSize(int value){
m_warpSize = value;
}
public int getWarpSize(){
return m_warpSize;
}
public void setMaxPitch(int value){
m_maxPitch = value;
}
public int getMaxPitch(){
return m_maxPitch;
}
public void setMaxThreadsPerBlock(int value){
m_maxThreadsPerBlock = value;
}
public int getMaxThreadsPerBlock(){
return m_maxThreadsPerBlock;
}
public void setMaxSharedMemoryPerBlock(int value){
m_maxSharedMemoryPerBlock = value;
}
public int getMaxSharedMemoryPerBlock(){
return m_maxSharedMemoryPerBlock;
}
public void setClockRateHz(int value){
m_clockRateHz = value;
}
public int getClockRateHz(){
return m_clockRateHz;
}
public void setMemoryClockRateHz(int value){
m_memoryClockRateHz = value;
}
public int getMemoryClockRateHz(){
return m_memoryClockRateHz;
}
public void setTotalConstantMemoryBytes(int value){
m_totalConstantMemoryBytes = value;
}
public int getTotalConstantMemoryBytes(){
return m_totalConstantMemoryBytes;
}
public void setIntegrated(boolean value){
m_integrated = value;
}
public boolean getIntegrated(){
return m_integrated;
}
public void setMaxThreadsPerMultiprocessor(int value){
m_maxThreadsPerMultiprocessor = value;
}
public int getMaxThreadsPerMultiprocessor(){
return m_maxThreadsPerMultiprocessor;
}
public void setMultiProcessorCount(int value){
m_multiProcessorCount = value;
}
public int getMultiProcessorCount(){
return m_multiProcessorCount;
}
public void setMaxBlockDimX(int value){
m_maxBlockDimX = value;
}
public int getMaxBlockDimX(){
return m_maxBlockDimX;
}
public void setMaxBlockDimY(int value){
m_maxBlockDimY = value;
}
public int getMaxBlockDimY(){
return m_maxBlockDimY;
}
public void setMaxBlockDimZ(int value){
m_maxBlockDimZ = value;
}
public int getMaxBlockDimZ(){
return m_maxBlockDimZ;
}
public void setMaxGridDimX(int value){
m_maxGridDimX = value;
}
public int getMaxGridDimX(){
return m_maxGridDimX;
}
public void setMaxGridDimY(int value){
m_maxGridDimY = value;
}
public int getMaxGridDimY(){
return m_maxGridDimY;
}
public void setMaxGridDimZ(int value){
m_maxGridDimZ = value;
}
public int getMaxGridDimZ(){
return m_maxGridDimZ;
}
}