From 81b94f83cb76128c481d21134c3d462590db23d0 Mon Sep 17 00:00:00 2001 From: Michael Bien Date: Tue, 16 Mar 2010 01:07:55 +0100 Subject: added Capabilities enum and getter to CLDevice. updated tests. --- src/com/mbien/opencl/CLDevice.java | 58 +++++++++++++++++++++++++++++- src/com/mbien/opencl/CLProgramBuilder.java | 2 +- src/com/mbien/opencl/util/CLUtil.java | 3 +- 3 files changed, 60 insertions(+), 3 deletions(-) (limited to 'src') diff --git a/src/com/mbien/opencl/CLDevice.java b/src/com/mbien/opencl/CLDevice.java index a4a4b380..cae250c0 100644 --- a/src/com/mbien/opencl/CLDevice.java +++ b/src/com/mbien/opencl/CLDevice.java @@ -354,6 +354,13 @@ public final class CLDevice extends CLObject { return deviceInfo.getLong(CL_DEVICE_PROFILING_TIMER_RESOLUTION); } + /** + * Returns the execution capabilities as EnumSet. + */ + public EnumSet getExecutionCapabilities() { + return Capabilities.valuesOf((int)deviceInfo.getLong(CL_DEVICE_EXECUTION_CAPABILITIES)); + } + /** * Returns the optional half precision floating-point capability of the device. * The required minimum half precision floating-point capabilities as implemented by this @@ -432,7 +439,7 @@ public final class CLDevice extends CLObject { /** * Returns true if the OpenCL device is a little endian device and false otherwise. */ - public boolean isLittleEndianAvailable() { + public boolean isLittleEndian() { return deviceInfo.getLong(CL_DEVICE_ENDIAN_LITTLE) == CL_TRUE; } @@ -545,6 +552,55 @@ public final class CLDevice extends CLObject { return hash; } + /** + * Enumeration for the execution capabilities of the device. + */ + public enum Capabilities { + + /** + * The OpenCL device can execute OpenCL kernels. + */ + EXEC_KERNEL(CL_EXEC_KERNEL), + + /** + * The OpenCL device can execute native kernels. + */ + EXEC_NATIVE_KERNEL(CL_EXEC_NATIVE_KERNEL); + + /** + * Value of wrapped OpenCL device type. + */ + public final int CAPS; + + private Capabilities(int type) { + this.CAPS = type; + } + + public static Capabilities valueOf(int caps) { + switch(caps) { + case(CL_EXEC_KERNEL): + return EXEC_KERNEL; + case(CL_EXEC_NATIVE_KERNEL): + return EXEC_NATIVE_KERNEL; + } + return null; + } + + public static EnumSet valuesOf(int bitfield) { + if((EXEC_KERNEL.CAPS & bitfield) != 0) { + if((EXEC_NATIVE_KERNEL.CAPS & bitfield) != 0) { + return EnumSet.of(EXEC_KERNEL, EXEC_NATIVE_KERNEL); + }else{ + return EnumSet.of(EXEC_KERNEL); + } + }else if((EXEC_NATIVE_KERNEL.CAPS & bitfield) != 0){ + return EnumSet.of(EXEC_NATIVE_KERNEL); + } + return null; + } + + } + /** * Enumeration for the type of a device. */ diff --git a/src/com/mbien/opencl/CLProgramBuilder.java b/src/com/mbien/opencl/CLProgramBuilder.java index fea611a9..7071d142 100644 --- a/src/com/mbien/opencl/CLProgramBuilder.java +++ b/src/com/mbien/opencl/CLProgramBuilder.java @@ -18,7 +18,7 @@ import java.util.Set; /** * CLProgramBuilder is a helper for building programs with more complex configurations or - * building multiple programs with the same configuration. + * building multiple programs with similar configurations. * @see CLProgram#prepare() * @see #createConfiguration() * @see #createConfiguration(com.mbien.opencl.CLProgram) diff --git a/src/com/mbien/opencl/util/CLUtil.java b/src/com/mbien/opencl/util/CLUtil.java index f33451f3..2b47ac84 100644 --- a/src/com/mbien/opencl/util/CLUtil.java +++ b/src/com/mbien/opencl/util/CLUtil.java @@ -93,11 +93,12 @@ public class CLUtil { 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_EXECUTION_CAPABILITIES", dev.getExecutionCapabilities()+""); 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_ENDIAN_LITTLE", dev.isLittleEndian()+""); 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()+""); -- cgit v1.2.3