summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--build.xml10
-rw-r--r--src/com/mbien/opencl/CLContext.java21
-rw-r--r--src/com/mbien/opencl/CLPlatform.java32
-rw-r--r--src/com/mbien/opencl/CLProgram.java33
-rw-r--r--test/com/mbien/opencl/HighLevelBindingTest.java13
5 files changed, 75 insertions, 34 deletions
diff --git a/build.xml b/build.xml
index d0a88c6a..cae97885 100644
--- a/build.xml
+++ b/build.xml
@@ -17,6 +17,7 @@
<property name="jogl.root" value="${basedir}/../jogl" />
<property name="etc.build.dir" value="${basedir}/etc/build" />
+ <property name="headers.dest" value="${basedir}/resources/includes/CL" />
<!-- Pull in GlueGen cpptasks build file -->
<import file="${gluegen.root}/make/gluegen-cpptasks.xml" />
@@ -69,8 +70,11 @@
<target name="prepare-build">
+ <property name="headers.orig" value="${basedir}/resources/includes/CL_orig" />
+
<!--compile build utilities-->
<mkdir dir="${etc.build.dir}"/>
+ <mkdir dir="${headers.dest}"/>
<javac destdir="${etc.build.dir}" classpath="${ant.core.lib}" source="1.5" debug="true" debuglevel="lines,vars,source">
<src path="${basedir}/etc/src"/>
@@ -78,15 +82,12 @@
<taskdef name="uncomment-function-params" classname="com.mbien.ant.FunctionParamUncommenter" classpath="${etc.build.dir}"/>
- <property name="headers.orig" value="${basedir}/resources/includes/CL_orig" />
- <property name="headers.dest" value="${basedir}/resources/includes/CL" />
-
<!--uncomment function names in c headers and copy modified files into include path-->
<uncomment-function-params src="${headers.orig}/cl.h" dest="${headers.dest}/cl.h"/>
<uncomment-function-params src="${headers.orig}/cl_gl.h" dest="${headers.dest}/cl_gl.h"/>
<!--nothing to uncomment in cl_platform.h-->
- <copyfile src="${headers.orig}/cl_platform.h" dest="${headers.dest}/cl_platform.h" forceoverwrite="true"/>
+ <copy file="${headers.orig}/cl_platform.h" toDir="${headers.dest}" overwrite="true"/>
</target>
@@ -200,6 +201,7 @@
<target name="-post-clean">
<delete dir="gensrc"/>
<delete dir="${etc.build.dir}"/>
+ <delete dir="${headers.dest}"/>
</target>
<!--
diff --git a/src/com/mbien/opencl/CLContext.java b/src/com/mbien/opencl/CLContext.java
index 66716e41..c87f2310 100644
--- a/src/com/mbien/opencl/CLContext.java
+++ b/src/com/mbien/opencl/CLContext.java
@@ -299,26 +299,7 @@ public final class CLContext {
* MAX_COMPUTE_UNITS and MAX_CLOCK_FREQUENCY.
*/
public CLDevice getMaxFlopsDevice() {
-
- CLDevice[] clDevices = getCLDevices();
- CLDevice maxFLOPSDevice = null;
-
- int maxflops = -1;
-
- for (int i = 0; i < clDevices.length; i++) {
-
- CLDevice device = clDevices[i];
- int maxComputeUnits = device.getMaxComputeUnits();
- int maxClockFrequency = device.getMaxClockFrequency();
- int flops = maxComputeUnits*maxClockFrequency;
-
- if(flops > maxflops) {
- maxflops = flops;
- maxFLOPSDevice = device;
- }
- }
-
- return maxFLOPSDevice;
+ return CLPlatform.findMaxFlopsDevice(getCLDevices());
}
/**
diff --git a/src/com/mbien/opencl/CLPlatform.java b/src/com/mbien/opencl/CLPlatform.java
index 56ef3713..f1ecdd86 100644
--- a/src/com/mbien/opencl/CLPlatform.java
+++ b/src/com/mbien/opencl/CLPlatform.java
@@ -82,6 +82,38 @@ public final class CLPlatform {
}
+ static final CLDevice findMaxFlopsDevice(CLDevice[] devices) {
+
+ CLDevice maxFLOPSDevice = null;
+
+ int maxflops = -1;
+
+ for (int i = 0; i < devices.length; i++) {
+
+ CLDevice device = devices[i];
+ int maxComputeUnits = device.getMaxComputeUnits();
+ int maxClockFrequency = device.getMaxClockFrequency();
+ int flops = maxComputeUnits*maxClockFrequency;
+
+ if(flops > maxflops) {
+ maxflops = flops;
+ maxFLOPSDevice = device;
+ }
+ }
+
+ return maxFLOPSDevice;
+ }
+
+
+ /**
+ * Gets the device with maximal FLOPS from this platform.
+ * The device speed is estimated by calulating the product of
+ * MAX_COMPUTE_UNITS and MAX_CLOCK_FREQUENCY.
+ */
+ public CLDevice getMaxFlopsDevice() {
+ return findMaxFlopsDevice(listCLDevices());
+ }
+
/**
* Returns the platform name.
*/
diff --git a/src/com/mbien/opencl/CLProgram.java b/src/com/mbien/opencl/CLProgram.java
index ff2919e8..da0a0447 100644
--- a/src/com/mbien/opencl/CLProgram.java
+++ b/src/com/mbien/opencl/CLProgram.java
@@ -210,8 +210,37 @@ public class CLProgram {
}
/**
- * Returns the build log for this program. The contents of the log are
- * implementation dependent log can be an empty String.
+ * Returns the build log of this program on all devices. The contents of the log are
+ * implementation dependent.
+ */
+ public String getBuildLog() {
+ StringBuilder sb = new StringBuilder();
+ CLDevice[] devices = getCLDevices();
+ for (int i = 0; i < devices.length; i++) {
+ CLDevice device = devices[i];
+ sb.append(device).append(" build log:");
+ sb.append(getBuildLog(device));
+ if(i != devices.length-1)
+ sb.append("\n");
+ }
+ return sb.toString();
+ }
+
+ /**
+ * Returns the build status enum of this program for each device as Map.
+ */
+ public Map<CLDevice,Status> getBuildStatus() {
+ Map<CLDevice,Status> statusMap = new HashMap<CLDevice, Status>();
+ CLDevice[] devices = getCLDevices();
+ for (CLDevice device : devices) {
+ statusMap.put(device, getBuildStatus(device));
+ }
+ return Collections.unmodifiableMap(statusMap);
+ }
+
+ /**
+ * Returns the build log for this program on the specified device. The contents
+ * of the log are implementation dependent log can be an empty String.
*/
public String getBuildLog(CLDevice device) {
return getBuildInfoString(device.ID, CL.CL_PROGRAM_BUILD_LOG);
diff --git a/test/com/mbien/opencl/HighLevelBindingTest.java b/test/com/mbien/opencl/HighLevelBindingTest.java
index 915a5ce2..4665c27d 100644
--- a/test/com/mbien/opencl/HighLevelBindingTest.java
+++ b/test/com/mbien/opencl/HighLevelBindingTest.java
@@ -54,6 +54,7 @@ public class HighLevelBindingTest {
out.println(" profile: "+platform.getProfile());
out.println(" version: "+platform.getVersion());
out.println(" vendor: "+platform.getVendor());
+ out.println(" max FLOPS device: "+platform.getMaxFlopsDevice());
CLDevice[] clDevices = platform.listCLDevices();
for (CLDevice device : clDevices) {
@@ -95,18 +96,16 @@ public class HighLevelBindingTest {
out.println(" "+device.toString());
}
+ out.println("max FLOPS device: " + context.getMaxFlopsDevice());
+
CLProgram program = context.createProgram(getClass().getResourceAsStream("testkernels.cl")).build();
CLDevice[] programDevices = program.getCLDevices();
assertEquals(contextDevices.length, programDevices.length);
- out.println("program devices:");
- for (CLDevice device : programDevices) {
- out.println(" "+device.toString());
- out.println(" build log: "+program.getBuildLog(device));
- out.println(" build status: "+program.getBuildStatus(device));
- }
+ out.println("build log:\n"+program.getBuildLog());
+ out.println("build status:\n"+program.getBuildStatus());
String source = program.getSource();
assertFalse(source.trim().isEmpty());
@@ -178,8 +177,6 @@ public class HighLevelBindingTest {
program.release();
assertTrue(0 == context.getCLPrograms().size());
-// CLDevice device = ctx.getMaxFlopsDevice();
-// out.println("max FLOPS device: " + device);
context.release();
}