aboutsummaryrefslogtreecommitdiffstats
path: root/src/com
diff options
context:
space:
mode:
authorMichael Bien <[email protected]>2010-01-23 23:47:04 +0100
committerMichael Bien <[email protected]>2010-01-23 23:47:04 +0100
commit8e2cfb1179a97f7ed1248132429e1e60663b0d42 (patch)
tree187efdefe92ef9fdecdf1a188850621f67d932f9 /src/com
parente8179f3c0512ac95bfec3c64302eb8e114486ecd (diff)
added obtain[Device|Platform]Properties() methods to CLUtils.
added preferred vector width utility accessors to CLDevice. put impl package on javadoc ignore list.
Diffstat (limited to 'src/com')
-rw-r--r--src/com/mbien/opencl/CLDevice.java56
-rw-r--r--src/com/mbien/opencl/CLUtils.java74
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;
+ }
+
}