gpt4 book ai didi

java - 如何通过 ProcessBuilder 在 Java 中调用 CUDA C 应用程序?

转载 作者:行者123 更新时间:2023-12-01 14:53:59 31 4
gpt4 key购买 nike

我有一个非常复杂的应用程序,它使用 CUDA 并用 C 语言编写。该应用程序仅是命令行,现在我想使用 Java Swing 构建一个 GUI。

我不想重写 C 代码,因此我使用 ProcessBuilder 对象调用命令行版本。这样我就可以从中读取消息并显示在 GUI 内的控制台上。

这是我正在使用的代码:

String command = "myApp";
pb = new ProcessBuilder("bash", "-c",command);
pb.redirectErrorStream(true);
Process shell;
try {
shell = pb.start();
InputStream shellIn = shell.getInputStream();
Drawer.writeToLog(convertStreamToStr(shellIn));
shellIn.close();
} catch (IOException e) {
e.printStackTrace();
}

public String convertStreamToStr(InputStream is) throws IOException{
if(is != null){
Writer writer = new StringWriter();

char[] buffer = new char[1024];
Reader reader = new BufferedReader(new InputStreamReader(is,"UTF-8"));
int n;
while((n = reader.read(buffer)) != -1){
writer.write(buffer,0,n);
}
is.close();
return writer.toString();
}else{
return "";
}
}

如果我尝试类似“ls”命令,它工作正常。但是,对于我的应用程序,我收到此错误:

./myApp: error while loading shared libraries: libcudart.so.5.0: cannot open shared object file: No such file or directory

CUDA 已在我的计算机中安装并正确配置,我可以从终端正确执行此应用程序。我认为该错误来自 Java 虚拟机。

如何修复它?

最佳答案

这段代码对我有用,我刚刚测试过:

System.out.printf("[Starter#main] !\n");
final ProcessBuilder builder = new ProcessBuilder("absolute/path_to/your/executable");
builder.redirectErrorStream(true);
builder.environment().put("LD_LIBRARY_PATH",
"/usr/local/cuda/lib64:/usr/local/cuda/lib");
final Process start = builder.start();
final InputStream outputStream = start.getInputStream();
final BufferedReader reader = new BufferedReader(new InputStreamReader(outputStream));
String s;
while ((s = reader.readLine()) != null) {
System.out.printf("[Starter#main] %s\n", s);
}

陷阱:

  1. 确保您的应用程序位数与您的工具包相匹配。
  2. Mac OS X 变量称为“DYLD_LIBRARY_PATH”

另请注意:

  1. 生成的进程将从您的 Java 进程继承环境,也就是说,如果您按照 CUDA 工具包安装程序的建议配置 PATH 和 LD_LIBRARY_PATH 运行 Java 应用程序,它应该可以正常工作。
  2. 您可以在 shell 脚本中外部化变量设置并启动您的应用 - 那么您所要做的就是使用给定的脚本运行 shell。

关于java - 如何通过 ProcessBuilder 在 Java 中调用 CUDA C 应用程序?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14486357/

31 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com