mpi4py 中 I/O 相關(guān)的 hints

上一篇中我們介紹了 mpi4py 中的共享文件指針 I/O 操作肴沫,下面我們將介紹 mpi4py 中 I/O 相關(guān)的 hints附较。

MPI 允許用戶為 MPI 實(shí)現(xiàn)傳遞一些 hints。對(duì) I/O 操作沪哺,這是通過(guò)一些 I/O 操作方法的 info 參數(shù)來(lái)進(jìn)行傳遞的牙瓢,這些方法包括 MPI.File.Open,MPI.File.Set_view阅羹,MPI.File.Set_info勺疼,MPI.File.Delete 等。默認(rèn)情況下捏鱼,這些方法的 info 參數(shù)都為 MPI.INFO_NULL执庐,表示用戶不傳遞任何 hints 給 MPI 實(shí)現(xiàn)。當(dāng)需要傳遞一些 hints 時(shí)穷躁,可通過(guò) MPI.Info 對(duì)象為文件指定一些如文件訪問(wèn)模式耕肩、文件系統(tǒng)相關(guān)的附加信息(即與 I/O 相關(guān)的 hints),并利用這些信息優(yōu)化 I/O 訪問(wèn)性能问潭,減少系統(tǒng)資源占用等猿诸。MPI 實(shí)現(xiàn)可以選擇忽略某些或所有用戶傳遞的 hints 而不會(huì)影響程序的正確性。需要注意的是狡忙,通過(guò) MPI.Info 對(duì)象設(shè)置的 hints 的鍵和值都是字符串梳虽。

I/O 相關(guān) hints 方法

MPI.File.Set_info(self, Info info)

通過(guò) MPI.Info 對(duì)象向 MPI 實(shí)現(xiàn)傳遞 I/O 相關(guān)的 hints。

MPI.File.Get_info(self)

獲取當(dāng)前文件正在使用的 hints灾茁,返回值是一個(gè) MPI.Info 對(duì)象窜觉。

MPI 預(yù)留的 I/O 相關(guān) hints

下表列出了 MPI 預(yù)留的 I/O 相關(guān)的 hints,這些 hints 主要影響并行文件的訪問(wèn)模式北专,指導(dǎo)文件在 I/O 設(shè)備上的布局禀挫。

名稱 類(lèi)型 一致性 說(shuō)明
access_style 逗號(hào)分隔的字符串 指出文件訪問(wèn)方式,可能的取值有:read_once拓颓,write-once语婴,read_mostly,write_mostly驶睦,sequential砰左,reverse_sequential,random
collective_buffering 邏輯(true/false) 指示應(yīng)用程序是否可以使用集合緩沖機(jī)制场航,集合緩沖機(jī)制是由集合訪問(wèn)操作提供的優(yōu)化措施缠导。此機(jī)制下,可指定進(jìn)程組內(nèi)某個(gè)子集的進(jìn)程獨(dú)立訪問(wèn)文件溉痢。這些進(jìn)程可利用緩沖區(qū)機(jī)制把小的磁盤(pán)訪問(wèn)組合起來(lái)僻造,形成大的訪問(wèn)動(dòng)作憋他。集合緩沖訪問(wèn)機(jī)制還需其他 hints 配合,分別是:cb_block_size嫡意,cb_buffer_size举瑰,cb_nodes 等
cb_block_size 整數(shù) 指定集合緩沖機(jī)制使用的塊大小,所有參與集合緩沖機(jī)制訪問(wèn)的目標(biāo)節(jié)點(diǎn)(target nodes)都要以該值指定的塊大小訪問(wèn)磁盤(pán)
cb_buffer_size 整數(shù) 用于集合緩沖機(jī)制的總緩沖區(qū)大小蔬螟,通常為 cb_block_size 的整數(shù)倍
cb_nodes 整數(shù) 指定參與集合緩沖機(jī)制訪問(wèn)的目標(biāo)節(jié)點(diǎn)數(shù)
chunked 逗號(hào)分隔的整數(shù) 指定訪問(wèn)包含多維數(shù)組文件的訪問(wèn)模式,通常為僅訪問(wèn)其中一個(gè)子數(shù)組汽畴。逗號(hào)隔開(kāi)的列表給出數(shù)組維數(shù)旧巾,對(duì) C 語(yǔ)言或 Fortran 語(yǔ)言,列表中的維數(shù)次序相反忍些。C 語(yǔ)言中高維在前鲁猩,低維在后;Fortran 中高維在后罢坝,低維在前
chunked_item 逗號(hào)分隔的整數(shù) 以字節(jié)為單位指定數(shù)組各維維數(shù)廓握。指定子數(shù)組維數(shù),高維在前嘁酿,低維在后
filename 字符串 為打開(kāi)文件指定名稱隙券。MPI.File.Open,MPI.File.Set_view闹司,MPI.File.Set_info娱仔,MPI.File.Delete 等忽略此關(guān)鍵字
file_perm 字符串 創(chuàng)建文件時(shí)指定許可權(quán)限。僅當(dāng)用于 MPI.File.Open 且其打開(kāi)模式 amode 包含 MPI.MODE_CREATE 模式時(shí)游桩,該關(guān)鍵字才起作用牲迫。具體合法值取決于 MPI 版本的定義
io_node_list 逗號(hào)分隔的字符串 指定用于存儲(chǔ)文件的 I/O 設(shè)備列表。通常在創(chuàng)建文件時(shí)使用
nb_proc 整數(shù) 指定可訪問(wèn)文件的并行進(jìn)程個(gè)數(shù)借卧。主要用于創(chuàng)建文件時(shí)
num_io_nodes 整數(shù) 指定系統(tǒng)中 I/O 設(shè)備個(gè)數(shù)盹憎。主要用于創(chuàng)建文件時(shí)
striping_factor 整數(shù) 指定文件條塊化時(shí)一個(gè)文件跨設(shè)備存儲(chǔ)的 I/O 設(shè)備個(gè)數(shù)。僅在創(chuàng)建文件時(shí)使用
striping_unit 整數(shù) 文件條塊化分割的單位铐刘,即在把文件從一個(gè) I/O 設(shè)備切換到下一個(gè) I/O 設(shè)備時(shí)的最大數(shù)據(jù)塊容量陪每。僅在創(chuàng)建文件時(shí)使用

不同的 MPI 實(shí)現(xiàn)可能還有額外的 hints,用戶應(yīng)該查閱其相關(guān)文檔以了解其可用的 hints 及這些 hints 的作用滨达。

例程

下面給出使用例程奶稠。

# io_hints.py

"""
Demonstrates how to pass I/O related hints to the implementation.

Run this with 4 processes like:
$ mpiexec -n 4 python io_hints.py
"""

import numpy as np
from mpi4py import MPI


comm = MPI.COMM_WORLD
rank = comm.Get_rank()

buf = np.full((5,), rank, dtype='i')

filename = 'temp.txt'

# create a MPI.Info object
info = MPI.Info.Create()
# set some MPI predefined hints
# number of I/O devices across which the file should be striped
info['striping_factor'] = '16'
# the striping unit in bytes
info['striping_unit'] = '1048576'
# buffer size for collective I/O
info['cb_buffer_size'] = '8388608'
# number of processes that should perform disk accesses during collective I/O
info['cb_nodes'] = '%d' % comm.size
# set some additional hints supported by ROMIO
# buffer size for data sieving in independent reads
info['ind_rd_buffer_size'] = '2097152'
# buffer size for data sieving in independent writes
info['ind_wr_buffer_size'] = '1048576'

# open the file for read and write, create it if it does not exist,
# and delete it on close, with the info object defined above
fh = MPI.File.Open(comm, filename, amode= MPI.MODE_CREATE | MPI.MODE_RDWR | MPI.MODE_DELETE_ON_CLOSE, info=info)

# free the info object
info.Free()

# get the currently used hints
info_used = fh.Get_info()
if rank == 0:
    for k in info_used:
        print '%s: %s' % (k, info_used[k])

# close the file
fh.Close()

運(yùn)行結(jié)果如下:

$ mpiexec -n 4 python io_hints.py
cb_buffer_size: 8388608
romio_cb_read: automatic
romio_cb_write: automatic
cb_nodes: 1
romio_no_indep_rw: false
romio_cb_pfr: disable
romio_cb_fr_types: aar
romio_cb_fr_alignment: 1
romio_cb_ds_threshold: 0
romio_cb_alltoall: automatic
ind_rd_buffer_size: 2097152
ind_wr_buffer_size: 1048576
romio_ds_read: automatic
romio_ds_write: automatic
striping_unit: 1048576
cb_config_list: *:1

以上介紹了 mpi4py 中 I/O 相關(guān)的 hints,在下一篇中我們將介紹 mpi4py 中 I/O 操作的一致性語(yǔ)義捡遍。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末锌订,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子画株,更是在濱河造成了極大的恐慌辆飘,老刑警劉巖啦辐,帶你破解...
    沈念sama閱讀 218,204評(píng)論 6 506
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異蜈项,居然都是意外死亡芹关,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,091評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門(mén)紧卒,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)侥衬,“玉大人,你說(shuō)我怎么就攤上這事跑芳≈嶙埽” “怎么了?”我有些...
    開(kāi)封第一講書(shū)人閱讀 164,548評(píng)論 0 354
  • 文/不壞的土叔 我叫張陵博个,是天一觀的道長(zhǎng)怀樟。 經(jīng)常有香客問(wèn)我,道長(zhǎng)盆佣,這世上最難降的妖魔是什么往堡? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 58,657評(píng)論 1 293
  • 正文 為了忘掉前任,我火速辦了婚禮共耍,結(jié)果婚禮上虑灰,老公的妹妹穿的比我還像新娘。我一直安慰自己征堪,他們只是感情好瘩缆,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,689評(píng)論 6 392
  • 文/花漫 我一把揭開(kāi)白布。 她就那樣靜靜地躺著佃蚜,像睡著了一般庸娱。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上谐算,一...
    開(kāi)封第一講書(shū)人閱讀 51,554評(píng)論 1 305
  • 那天熟尉,我揣著相機(jī)與錄音,去河邊找鬼洲脂。 笑死斤儿,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的恐锦。 我是一名探鬼主播往果,決...
    沈念sama閱讀 40,302評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼一铅!你這毒婦竟也來(lái)了陕贮?” 一聲冷哼從身側(cè)響起,我...
    開(kāi)封第一講書(shū)人閱讀 39,216評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤潘飘,失蹤者是張志新(化名)和其女友劉穎肮之,沒(méi)想到半個(gè)月后掉缺,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,661評(píng)論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡戈擒,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,851評(píng)論 3 336
  • 正文 我和宋清朗相戀三年眶明,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片筐高。...
    茶點(diǎn)故事閱讀 39,977評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡搜囱,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出凯傲,到底是詐尸還是另有隱情犬辰,我是刑警寧澤,帶...
    沈念sama閱讀 35,697評(píng)論 5 347
  • 正文 年R本政府宣布冰单,位于F島的核電站,受9級(jí)特大地震影響灸促,放射性物質(zhì)發(fā)生泄漏诫欠。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,306評(píng)論 3 330
  • 文/蒙蒙 一浴栽、第九天 我趴在偏房一處隱蔽的房頂上張望荒叼。 院中可真熱鬧,春花似錦典鸡、人聲如沸被廓。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 31,898評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)嫁乘。三九已至,卻和暖如春球碉,著一層夾襖步出監(jiān)牢的瞬間蜓斧,已是汗流浹背。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 33,019評(píng)論 1 270
  • 我被黑心中介騙來(lái)泰國(guó)打工睁冬, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留挎春,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 48,138評(píng)論 3 370
  • 正文 我出身青樓豆拨,卻偏偏與公主長(zhǎng)得像直奋,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子施禾,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,927評(píng)論 2 355

推薦閱讀更多精彩內(nèi)容