-1

我使用 C++ 和 OpenGL 开发了一个手部跟踪应用程序。(以及 QT、Eigen、OpenCV)

OpenGL 用于渲染 3D 模型(对于跟踪循环的每次迭代)。

该应用程序仅在 1 个线程中运行。

我有兴趣做一些非常耗时的实验,所以我想知道是否可以并行化事物,即启动同一可执行文件的许多实例,并使用不同的参数运行它们。

只是通过尝试这样做,它似乎可以工作,但我不确定不同的实例是否会在 GPU 上相互干扰。为了更具描述性,我想知道以下几点:如果我每次只运行一个实例进行一些实验,然后通过同时运行多个实例来重复相同的实验,结果在数值上是否相同?

当然,我会尝试通过实验来验证它,但我想知道是否有人可以将我确定为合适的读物(我没有找到真正相关的东西)。

关于这个问题有什么想法吗?

回答第一条评论(@KillianDS)

实验的细节确实是数学上的,会在主题中引起“噪音”。

这个想法是你有一个跟踪算法,试图找到前一帧和当前帧之间的对应关系。通过使用这些对应关系,该算法从前一帧(已知)的姿势中获取 3D 模型,并以这种方式对其进行转换,使其适合当前帧。有一些(数学)参数会影响这一点,实验是关于有很多测试框架,并在这些框架上运行具有许多不同参数的算法,以便您可以找到最佳参数(值或值范围)

在实验过程中,您使用 OpenGL 投影 3D 模型,使其适合当前帧图像。您看到的内容照常渲染,但实际工作是使用 GPU 中的屏幕外缓冲区完成的。

到目前为止,我使用多处理(同时运行多个实例)运行实验,但是当我当时只运行一个实例时,我无法重现完全相同的数字,因为我刚刚发现了一个错误。(现在正在进行相同的测试 - 但非常耗时)

但是我想知道当你同时运行多个实例时你是否真的可以信任 GPU,或者 GPU 内存中的东西可能会被搞砸

回答第二条评论(@Lajos Arpad)

简而言之,重新定义问题,我不想分享东西,但要确保不同的实例(在你提到的多处理的情况下)不会相互影响(根本没有分享)

4

1 回答 1

0

有两种可能的并行化:

  1. 多线程

  2. 多处理

您可以使用其中之一或同时使用两者。

我不太了解您的任务,因为您并不太具体,但总的来说,您可以通过以下方式分享价值观:

  1. 使用您的线程/进程将使用的文件。

  2. 使用服务,例如您的线程/进程将在其中操作数据的数据库。

  3. 使用声明或定义共享的变量(如 C++ 类的静态成员)。

  4. 通过侦听端口和套接字使用进程/线程之间的通信。

在这一刻,我什么都没有想到。其他所有内容均不共享。

有关更多信息,请阅读

于 2013-03-11T19:57:36.720 回答