Shared Arrays

SharedArray представляет собой массив, который разделяется между несколькими процессами на одной машине.

SharedArrays.SharedArrayType
SharedArray{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 позволяет пропустить указанное количество байтов в начале файла.

source
Distributed.procsMethod
procs(S::SharedArray)

Получите вектор процессов, сопоставляющих общий массив.

source
SharedArrays.sdataFunction
sdata(S::SharedArray)

Возвращает фактический объект Array, поддерживающий S.

source
SharedArrays.indexpidsFunction
indexpids(S::SharedArray)

Возвращает индекс текущего рабочего в списке рабочих, сопоставляющих SharedArray (т.е. в том же списке, который возвращает procs(S)), или 0, если SharedArray не сопоставлен локально.

source
SharedArrays.localindicesFunction
localindices(S::SharedArray)

Возвращает диапазон, описывающий "умолчательные" индексы, которые обрабатываются текущим процессом. Этот диапазон следует интерпретировать в смысле линейной индексации, т.е. как поддиапазон 1:length(S). В многопроцессорных контекстах возвращает пустой диапазон в родительском процессе (или любом процессе, для которого indexpids возвращает 0).

Стоит подчеркнуть, что localindices существует исключительно для удобства, и вы можете распределять работу по массиву между рабочими процессами любым удобным для вас способом. Для SharedArray все индексы должны быть одинаково быстрыми для каждого рабочего процесса.

source