Lecture #11 & #12

MPI(Message Passing Interface)

高性能計(jì)算中標(biāo)準(zhǔn)的并行編程模型,他是通用的,通用也是一把雙刃劍官卡,它可以用來(lái)解決大部分的并行問(wèn)題,但是因?yàn)橥ㄓ盟軓?fù)雜醋虏。

并行編程模型

§共享內(nèi)存地址空間

  • 主要用于編程SMP /多核機(jī)器寻咒,多個(gè)線程直接共同訪問(wèn)內(nèi)存數(shù)據(jù)。
    §關(guān)鍵屬性
  • 共享地址空間 - 隱式并行化
    §進(jìn)程/線程通信 - 內(nèi)存讀取/存儲(chǔ)
    §POSIX線程API(Pthread)/ OpenMP
  • 創(chuàng)建/刪除線程
  • 同步(互斥颈嚼,信號(hào)量)
  • 線程管理

§分布式內(nèi)存地址空間

  • 最廣泛用于編程并行計(jì)算機(jī)/超級(jí)計(jì)算機(jī)
    §關(guān)鍵屬性:
  • 分區(qū)地址空間
  • 顯式并行化
    §消息傳遞編程模型
  • 每個(gè)處理單元都有自己的私有內(nèi)存
  • 交換用于傳遞數(shù)據(jù)的消息
  • API:消息傳遞接口(MPI)毛秘,MapReduce等。

消息傳遞模型

§過(guò)程(傳統(tǒng)上)是程序計(jì)數(shù)器和地址空間阻课。
§進(jìn)程可能有多個(gè)線程(程序計(jì)數(shù)器和相關(guān)堆棧)共享一個(gè)地址空間熔脂。
§消息傳遞模型用于進(jìn)程之間的通信,這些進(jìn)程具有單獨(dú)的地址空間柑肴。
§進(jìn)程間通信包括

  • 同步
  • 將數(shù)據(jù)從一個(gè)進(jìn)程的地址空間移動(dòng)到另一個(gè)進(jìn)程的地址空間

什么是MPI?

§消息傳遞接口(MPI)
§消息傳遞庫(kù)規(guī)范

  • 不是語(yǔ)言或編譯器
  • 不是具體的實(shí)施或產(chǎn)品, MPI本身是一個(gè)標(biāo)準(zhǔn)旬薯,OpenMP晰骑,MPICH才是具體的實(shí)現(xiàn),是一個(gè)庫(kù)绊序,有C語(yǔ)言的庫(kù)有java的庫(kù)
    §適用于并行計(jì)算機(jī)硕舆,集群和異構(gòu)網(wǎng)絡(luò)
    §功能齊全,通用庫(kù)
    §旨在提供對(duì)高級(jí)并行硬件的訪問(wèn)
  • 終端用戶
  • 庫(kù)作者骤公,可以寫(xiě)一些通用的類庫(kù)
  • 工具開(kāi)發(fā)人員抚官,并行工具

MPI來(lái)自哪里?

§早期的供應(yīng)商有自己的系統(tǒng)(英特爾的NX阶捆,IBM的EUI)不可移植不兼容沒(méi)有固定的標(biāo)準(zhǔn)(或非常強(qiáng)大)凌节。
§早期的便攜式系統(tǒng)(PVM钦听,p4,Chameleon)主要是研究工作倍奢。

  • 沒(méi)有解決所有的消息傳遞問(wèn)題
  • 缺乏供應(yīng)商支持
  • 沒(méi)有以最有效的水平實(shí)施
    §MPI論壇于1992年組織朴上,廣泛參與:
  • 供應(yīng)商:IBM,Intel卒煞,TMC痪宰,SGI,Convex畔裕,Meiko
  • 可移植性庫(kù)編寫(xiě)者:PVM衣撬,p4
  • 用戶:應(yīng)用科學(xué)家和圖書(shū)館作家
  • MPI-1在18個(gè)月內(nèi)完成

什么是MPI-1

§通信的基本功能(100多個(gè)功能API)
§阻止發(fā)送,接收
§非阻塞發(fā)送和接收
§上述變更
§豐富的集體溝通功能

  • 廣播扮饶,分散具练,聚集等
  • 對(duì)性能非常重要; 廣泛使用
    §描述數(shù)據(jù)布局的數(shù)據(jù)類型
    §過(guò)程拓?fù)?br> §C和Fortran綁定
    §錯(cuò)誤代碼和類

什么是MPI-2 / MPI-3

§MPI-2增加了功能,包括

  • 并行I / O.
  • 遠(yuǎn)程內(nèi)存訪問(wèn)贴届,單向通信靠粪,put和get 不是send/receive
  • 動(dòng)態(tài)流程管理
    §MPI-3增加了功能,包括
  • 容錯(cuò)毫蚓,很弱占键,需要使用checkpoint機(jī)制
  • 異步集體溝通
    §MPI-4正在進(jìn)行中
  • 更好地支持混合編程,容錯(cuò)元潘,新的分析界面

使用MPI的原因

§標(biāo)準(zhǔn)化 - MPI是唯一可以被視為標(biāo)準(zhǔn)的消息傳遞庫(kù)畔乙。 幾乎所有并行平臺(tái)都支持它。 實(shí)際上翩概,它已經(jīng)替換了所有以前的消息傳遞庫(kù)牲距。
§可移植性 - 將應(yīng)用程序移植到支持(并符合)MPI標(biāo)準(zhǔn)的其他平臺(tái)時(shí),無(wú)需修改源代碼钥庇。
§性能 - 供應(yīng)商實(shí)現(xiàn)應(yīng)該能夠利用本機(jī)硬件功能來(lái)優(yōu)化性能牍鞠。選擇正確的API
§功能 - 豐富的功能集
§可用性 - 提供各種實(shí)現(xiàn),包括供應(yīng)商和
公共區(qū)域评姨。

使用MPI時(shí)的重要注意事項(xiàng)

§所有并行性都是顯式的:程序員負(fù)責(zé)正確識(shí)別并行性并使用MPI構(gòu)造實(shí)現(xiàn)并行算法难述。
§MapReduce被認(rèn)為是“簡(jiǎn)化”的編程模型,但有一個(gè)限制吐句,即問(wèn)題必須具有“MAP”和“Reduce”表達(dá)的操作
§MPI是一種通用的并行編程模型胁后,但很復(fù)雜

MPI基本發(fā)送/接收

§我們需要填寫(xiě)詳細(xì)代碼
§需要指定的事項(xiàng):

  • 如何描述“數(shù)據(jù)”?什么樣的數(shù)據(jù)嗦枢,那些數(shù)據(jù)送攀芯,那些數(shù)據(jù)收
  • 如何識(shí)別流程?
  • 接收器如何識(shí)別/屏蔽消息文虏?
  • 完成這些操作意味著什么侣诺?

一些基本概念

§進(jìn)程可以收集到組中殖演,COMM_WORLD。
§每條消息都在上下文中發(fā)送紧武,并且必須在相同的上下文中接收剃氧。
§組和上下文一起形成一個(gè)communicator。
§進(jìn)程由與communicator關(guān)聯(lián)的組中的rank來(lái)標(biāo)識(shí)阻星。
§有一個(gè)默認(rèn)的communicator朋鞍,其組包含所有初始進(jìn)程,稱為MPI_COMM_WORLD妥箕。

MPI標(biāo)簽

§如何知道send和receive匹配滥酥,消息與附帶的用戶定義的整數(shù)標(biāo)記一起發(fā)送,以幫助接收過(guò)程識(shí)別消息畦幢。
§可以通過(guò)指定特定標(biāo)記在接收端篩選消息坎吻,或者不通過(guò)默認(rèn)MPI_ANY_TAG消息接收中的標(biāo)記。
§一些非MPI消息傳遞系統(tǒng)稱為“消息類型”標(biāo)簽宇葱。 MPI將它們稱為標(biāo)記以避免與數(shù)據(jù)類型混淆瘦真。

MPI Basic(阻止)發(fā)送

MPI_SEND(地址,計(jì)數(shù)黍瞧,數(shù)據(jù)類型诸尽,dest,標(biāo)記印颤,comm)
§消息緩沖區(qū)由(地址您机,計(jì)數(shù),數(shù)據(jù)類型)年局。
§目標(biāo)進(jìn)程指定為dest它抱,它等級(jí)comm指定的communicator中的目標(biāo)進(jìn)程法牲。
§當(dāng)此函數(shù)返回時(shí)听想,數(shù)據(jù)已傳送到系統(tǒng)眼虱,緩沖區(qū)可以重復(fù)使用。 目標(biāo)進(jìn)程可能尚未收到該消息僵朗。

MPI Basic(阻止)接收

MPI_RECV(地址赖欣,計(jì)數(shù),數(shù)據(jù)類型衣迷,來(lái)源,標(biāo)簽酱酬,通訊壶谒,狀態(tài))
§等待直到從系統(tǒng)接收到匹配(源和標(biāo)記)消息,并且可以使用緩沖區(qū)膳沽。
§任意來(lái)源是comm或MPI_ANY_SOURCE指定的通信器中的等級(jí)汗菜。
§多出的參數(shù)是让禀,狀態(tài),包含更多信息陨界⊙沧幔可以查看收到了多少數(shù)據(jù)的信息,接受量動(dòng)態(tài)變化菌瘪,status方便查詢腮敌。
§接收數(shù)量少于計(jì)數(shù)的數(shù)據(jù)類型是可以的,但是
收到更多是一個(gè)錯(cuò)誤俏扩。

狀態(tài)對(duì)象

§在完成接收后使用狀態(tài)對(duì)象來(lái)查找消息的實(shí)際長(zhǎng)度糜工,來(lái)源和標(biāo)記
§狀態(tài)對(duì)象是MPI定義的類型,并提供以下信息: - 消息的源進(jìn)程(status.source)

  • 消息標(biāo)簽(status.tag)
    §收到的要素?cái)?shù)量由下式給出:
    int MPI_Get_count(MPI_Status * status录淡,MPI_Datatype數(shù)據(jù)類型捌木,int * count)
    狀態(tài)返回狀態(tài)接收操作(狀態(tài))
    每個(gè)接收緩沖區(qū)元素的數(shù)據(jù)類型數(shù)據(jù)類型(句柄)計(jì)數(shù)接收元素的數(shù)量(整數(shù))(OUT)

MPI在某種意義上很簡(jiǎn)單......

§許多并行程序只能使用這六個(gè)函數(shù)編寫(xiě):

  • MPI_INIT - 初始化MPI庫(kù)(必須是第一個(gè)調(diào)用的例程)
  • MPI_COMM_SIZE - 獲取通信器的大小
  • MPI_COMM_RANK - 獲取調(diào)用進(jìn)程的等級(jí)
    在溝通者中
  • MPI_SEND - 向另一個(gè)進(jìn)程發(fā)送消息
  • MPI_RECV - 向另一個(gè)進(jìn)程發(fā)送消息
  • MPI_FINALIZE - 清理所有MPI狀態(tài)(必須是進(jìn)程調(diào)用的最后一個(gè)MPI函數(shù))
    §但是,為了提高性能嫉戚,您需要使用其他MPI功能

MPI數(shù)據(jù)類型

使用MPI定義的數(shù)據(jù)格式方便不同平臺(tái)的遷移性
§要發(fā)送或接收的消息中的數(shù)據(jù)由三元組(地址刨裆,計(jì)數(shù),數(shù)據(jù)類型)描述彬檀,其中
§MPI數(shù)據(jù)類型以遞歸方式定義為:

  • 預(yù)定義的帆啃,對(duì)應(yīng)于來(lái)自語(yǔ)言的數(shù)據(jù)類型(例如,
    MPI_INT凤覆,MPI_DOUBLE_PRECISION)
  • 連續(xù)的MPI數(shù)據(jù)類型數(shù)組
  • 數(shù)據(jù)類型的跨步塊
  • 數(shù)據(jù)類型的索引數(shù)組塊
  • 數(shù)據(jù)類型的任意結(jié)構(gòu)
    §MPI數(shù)據(jù)類型有兩個(gè)目的:
  • 異構(gòu)性
  • 不連續(xù)的數(shù)據(jù)链瓦,一個(gè)send可以送很多不連續(xù)的數(shù)據(jù),如果只使用C語(yǔ)言需要使用很多Send

MPI中的typeMap

§不連續(xù)數(shù)據(jù)可以定義一個(gè)新數(shù)據(jù)類型盯桦,在MPI中慈俯,數(shù)據(jù)類型表示為typemap typemap =(type0,disp0)拥峦,...贴膘,(typen-1,dispn-1)
§數(shù)據(jù)類型的范圍
數(shù)據(jù)類型范圍指定的內(nèi)存位置
§可以使用MPI_UB和MPI_LB設(shè)置人工范圍

CONTIGUOUS數(shù)據(jù)類型

MPI_Type_contiguous(count略号,oldtype刑峡,&newtype)MPI_Type_commit(&newtype)
§假設(shè)原始數(shù)據(jù)類型oldtype具有typemap(double,0)玄柠,double是8個(gè)字節(jié)(char突梦,8),然后重復(fù)三遍就是一個(gè)新的數(shù)據(jù)格式羽利。
MPI_Type_contiguous(3宫患,OLDTYPE,&NEWTYPE);
§要實(shí)際發(fā)送此類數(shù)據(jù)这弧,請(qǐng)使用以下調(diào)用順序:
MPI_Type_contiguous(計(jì)數(shù)娃闲,數(shù)據(jù)類型虚汛,及NEWTYPE);MPI_Type_commit(&NEWTYPE);MPI_SEND(緩沖液,1皇帮,NEWTYPE卷哩,DEST,標(biāo)簽属拾,COMM);MPI_Type_free(&NEWTYPE);

向量數(shù)據(jù)類型

索引數(shù)據(jù)類型

結(jié)構(gòu)數(shù)據(jù)類型

Non-Blocking非阻塞通信

非阻塞(異步)操作返回(立即)可以等待和查詢的“請(qǐng)求handle”(用來(lái)check有沒(méi)有完成)

  • MPI_ISEND(start将谊,count,datatype捌年,dest瓢娜,tag,comm礼预,request)
  • MPI_IRECV(start眠砾,count,datatype托酸,src褒颈,tag,comm励堡,request)
  • MPI_WAIT(請(qǐng)求谷丸,狀態(tài)) 阻塞式
    非阻塞操作允許重疊計(jì)算和通信。 也可以在不等待使用MPI_TEST的情況下進(jìn)行測(cè)試应结,就是去檢查請(qǐng)求
  • MPI_TEST(請(qǐng)求刨疼,標(biāo)志,狀態(tài))
    在任何使用MPI_Send或MPI_Recv的地方鹅龄,您都可以使用這對(duì)
    MPI_Isend / MPI_Wait或MPI_Irecv / MPI_Wait揩慕。

多次完成

§有時(shí)需要等待多個(gè)請(qǐng)求:MPI_Waitall(count,array_of_requests扮休,
array_of_statuses)MPI_Waitany(count迎卤,array_of_requests,
&index玷坠,&status)MPI_Waitsome(count蜗搔,array_of_requests,
array_of indices八堡,array_of_statuses)
§每個(gè)都有相應(yīng)的測(cè)試版本樟凄。

MPI中的集體通信

大部分可以用send/receive完成,如果想要更好的性能需要使用Collective機(jī)制兄渺,適合用廣播的模式缝龄。
§集體操作由communicator中的所有進(jìn)程調(diào)用
§沒(méi)有使用消息標(biāo)簽
§在許多應(yīng)用中,點(diǎn)對(duì)點(diǎn)可以被集體通信所取代,從而提高了簡(jiǎn)單性和效率

  • 讓內(nèi)部實(shí)施為您優(yōu)化溝通
    §三大類:
  • 同步:障礙
  • 數(shù)據(jù)移動(dòng)例程:廣播二拐,收集,分散
  • 全局計(jì)算程序:減少(多個(gè)進(jìn)程合并)凳兵,掃描

Barrier障礙同步

處理依賴關(guān)系百新。需要同步一下
§用于同步一組進(jìn)程的執(zhí)行:
int MPI_Barrier(MPI_Comm comm);
§障礙是分離兩個(gè)計(jì)算階段的簡(jiǎn)單方法,以確保兩個(gè)階段的消息不會(huì)相互作用

Movement數(shù)據(jù)移動(dòng)例程

§廣播例程實(shí)現(xiàn)一對(duì)一廣播庐扫,其中單個(gè)命名進(jìn)程(根)將相同數(shù)據(jù)發(fā)送到所有其他進(jìn)程
int MPI_Bcast(void * buffer饭望,int count,MPI_Datatype datatype形庭,int root铅辞,MPI_Comm comm)

單純的挪動(dòng),不做計(jì)算萨醒。
Gather是四個(gè)進(jìn)程的數(shù)據(jù)移動(dòng)匯聚成一個(gè)進(jìn)程的數(shù)據(jù)斟珊,
Scatter是一個(gè)進(jìn)程的數(shù)據(jù)移動(dòng)分離成四個(gè)進(jìn)程的數(shù)據(jù)

Reduction操作

§Reduce操作使用指定的操作OP組合每個(gè)進(jìn)程的輸入緩沖區(qū)中提供的值,并將組合值返回到單個(gè)根進(jìn)程的輸出緩沖區(qū)或所有進(jìn)程的輸出緩沖區(qū)
不但要挪動(dòng)數(shù)據(jù)富纸,還要計(jì)算囤踩。

More on Collective

還有很多的Collective用來(lái)提升性能,很多相似的功能非常容易混淆

MPI-IO

§從用戶的角度來(lái)看:

  • 訪問(wèn)數(shù)據(jù)的并行程序的多個(gè)進(jìn)程或線程晓褪,同時(shí)讀寫(xiě)一個(gè)公共文件(共享)
    §在單個(gè)文件中生成結(jié)果堵漱,您可以獲得良好的性能

為什么MPI是并行I / O的良好設(shè)置

§寫(xiě)數(shù)據(jù)就像從內(nèi)存發(fā)送和磁盤(pán)接收一樣,讀取就是磁盤(pán)發(fā)送和內(nèi)存接收涣仿。所以IO實(shí)際上就會(huì)死MPI的communication
§任何并行I / O系統(tǒng)都需要:

  • Collective來(lái)提升性能
  • 用戶定義的數(shù)據(jù)類型勤庐,用于描述內(nèi)存和文件布局
  • 用于分隔應(yīng)用程序級(jí)消息傳遞的communicator與I / O相關(guān)的消息傳遞
  • 非阻塞操作
    §即很多類似MPI的機(jī)器

MPI-IO術(shù)語(yǔ)

§文件指針:隱式指定讀/寫(xiě)的位置

  • 個(gè)人:本地文件指針
  • 共享:全局文件指針
    §偏移:從文件開(kāi)頭的位移
  • 明確指定讀/寫(xiě)位置
    §文件handle
  • 標(biāo)識(shí)文件的不透明對(duì)象
  • 指向由庫(kù)例程管理的數(shù)據(jù)結(jié)構(gòu)的指針
    §訪問(wèn)模式
  • 定義文件如何用于讀/寫(xiě)
  • 打開(kāi)文件時(shí)指定
  • 例如 MPI_MODE_RDONLY,MPI_MODE_RDWR(位標(biāo)志)

并行I / O例程(API)

讀寫(xiě)文件的具體實(shí)現(xiàn)

File View

多個(gè)進(jìn)程讀取一個(gè)文件怎么表達(dá)這個(gè)信息好港,使用文件視圖
§處理對(duì)共享文件的讀/寫(xiě)操作
§每個(gè)進(jìn)程都會(huì)看到文件的一部分
§文件視圖:定義文件的區(qū)域以分隔進(jìn)程

§由三元組指定(位移愉镰,etype和文件類型)

  • displacement:從文件開(kāi)頭跳過(guò)的字節(jié)數(shù)
  • etype:數(shù)據(jù)訪問(wèn)的基本單位(可以是任何基本或派生數(shù)據(jù)類型)
  • filetype:指定文件的哪個(gè)部分對(duì)進(jìn)程可見(jiàn)

用于處理不連續(xù)IO

§連續(xù)的I / O將數(shù)據(jù)從內(nèi)存中的連續(xù)塊移動(dòng)到單個(gè)存儲(chǔ)區(qū)域
§非連續(xù)I / O有三種形式:

  • 在內(nèi)存中不連續(xù)
  • 文件中不連續(xù)
  • 兩者都不相鄰

Ways to Read/Write to a Shared File

從文件的指定的位置去讀和寫(xiě),并且shared媚狰,每個(gè)進(jìn)程去讀寫(xiě)文件都會(huì)有自己的file pointer岛杀,shared可以是多個(gè)進(jìn)程使用相同的file pointer,

Collective IO

多個(gè)進(jìn)程讀寫(xiě)文件如何優(yōu)化崭孤。內(nèi)存和文件系統(tǒng)的send和receive也需要使用collective去優(yōu)化类嗤。
許多應(yīng)用程序都有計(jì)算和I / O階段§在I / O階段,所有進(jìn)程都讀/寫(xiě)數(shù)據(jù)

  • 我們可以說(shuō)他們共同訪問(wèn)存儲(chǔ)
    §集體I / O由一組進(jìn)程協(xié)調(diào)訪問(wèn)存儲(chǔ)
  • 參與I / O的所有進(jìn)程必須調(diào)用集合I / O函數(shù)
  • 允許MPI-IO中間件層知道完整的優(yōu)化訪問(wèn)權(quán)限
  • §獨(dú)立I / O不是以這種方式組織的
  • 訪問(wèn)沒(méi)有明顯的順序或結(jié)構(gòu)

Two-Phase Collective IO

最常用的Collective IO
§將不同進(jìn)程的不連續(xù)數(shù)據(jù)合并為更大的連續(xù)數(shù)據(jù)
§將請(qǐng)求合并為連續(xù)的請(qǐng)求
§共享公共塊
§兩階段

  • I / O階段辨宠,三個(gè)進(jìn)程先讀到內(nèi)存里面去
  • 通信(交換)階段遗锣,然后在內(nèi)存里面進(jìn)行數(shù)據(jù)交換變?yōu)檫B續(xù)的數(shù)據(jù)

Collective IO with Aggregation

比如有100個(gè)進(jìn)程,只選其中4個(gè)進(jìn)程去跟文件系統(tǒng)讀寫(xiě)嗤形,把數(shù)據(jù)劃分為Aggregation精偿,讀出來(lái)的數(shù)據(jù)再去進(jìn)行交互。這四個(gè)進(jìn)程叫中間節(jié)點(diǎn)。
§聚合是指通過(guò)中間節(jié)點(diǎn)移動(dòng)數(shù)據(jù)的概念

  • 執(zhí)行I / O的不同節(jié)點(diǎn)數(shù)
  • 也可以應(yīng)用于獨(dú)立的I / O.

Nonblocking I/O

IO也有非阻塞式的

實(shí)現(xiàn)高I / O性能的一般指南

§擁有足夠的I / O硬件
§使用并行/分布式文件系統(tǒng)笔咽,而不是NFS安裝的home目錄
§不要僅從一個(gè)進(jìn)程執(zhí)行I / O.
§盡可能提出大量請(qǐng)求
§對(duì)于非連續(xù)請(qǐng)求搔预,請(qǐng)使用派生數(shù)據(jù)類型和單個(gè)集合I / O調(diào)用
§任何應(yīng)用程序都根據(jù)其I / O需求具有特定的“I / O訪問(wèn)模式”,并選擇正確的API以及向I / O系統(tǒng)表達(dá)I / O訪問(wèn)模式的正確方式

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末叶组,一起剝皮案震驚了整個(gè)濱河市拯田,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌甩十,老刑警劉巖船庇,帶你破解...
    沈念sama閱讀 221,576評(píng)論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異侣监,居然都是意外死亡鸭轮,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,515評(píng)論 3 399
  • 文/潘曉璐 我一進(jìn)店門(mén)橄霉,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)窃爷,“玉大人,你說(shuō)我怎么就攤上這事姓蜂⊥萄迹” “怎么了?”我有些...
    開(kāi)封第一講書(shū)人閱讀 168,017評(píng)論 0 360
  • 文/不壞的土叔 我叫張陵覆糟,是天一觀的道長(zhǎng)刻剥。 經(jīng)常有香客問(wèn)我,道長(zhǎng)滩字,這世上最難降的妖魔是什么造虏? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 59,626評(píng)論 1 296
  • 正文 為了忘掉前任,我火速辦了婚禮麦箍,結(jié)果婚禮上漓藕,老公的妹妹穿的比我還像新娘。我一直安慰自己挟裂,他們只是感情好享钞,可當(dāng)我...
    茶點(diǎn)故事閱讀 68,625評(píng)論 6 397
  • 文/花漫 我一把揭開(kāi)白布。 她就那樣靜靜地躺著诀蓉,像睡著了一般栗竖。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上渠啤,一...
    開(kāi)封第一講書(shū)人閱讀 52,255評(píng)論 1 308
  • 那天狐肢,我揣著相機(jī)與錄音,去河邊找鬼沥曹。 笑死份名,一個(gè)胖子當(dāng)著我的面吹牛碟联,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播僵腺,決...
    沈念sama閱讀 40,825評(píng)論 3 421
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼鲤孵,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了辰如?” 一聲冷哼從身側(cè)響起裤纹,我...
    開(kāi)封第一講書(shū)人閱讀 39,729評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎丧没,沒(méi)想到半個(gè)月后,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體锡移,經(jīng)...
    沈念sama閱讀 46,271評(píng)論 1 320
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡呕童,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,363評(píng)論 3 340
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了淆珊。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片夺饲。...
    茶點(diǎn)故事閱讀 40,498評(píng)論 1 352
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖施符,靈堂內(nèi)的尸體忽然破棺而出往声,到底是詐尸還是另有隱情,我是刑警寧澤戳吝,帶...
    沈念sama閱讀 36,183評(píng)論 5 350
  • 正文 年R本政府宣布浩销,位于F島的核電站,受9級(jí)特大地震影響听哭,放射性物質(zhì)發(fā)生泄漏慢洋。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,867評(píng)論 3 333
  • 文/蒙蒙 一陆盘、第九天 我趴在偏房一處隱蔽的房頂上張望普筹。 院中可真熱鬧,春花似錦隘马、人聲如沸太防。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 32,338評(píng)論 0 24
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)蜒车。三九已至,卻和暖如春幔嗦,著一層夾襖步出監(jiān)牢的瞬間醇王,已是汗流浹背。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 33,458評(píng)論 1 272
  • 我被黑心中介騙來(lái)泰國(guó)打工崭添, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留寓娩,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 48,906評(píng)論 3 376
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像棘伴,于是被迫代替她去往敵國(guó)和親寞埠。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,507評(píng)論 2 359

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

  • 前言 計(jì)算機(jī)編程語(yǔ)言很多焊夸,但是適合高性能數(shù)值計(jì)算的語(yǔ)言卻并不多仁连,在高性能計(jì)算的項(xiàng)目中通常會(huì)使用到的語(yǔ)言有 Fort...
    自可樂(lè)閱讀 19,756評(píng)論 3 22
  • 在上一篇中我們介紹了 mpi4py 中的 memory 對(duì)象及內(nèi)存操作,下面我們將介紹 mpi4py 中的簡(jiǎn)單并行...
    自可樂(lè)閱讀 1,791評(píng)論 0 2
  • ORA-00001: 違反唯一約束條件 (.) 錯(cuò)誤說(shuō)明:當(dāng)在唯一索引所對(duì)應(yīng)的列上鍵入重復(fù)值時(shí)阱穗,會(huì)觸發(fā)此異常饭冬。 O...
    我想起個(gè)好名字閱讀 5,334評(píng)論 0 9
  • MPI簡(jiǎn)介 說(shuō)到并行計(jì)算,我們有一個(gè)不可繞開(kāi)的話題——MPI編程揪阶。MPI是一個(gè)跨語(yǔ)言的通訊協(xié)議昌抠,用于編寫(xiě)并行計(jì)算機(jī)...
    沒(méi)對(duì)象的野指針閱讀 86,308評(píng)論 3 27
  • homebrew 為什么需要homebrew? Mac OS X是基于Unix的操作系統(tǒng)鲁僚,可以安裝大部分為Unix...
    怪怪顧客閱讀 565評(píng)論 1 1