首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在MPI模式下运行petsc?

如何在MPI模式下运行petsc?
EN

Stack Overflow用户
提问于 2016-10-27 08:26:26
回答 1查看 257关注 0票数 0

我在用petsc来解决我的项目。然而,并行模式下的求解程序所产生的进程比我所期望的要多得多。

使用python和petsc4py的代码。这台机器有4个核心。(a)。如果我直接运行它,petsc只使用一个过程来组装矩阵,并创建4个过程来求解方程,(b)。如果我使用注释'mpirun -n 4',petsc使用4个过程来组装矩阵,但是创建了16个过程来求解方程,

我已经检查了自己的python代码,与矩阵创建相关的主要组件如下所示:

代码语言:javascript
复制
m = PETSc.Mat().create(comm=PETSc.COMM_WORLD)
m.setSizes(((None, n_vnode[0]*3), (None, n_fnode[0]*3)))
m.setType('dense')
m.setFromOptions()
m.setUp()
m_start, m_end = m.getOwnershipRange()
for i0 in range(m_start, m_end):
    delta_xi = fnodes - vnodes[i0//3]
    temp1 = delta_xi ** 2
    delta_2 = np.square(delta)  # delta_2 = e^2
    delta_r2 = temp1.sum(axis=1) + delta_2  # delta_r2 = r^2+e^2
    delta_r3 = delta_r2 * np.sqrt(delta_r2)  # delta_r3 = (r^2+e^2)^1.5
    temp2 = (delta_r2 + delta_2) / delta_r3  # temp2 = (r^2+2*e^2)/(r^2+e^2)^1.5
    if i0 % 3 == 0:       # x axis
        m[i0, 0::3] = ( temp2 + np.square(delta_xi[:, 0]) / delta_r3 ) / (8 * np.pi)  # Mxx
        m[i0, 1::3] = delta_xi[:, 0] * delta_xi[:, 1] / delta_r3 / (8 * np.pi)    # Mxy
        m[i0, 2::3] = delta_xi[:, 0] * delta_xi[:, 2] / delta_r3 / (8 * np.pi)    # Mxz
    elif i0 % 3 == 1:     # y axis
        m[i0, 0::3] = delta_xi[:, 0] * delta_xi[:, 1] / delta_r3 / (8 * np.pi)    # Mxy
        m[i0, 1::3] = ( temp2 + np.square(delta_xi[:, 1]) / delta_r3 ) / (8 * np.pi)  # Myy
        m[i0, 2::3] = delta_xi[:, 1] * delta_xi[:, 2] / delta_r3 / (8 * np.pi)    # Myz
    else:     # z axis
        m[i0, 0::3] = delta_xi[:, 0] * delta_xi[:, 2] / delta_r3 / (8 * np.pi)    # Mxz
        m[i0, 1::3] = delta_xi[:, 1] * delta_xi[:, 2] / delta_r3 / (8 * np.pi)    # Myz
        m[i0, 2::3] = ( temp2 + np.square(delta_xi[:, 2]) / delta_r3 ) / (8 * np.pi)  # Mzz
m.assemble()

与petsc解决程序相关的主要组件如下:

代码语言:javascript
复制
ksp = PETSc.KSP()
ksp.create(comm=PETSc.COMM_WORLD)
ksp.setType(solve_method)
ksp.getPC().setType(precondition_method)
ksp.setOperators(self._M_petsc)
ksp.setFromOptions()
ksp.solve(velocity_petsc, force_petsc)

有人能给我一些建议吗?谢谢。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-10-27 08:56:58

设置环境变量OMP_NUM_THREADS=1。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/40279698

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档