GPU上的(跟踪)应用程序的许多实例

时间:2013-03-11 18:41:36

标签: c++ opengl gpu

我使用C ++和OpenGL开发了一个Hand-tracking应用程序。 (和QT,Eigen,OpenCV)

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

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

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

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

当然我会尝试通过实验验证它,但我想知道是否有人可以指出我适当的阅读(我没有找到真正相关的东西)。

关于此事的任何想法?

回答第一条评论(@KillianDS)

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

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

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

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

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

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

要简短地重新定义问题,我不想分享内容,但要确保不同的实例(在多处理的情况下,你提到的)不会相互影响(根本就不共享)< / p>

1 个答案:

答案 0 :(得分:0)

有两种可能的并行化:

  1. 多线程

  2. 多处理

  3. 您可以使用其中一个或两者兼而有之。

    我真的不了解你的任务,因为你不太具体,但一般来说你可以通过以下方式分享价值:

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

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

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

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

    5. 在这一刻,没有其他事情发生在我脑海中。其他一切都没有分享。

      有关详情,请参阅thisthis