X Tutup
Skip to content

Commit 12bd9f8

Browse files
committed
JavaCL: don't try to load cached binaries for programs created from binaries! (issue #453)
1 parent 9d135b0 commit 12bd9f8

File tree

2 files changed

+19
-2
lines changed

2 files changed

+19
-2
lines changed

Core/src/main/velocity/com/nativelibs4java/opencl/CLProgram.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -732,7 +732,7 @@ public synchronized CLProgram build() throws CLBuildException {
732732
String contentSignature = null;
733733
File cacheFile = null;
734734
boolean readBinaries = false;
735-
if (isCached()) {
735+
if (!loadedFromBinary && isCached()) {
736736
try {
737737
contentSignature = computeCacheSignature();
738738
byte[] sha = java.security.MessageDigest.getInstance("MD5").digest(contentSignature.getBytes(textEncoding));

Core/src/test/java/com/nativelibs4java/opencl/BinaryKernelTest.java

Lines changed: 18 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,10 +10,10 @@
1010
import static org.bridj.Pointer.*;
1111
import com.nativelibs4java.test.MiscTestUtils;
1212
import java.util.List;
13+
import org.junit.Ignore;
1314
import org.junit.runners.Parameterized;
1415

1516
/**
16-
*
1717
* @author Kazo Csaba
1818
*/
1919
@SuppressWarnings("unchecked")
@@ -64,4 +64,21 @@ public void simpleTest() throws CLBuildException {
6464
for (int i=0; i<4; i++)
6565
assertEquals(source.get(i), target.get(i));
6666
}
67+
68+
/**
69+
* Test from issue https://github.com/ochafik/nativelibs4java/issues/453
70+
*/
71+
@Test
72+
public void cachingTest() {
73+
CLContext clcontext = JavaCL.createBestContext();
74+
CLProgram ap = clcontext.createProgram("__kernel void add(int a, int b, __global int* c) { *c = a + b; }");
75+
ap.createKernel("add");
76+
Map<CLDevice, byte[]> addBins = ap.getBinaries();
77+
Map<CLDevice, byte[]> subBins = clcontext.createProgram("__kernel void sub(int a, int b, __global int* c) { *c = a - b; }").getBinaries();
78+
CLProgram ap2 = clcontext.createProgram(addBins, "__kernel void add(int a, int b, __global int* c) { *c = a + b; }");
79+
ap2.createKernel("add");
80+
CLProgram sp2 = clcontext.createProgram(subBins, "__kernel void sub(int a, int b, __global int* c) { *c = a - b; }");
81+
sp2.setCached(true); // set to false and it works
82+
sp2.createKernel("sub");
83+
}
6784
}

0 commit comments

Comments
 (0)
X Tutup