Общие массивы
SharedArrays.SharedArrayТип
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}(...)
Создаёт общий массив, основанный на файле 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 позволяет пропустить указанное количество байтов в начале файла.
Distributed.procsМетод
procs(S::SharedArray)
Получает вектор процессов, сопоставленных с общим массивом.
исходный код
SharedArrays.sdataФункция
sdata(S::SharedArray)
Возвращает фактический объект Array который поддерживает S.
SharedArrays.indexpidsФункция
indexpids(S::SharedArray)
Возвращает индекс текущего рабочего процесса в списке рабочих процессов, сопоставленных с SharedArray (т.е. в том же списке, что возвращается procs(S)), или 0, если SharedArray не сопоставлен локально.
SharedArrays.localindicesФункция
localindices(S::SharedArray)
Возвращает диапазон, описывающий «стандартные» индексы, которые должен обрабатывать текущий процесс. Этот диапазон следует интерпретировать в смысле линейной индексации, т.е. как поддиапазон 1:length(S). В многопроцессорных контекстах возвращает пустой диапазон в родительском процессе (или в любом процессе, для которого indexpids возвращает 0).
Стоит подчеркнуть, что localindices существует только в качестве удобства, и вы можете распределять работу над массивом среди рабочих процессов любым способом. Для SharedArray, все индексы должны быть одинаково быстрыми для каждого рабочего процесса.
© 2009–2019 Jeff Bezanson, Stefan Karpinski, Viral B. Shah, and other contributors
Licensed under the MIT License.
https://docs.julialang.org/en/v0.7.0/stdlib/SharedArrays/