Boost-Odeint:使用VexCL的并发性及其改进方法是什么?

问题描述 投票:0回答:1

我的问题与tutorial有关,它解释了如何使用VexCL实现boost :: odeint以实现并发(完整的代码可以在here中找到。]

下图显示了我如何看待ODEINT的迭代:enter image description here

现在我问自己,在VexCL中究竟是什么/或其中的哪一部分是并行的?] >>

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

如果这是对的,我想知道,如何提高并发性

。我认为水平合并ODE和INT是有意义的。这导致3个任务,在此级别上无法进一步简化每个任务。

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

c++ boost opencl odeint vexcl
1个回答
0
投票

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

有关odeint / vexcl实现的更多详细信息,请参见[1]。 [2]是有关在耦合系统的情况下如何提取并行性的有趣论文。

© www.soinside.com 2019 - 2024. All rights reserved.