java - 无法在 Windows 7 64 位、Sun JDK 7 和 IntelliJ 11.1 上通过 CUDA 4.0 运行 JCUDA 0.4.1

标签 java windows-7 64-bit nvidia jcuda

问题列出了所有相关版本。

我正在尝试运行 http://www.jcuda.org 处的示例文件之一:JCublasMatrixInvert.java。

我已经安装了 NVIDIA CUDA 驱动程序;我已经下载了 JCUDA 0.4.1 绑定(bind)并将其/lib 目录添加到我的 java.library.path 中。以下是我运行时设置的JVM参数:

-ea -XX:+UseParNewGC -XX:+UseNUMA -XX:PermSize=128m -XX:MaxPermSize=256m -Xmx1024m -Djava.library.path=F:\Projects\Java\learning\out\production\learning

然而,当我尝试运行该类时,我得到以下堆栈跟踪:

Error while loading native library "JCublas-windows-x86_64" with base name "JCublas"
Operating system name: Windows 7
Architecture         : amd64
Architecture bit size: 64
Stack trace from the attempt to load the library as a resource:
java.lang.NullPointerException: No resource found with name '/lib/JCublas-windows-x86_64.dll'
    at jcuda.LibUtils.loadLibraryResource(LibUtils.java:151)
    at jcuda.LibUtils.loadLibrary(LibUtils.java:83)
    at jcuda.jcublas.JCublas.initialize(JCublas.java:82)
    at jcuda.jcublas.JCublas.<clinit>(JCublas.java:70)
    at matrix.jcuda.JCublasMatrixInvert.main(JCublasMatrixInvert.java:34)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke(Method.java:601)
    at com.intellij.rt.execution.application.AppMain.main(AppMain.java:120)
Stack trace from the attempt to load the library as a file:
java.lang.UnsatisfiedLinkError: F:\Projects\Java\learning\out\production\learning\JCublas-windows-x86_64.dll: Can't find dependent libraries
    at java.lang.ClassLoader$NativeLibrary.load(Native Method)
    at java.lang.ClassLoader.loadLibrary0(ClassLoader.java:1928)
    at java.lang.ClassLoader.loadLibrary(ClassLoader.java:1854)
    at java.lang.Runtime.loadLibrary0(Runtime.java:845)
    at java.lang.System.loadLibrary(System.java:1084)
    at jcuda.LibUtils.loadLibrary(LibUtils.java:94)
    at jcuda.jcublas.JCublas.initialize(JCublas.java:82)
    at jcuda.jcublas.JCublas.<clinit>(JCublas.java:70)
    at matrix.jcuda.JCublasMatrixInvert.main(JCublasMatrixInvert.java:34)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke(Method.java:601)
    at com.intellij.rt.execution.application.AppMain.main(AppMain.java:120)

Exception in thread "main" java.lang.UnsatisfiedLinkError: Could not load the native library
    at jcuda.LibUtils.loadLibrary(LibUtils.java:129)
    at jcuda.jcublas.JCublas.initialize(JCublas.java:82)
    at jcuda.jcublas.JCublas.<clinit>(JCublas.java:70)
    at matrix.jcuda.JCublasMatrixInvert.main(JCublasMatrixInvert.java:34)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke(Method.java:601)
    at com.intellij.rt.execution.application.AppMain.main(AppMain.java:120)

Process finished with exit code 1

我可以在路径中看到据称丢失的 dll

F:\Projects\Java\learning\out\production\learning\JCublas-windows-x86_64.dll

我错过了什么?我究竟做错了什么?任何成功运行此示例的人都可以给我建议吗?谢谢。

最佳答案

如果标准方法太难 - 我建议您使用 JCuda 的 mavenized 版本。您可以在此处克隆标准项目 - https://github.com/MysterionRise/mavenized-jcuda它在 Windows/Linux 32/64 位上自动工作

您需要做的就是运行:

  • 您需要在此处为​​您的平台安装 Cuda 5.5 - https://developer.nvidia.com/cuda-downloads
  • 调用 mvn clean package 构建项目
  • 调用 mvn exec:exec 以使用“Hello, JCuda”示例运行主类:)
  • 之后,您可以用 JCuda 代码替换主类

关于java - 无法在 Windows 7 64 位、Sun JDK 7 和 IntelliJ 11.1 上通过 CUDA 4.0 运行 JCUDA 0.4.1,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9457252/

相关文章:

java - 如何修复 Java.lang.StackOverFlow 异常?

ruby - cucumber 在 Windows 中不显示彩色输出

wpf - Windows 7 和 8 的图像资源命名不同?

windows - CreateThread() 在 64 位 Windows 上失败,在 32 位 Windows 上工作。为什么?

python - 在 Mac OS X 64 位上编译 S-Transform python 包装器

java - Gradle java 9+ 资源文件夹名称冲突

java - 从数组创建列表 - 3 种方法哪一种更好

Java URLConnection utf-8 编码不起作用

windows - HKLM注册怀疑

c++ - 从文件中读取 64 位整数字符串