Документация Engee

Общие массивы

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