有谁知道如何通过在 IDE 中调用 optirun (bumblebee) 来使 eclipse 或 netbeans 在 Optimus 笔记本电脑中使用显卡,这样人们就可以使用 IDE 中的运行按钮在 IDE 中的显卡中运行程序。
以最简单的形式,我只希望 IDE 执行相当于optirun ./javaproject
有谁知道如何通过在 IDE 中调用 optirun (bumblebee) 来使 eclipse 或 netbeans 在 Optimus 笔记本电脑中使用显卡,这样人们就可以使用 IDE 中的运行按钮在 IDE 中的显卡中运行程序。
以最简单的形式,我只希望 IDE 执行相当于optirun ./javaproject
只需使用 optirun 启动 IDE。例如,optirun eclipse
或optirun netbeans
我在 Eclipse 中这样做的方式是首先启动 Java 调试器jdwp并监听一个端口。然后启动 JVMoptirun java ...
并使用 jdwp 连接到这个端口。通过在调试配置设置(运行 -> 调试配置)中创建启动组,可以在 Eclipse 中同时启动这两个任务。详细地:
现在我们需要使用optirun启动一个 JVM 。这可以通过外部工具配置(运行 -> 外部工具 -> 外部工具配置)来完成。在“外部工具配置”窗口的左侧创建一个新的程序配置。您可以直接从optirun java <additional arguments>
填写必填字段开始。但是,我决定使用一个可被不同项目重用的 shell 脚本(如下所示,缺少一个部分以使其完全可重用。我很高兴从更有经验的 Eclipse 用户那里获得任何帮助......) . 因此,Location字段指向这个 shell 脚本。脚本本身接受三个参数:类路径对于项目,Java 可执行文件的名称和端口号。这些参数可以传递给主选项卡的参数字段中的脚本,例如
假设 optirun 在您的 PATH 中,shell 脚本如下所示:
#!/bin/sh
CLASS_PATH=${1}
JAVA_EXECUTABLE=${2}
PORT=${3}
# TODO: fix this java library path: pass it as an argument as well. Is there an Eclipse variable which stores this?
JAVA_LIBRARY_PATH=/usr/local/share/OpenCV/java
#------------------------------------------------------------------------------
optirun ${JAVA_BIN} -agentlib:jdwp=transport=dt_socket,suspend=y,address=localhost:${PORT} -Djava.library.path=${JAVA_LIBRARY_PATH} -Dfile.encoding=UTF-8 -classpath ${CLASS_PATH} ${JAVA_EXECUTABLE}
#------------------------------------------------------------------------------
${project_classpath:${selected_resource_name}}
这个解决方案非常适合我:我可以在 Eclipse 中调试 Java 代码,该代码调用涉及 CUDA 优化的本机代码,并且 Bumblebee 仅在必要时激活独立显卡。
我在 Netbeans ( F11) 中构建项目并在终端中运行以下命令:
optirun java -jar path/to/javaproject/dist/javaproject.jar
请注意,如果您的项目中有任何 java 参数,则需要手动添加。我的工作流程是这样的:
从项目中找到 Java 选项,打开Project -> Properties,Run。在VM 选项中,我看到了-Djava.library.path=lwjgl/native/windows;:lwjgl/native/linux
. 我还有一些要传递给的参数main(String[])
。有了这些信息,我打开一个终端并运行:
cd path/to/javaproject
optirun java -Djava.library.path=lwjgl/native/windows;:lwjgl/native/linux \
-jar dist/javaproject.jar some paremeters
另一个提示,如果您必须频繁打开和关闭程序,请optirun bash
在不同的选项卡中运行,以便准备使用显卡变得更快。或者,您可以运行optirun netbeans
,但这意味着即使您正在编程,nvidia 卡也将始终打开,这会增加功耗并增加热量。
重要提示:如果您在 64 位机器上使用 32 位 JVM 或 Java 库,您还需要安装 32 位驱动程序和库。对于 Ubuntu,nvidia 软件包已经包含 32 位驱动程序,请参阅此答案。对于其他发行版,您可能需要lib32-*
为 Mesa、VirtualGL 和 nvidia-utils 安装软件包。
您还可以将 java 重命名为 java_real 并将这部分代码用作您的 java 命令:
#!/bin/bash
path=$(dirname $(readlink -f $0))
args=""
runner="$path/java_real"
for var in "$@"
do
if [ "$var" = "-3d" ]; then
runner="primusrun $runner"
else
args="$args $var"
fi
done
$runner $args
注意:我必须在 /usr/lib/jvm/java-7-openjdk-amd64/jre/bin 中执行此操作,而不是在 /usr/bin 中才能使其与 Eclipse 一起使用。
在 Eclipse 中,只需在程序参数中添加“-3d”就可以了!