diff options
author | Michael Bien <[email protected]> | 2010-04-12 22:18:39 +0200 |
---|---|---|
committer | Michael Bien <[email protected]> | 2010-04-12 22:18:39 +0200 |
commit | bf07b44ed6a8958dd321cc4c08fd2bdd08299611 (patch) | |
tree | e24b7c4e4197a80e0ecaad75b9b3667299fd8323 /src/com/mbien/opencl/CLPlatform.java | |
parent | 7680472b21ec1e2deacb49addae65c820a2e2a4d (diff) |
renamed package com.mbien.* in com.jogamp.* JOCL is now officially a JogAmp team player ;).
Diffstat (limited to 'src/com/mbien/opencl/CLPlatform.java')
-rw-r--r-- | src/com/mbien/opencl/CLPlatform.java | 302 |
1 files changed, 0 insertions, 302 deletions
diff --git a/src/com/mbien/opencl/CLPlatform.java b/src/com/mbien/opencl/CLPlatform.java deleted file mode 100644 index 545ca9f6..00000000 --- a/src/com/mbien/opencl/CLPlatform.java +++ /dev/null @@ -1,302 +0,0 @@ -package com.mbien.opencl; - -import com.jogamp.common.nio.Int64Buffer; -import com.mbien.opencl.util.CLUtil; -import com.mbien.opencl.impl.CLImpl; -import com.jogamp.common.nio.PointerBuffer; -import java.nio.ByteBuffer; -import java.nio.ByteOrder; -import java.nio.IntBuffer; -import java.util.ArrayList; -import java.util.Collections; -import java.util.HashSet; -import java.util.List; -import java.util.Map; -import java.util.Scanner; -import java.util.Set; - -import static com.mbien.opencl.CLException.*; -import static com.mbien.opencl.CL.*; - -/** - * - * @author Michael Bien - */ -public final class CLPlatform { - - /** - * OpenCL platform id for this platform. - */ - public final long ID; - - private static final CL cl; - - private Set<String> extensions; - - static{ - NativeLibLoader.loadJOCL(); -// System.loadLibrary("gluegen-rt"); -// ProcAddressHelper.resetProcAddressTable(table, null); - cl = new CLImpl(); - } - - private CLPlatform(long id) { - this.ID = id; - } - - /** - * Returns the default OpenCL platform or null when no platform found. - */ - public static CLPlatform getDefault() { - CLPlatform[] platforms = listCLPlatforms(); - if(platforms.length > 0) - return platforms[0]; - return null; - } - - /** - * Lists all available OpenCL implementations. - * @throws CLException if something went wrong initializing OpenCL - */ - public static CLPlatform[] listCLPlatforms() { - - IntBuffer ib = ByteBuffer.allocateDirect(4).order(ByteOrder.nativeOrder()).asIntBuffer(); - // find all available OpenCL platforms - int ret = cl.clGetPlatformIDs(0, null, ib); - checkForError(ret, "can not enumerate platforms"); - - // receive platform ids - PointerBuffer platformId = PointerBuffer.allocateDirect(ib.get(0)); - ret = cl.clGetPlatformIDs(platformId.capacity(), platformId, null); - checkForError(ret, "can not enumerate platforms"); - - CLPlatform[] platforms = new CLPlatform[platformId.capacity()]; - - for (int i = 0; i < platformId.capacity(); i++) - platforms[i] = new CLPlatform(platformId.get(i)); - - return platforms; - } - - /** - * Returns the low level binding interface to the OpenCL APIs. - */ - public static CL getLowLevelCLInterface() { - return cl; - } - - /** - * Hint to allow the implementation to release the resources allocated by the OpenCL compiler. - * Calls to {@link CLProgram#build()} after unloadCompiler will reload the compiler if necessary. - */ - public static void unloadCompiler() { - int ret = cl.clUnloadCompiler(); - checkForError(ret, "error while sending unload compiler hint"); - } - - /** - * Lists all physical devices available on this platform. - * @see #listCLDevices(com.mbien.opencl.CLDevice.Type...) - */ - public CLDevice[] listCLDevices() { - return this.listCLDevices(CLDevice.Type.ALL); - } - - /** - * Lists all physical devices available on this platform matching the given {@link CLDevice.Type}. - */ - public CLDevice[] listCLDevices(CLDevice.Type... types) { - - IntBuffer ib = ByteBuffer.allocateDirect(4).order(ByteOrder.nativeOrder()).asIntBuffer(); - - List<CLDevice> list = new ArrayList<CLDevice>(); - for(int t = 0; t < types.length; t++) { - CLDevice.Type type = types[t]; - - //find all devices - int ret = cl.clGetDeviceIDs(ID, type.TYPE, 0, null, ib); - - // return an empty array rather than throwing an exception - if(ret == CL.CL_DEVICE_NOT_FOUND) { - continue; - } - - checkForError(ret, "error while enumerating devices"); - - PointerBuffer deviceIDs = PointerBuffer.allocateDirect(ib.get(0)); - ret = cl.clGetDeviceIDs(ID, type.TYPE, deviceIDs.capacity(), deviceIDs, null); - checkForError(ret, "error while enumerating devices"); - - //add device to list - for (int n = 0; n < deviceIDs.capacity(); n++) - list.add(new CLDevice(cl, deviceIDs.get(n))); - } - - CLDevice[] devices = new CLDevice[list.size()]; - for (int i = 0; i < list.size(); i++) { - devices[i] = list.get(i); - } - - return devices; - - } - - static CLDevice findMaxFlopsDevice(CLDevice[] devices) { - return findMaxFlopsDevice(devices, null); - } - - static CLDevice findMaxFlopsDevice(CLDevice[] devices, CLDevice.Type type) { - - CLDevice maxFLOPSDevice = null; - - int maxflops = -1; - - for (int i = 0; i < devices.length; i++) { - - CLDevice device = devices[i]; - - if(type == null || type.equals(device.getType())) { - - int maxComputeUnits = device.getMaxComputeUnits(); - int maxClockFrequency = device.getMaxClockFrequency(); - int flops = maxComputeUnits*maxClockFrequency; - - if(flops > maxflops) { - maxflops = flops; - maxFLOPSDevice = device; - } - } - - } - - return maxFLOPSDevice; - } - - - /** - * Returns the device with maximal FLOPS from this platform. - * The device speed is estimated by calculating the product of - * MAX_COMPUTE_UNITS and MAX_CLOCK_FREQUENCY. - * @see #getMaxFlopsDevice(com.mbien.opencl.CLDevice.Type...) - */ - public CLDevice getMaxFlopsDevice() { - return findMaxFlopsDevice(listCLDevices()); - } - - /** - * Returns the device with maximal FLOPS and the specified type from this platform. - * The device speed is estimated by calculating the product of - * MAX_COMPUTE_UNITS and MAX_CLOCK_FREQUENCY. - */ - public CLDevice getMaxFlopsDevice(CLDevice.Type... types) { - return findMaxFlopsDevice(listCLDevices(types)); - } - - /** - * Returns the platform name. - */ - public String getName() { - return getInfoString(CL_PLATFORM_NAME); - } - - /** - * Returns the platform version. - */ - public String getVersion() { - return getInfoString(CL_PLATFORM_VERSION); - } - - /** - * Returns the platform profile. - */ - public String getProfile() { - return getInfoString(CL_PLATFORM_PROFILE); - } - - /** - * Returns the platform vendor. - */ - public String getVendor() { - return getInfoString(CL_PLATFORM_VENDOR); - } - - /** - * Returns true if the extension is supported on this platform. - */ - public boolean isExtensionAvailable(String extension) { - return getExtensions().contains(extension); - } - - /** - * Returns all platform extension names as unmodifiable Set. - */ - public Set<String> getExtensions() { - - if(extensions == null) { - extensions = new HashSet<String>(); - String ext = getInfoString(CL_PLATFORM_EXTENSIONS); - Scanner scanner = new Scanner(ext); - - while(scanner.hasNext()) - extensions.add(scanner.next()); - - extensions = Collections.unmodifiableSet(extensions); - } - - return extensions; - } - - /** - * Returns a Map of platform properties with the enum names as keys. - * @see CLUtil#obtainPlatformProperties(com.mbien.opencl.CLPlatform) - */ - public Map<String, String> getProperties() { - return CLUtil.obtainPlatformProperties(this); - } - - /** - * Returns a info string in exchange for a key (CL_PLATFORM_*). - */ - public String getInfoString(int key) { - Int64Buffer size = Int64Buffer.allocateDirect(1); - // TODO use cache/query size - ByteBuffer bb = ByteBuffer.allocateDirect(512); - - int ret = cl.clGetPlatformInfo(ID, key, bb.capacity(), bb, size); - checkForError(ret, "can not receive info string"); - - return CLUtil.clString2JavaString(bb, (int)size.get(0)); - } - - @Override - public String toString() { - return "CLPlatform [name:" + getName() - +" vendor:"+getVendor() - +" profile:"+getProfile() - +" version:"+getVersion()+"]"; - } - - @Override - public boolean equals(Object obj) { - if (obj == null) { - return false; - } - if (getClass() != obj.getClass()) { - return false; - } - final CLPlatform other = (CLPlatform) obj; - if (this.ID != other.ID) { - return false; - } - return true; - } - - @Override - public int hashCode() { - int hash = 7; - hash = 71 * hash + (int) (this.ID ^ (this.ID >>> 32)); - return hash; - } - - -} |