Общие массивы
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}(...)
Создает массив 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
позволяет пропустить указанное число байтов в начале файла.
SharedVector
Одномерный массив SharedArray
.
SharedMatrix
Двумерный массив SharedArray
.
procs(S::SharedArray)
Возвращает вектор процессов, сопоставленных с общим массивом.
sdata(S::SharedArray)
Возвращает фактический объект Array
, на котором основан объект S
.
indexpids(S::SharedArray)
Возвращает индекс текущего рабочего процесса в списке рабочих процессов, сопоставленных с SharedArray
(то есть в списке, возвращаемом procs(S)
), или 0, если массив SharedArray
не сопоставлен локально.
localindices(S::SharedArray)
Возвращает диапазон, описывающий индексы «по умолчанию», которые должны обрабатываться текущим процессом. Этот диапазон должен интерпретироваться в терминах линейного индексирования, то есть как поддиапазон 1:length(S)
. В многопроцессных контекстах возвращает пустой диапазон в родительском процессе (или в любом процессе, для которого indexpids
возвращает 0).
Стоит отметить, что localindices
существует исключительно ради удобства. Вы можете разделять работу с массивом между процессами как вам угодно. Для SharedArray
все индексы должны быть одинаково быстрыми для любого рабочего процесса.