diff --git a/com.amd.aparapi.jni/src/cpp/invoke/OpenCLJNI.cpp b/com.amd.aparapi.jni/src/cpp/invoke/OpenCLJNI.cpp index a0916bc09544bb6077dcc1ed55da0f22549374e8..7e499fa7255273af374c207a1ddfa7ef5a78e5bc 100644 --- a/com.amd.aparapi.jni/src/cpp/invoke/OpenCLJNI.cpp +++ b/com.amd.aparapi.jni/src/cpp/invoke/OpenCLJNI.cpp @@ -250,6 +250,16 @@ void getArg(JNIEnv *jenv, cl_context context, cl_command_queue commandQueue, cl_ } } +JNI_JAVA(jobject, OpenCLJNI, getProfileInfo) + (JNIEnv *jenv, jobject jobj, jobject programInstance) { + jobject returnList = JNIHelper::createInstance(jenv, ArrayListClass, VoidReturn ); + for (int i=0; i< 5; i++){ + jobject writeProfileInfo = NULL; + JNIHelper::callVoid(jenv, returnList, "add", ArgsBooleanReturn(ObjectClassArg), writeProfileInfo); + } + return(returnList); +} + JNI_JAVA(void, OpenCLJNI, disposeProgram) (JNIEnv *jenv, jobject jobj, jobject programInstance) { //fprintf(stderr, "dispose program \n"); diff --git a/com.amd.aparapi/src/java/com.amd.aparapi.iml b/com.amd.aparapi/src/java/com.amd.aparapi.iml new file mode 100644 index 0000000000000000000000000000000000000000..d5c074327501eaec3fe451ed56ce5160f1e97e16 --- /dev/null +++ b/com.amd.aparapi/src/java/com.amd.aparapi.iml @@ -0,0 +1,12 @@ +<?xml version="1.0" encoding="UTF-8"?> +<module type="JAVA_MODULE" version="4"> + <component name="NewModuleRootManager" inherit-compiler-output="true"> + <exclude-output /> + <content url="file://$MODULE_DIR$"> + <sourceFolder url="file://$MODULE_DIR$/src" isTestSource="false" /> + </content> + <orderEntry type="inheritedJdk" /> + <orderEntry type="sourceFolder" forTests="false" /> + </component> +</module> + diff --git a/com.amd.aparapi/src/java/com/amd/aparapi/device/OpenCLDevice.java b/com.amd.aparapi/src/java/com/amd/aparapi/device/OpenCLDevice.java index 9793d4c7db3424f8ac95f3968c071c9429c8d6c9..4ec4cbcfaa81691f510bd996542346c3b3bb83a0 100644 --- a/com.amd.aparapi/src/java/com/amd/aparapi/device/OpenCLDevice.java +++ b/com.amd.aparapi/src/java/com/amd/aparapi/device/OpenCLDevice.java @@ -1,5 +1,6 @@ package com.amd.aparapi.device; +import com.amd.aparapi.ProfileInfo; import java.io.BufferedReader; import java.io.IOException; import java.io.InputStream; @@ -180,6 +181,12 @@ public class OpenCLDevice extends Device{ disposed=true; } else if (method.getName().equals("end")) { System.out.println("end not implemented"); + } else if (method.getName().equals("getProfileInfo")){ + // public List<ProfileInfo> getProfileInfo() { + // return (kernelRunner.getProfileInfo()); + // } + System.out.println("get profile info"); + proxy = (Object)program.getProfileInfo(); } } return proxy; @@ -268,7 +275,8 @@ public class OpenCLDevice extends Device{ || _methods.getName().equals("get") || _methods.getName().equals("dispose") || _methods.getName().equals("begin") - || _methods.getName().equals("end")); + || _methods.getName().equals("end") + || _methods.getName().equals("getProfileInfo")); } private String streamToString(InputStream _inputStream) { diff --git a/com.amd.aparapi/src/java/com/amd/aparapi/internal/jni/KernelRunnerJNI.java b/com.amd.aparapi/src/java/com/amd/aparapi/internal/jni/KernelRunnerJNI.java index a672093fe97114a2e1fe4d5ed1fc63c73bb7e5bf..f8020cdecf2a7bdcae32dfc63521adeedb75e783 100644 --- a/com.amd.aparapi/src/java/com/amd/aparapi/internal/jni/KernelRunnerJNI.java +++ b/com.amd.aparapi/src/java/com/amd/aparapi/internal/jni/KernelRunnerJNI.java @@ -286,12 +286,11 @@ public abstract class KernelRunnerJNI{ * synchronized to avoid race in clGetPlatformIDs() in OpenCL lib problem should fixed in some future OpenCL version * * @param _kernel + * @param _device * @param _flags - * @param numProcessors - * @param maxJTPLocalSize * @return */ - @DocMe protected native synchronized long initJNI(Kernel _kernel, OpenCLDevice device, int _flags); + @DocMe protected native synchronized long initJNI(Kernel _kernel, OpenCLDevice _device, int _flags); protected native int getJNI(long _jniContextHandle, Object _array); @@ -305,13 +304,5 @@ public abstract class KernelRunnerJNI{ protected native String getExtensionsJNI(long _jniContextHandle); - // @Deprecated protected native int getMaxWorkGroupSizeJNI(long _jniContextHandle); - - // @Deprecated protected native int getMaxWorkItemSizeJNI(long _jniContextHandle, int _index); - - // @Deprecated protected native int getMaxComputeUnitsJNI(long _jniContextHandle); - - // @Deprecated protected native int getMaxWorkItemDimensionsJNI(long _jniContextHandle); - protected native synchronized List<ProfileInfo> getProfileInfoJNI(long _jniContextHandle); } diff --git a/com.amd.aparapi/src/java/com/amd/aparapi/internal/jni/OpenCLJNI.java b/com.amd.aparapi/src/java/com/amd/aparapi/internal/jni/OpenCLJNI.java index b69f5aebbd92d19aa83eb94c2434b4c1c3736d3f..9fa182204030714805caa1872f64ce469b31d9c5 100644 --- a/com.amd.aparapi/src/java/com/amd/aparapi/internal/jni/OpenCLJNI.java +++ b/com.amd.aparapi/src/java/com/amd/aparapi/internal/jni/OpenCLJNI.java @@ -1,5 +1,6 @@ package com.amd.aparapi.internal.jni; +import com.amd.aparapi.ProfileInfo; import java.util.List; import com.amd.aparapi.device.OpenCLDevice; @@ -26,6 +27,8 @@ public abstract class OpenCLJNI{ protected native void disposeProgram(OpenCLProgram openCLProgram); + protected native List<ProfileInfo> getProfileInfo(OpenCLProgram openCLProgram); + protected native void remap(OpenCLProgram program, OpenCLMem mem, long address); protected native byte[] getBytes(String className); diff --git a/com.amd.aparapi/src/java/com/amd/aparapi/internal/kernel/KernelRunner.java b/com.amd.aparapi/src/java/com/amd/aparapi/internal/kernel/KernelRunner.java index 26e46c4a376adc23d75a035ed6844a9abd690f12..926546097193c41848212f5fe151811bbb669600 100644 --- a/com.amd.aparapi/src/java/com/amd/aparapi/internal/kernel/KernelRunner.java +++ b/com.amd.aparapi/src/java/com/amd/aparapi/internal/kernel/KernelRunner.java @@ -114,7 +114,7 @@ public class KernelRunner extends KernelRunnerJNI{ /** * <code>Kernel.dispose()</code> delegates to <code>KernelRunner.dispose()</code> which delegates to <code>disposeJNI()</code> to actually close JNI data structures.<br/> * - * @see KernelRunner#disposeJNI() + * @see KernelRunnerJNI#disposeJNI() */ public void dispose() { if (kernel.getExecutionMode().isOpenCL()) { @@ -218,7 +218,7 @@ public class KernelRunner extends KernelRunnerJNI{ /** * Execute using a Java thread pool. Either because we were explicitly asked to do so, or because we 'fall back' after discovering an OpenCL issue. * - * @param _globalSize + * @param _range * The globalSize requested by the user (via <code>Kernel.execute(globalSize)</code>) * @param _passes * The # of passes requested by the user (via <code>Kernel.execute(globalSize, passes)</code>). Note this is usually defaulted to 1 via <code>Kernel.execute(globalSize)</code>. diff --git a/com.amd.aparapi/src/java/com/amd/aparapi/internal/opencl/OpenCLKernel.java b/com.amd.aparapi/src/java/com/amd/aparapi/internal/opencl/OpenCLKernel.java index 19c065927c35121d1a93c81e05f97be9d5b881e2..bc464a0115f0994ad18e6c03f36f28824b009333 100644 --- a/com.amd.aparapi/src/java/com/amd/aparapi/internal/opencl/OpenCLKernel.java +++ b/com.amd.aparapi/src/java/com/amd/aparapi/internal/opencl/OpenCLKernel.java @@ -1,5 +1,7 @@ package com.amd.aparapi.internal.opencl; +import com.amd.aparapi.ProfileInfo; +import com.amd.aparapi.internal.kernel.KernelRunner; import java.util.List; import com.amd.aparapi.internal.jni.OpenCLJNI; @@ -60,4 +62,6 @@ public class OpenCLKernel extends OpenCLJNI{ public void dispose(){ disposeKernel(this); } + + } diff --git a/com.amd.aparapi/src/java/com/amd/aparapi/internal/opencl/OpenCLProgram.java b/com.amd.aparapi/src/java/com/amd/aparapi/internal/opencl/OpenCLProgram.java index 23855513e8921a91d137b19e8c2622fe5f2e7481..91ecff5c7976c50eec64bcc5836bf7c5d2c56192 100644 --- a/com.amd.aparapi/src/java/com/amd/aparapi/internal/opencl/OpenCLProgram.java +++ b/com.amd.aparapi/src/java/com/amd/aparapi/internal/opencl/OpenCLProgram.java @@ -1,6 +1,8 @@ package com.amd.aparapi.internal.opencl; +import com.amd.aparapi.ProfileInfo; import java.util.HashMap; +import java.util.List; import java.util.Map; import com.amd.aparapi.device.OpenCLDevice; @@ -88,4 +90,8 @@ public class OpenCLProgram extends OpenCLJNI{ public void dispose(){ disposeProgram(this); } + + public List<ProfileInfo> getProfileInfo(){ + return(getProfileInfo(this)); + } } diff --git a/com.amd.aparapi/src/java/com/amd/aparapi/opencl/OpenCL.java b/com.amd.aparapi/src/java/com/amd/aparapi/opencl/OpenCL.java index 134622506dc755e4c94a5a6aaea24e3ddd639ab4..8fd113c9e529d989281c192df86c51c6a82eed50 100644 --- a/com.amd.aparapi/src/java/com/amd/aparapi/opencl/OpenCL.java +++ b/com.amd.aparapi/src/java/com/amd/aparapi/opencl/OpenCL.java @@ -1,9 +1,11 @@ package com.amd.aparapi.opencl; +import com.amd.aparapi.ProfileInfo; import java.lang.annotation.ElementType; import java.lang.annotation.Retention; import java.lang.annotation.RetentionPolicy; import java.lang.annotation.Target; +import java.util.List; public interface OpenCL<T> { @@ -106,4 +108,6 @@ public interface OpenCL<T> { public T end(); public T dispose(); + + public List<ProfileInfo> getProfileInfo(); } diff --git a/com.amd.aparapi/src/java/com/amd/aparapi/opencl/OpenCLAdapter.java b/com.amd.aparapi/src/java/com/amd/aparapi/opencl/OpenCLAdapter.java index 5681b3af86e032f2c8dfccd04cf120810b620b3f..7568fc2ec44a85361c8d4a3f5c1d6bac54e5e8f9 100644 --- a/com.amd.aparapi/src/java/com/amd/aparapi/opencl/OpenCLAdapter.java +++ b/com.amd.aparapi/src/java/com/amd/aparapi/opencl/OpenCLAdapter.java @@ -1,5 +1,9 @@ package com.amd.aparapi.opencl; +import com.amd.aparapi.ProfileInfo; +import java.util.ArrayList; +import java.util.List; + public class OpenCLAdapter<T> implements OpenCL<T>{ @SuppressWarnings("unchecked") public T put(byte[] array) { @@ -70,4 +74,8 @@ public class OpenCLAdapter<T> implements OpenCL<T>{ return ((T) this); } + public List<ProfileInfo> getProfileInfo(){ + return(new ArrayList<ProfileInfo>()); + } + } diff --git a/examples/javaonedemo/nbody.sh b/examples/javaonedemo/nbody.sh index 74160f0deab592118bfcde90b70156b0646c95ac..7505a7dbbf66647752742c7969db171abf601d05 100644 --- a/examples/javaonedemo/nbody.sh +++ b/examples/javaonedemo/nbody.sh @@ -1,4 +1,4 @@ -#!/bin/bash -java -Djava.library.path=../../com.amd.aparapi.jni/dist:../third-party/jogamp \ - -classpath ../third-party/jogamp/gluegen-rt.jar:../third-party/jogamp/jogl-all.jar:../../com.amd.aparapi/dist/aparapi.jar:javaonedemo.jar \ - com.amd.aparapi.examples.javaonedemo.NBody +#!/bin/bash +java -Djava.library.path=../../com.amd.aparapi.jni/dist:../third-party/jogamp \ + -classpath ../third-party/jogamp/gluegen-rt.jar:../third-party/jogamp/jogl-all.jar:../../com.amd.aparapi/dist/aparapi.jar:javaonedemo.jar \ + com.amd.aparapi.examples.javaonedemo.NBody diff --git a/samples/extension/src/com/amd/aparapi/sample/extension/SquareExample.java b/samples/extension/src/com/amd/aparapi/sample/extension/SquareExample.java index b954226ed50cf3b3f7defa99fd75e63c86e25a62..9c6f2a608b9d9d77ee75ecfc6e104c1f03b7b588 100644 --- a/samples/extension/src/com/amd/aparapi/sample/extension/SquareExample.java +++ b/samples/extension/src/com/amd/aparapi/sample/extension/SquareExample.java @@ -1,11 +1,13 @@ package com.amd.aparapi.sample.extension; +import com.amd.aparapi.ProfileInfo; import com.amd.aparapi.Range; import com.amd.aparapi.device.Device; import com.amd.aparapi.device.OpenCLDevice; import com.amd.aparapi.opencl.OpenCL; import com.amd.aparapi.opencl.OpenCL.Resource; import com.amd.aparapi.opencl.OpenCL.Source; +import java.util.List; public class SquareExample{ @@ -57,7 +59,7 @@ public class SquareExample{ if (device instanceof OpenCLDevice) { final OpenCLDevice openclDevice = (OpenCLDevice) device; - for (int l=0; l<1000; l++){ + for (int l=0; l<5; l++){ final SquarerWithResource squarer = openclDevice.bind(SquarerWithResource.class); squarer.square(range, in, squares); @@ -71,8 +73,12 @@ public class SquareExample{ for (int i = 0; i < size; i++) { System.out.println(l+" "+ in[i] + " " + squares[i] + " " + quads[i]); } - + List<ProfileInfo> profileInfo =squarer.getProfileInfo(); + for (ProfileInfo pi:profileInfo){ + System.out.println("whooo"); + } squarer.dispose(); + } } }