diff options
Diffstat (limited to 'src/com')
-rw-r--r-- | src/com/mbien/opencl/CLDevice.java | 56 | ||||
-rw-r--r-- | src/com/mbien/opencl/CLUtils.java | 74 |
2 files changed, 130 insertions, 0 deletions
diff --git a/src/com/mbien/opencl/CLDevice.java b/src/com/mbien/opencl/CLDevice.java index c948024b..e754a4bc 100644 --- a/src/com/mbien/opencl/CLDevice.java +++ b/src/com/mbien/opencl/CLDevice.java @@ -133,6 +133,54 @@ public final class CLDevice { } /** + * Preferred native vector width size for built-in short vectors. + * The vector width is defined as the number of scalar elements that can be stored in the vector. + */ + public int getPreferedShortVectorWidth() { + return (int)deviceInfo.getLong(CL_DEVICE_PREFERRED_VECTOR_WIDTH_SHORT); + } + + /** + * Preferred native vector width size for built-in char vectors. + * The vector width is defined as the number of scalar elements that can be stored in the vector. + */ + public int getPreferedCharVectorWidth() { + return (int)deviceInfo.getLong(CL_DEVICE_PREFERRED_VECTOR_WIDTH_CHAR); + } + + /** + * Preferred native vector width size for built-in int vectors. + * The vector width is defined as the number of scalar elements that can be stored in the vector. + */ + public int getPreferedIntVectorWidth() { + return (int)deviceInfo.getLong(CL_DEVICE_PREFERRED_VECTOR_WIDTH_INT); + } + + /** + * Preferred native vector width size for built-in long vectors. + * The vector width is defined as the number of scalar elements that can be stored in the vector. + */ + public int getPreferedLongVectorWidth() { + return (int)deviceInfo.getLong(CL_DEVICE_PREFERRED_VECTOR_WIDTH_LONG); + } + + /** + * Preferred native vector width size for built-in float vectors. + * The vector width is defined as the number of scalar elements that can be stored in the vector. + */ + public int getPreferedFloatVectorWidth() { + return (int)deviceInfo.getLong(CL_DEVICE_PREFERRED_VECTOR_WIDTH_FLOAT); + } + + /** + * Preferred native vector width size for built-in double vectors. + * The vector width is defined as the number of scalar elements that can be stored in the vector. + */ + public int getPreferedDoubleVectorWidth() { + return (int)deviceInfo.getLong(CL_DEVICE_PREFERRED_VECTOR_WIDTH_DOUBLE); + } + + /** * Returns the number of parallel compute cores on the OpenCL device. * The minimum value is 1. */ @@ -227,6 +275,14 @@ public final class CLDevice { } /** + * Returns the max number of arguments declared with the <code>constant</code> + * qualifier in a kernel. The minimum value is 8. + */ + public long getMaxConstantArgs() { + return deviceInfo.getLong(CL_DEVICE_MAX_CONSTANT_ARGS); + } + + /** * Returns true if images are supported by the OpenCL device and false otherwise. */ public boolean isImageSupportAvailable() { diff --git a/src/com/mbien/opencl/CLUtils.java b/src/com/mbien/opencl/CLUtils.java index a926e8ed..eb66a7a3 100644 --- a/src/com/mbien/opencl/CLUtils.java +++ b/src/com/mbien/opencl/CLUtils.java @@ -1,6 +1,9 @@ package com.mbien.opencl; import java.nio.ByteBuffer; +import java.util.Arrays; +import java.util.LinkedHashMap; +import java.util.Map; /** * @@ -22,4 +25,75 @@ class CLUtils { } } + public static Map<String, String> obtainPlatformProperties(CLPlatform platform) { + + Map<String, String> map = new LinkedHashMap<String, String>(); + map.put("CL_PLATFORM_NAME", platform.getName()); + map.put("CL_PLATFORM_PROFILE", platform.getProfile()); + map.put("CL_PLATFORM_VERSION", platform.getVersion()); + map.put("CL_PLATFORM_VENDOR", platform.getVendor()); +// map.put("fastest device (estimated)", platform.getMaxFlopsDevice().toString()); + + return map; + } + + public static Map<String, String> obtainDeviceProperties(CLDevice dev) { + + Map<String, String> map = new LinkedHashMap<String, String>(); + map.put("CL_DEVICE_NAME", dev.getName()); + map.put("CL_DEVICE_PROFILE", dev.getProfile()); + map.put("CL_DEVICE_VENDOR", dev.getVendor()); + map.put("CL_DEVICE_VENDOR_ID", dev.getVendorID()+""); + map.put("CL_DEVICE_VERSION", dev.getVersion()); + map.put("CL_DRIVER_VERSION", dev.getDriverVersion()); + map.put("CL_DEVICE_TYPE", dev.getType().toString()); + + map.put("CL_DEVICE_GLOBAL_MEM_SIZE", dev.getGlobalMemSize()/(1024*1024)+" MB"); + map.put("CL_DEVICE_MAX_MEM_ALLOC_SIZE", dev.getMaxMemAllocSize()/(1024*1024)+" MB"); + map.put("CL_DEVICE_MAX_PARAMETER_SIZE", dev.getMaxParameterSize()+" Byte"); + map.put("CL_DEVICE_LOCAL_MEM_SIZE", dev.getLocalMemSize()/1024+" KB"); + map.put("CL_DEVICE_LOCAL_MEM_TYPE", dev.getLocalMemType()+""); + map.put("CL_DEVICE_GLOBAL_MEM_CACHE_SIZE", dev.getGlobalMemCachSize()+""); + map.put("CL_DEVICE_GLOBAL_MEM_CACHE_TYPE", dev.getGlobalMemCacheType()+""); + map.put("CL_DEVICE_MAX_CONSTANT_BUFFER_SIZE", dev.getMaxConstantBufferSize()+""); + map.put("CL_DEVICE_MAX_CONSTANT_ARGS", dev.getMaxConstantArgs()+""); + map.put("CL_DEVICE_ERROR_CORRECTION_SUPPORT", dev.isErrorCorrectionSupported()+""); + + map.put("CL_DEVICE_MAX_CLOCK_FREQUENCY", dev.getMaxClockFrequency()+" MHz"); + map.put("CL_DEVICE_PROFILING_TIMER_RESOLUTION", dev.getProfilingTimerResolution()+" ns"); + map.put("CL_DEVICE_QUEUE_PROPERTIES", dev.getQueueProperties()+""); + map.put("CL_DEVICE_MAX_WORK_GROUP_SIZE", dev.getMaxWorkGroupSize()+""); + map.put("CL_DEVICE_MAX_COMPUTE_UNITS", dev.getMaxComputeUnits()+""); + map.put("CL_DEVICE_MAX_WORK_ITEM_DIMENSIONS", dev.getMaxWorkItemDimensions()+""); + map.put("CL_DEVICE_MAX_WORK_ITEM_SIZES", Arrays.toString(dev.getMaxWorkItemSizes())); + map.put("CL_DEVICE_COMPILER_AVAILABLE", dev.isCompilerAvailable()+""); + + map.put("CL_DEVICE_IMAGE_SUPPORT", dev.isImageSupportAvailable()+""); + map.put("CL_DEVICE_MAX_READ_IMAGE_ARGS", dev.getMaxReadImageArgs()+""); + map.put("CL_DEVICE_MAX_WRITE_IMAGE_ARGS", dev.getMaxWriteImageArgs()+""); + map.put("CL_DEVICE_IMAGE2D_MAX_DIMENSIONS", Arrays.asList(dev.getMaxImage2dWidth(), dev.getMaxImage2dHeight()).toString()); + map.put("CL_DEVICE_IMAGE3D_MAX_DIMENSIONS", Arrays.asList(dev.getMaxImage2dWidth(), dev.getMaxImage2dHeight(), dev.getMaxImage3dDepth()).toString()); + map.put("CL_DEVICE_MAX_SAMPLERS", dev.getMaxSamplers()+""); + + map.put("CL_DEVICE_ADDRESS_BITS", dev.getAddressBits()+""); + map.put("cl_khr_fp16", dev.isHalfFPAvailable()+""); + map.put("cl_khr_fp64", dev.isDoubleFPAvailable()+""); + map.put("CL_DEVICE_ENDIAN_LITTLE", dev.isLittleEndianAvailable()+""); + map.put("CL_DEVICE_HALF_FP_CONFIG", dev.getHalfFPConfig()+""); + map.put("CL_DEVICE_SINGLE_FP_CONFIG", dev.getSingleFPConfig()+""); + map.put("CL_DEVICE_DOUBLE_FP_CONFIG", dev.getDoubleFPConfig()+""); + map.put("CL_DEVICE_EXTENSIONS", dev.getExtensions()+""); + + map.put("CL_DEVICE_PREFERRED_VECTOR_WIDTH_SHORT", dev.getPreferedShortVectorWidth()+""); + map.put("CL_DEVICE_PREFERRED_VECTOR_WIDTH_CHAR", dev.getPreferedCharVectorWidth()+""); + map.put("CL_DEVICE_PREFERRED_VECTOR_WIDTH_INT", dev.getPreferedIntVectorWidth()+""); + map.put("CL_DEVICE_PREFERRED_VECTOR_WIDTH_LONG", dev.getPreferedLongVectorWidth()+""); + map.put("CL_DEVICE_PREFERRED_VECTOR_WIDTH_FLOAT", dev.getPreferedFloatVectorWidth()+""); + map.put("CL_DEVICE_PREFERRED_VECTOR_WIDTH_DOUBLE", dev.getPreferedDoubleVectorWidth()+""); + + //TODO device extensions -> properties + + return map; + } + } |