Skip to content
Snippets Groups Projects
Commit 7025cd28 authored by Gary Frost's avatar Gary Frost
Browse files

for issue 120 release kernel and program ids

parent 49bef1c8
No related branches found
No related tags found
No related merge requests found
...@@ -250,7 +250,14 @@ void getArg(JNIEnv *jenv, cl_context context, cl_command_queue commandQueue, cl_ ...@@ -250,7 +250,14 @@ void getArg(JNIEnv *jenv, cl_context context, cl_command_queue commandQueue, cl_
} }
} }
JNI_JAVA(void, OpenCLJNI, dispose) JNI_JAVA(void, OpenCLJNI, disposeProgram)
(JNIEnv *jenv, jobject jobj, jobject programInstance) {
fprintf(stderr, "dispose program \n");
cl_program program = OpenCLProgram::getProgram(jenv, programInstance);
clReleaseProgram(program);
}
JNI_JAVA(void, OpenCLJNI, disposeKernel)
(JNIEnv *jenv, jobject jobj, jobject kernelInstance) { (JNIEnv *jenv, jobject jobj, jobject kernelInstance) {
cl_kernel kernel = OpenCLKernel::getKernel(jenv, kernelInstance); cl_kernel kernel = OpenCLKernel::getKernel(jenv, kernelInstance);
jobject programInstance = OpenCLKernel::getProgramInstance(jenv, kernelInstance); jobject programInstance = OpenCLKernel::getProgramInstance(jenv, kernelInstance);
...@@ -276,6 +283,7 @@ JNI_JAVA(void, OpenCLJNI, dispose) ...@@ -276,6 +283,7 @@ JNI_JAVA(void, OpenCLJNI, dispose)
} }
} }
} }
clReleaseKernel(kernel);
} }
/** /**
......
...@@ -104,13 +104,17 @@ public class OpenCLDevice extends Device{ ...@@ -104,13 +104,17 @@ public class OpenCLDevice extends Device{
private final Map<String, OpenCLKernel> map; private final Map<String, OpenCLKernel> map;
private final OpenCLProgram program; private final OpenCLProgram program;
private boolean disposed = false;
public OpenCLInvocationHandler(OpenCLProgram _program, Map<String, OpenCLKernel> _map) { public OpenCLInvocationHandler(OpenCLProgram _program, Map<String, OpenCLKernel> _map) {
program = _program; program = _program;
map = _map; map = _map;
disposed = false;
} }
@Override public Object invoke(Object proxy, Method method, Object[] args) throws Throwable { @Override public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
if (disposed){
throw new IllegalStateException("bound interface already disposed");
}
if (!isReservedInterfaceMethod(method)) { if (!isReservedInterfaceMethod(method)) {
final OpenCLKernel kernel = map.get(method.getName()); final OpenCLKernel kernel = map.get(method.getName());
if (kernel != null) { if (kernel != null) {
...@@ -171,10 +175,9 @@ public class OpenCLDevice extends Device{ ...@@ -171,10 +175,9 @@ public class OpenCLDevice extends Device{
for (OpenCLKernel k:map.values()){ for (OpenCLKernel k:map.values()){
k.dispose(); k.dispose();
} }
// args = map.get(method.getName()); program.dispose();
// for (OpenCLArgDescriptor argDescriptor:args){ map.clear();
disposed=true;
// }
} else if (method.getName().equals("end")) { } else if (method.getName().equals("end")) {
System.out.println("end not implemented"); System.out.println("end not implemented");
} }
......
...@@ -22,7 +22,9 @@ public abstract class OpenCLJNI{ ...@@ -22,7 +22,9 @@ public abstract class OpenCLJNI{
protected native void invoke(OpenCLKernel openCLKernel, Object[] args); protected native void invoke(OpenCLKernel openCLKernel, Object[] args);
protected native void dispose(OpenCLKernel openCLKernel); protected native void disposeKernel(OpenCLKernel openCLKernel);
protected native void disposeProgram(OpenCLProgram openCLProgram);
protected native void remap(OpenCLProgram program, OpenCLMem mem, long address); protected native void remap(OpenCLProgram program, OpenCLMem mem, long address);
......
...@@ -58,6 +58,6 @@ public class OpenCLKernel extends OpenCLJNI{ ...@@ -58,6 +58,6 @@ public class OpenCLKernel extends OpenCLJNI{
} }
public void dispose(){ public void dispose(){
dispose(this); disposeKernel(this);
} }
} }
...@@ -84,4 +84,8 @@ public class OpenCLProgram extends OpenCLJNI{ ...@@ -84,4 +84,8 @@ public class OpenCLProgram extends OpenCLJNI{
addressToMem.remove(_oldAddress); addressToMem.remove(_oldAddress);
addressToMem.put(_address, _mem); addressToMem.put(_address, _mem);
} }
public void dispose(){
disposeProgram(this);
}
} }
...@@ -57,20 +57,23 @@ public class SquareExample{ ...@@ -57,20 +57,23 @@ public class SquareExample{
if (device instanceof OpenCLDevice) { if (device instanceof OpenCLDevice) {
final OpenCLDevice openclDevice = (OpenCLDevice) device; final OpenCLDevice openclDevice = (OpenCLDevice) device;
for (int l=0; l<1000; l++){
final SquarerWithResource squarer = openclDevice.bind(SquarerWithResource.class); final SquarerWithResource squarer = openclDevice.bind(SquarerWithResource.class);
squarer.square(range, in, squares); squarer.square(range, in, squares);
for (int i = 0; i < size; i++) { for (int i = 0; i < size; i++) {
System.out.println(in[i] + " " + squares[i]); System.out.println(l+" "+in[i] + " " + squares[i]);
} }
squarer.square(range, squares, quads); // squarer.square(range, squares, quads);
for (int i = 0; i < size; i++) { // for (int i = 0; i < size; i++) {
System.out.println(in[i] + " " + squares[i] + " " + quads[i]); // System.out.println(l+" "+ in[i] + " " + squares[i] + " " + quads[i]);
} //}
squarer.dispose(); squarer.dispose();
}
} }
} }
} }
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment