Shared Arrays
SharedArray
는 단일 머신에서 여러 프로세스 간에 공유되는 배열을 나타냅니다.
SharedArrays.SharedArray
— TypeSharedArray{T}(dims::NTuple; init=false, pids=Int[])
SharedArray{T,N}(...)
비트 타입 T
와 크기 dims
의 SharedArray
를 지정된 프로세스 pids
에 걸쳐 생성합니다. 모든 프로세스는 동일한 호스트에 있어야 합니다. N
이 SharedArray{T,N}(dims)
를 호출하여 지정되면, N
은 dims
의 길이와 일치해야 합니다.
pids
가 지정되지 않으면, 공유 배열은 현재 호스트의 모든 프로세스에 걸쳐 매핑되며, 마스터를 포함합니다. 그러나 localindices
와 indexpids
는 작업자 프로세스만 참조합니다. 이는 작업 분배 코드를 통해 마스터 프로세스가 드라이버 역할을 하면서 실제 계산을 위해 작업자를 사용할 수 있도록 합니다.
init
함수의 유형 initfn(S::SharedArray)
가 지정되면, 참여하는 모든 작업자에서 호출됩니다.
공유 배열은 매핑을 생성한 노드에 SharedArray
객체에 대한 참조가 존재하는 한 유효합니다.
SharedArray{T}(filename::AbstractString, dims::NTuple, [offset=0]; mode=nothing, init=false, pids=Int[])
SharedArray{T,N}(...)
파일 filename
에 의해 지원되는 SharedArray
를 생성하며, 요소 타입 T
(비트 타입이어야 함)와 크기 dims
를 지정된 프로세스 pids
에 걸쳐 생성합니다. 모든 프로세스는 동일한 호스트에 있어야 합니다. 이 파일은 호스트 메모리에 mmapped되며, 다음과 같은 결과를 초래합니다:
- 배열 데이터는 이진 형식으로 표현되어야 합니다(예: CSV와 같은 ASCII 형식은 지원되지 않음)
- 배열 값에 대한 변경(예:
A[3] = 0
)은 디스크의 값도 변경합니다.
pids
가 지정되지 않으면, 공유 배열은 현재 호스트의 모든 프로세스에 걸쳐 매핑되며, 마스터를 포함합니다. 그러나 localindices
와 indexpids
는 작업자 프로세스만 참조합니다. 이는 작업 분배 코드를 통해 마스터 프로세스가 드라이버 역할을 하면서 실제 계산을 위해 작업자를 사용할 수 있도록 합니다.
mode
는 "r"
, "r+"
, "w+"
, 또는 "a+"
중 하나여야 하며, filename
으로 지정된 파일이 이미 존재하는 경우 기본값은 "r+"
이고, 존재하지 않는 경우는 "w+"
입니다. init
함수의 유형 initfn(S::SharedArray)
가 지정되면, 참여하는 모든 작업자에서 호출됩니다. 파일이 쓰기 가능하지 않은 경우 init
함수를 지정할 수 없습니다.
offset
은 파일의 시작 부분에서 지정된 바이트 수를 건너뛰도록 허용합니다.
SharedArrays.SharedVector
— TypeSharedVector
일차원 SharedArray
입니다.
SharedArrays.SharedMatrix
— TypeSharedMatrix
2차원 SharedArray
입니다.
Distributed.procs
— Methodprocs(S::SharedArray)
공유 배열에 매핑된 프로세스의 벡터를 가져옵니다.
SharedArrays.sdata
— Functionsdata(S::SharedArray)
S
를 지원하는 실제 Array
객체를 반환합니다.
SharedArrays.indexpids
— Functionindexpids(S::SharedArray)
현재 작업자의 인덱스를 SharedArray
의 작업자 목록에서 반환합니다(즉, procs(S)
에 의해 반환된 동일한 목록에서). SharedArray
가 로컬로 매핑되지 않은 경우 0을 반환합니다.
SharedArrays.localindices
— Functionlocalindices(S::SharedArray)
현재 프로세스에서 처리할 "기본" 인덱스를 설명하는 범위를 반환합니다. 이 범위는 선형 인덱싱의 의미에서 해석되어야 하며, 즉 1:length(S)
의 하위 범위로 해석됩니다. 다중 프로세스 컨텍스트에서는 부모 프로세스(또는 indexpids
가 0을 반환하는 모든 프로세스)에서 빈 범위를 반환합니다.
localindices
는 순전히 편의성을 위해 존재하며, 배열의 작업을 작업자 간에 원하는 방식으로 분할할 수 있다는 점을 강조할 가치가 있습니다. SharedArray
의 경우, 모든 인덱스는 각 작업자 프로세스에 대해 동일하게 빠르게 처리되어야 합니다.