共用陣列
SharedArray
表示陣列,此陣列在單一機器上由多個程序共用。
SharedArrays.SharedArray
— 類型SharedArray{T}(dims::NTuple; init=false, pids=Int[])
SharedArray{T,N}(...)
在 pids
指定的程序中,建構一個位元類型 T
和大小 dims
的 SharedArray
,而這些程序必須都在同一個主機上。如果透過呼叫 SharedArray{T,N}(dims)
指定 N
,則 N
必須與 dims
的長度相符。
如果未指定 pids
,則共享陣列將會對應到目前主機上所有程序,包括主程序。但是,localindices
和 indexpids
將只會對應到工作程序。這有助於工作分配程式碼使用工作程序來進行實際運算,而主程序則扮演驅動程序的角色。
如果指定了類型為 initfn(S::SharedArray)
的 init
函式,則會在所有參與的工作程序上呼叫該函式。
只要在建立對應的節點上存在對 SharedArray
物件的參照,共享陣列就是有效的。
SharedArray{T}(filename::AbstractString, dims::NTuple, [offset=0]; mode=nothing, init=false, pids=Int[])
SharedArray{T,N}(...)
建立一個 SharedArray
,它由檔案 filename
、元素類型 T
(必須是位元類型) 和大小 dims
所支援,並跨越由 pids
指定的程序 - 所有程序都必須在同一個主機上。此檔案會以 mmap 方式對應到主機記憶體,並有以下後果
陣列資料必須以二進位格式表示 (例如,不支援 CSV 等 ASCII 格式)
您對陣列值所做的任何變更 (例如,
A[3] = 0
) 也會變更磁碟上的值
如果未指定 pids
,則共享陣列將會對應到目前主機上所有程序,包括主程序。但是,localindices
和 indexpids
將只會對應到工作程序。這有助於工作分配程式碼使用工作程序來進行實際運算,而主程序則扮演驅動程序的角色。
mode
必須是 "r"
、"r+"
、"w+"
或 "a+"
之一,如果 filename
指定的檔案已存在,則預設為 "r+"
,如果不存在,則預設為 "w+"
。如果指定了類型為 initfn(S::SharedArray)
的 init
函式,則會在所有參與的工作程序上呼叫該函式。如果檔案不可寫入,則無法指定 init
函式。
offset
允許您略過檔案開頭指定的位元組數。
SharedArrays.SharedVector
— 類型SharedVector
一維 SharedArray
。
SharedArrays.SharedMatrix
— 類型SharedMatrix
一個二維的 SharedArray
。
Distributed.procs
— 方法procs(S::SharedArray)
取得對應共用陣列的處理程序向量。
SharedArrays.sdata
— 函數sdata(S::SharedArray)
傳回 S
背後的實際 Array
物件。
SharedArrays.indexpids
— 函數indexpids(S::SharedArray)
傳回目前工作程序在對應 SharedArray
的工作程序清單中的索引(也就是與 procs(S)
傳回的清單相同),或在 SharedArray
未在本地對應時傳回 0。
SharedArrays.localindices
— 函數localindices(S::SharedArray)
傳回描述由目前程序處理的「預設」索引的範圍。這個範圍應解讀為線性索引,也就是說,是 1:length(S)
的子範圍。在多重程序的脈絡中,會在父程序(或任何 indexpids
傳回 0 的程序)傳回一個空的範圍。
值得強調的是,localindices
純粹存在於方便性,而且你可以隨意在工作程序間分割陣列上的工作。對於 SharedArray
,所有索引對於每個工作程序都應同樣快速。