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 все индексы должны быть одинаково быстрыми для каждого рабочего процесса.