Shared Arrays
SharedArray
представляет собой массив, который разделяется между несколькими процессами на одной машине.
SharedArrays.SharedArray
— TypeSharedArray{T}(dims::NTuple; init=false, pids=Int[])
SharedArray{T,N}(...)
Создает SharedArray
типа битов T
и размера dims
на процессах, указанных в 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}(...)
Создает SharedArray
, поддерживаемый файлом filename
, с типом элемента T
(должен быть типом битов) и размером dims
, на процессах, указанных в pids
- все они должны находиться на одном хосте. Этот файл отображается в память хоста, с следующими последствиями:
- Данные массива должны быть представлены в двоичном формате (например, ASCII формат, такой как CSV, не поддерживается)
- Любые изменения, которые вы вносите в значения массива (например,
A[3] = 0
), также изменят значения на диске
Если pids
не указан, общий массив будет распределен по всем процессам на текущем хосте, включая мастер. Однако localindices
и indexpids
будут ссылаться только на рабочие процессы. Это облегчает распределение работы, позволяя использовать рабочих для фактических вычислений, в то время как мастерский процесс выступает в роли драйвера.
mode
должен быть одним из "r"
, "r+"
, "w+"
или "a+"
, и по умолчанию равен "r+"
, если файл, указанный в filename
, уже существует, или "w+"
, если нет. Если указана функция init
типа initfn(S::SharedArray)
, она будет вызвана на всех участвующих рабочих. Вы не можете указать функцию init
, если файл не доступен для записи.
offset
позволяет пропустить указанное количество байтов в начале файла.
SharedArrays.SharedVector
— TypeSharedVector
Одномерный SharedArray
.
SharedArrays.SharedMatrix
— TypeSharedMatrix
Двумерный SharedArray
.
Distributed.procs
— Methodprocs(S::SharedArray)
Получите вектор процессов, сопоставляющих общий массив.
SharedArrays.sdata
— Functionsdata(S::SharedArray)
Возвращает фактический объект Array
, поддерживающий S
.
SharedArrays.indexpids
— Functionindexpids(S::SharedArray)
Возвращает индекс текущего рабочего в списке рабочих, сопоставляющих SharedArray
(т.е. в том же списке, который возвращает procs(S)
), или 0, если SharedArray
не сопоставлен локально.
SharedArrays.localindices
— Functionlocalindices(S::SharedArray)
Возвращает диапазон, описывающий "умолчательные" индексы, которые обрабатываются текущим процессом. Этот диапазон следует интерпретировать в смысле линейной индексации, т.е. как поддиапазон 1:length(S)
. В многопроцессорных контекстах возвращает пустой диапазон в родительском процессе (или любом процессе, для которого indexpids
возвращает 0).
Стоит подчеркнуть, что localindices
существует исключительно для удобства, и вы можете распределять работу по массиву между рабочими процессами любым удобным для вас способом. Для SharedArray
все индексы должны быть одинаково быстрыми для каждого рабочего процесса.