如何使用IDE(Netbeans,Eclipse)中的optirun(Bumblebee)使用图形驱动程序运行构建?

时间:2012-04-22 01:26:09

标签: eclipse netbeans opencl video-card

有没有人知道如何通过在IDE中调用optirun(bumblebee)使eclipse或netbeans在optimus笔记本电脑中使用显卡,以便可以使用IDE中的运行按钮在显卡内的图形卡中运行程序IDE。

在最简单的形式中,我只希望IDE执行相当于optirun ./javaproject

的操作

4 个答案:

答案 0 :(得分:1)

只需使用optirun启动IDE即可。例如,optirun eclipseoptirun netbeans

答案 1 :(得分:1)

我在Eclipse中这样做的方法是首先启动Java调试器 jdwp 并监听端口。然后使用optirun java ...启动JVM并使用jdwp连接到此端口。通过在调试配置设置(运行 - >调试配置)中创建启动组,可以在Eclipse中同时启动这两个任务。详细说明:

  1. 使用“标准(套接字侦听)”连接类型和一些任意端口创建远程Java应用程序调试配置,例如: 56789.这将端口56789上的Java调试器 jdwp 连接到虚拟机,该虚拟机接受此端口的调试连接。
  2. 现在我们需要使用 optirun 启动JVM。这可以通过外部工具配置(运行 - &gt;外部工具 - &gt;外部工具配置)完成。在“外部工具配置”窗口的左侧创建新的程序配置。您可以通过填写必填字段直接启动optirun java <additional arguments>。但是,我决定使用一个可以通过不同项目重用的shell脚本(如下所示,有一个部分缺失,使其完全可重用。我很高兴有更多有经验的Eclipse用户的帮助......) 。因此, Location 字段指向此shell脚本。脚本本身接受三个参数:项目的类路径,Java可执行文件的名称和端口号。这些参数可以传递到 Main 选项卡的 Arguments 字段中的脚本,例如

    • $ {project_classpath:$ {selected_resource_name}}
    • ExecName
    • 56789

    shell脚本如下所示,假设optirun位于PATH中:

    #!/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}
    #------------------------------------------------------------------------------
    
  3. 最后,这两个部分汇集在调试配置窗口的启动组中(运行 - &gt;调试配置)。通过单击 Launches 选项卡中的 Add 并选择适当的配置,创建一个新的Launch Group并添加两个先前生成的Debug配置。 请注意,由于步骤2中的classpath变量(即${project_classpath:${selected_resource_name}}),需要在 Package Explorer 中选择相应的包,然后单击运行调试配置按钮(确保启动组已被选中)。
  4. 这个解决方案非常适合我:我可以在Eclipse中调试Java代码,调用涉及CUDA优化的本机代码,Bumblebee只在必要时激活独立显卡。

答案 2 :(得分:0)

我在Netbeans中构建项目( F11 )并在终端中运行以下内容:

optirun java -jar path/to/javaproject/dist/javaproject.jar

请注意,如果项目中有任何java参数,则需要手动添加它。我的工作流程是这样的:

从项目中找到Java选项,打开 Project - &gt; 属性运行。在 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位驱动程序,请参阅this answer。对于其他发行版,您可能需要为Mesa,VirtualGL和nvidia-utils安装lib32-*个包。

答案 3 :(得分:0)

您还可以将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”,就可以了!