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