从junit test调用JOCL.org时的CL_PLATFORM_NOT_FOUND_KHR

时间:2016-03-13 18:45:01

标签: junit jocl bazel

我在下面创建了一个最小的示例来演示我的问题。

public class MinimalExample {
    public static void main(String[] args) {
        new MinimalExample().test();
    }
    @Test
    public void test() {
        CL.setExceptionsEnabled(true);
        final cl_platform_id[] platforms = new cl_platform_id[1];
        CL.clGetPlatformIDs(platforms.length, platforms, null);
        System.out.println("Done");
    }
}

当我将其作为应用程序运行时,我按预期获得输出“完成”。 当我将其作为junit测试运行时,我收到以下错误:

1) test(MinimalExample)
org.jocl.CLException: CL_PLATFORM_NOT_FOUND_KHR
    at org.jocl.CL.checkResult(CL.java:787)
    at org.jocl.CL.clGetPlatformIDs(CL.java:2152)
    at MinimalExample.test(MinimalExample.java:15)

看来junit正在某种无法访问GPU的沙盒中运行。但是,我看到其他人通过junit测试成功运行了JOCL.org代码。示例:Correct way to setup and tear down an openCL unit test in a test suite?我不清楚有什么不同。有没有人知道任何沙盒可以解释这个?

编辑:如果重要,

$ java -version
openjdk version "1.8.0_66-internal"
OpenJDK Runtime Environment (build 1.8.0_66-internal-b17)
OpenJDK 64-Bit Server VM (build 25.66-b17, mixed mode)
$ uname -a
Linux machine-name 4.2.0-30-generic #36-Ubuntu SMP Fri Feb 26 00:58:07 UTC 2016 x86_64 x86_64 x86_64 GNU/Linux
$ nvidia-smi
Tue Mar 15 18:16:36 2016       
+------------------------------------------------------+                       
| NVIDIA-SMI 352.63     Driver Version: 352.63         | 
<truncated>

编辑#2;传奇继续: 我决定最好的做法是尽可能手动地接近问题。所以我手动运行它。

$ java -cp minimal_test.runfiles/external/hamcrest-all/jar/hamcrest-all-1.3.jar:minimal_test.runfiles/external/jocl/jar/jocl-0.2.0-RC00.jar:minimal_test.runfiles/external/junit/jar/junit-4.12.jar:minimal_test.runfiles/external/truth/jar/truth-0.27.jar:minimal_test.jar org.junit.runner.JUnitCore MinimalExample
JUnit version 4.12
.Done

Time: 0.112

OK (1 test)

它可以从命令行运行。它在eclipse中不起作用。它不适用于bazel。

编辑#3;

我希望等到完全解决方案,然后关闭它,但我提交的错误已经为bazel用例(但不是eclipse)产生了一个解决方法。将tags = ['local'],添加到BUILD文件中可以在没有沙箱的情况下运行它,从而允许联系GPU。

0 个答案:

没有答案