在 PETSC 中高效交换向量

计算科学 并行计算 宠物
2021-12-14 05:53:10

经过几层抽象后的 PETSC 函数VecSwap调用BLAS 原语swap,它本质上是复制数据(除非我遗漏了什么)。

在我看来,应该有一个 O(1) 的实现,可以通过交换指针来获得,至少如果向量的所有特征(节点之间的基础存储和分布)都是相同的。

那么,有没有办法在 PETSC 中交换向量而无需深拷贝?

1个回答

如果一个 Vec 是由创建的VecCreateSeqWithArray,而另一个不是呢?用户如何知道哪个 Vec 拥有他们分配的内存?中有一个肮脏的后门VecPlaceArray,但使用它通常是糟糕的设计。