2

我的核心问题是我需要在一个 EC2 GPU 实例上同时运行多个 OpenGL 可执行文件;尝试执行此操作时,我正在观察不确定的段错误。相同的程序在我的 Macbook Pro 上运行良好(并发)。

该应用程序的工作原理如下:

  • python 脚本启动多个工作程序可执行文件(即来自线程池的并发subprocess.call()调用multiprocessing.pool.ThreadPool)。python 脚本提供一个 JSON 文件作为 worker 输入,worker 将 JSON 写入文件。
  • 每个 worker 都是一个 C++ 程序,它使用片段着色器和渲染到纹理管道在 OpenGL 中进行一些无头图像渲染。我尝试过同时使用 Glut 和 GLX 渲染上下文。

我相信 python 脚本和 C++ 工作者都没有重大错误,因为整个应用程序在以下情况下运行良好:

  • 在 EC2 GPU 实例上运行单个工作器
  • 在我的 Macbook (OSX 10.7.4) 上运行一名或多名工作人员

我观察到的具体错误是,在执行几分钟后,一个或多个工作人员将在 OpenGL 调用(例如glTexSubImage2D,等)中出现段错误。glDrawElements有时我会在 GLX 上下文设置阶段看到失败(例如glXCreateNewContextglXChooseFBConfig)。如果我启动更多的工人(即更高的并发性),我会更快地看到错误。如果我启动较少的工人,则可能需要 15-30 分钟才能发生崩溃。

我相信我遇到了某种 OpenGL 上下文或驱动程序问题。我尝试使用 GLUT 和 GLX 设置我的上下文,但似乎都没有帮助。

我创建 EC2 实例的过程非常接近此处给出的说明:http: //hpc.nomad-labs.com/archives/139。我安装的具体包是:

sudo apt-get install freeglut3-dev build-essential libx11-dev libxmu-dev libxi-dev libgl1-mesa-glx libglu1-mesa libegl1-mesa libglu1-mesa-dev mesa-utils mesa-utils-extra llvm-dev imagemagick libboost-all-dev python2.6 python-imaging python-matplotlib python-numpy python-scipy firefox clang python-setuptools python-scipy libatlas-dev ccache libpng12-dev libmagick++-dev glew-utils xvfb x11-utils qiv xinit

在 OSX 和 Linux 上,C++ 工作者链接:GL GLU glut pthread m X11.

我生成了我的 xorg.conf 使用:

$ nvidia-xconfig -a --use-display-device=None --virtual=1280x1024

在运行我的程序之前,我运行:

$ startx &; export DISPLAY=:0

我尝试了一些非 nvidia 驱动程序,但它们似乎也没有帮助。

我还查阅了有关使用 OpenGL 进行并行处理的常见问题解答:http: //www.equalizergraphics.com/documentation/parallelOpenGLFAQ.html 该指南建议 Ubuntu 上的多线程 GLX 不起作用(我已经亲自确认了这一点.. :) 但似乎多进程 GLX 应该是可行且稳定的。

有没有人有任何想法

  • 为什么 OpenGL/GLX 调用可能会失败?我确实看到了驱动程序问题吗?似乎 Mac GPU 驱动程序具有某种“神奇功能”来帮助并发使用 OpenGL。是否有任何具有相同功能的 Ubuntu/Linux 驱动程序?
  • 是否有在 EC2 GPU 实例(或任何无头 Ubuntu/Linux 机器上)同时运行多个 OpenGL 可执行文件的最佳实践?谁能指出我这样做的开源软件?
4

1 回答 1

0

.. 1年后..

我发现很多时候 gpu 不会在无头机器上启用。先尝试vnc,看看是否有帮助。

于 2014-06-12T00:31:20.483 回答