簡體   English   中英

mpi4py是否使用Python Pickle

[英]Does mpi4py use Python Pickle

基於對mpi4py的解釋,我不明白它是否使用泡菜,或者它比泡菜更有效。 最初,該文件指出:

pickle(較慢,用純Python編寫)和cPickle(更快,用C編寫)模塊提供了用戶可擴展的工具,可以使用ASCII或二進制格式序列化通用Python對象。 marshal模塊提供了使用特定於Python的二進制格式來序列化內置Python對象的工具,但不依賴於機器架構問題。

基於此,似乎泡菜是最慢的方法。 該文件隨后說:

MPI for Python可以利用mod:pickle模塊提供的功能來傳達任何內置或使用定義的Python對象。

那么MPI使用最慢的選擇Pickle? 有更多的文字,但我沒有看到一個直截了當的答案,也許它不是直接實施? 我完全誤解了它的含義嗎?

它盡可能地努力使用cPickle ,但如果有必要 ,可以回到Pickle

if PY_MAJOR_VERSION >= 3:
    from pickle import dumps as PyPickle_dumps
    from pickle import loads as PyPickle_loads
    from pickle import DEFAULT_PROTOCOL as PyPickle_PROTOCOL
else:
    try:
        from cPickle import dumps as PyPickle_dumps
        from cPickle import loads as PyPickle_loads
        from cPickle import HIGHEST_PROTOCOL as PyPickle_PROTOCOL
    except ImportError:
        from pickle  import dumps as PyPickle_dumps
        from pickle  import loads as PyPickle_loads
        from pickle  import HIGHEST_PROTOCOL as PyPickle_PROTOCOL

由於pympi包裝器基於MPI-2,因此並行I / OI會猜測它只是在調用幕后的MPI寫入/通信功能之前使用pickle將數據轉換為適當的格式(在每個進程上)。 你引用的那條之后的行說:

Blockquote這些工具將常規用於構建對象的二進制表示,以便進行通信(在發送進程中),並將其恢復(在接收進程時)。

mpipy文檔建議盡可能使用numpy數組而不是python數據類型以提高效率。 如果你的應用程序速度很關鍵,我建議總是使用numpy數組而不是python對象。 引入MPI 2.0標准主要是為了提供高效的並行輸入輸出功能。 使用MPI(用c編寫)很可能比cpickle或pickle更快,特別是在許多進程上寫輸出時。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM