我的问题与tutorial有关,它解释了如何使用VexCL实现boost :: odeint以实现并发(完整的代码可以在here中找到。]
现在我问自己,在VexCL中究竟是什么/或其中的哪一部分是并行的?] >> 我的印象是,ODE部分是一项任务,因为在给定的示例中,所有ODE方程都在一个块内。也许集成部分在三个并行任务中运行。这导致了四个任务,其中(我认为)ODE任务是一个瓶颈(因为方程可能变得非常大)。
如果这是对的,我想知道,如何提高并发性
。我认为水平合并ODE和INT是有意义的。这导致3个任务,在此级别上无法进一步简化每个任务。我的问题与本教程有关,该教程解释了如何使用VexCL实现boost :: odeint以实现并发(完整的代码可以在这里找到)。下图显示了我...
您链接到的示例正在对Lorenz系统进行参数研究。也就是说,它用不同的参数求解了大量的相同方程。状态类型为vex::multivector<double,3>
,它将许多Lorenz系统的状态(3D坐标)打包在一起。这是一个令人尴尬的并行问题,可以将odeint算法以锁步方式应用于状态类型。也就是说,在GPU上执行x += tau * dt
和x
是大向量的操作,例如dt
。
有关odeint / vexcl实现的更多详细信息,请参见[1]。 [2]是有关在耦合系统的情况下如何提取并行性的有趣论文。