问题标签 [optimus]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
c# - 已修改为导出变量的 C# exe 上的程序集加载错误
使用用于 Windows 桌面的 C# .NET 应用程序进行 3D 渲染。在具有双显卡配置(例如集成 Intel 视频和 NVidia)的笔记本电脑上,可能会出现问题,即用户没有将 NVidia 控制面板设置更改为更喜欢 NVidia 卡。因此,应用程序可能会选择集成视频并表现不佳。
如果是这个非托管代码,可以执行以下操作从主 exe 导出一个整数,显然 NVidia 软件会检测到这一点,然后强制应用程序使用 NVidia 卡运行,而无需用户更改控制面板设置(需要他们这样做是不现实的,并且会导致对应用程序性能的第一印象不好)。
为了使用 .NET C# 可执行文件执行上述操作(显然它必须是主 exe 而不是 DLL),我正在尝试使用以下链接中概述的方法。
http://lucasmagder.com/blog/2014/05/exporting-data-symbols-in-c-for-nvidia-optimus/
该方法是在构建后,反汇编.exe,然后修改IL,在虚拟方法的开头插入以下内容,然后重新组装修改后的IL,创建一个新的exe。
然后在运行时,它会做更多的事情来获取值集。但是,问题是当我们尝试运行时,我们会从程序集加载中得到以下错误。
搜索此错误表明这是由还包含非托管代码的托管程序集引起的,这当然正是我们正在尝试做的事情(Exception with Resolving assembly: Attempt to load an unverifiable executable with fixups)。
其他人有这方面的经验吗?我猜想什么时候创建了这个解决方法,这一切都奏效了,但也许现在程序集加载更严格了?Anyonw知道解决方法吗?
opengl - 子进程从父进程继承 nvidia 配置文件
我有一个我正在编写的应用程序需要 Nvidia GPU 才能运行,因为它使用了一些高级 OpenGL 扩展。我在 Nvidia 控制面板的 3d 设置部分添加了一个配置文件,并将其设置为使用高性能 Nvidia 处理器。
我的问题出现在具有多个 GPU 的机器上,例如板载 Intel 和 NVidia gtx 1060。如果我独立运行我的应用程序,一切都很好。但是,我的应用程序也可以通过 Adobe After Effects 打开(通过调用 ::system() 等启动)。如果 After Effects 正在使用板载(我无法控制它),那么我的应用程序也会被告知使用板载,无论其在 3d 设置中的配置文件如何。
- 这里发生了什么?为什么要继承?
- 如何防止这种情况,并确保我的应用程序使用 Nvidia GPU 打开,而不管它的父进程打开了什么?
java - 如何告诉 Java Invocation Api 使用哪个 java vm?
我正在尝试使用 c++ 中的 java 调用 api 为我在 java 中编写的游戏创建一个启动器。我希望它使用我与游戏捆绑在一起的 jre 文件夹(来自 openjdk),以便计算机上没有 Java 的人仍然可以玩游戏。
但是,这似乎在我朋友的计算机上不起作用(他没有安装 java),并且出现以下消息:“代码执行无法继续,因为找不到 jvm.dll。” 我们俩都在运行Windows 10。
我尝试将系统属性 java.home 设置为该 jre 文件夹,如下所示:
有没有人对此有任何见解?我必须使用 java 调用库而不是仅仅调用带有一些标志的 javaw.exe,因为我需要传递一个全局变量来告诉具有多个 GPU 的笔记本电脑使用更强大的 GPU。
谢谢!
nvidia - Debian 大黄蜂问题
我正在进行一个干净的最小 Debian Stretch 安装,只安装了几个图形包。我告诉了这些:
bumblebee-nvidia
但我可以用开源交换专有的bumblebee
。
我还将我的用户加入了 bumblebee 组:
重新启动后,我的英特尔卡工作正常:
但是我的 Nvidia 卡是Geforce 610M在调用时不起作用optirun
:
如果我apt
用来搜索我的卡,我会得到:
从这里我会安装nvidia-legacy-304xx-driver
,但我担心这不适用于我上面安装的其他软件包。有没有可能我也需要xserver-xorg-video-nvidia-legacy-304xx
?
谁能向我解释要安装哪些软件包以及为什么?
好吧,我等不及了,我尝试安装xserver-xorg-video-nvidia-legacy-304xx
. 看起来这个包确实与bumblebee-nvidia
包冲突。安装后我得到了这个:
我卸载了xserver-xorg-video-nvidia-legacy-304xx
并尝试安装nvidia-legacy-304xx-driver
也安装了该软件包的xserver-xorg-video-nvidia-legacy-304xx
软件包。它没有返回任何警告也没有错误,但是重启optirun glxinfo | grep OpenGL
命令后仍然失败......
看起来即使在应该是稳定的 Debian 上也没有解决方案?
就像@Antonio Orizondo Leyva 建议的那样,我安装了他建议的软件包并执行了命令sudo update-alternatives --config glx
,我必须为我的 GPU 选择不同的选项:
我尝试选择其中的每一个然后重新启动,但最终结果是相同的......除了第二个选项(nvidia
)在重新启动后说它找不到openGL.1.so
或什么......所以甚至无法使用Nvidia卡本身!?
还有其他想法吗?
c - Vulkan SDK 一次只检测到 1 个 GPU
我有一台 Optimus 笔记本(意味着它有两张显卡;一张集成显卡,一张独立显卡(专用))。它们都支持 Vulkan,我可以在我的代码中单独使用它们。但是有一个问题,我不能在同一个程序上列出或使用它们。在运行我的代码之前,我必须选择它在哪个 GPU 上运行(在 Windows 上:右键单击“myProgram.exe”-> 使用图形处理器运行,在 Linux 上:./“myProgram”用于集成 GPU,primusrun ./“myProgram”用于离散的),即使两个 GPU 同时处于活动状态,它也只会检测到我在其上运行代码的那个。
我的 GPU 是 Intel UHD Graphics 630 和 NVIDIA GeForce GTX 1050 Ti。我在 Windows 上使用 LunarG Vulkan SDK 1.1.92、Intel 驱动程序版本 25.20.100.6326、NVIDIA 驱动程序版本 416.32 和 Linux 上的 415.25。作为 C 编译器和操作系统,Windows 10 上的 MSVC 1912 和 Arch Linux 上的 gcc 8.2.1。安装了 Vulkan 运行时和 ICD 加载程序,我在两个操作系统上得到了相同的结果。
这是我的代码:
这是我得到的输出:
如果我在集成 GPU 上运行:
如果我在专用 GPU 上运行:
我期待的是:
而且我应该能够选择它们中的任何一个来在我的程序中使用,而无需在运行之前使用一些驱动程序级代码或在我的操作系统上设置它。Vulkan 毕竟是相对低级的 API。有没有办法强制列出我系统上所有活动的 GPU?
nvidia - Kubundu 20.04 在 Intel 和 Nvidia GPU 之间切换
我刚刚在我的“PC Specialist Defiance 2”笔记本电脑上全新安装了 Kubuntu 20.04(之前运行的是 Kubuntu 19.10),这是一个更名的 Clevo:
不幸的是,我无法在使用 Intel GPU 和 Nvidia GPU 之间干净利落地切换。在 19.10,我曾经能够简单地:
然后重新启动。虽然这在 Kubuntu 20.04 中仍然有效,但切换到 Nvidia GPU 会导致撕裂。为了摆脱撕裂,我创建/etc/modprobe.d/nvidia-tearing.conf
了:
然后我运行sudo update-initramfs -u
并重新启动,这解决了使用 Nvidia GPU 时的撕裂问题。但是,当我切换回 Intel GPU 时,我的笔记本电脑在启动过程中会死机。为了解决这个问题,我将上面的行注释掉,/etc/modprobe.d/nvidia-tearing.conf
然后执行一次sudo update-initramfs -u
(然后再次重新启动)。
有没有办法只nvidia-drm modeset=1
在 Nvidia GPU 模式下运行该选项?
c++ - Gtk/gtkmm glarea 队列渲染不适用于专用图形
我开始使用 gtkmm 和环氧树脂处理一个 github 项目(一个逻辑门模拟器)。我有一台安装了 debian buster 和 nvidia-bumblebee 驱动程序的 optimus 笔记本电脑,一切正常,除了如果我使用 optirun 或 primusrun 启动程序,glArea->queue_render
, 和glArea->queue_draw
函数似乎都不起作用。我必须调整窗口大小才能重新渲染 glArea 小部件。有时当我重新启动系统并编译程序时,它根本不会以 bumblebee 启动并输出以下错误:
311-0-没有可用的 gl 实现
这可能与我的系统有关,但 optirun 和 primusrun 通常可以正常工作。
任何想法可能是这个问题的原因是什么?
渲染器类:
执行:
github上的完整项目:LinuxGameGeek/logix
python - 以编程方式为基于 Python 的 OpenGL 程序设置 NvOptimusEnablement
有没有办法在 Python 脚本中使用 OpenGL(尤其是使用 Qt 的应用程序)以编程方式为基于 Python 的应用程序设置 NvOptimusEnablement 标志?
到目前为止,我看到的所有参考资料——例如在 nVidia Optimus或https://stackoverflow.com/a/39047129/6531515中以编程方式选择集成显卡——都是针对 C/C++ 的,其中标志需要设置为全局定义哪个编译成可执行文件,但显然在这种情况下不起作用。
是唯一的选择:
- 使用此标志集创建自定义 Python 解释器包装器(例如https://github.com/cprogrammer1994/optimuspy),或者
- 强制用户将 Python / pyinstaller-created-binary 显式标记为需要他们使用的每台机器的 Nvidia GPU?
opengl - 使用远程 GPU 渲染 XServer 应用程序?
我的工作区包含一个“奇怪”的设置:一个充当主工作区的虚拟服务器和另一个连接到强大的 GPU (RTX3090) 的虚拟服务器,充当渲染服务器。最近,我意识到在我的主工作区服务器上运行的某些应用程序(主要是游戏)受到显卡(3D 渲染的东西)的限制。有没有办法使用远程显卡运行位于我的主工作区机器上的应用程序进行渲染?AFAIK VirtualGl 要求应用程序托管在渲染它的机器上,远程 X 服务器具有类似的架构(需要应用程序托管在渲染服务器上)。
python - Optimus ModuleNotFoundError:没有名为“optimus.engines.vaex”的模块
当我使用 vaex 引擎创建 Optimus 对象时,出现此错误。