我目前正在尝试理解mpi4py。我设置了mpi4py.rc.initialize=False
和mpi4py.rc.finalize=False
,因为我不明白为什么我们想要自动初始化和终结。默认行为是在导入MPI时调用MPI. Init()
。我认为这样做的原因是,对于每个等级,都运行了一个python解释器实例,每个实例都将运行整个脚本,但这只是猜测。最后,我喜欢把它说清楚。
现在这引入了一些问题。我有这个密码
import numpy as np
import mpi4py
mpi4py.rc.initialize = False # do not initialize MPI automatically
mpi4py.rc.finalize = False # do not finalize MPI automatically
from mpi4py import MPI # import the 'MPI' module
import h5py
class DataGenerator:
def __init__(self, filename, N, comm):
self.comm = comm
self.file = h5py.File(filename, 'w', driver="mpio", comm=comm)
# Create datasets
self.data_ds= self.file.create_dataset("indices", (N,1), dtype='i')
def __del__(self):
self.file.close()
if __name__=='__main__':
MPI.Init()
world = MPI.COMM_WORLD
world_rank = MPI.COMM_WORLD.rank
filename = "test.hdf5"
N = 10
data_gen = DataGenerator(filename, N, comm=world)
MPI.Finalize()
导致
$ mpiexec -n 4 python test.py
*** The MPI_Barrier() function was called after MPI_FINALIZE was invoked.
*** This is disallowed by the MPI standard.
*** Your MPI job will now abort. [eu-login-04:01559] Local abort after MPI_FINALIZE started completed successfully, but am not able to aggregate error messages, and not able to guarantee that all other processes were killed!
*** The MPI_Barrier() function was called after MPI_FINALIZE was invoked.
*** This is disallowed by the MPI standard.
*** Your MPI job will now abort. [eu-login-04:01560] Local abort after MPI_FINALIZE started completed successfully, but am not able to aggregate error messages, and not able to guarantee that all other processes were killed!
-------------------------------------------------------------------------- Primary job terminated normally, but 1 process returned a non-zero exit code. Per user-direction, the job has been aborted.
--------------------------------------------------------------------------
*** The MPI_Barrier() function was called after MPI_FINALIZE was invoked.
*** This is disallowed by the MPI standard.
*** Your MPI job will now abort. [eu-login-04:01557] Local abort after MPI_FINALIZE started completed successfully, but am not able to aggregate error messages, and not able to guarantee that all other processes were killed!
-------------------------------------------------------------------------- mpiexec detected that one or more processes exited with non-zero status, thus causing the job to be terminated. The first process to do so was:
Process name: [[15050,1],3] Exit code: 1
--------------------------------------------------------------------------
我对这里发生的事情有点困惑。如果我移动MPI. Finize()
到解构函数的末尾,它可以正常工作。
并不是说我也使用h5py,它使用MPI进行并行化。所以我这里有一个并行文件IO。并不是说h5py需要编译MPI支持。您可以通过设置一个虚拟环境并运行pip安装--no-bin=h5py h5py轻松地做到这一点。
按照您编写它的方式,data_gen
会一直存在到main函数返回为止。但是在函数中调用MPI. Finize
。因此,析构函数在finize之后运行。h5py.File.close
方法似乎调用MPI. Comm。屏障
内部。禁止在完成后调用此。
如果您想要显式控制,请确保在调用MPI之前销毁所有对象。完成
。当然,如果某些对象仅由垃圾收集器而不是引用计数器销毁,那么即使这样也可能不够。
我目前正在尝试理解mpi4py。我设置了和,因为我不明白为什么我们想要自动初始化和终结。默认行为是在导入MPI时调用。我认为这样做的原因是,对于每个等级,都运行了一个python解释器实例,每个实例都将运行整个脚本,但这只是猜测。最后,我喜欢把它说清楚。 现在这引入了一些问题。我有这个密码 导致 我对这里发生的事情有点困惑。如果我移动在析构函数的末尾,它可以正常工作。 并不是说我也使用h5py,它
Vert.x Api 是很大程度上由事件驱动的。这意味着,当事情发生在你感兴趣的Vert.x,Vert.x 会通过回调方式向您发送events。 一些示例events: 计时器激活 socket收到数据 从磁盘读取数据 发生了异常 HTTP 服务器收到请求 通过向 Vert.x Api 提供处理程序来处理事件。例如要接收一个计时器事件每一秒你会做: vertx.setPeriodic(1000,
我在用pycharm。2017.1.2. 我在py3环境中安装了anaconda2。在Pycharm中,我使用的是Python3解释器,代码很简单: 在Pycharm的Python控制台中,它打印内置的。 如果我单击“run”(运行)按钮,它会按预期打印主屏幕。 为什么PyCharm Python控制台打印的是内置的而不是主的?
调用对声明的东西返回围绕它构建的特殊注释。这很酷。我如何引用在类中定义的子例程?它总是隐藏的吗?我对提供子例程而不是类的模块很好奇(答案可能是“不要这样做”)。我主要是在玩以及我能走多远。 以下是输出: 这是我要问的最后一行输出。如何访问类中定义的子例程?
问题内容: 我有一个简单的程序: 当我运行该程序时,我看到的只是用于输出。我原本希望我们会遇到第一轮,然后是,然后是etc。 这是由于这样的事实,一旦我们尝试在左侧重新声明,其值就会重置为? 如果有人可以指出我的详细情况,那将很棒。 更改为,似乎正在按预期方式打印数字。我对它达到最大32位值的速度感到惊讶! 问题答案: 该问题是由于整数溢出引起的。 在32位二进制补码算法中: 确实确实开始具有2的
我已经为云消息实现了Firebase: https://firebase.google.com/docs/cloud-messaging/android/client#sample-登记册 除了FireBaseInstancedService,我已经完成了所有步骤。永远不会调用onTokenRefresh。 firebase在日志中的唯一消息是: 我该怎么办才能拿到这个代币?