【问题标题】:PETSc vectorize operations with neighboring vector valuesPETSc 使用相邻向量值对操作进行向量化
【发布时间】:2021-03-01 20:07:34
【问题描述】:

我正在从uFDTD book 实施有限差分算法。许多 FDM 方程涉及对相邻向量元素的运算。 例如,电场的更新方程

ez[m] = ez[m] + (hy[m] - hy[m-1]) * imp0

使用相邻的向量值hy[m]hy[m-1]

如何在 PETSc 中高效地实施这些操作?除了局部向量循环和scatterers之外还有什么东西吗?

【问题讨论】:

  • imp0 是常量吗?
  • @JacobFaib 是的,imp0 是不变的
  • m 是一个时间步长,还是它正在遍历Vec 的元素?
  • @JacobFaib ezhy 是相同大小的 Vec 向量。 m 是空间索引。没有时间索引,以前的时间步长会被新值覆盖。
  • 执行此操作的最快方法是将hy 按摩成一个可以调用VecAXPY(ez,imp0,hy) 的表单。我会在VecGhost 中查看hy,因为这样可以省去您自己管理VecScatter 的麻烦。请参阅this example 了解如何设置。

标签: vectorization petsc


【解决方案1】:

如果我的目标是效率,我会调用模板引擎。有很多很多的论文,有时甚至是开源代码,例如 Devito。这个想法是 PETSc 管理数据结构和并行性。然后,您可以将本地数据块提供给您最喜欢的模板计算机。

【讨论】:

  • 我会调查的。谢谢!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-04-06
  • 1970-01-01
  • 1970-01-01
  • 2021-05-31
相关资源
最近更新 更多