0

我的问题与教程有关,该教程解释了如何使用 VexCL 实现 boost::odeint 以实现并发(完整的代码可以在这里找到)。

下图展示了我对 ODEINT 迭代的看法: 在此处输入图像描述

现在我问自己,在 VexCL中究竟/或它的哪一部分是并行化的?

我的印象是,ODE 部分是一项单独的任务,因为在给定示例中,ODE 的所有方程都在一个块内。也许集成部分在三个并行任务中运行。这导致了四个任务,其中(我认为)ODE 任务是一个瓶颈(因为方程可能变得非常大)。

如果这是正确的,我想知道如何提高这种并发性。我认为将 ODE 和 INT 水平组合是有意义的。这导致了 3 个任务,每个任务都无法在此级别进一步减少。

4

1 回答 1

1

您链接到的示例正在对 Lorenz 系统进行参数研究。也就是说,它解决了大量具有不同参数的相同方程。状态类型是vex::multivector<double,3>,它将许多 Lorenz 系统的状态(3D 坐标)打包在一起。这是一个令人尴尬的并行问题,可以将 odeint 算法应用于锁步中的状态类型。也就是说,像x += tau * dtwherexdtare large 向量这样的操作是在 GPU 上执行的。

有关 odeint/vexcl 实现的更多细节可以在 [1] 中找到。[2] 是一篇关于如何在耦合系统的情况下提取并行性的有趣论文。

[1] 阿纳特、卡斯滕、丹尼斯·杰米多夫和马里奥·穆兰斯基。“在 GPU 上求解常微分方程。” 使用 GPU 进行数值计算。施普林格,湛,2014。125-157。https://doi.org/10.1007/978-3-319-06548-9_7 ( pdf )

[2] 马里奥·穆兰斯基。“优化大规模 ODE 模拟。” arXiv 预印本arXiv:1412.0544 (2014)。

于 2020-02-12T06:19:04.767 回答