Shared Arrays

SharedArray يمثل مصفوفة، يتم مشاركتها عبر عمليات متعددة، على جهاز واحد.

SharedArrays.SharedArrayType
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 يسمح لك بتخطي عدد محدد من البايتات في بداية الملف.

source
Distributed.procsMethod
procs(S::SharedArray)

احصل على متجه العمليات التي تقوم بتعيين المصفوفة المشتركة.

source
SharedArrays.indexpidsFunction
indexpids(S::SharedArray)

إرجاع فهرس العامل الحالي في قائمة العمال التي تقوم بتعيين SharedArray (أي في نفس القائمة التي يتم إرجاعها بواسطة procs(S))، أو 0 إذا لم يتم تعيين SharedArray محليًا.

source
SharedArrays.localindicesFunction
localindices(S::SharedArray)

يعيد نطاقًا يصف "المؤشرات الافتراضية" التي يجب التعامل معها بواسطة العملية الحالية. يجب تفسير هذا النطاق بمعنى الفهرسة الخطية، أي كنطاق فرعي من 1:length(S). في سياقات متعددة العمليات، يعيد نطاقًا فارغًا في العملية الأصلية (أو أي عملية تعيد indexpids 0).

من الجدير بالتأكيد أن localindices موجودة فقط كوسيلة راحة، ويمكنك تقسيم العمل على المصفوفة بين العمال بأي طريقة تريد. بالنسبة لـ SharedArray، يجب أن تكون جميع المؤشرات سريعة بنفس القدر لكل عملية عامل.

source