我使用 C++ 和 OpenGL 开发了一个手部跟踪应用程序。(以及 QT、Eigen、OpenCV)
OpenGL 用于渲染 3D 模型(对于跟踪循环的每次迭代)。
该应用程序仅在 1 个线程中运行。
我有兴趣做一些非常耗时的实验,所以我想知道是否可以并行化事物,即启动同一可执行文件的许多实例,并使用不同的参数运行它们。
只是通过尝试这样做,它似乎可以工作,但我不确定不同的实例是否会在 GPU 上相互干扰。为了更具描述性,我想知道以下几点:如果我每次只运行一个实例进行一些实验,然后通过同时运行多个实例来重复相同的实验,结果在数值上是否相同?
当然,我会尝试通过实验来验证它,但我想知道是否有人可以将我确定为合适的读物(我没有找到真正相关的东西)。
关于这个问题有什么想法吗?
回答第一条评论(@KillianDS)
实验的细节确实是数学上的,会在主题中引起“噪音”。
这个想法是你有一个跟踪算法,试图找到前一帧和当前帧之间的对应关系。通过使用这些对应关系,该算法从前一帧(已知)的姿势中获取 3D 模型,并以这种方式对其进行转换,使其适合当前帧。有一些(数学)参数会影响这一点,实验是关于有很多测试框架,并在这些框架上运行具有许多不同参数的算法,以便您可以找到最佳参数(值或值范围)
在实验过程中,您使用 OpenGL 投影 3D 模型,使其适合当前帧图像。您看到的内容照常渲染,但实际工作是使用 GPU 中的屏幕外缓冲区完成的。
到目前为止,我使用多处理(同时运行多个实例)运行实验,但是当我当时只运行一个实例时,我无法重现完全相同的数字,因为我刚刚发现了一个错误。(现在正在进行相同的测试 - 但非常耗时)
但是我想知道当你同时运行多个实例时你是否真的可以信任 GPU,或者 GPU 内存中的东西可能会被搞砸
回答第二条评论(@Lajos Arpad)
简而言之,重新定义问题,我不想分享东西,但要确保不同的实例(在你提到的多处理的情况下)不会相互影响(根本没有分享)