العمليات
mpmd.assign (mpmd::AssignOp)
عملية التعيين
البنية:
operation ::= `mpmd.assign` attr-dict $tensor `:` functional-type(operands, results)
تُستخدَم لتعيين موتر محلي لشبكة على أنّه مكرّر بالكامل داخل تلك الشبكة.
هذه عملية مؤقتة يتم تقديمها عند خفض عمليات jax، وذلك للانتقال من الأنواع المحلية إلى أنواع الشبكة المتداخلة. سيتم إلغاء هذه العمليات أثناء الاستيراد، عندما تصبح مدخلات عملية الدالة ونتائجها موترات شبكية.
يجب أن يتطابق اسم الشبكة لنوع النتيجة مع شبكة في المخطط الطوبولوجي، ويجب أن يكون نوعه العام مطابقًا لنوع المعامِل.
أصل عملية التعيين هو أصل الشبكة، مثل named_computation أو mesh inference أو غير ذلك.
السمات: AlwaysSpeculatableImplTrait، HasParent<::mlir::func::FuncOp, ForOp>
واجهات برمجة التطبيقات: ConditionallySpeculatable وNoMemoryEffect (MemoryEffectOpInterface)
التأثيرات: MemoryEffects::Effect{}
السمات:
| السمة | نوع MLIR | الوصف |
|---|---|---|
origin | ::mlir::StringAttr | سمة السلسلة |
المعاملات:
| المُعامل | الوصف |
|---|---|
tensor |
متّجه متعدّد الأبعاد من أي قيم غير رمزية |
النتائج:
| النتيجة | الوصف |
|---|---|
result |
نوع متّجه الشبكة |
mpmd.broadcast (mpmd::BroadcastOp)
عملية البث
البنية:
operation ::= `mpmd.broadcast` attr-dict $tensor `:` type($tensor)
تتيح نقل (أو تكرار) متّجه متعدّد الأبعاد في أي شبكة متداخلة يتم استخدامه فيها. عندما يتم نقل البيانات، يكون مصدر النقل هو الموقع الجغرافي الحالي للمعامل.
السمات: AlwaysSpeculatableImplTrait، SameOperandsAndResultType
واجهات برمجة التطبيقات: ConditionallySpeculatable وInferTypeOpInterface وNoMemoryEffect (MemoryEffectOpInterface)
التأثيرات: MemoryEffects::Effect{}
المعاملات:
| المُعامل | الوصف |
|---|---|
tensor |
متّجه متعدّد الأبعاد من أي قيم غير رمزية |
النتائج:
| النتيجة | الوصف |
|---|---|
result |
متّجه متعدّد الأبعاد من أي قيم غير رمزية |
mpmd.call (mpmd::CallOp)
وظيفة الاتصال الخاصة ببرنامج "مطوّر التسويق المفضَّل"
البنية:
operation ::= `mpmd.call` $callee `(` $tensors `)` attr-dict `:` functional-type(operands, results)
عملية استدعاء دالة مفيدة لتضمين نص التكرارات الحلقية في تعريفات الدوال، وذلك لتقليل حجم الرمز البرمجي، على سبيل المثال.
واجهات برمجة التطبيقات: ArgAndResultAttrsOpInterface وCallOpInterface وSymbolUserOpInterface
السمات:
| السمة | نوع MLIR | الوصف |
|---|---|---|
callee | ::mlir::FlatSymbolRefAttr | سمة مرجعية للرمز المسطّح |
المعاملات:
| المُعامل | الوصف |
|---|---|
tensors |
متغيّر لوتري من موتر من أي قيم غير رمزية أو نوع موتر شبكي |
النتائج:
| النتيجة | الوصف |
|---|---|
| «unnamed» | متغيّر لوتري من موتر من أي قيم غير رمزية أو نوع موتر شبكي |
mpmd.for (mpmd::ForOp)
لمشغّل الشبكة
تعرض هذه الدالة نتيجة تنفيذ دالة أساسية لعدد ثابت من التكرارات، مع توفّر فهرس التكرار في الدالة الأساسية.
يمكن تحديد عامل فك تكرار اختياري يجب أن يقسم عدد التكرارات، وذلك لفك تكرار نص العملية بهذا العامل، أي أنّه بالنسبة إلى عامل فك التكرار N، يتم تكرار النص لإنشاء N نسخة ويتم تقليل عدد التكرارات بمقدار 1/N. تستخدم كل نسخة باستثناء النسخة الأولى نتائج النسخة السابقة بدلاً من وسيطات الكتلة، ويتم ضرب فهرس التكرار في عامل التوسيع ثم زيادته بعد كل نسخة.
يمكن أن يقبل عامل التشغيل "for" أي أنواع ويعرضها، ولكن يجب أن يكون TypeID لهذه الأنواع متطابقًا، مثلاً جميع أنواع المتّجهات المتعدّدة الأبعاد أو جميع أنواع الشبكات المتداخلة MPMD وما إلى ذلك. يتيح لنا ذلك استخدام العمليّة على مستويات مختلفة، مع مشاركة عمليات التنفيذ والتحويلات.
السمات: HLO_PairwiseSameOperandAndResultType وRecursiveMemoryEffects وRecursivelySpeculatableImplTrait وSingleBlockImplicitTerminator<ReturnOp> وSingleBlock
واجهات برمجة التطبيقات: ConditionallySpeculatable وLoopLikeOpInterface وOpAsmOpInterface وShardableDataFlowOpInterface
السمات:
| السمة | نوع MLIR | الوصف |
|---|---|---|
iterations | ::mlir::IntegerAttr | سمة عدد صحيح غير موقّع 32 بت |
unroll_factor | ::mlir::IntegerAttr | سمة عدد صحيح غير موقّع 32 بت |
المعاملات:
| المُعامل | الوصف |
|---|---|
tensors |
متغيّر من أي نوع غير رمزي |
النتائج:
| النتيجة | الوصف |
|---|---|
results |
متغيّر من أي نوع غير رمزي |
mpmd.fragment (mpmd::FragmentOp)
عملية الجزء
تعيّن هذه السمة عملية حسابية، أي مجموعة من العمليات، لشبكة معيّنة في بنية MPMD، والتي من المفترض أن يتم تنفيذها كجزء فردي من برنامج SPMD.
لا يأخذ الجزء إلا موترات الشبكة التي تم تعيينها إلى الشبكة نفسها التي تم تعيين الجزء إليها، ولا يعرض إلا هذه الموترات.
يجب أن يتطابق اسم الشبكة للجزء مع شبكة في المخطط الطوبولوجي.
يتضمّن الجزء قائمة بالمصادر، أي البيانات الوصفية التي تتضمّن معلومات حول العمليات الحسابية الأصلية المسماة التي شكّلت هذا الجزء، ومعرّف staged_id محدّد إذا وفقط إذا كان جزءًا محدّدًا من قِبل المستخدم، أي أنّه يتضمّن قائمة غير فارغة بالمصادر. تحدّد السمة الاختيارية in_shardings تقسيم وسيطات الحظر الخاصة بالجزء، والتي تتوافق مع المعامِلات. تحدّد out_shardings الاختيارية تقسيم النتائج.
يجب ألا يحتوي جزء الرمز على أي متغيرات حرة، ويجب أن يكون نوع كل وسيطة من وسيطات الحظر والقيم التي يتم إرجاعها في الجزء هو نوع الموتر العام للموتر الشبكي المقابل.
السمات: HasParent<::mlir::func::FuncOp, ForOp> وIsolatedFromAbove وRecursiveMemoryEffects وRecursivelySpeculatableImplTrait وSingleBlockImplicitTerminator<ReturnOp> وSingleBlock
واجهات برمجة التطبيقات: ConditionallySpeculatable وShardableDataFlowOpInterface
السمات:
| السمة | نوع MLIR | الوصف |
|---|---|---|
origin | ::mlir::ArrayAttr | مصفوفة تتضمّن معلومات حول المصدر |
mesh_name | ::mlir::StringAttr | سمة السلسلة |
stage_id | ::mlir::IntegerAttr | سمة عدد صحيح غير موقّع 64 بت |
in_shardings | ::mlir::sdy::TensorShardingPerValueAttr | تقسيم الموتر حسب المعامِل/نتيجة العملية |
out_shardings | ::mlir::sdy::TensorShardingPerValueAttr | تقسيم الموتر حسب المعامِل/نتيجة العملية |
المعاملات:
| المُعامل | الوصف |
|---|---|
inputs |
متغير من نوع موتر الشبكة أو الرمز المميّز |
النتائج:
| النتيجة | الوصف |
|---|---|
results |
متغير من نوع موتر الشبكة أو الرمز المميّز |
mpmd.fragment_call (mpmd::FragmentCallOp)
عملية استدعاء الجزء
تمثّل هذه السمة طلبًا إلى دالة تتضمّن جزءًا من نص MPMD، أي عملية حسابية مخصّصة لشبكة معيّنة في بنية MPMD، والمقصود تنفيذها كجزء فردي من برنامج SPMD.
يجب أن يتطابق اسم الشبكة الخاصة بالجزء مع شبكة في بنية الدالة الحاضنة، ويجب أن يتطابق شكل الشبكة مع شكل الدالة المستدعاة.
يحدّد المصدر العمليات الحسابية المسماة للمستخدم التي ساهمت في طلب الجزء هذا، مثلاً من خلال الدمج.
يجب أن تكون أنواع الإدخال والنتائج للدالة التي يتم استدعاؤها هي أنواع الموتر المحلي للموترات الشبكية المقابلة لمعاملات ونتائج هذه العملية على التوالي.
مثال:
%2 = mpmd.fragment_call<mesh="m1",> origin=[] @my_fragment(%0, %1) :
(m<esh>_tensor..., m<esh>_te>nsor...) - m<esh>_tensor...
السمات: HasParent<::mlir::func::FuncOp>، MemRefsNormalizable
واجهات برمجة التطبيقات: ArgAndResultAttrsOpInterface وCallOpInterface وSymbolUserOpInterface
السمات:
| السمة | نوع MLIR | الوصف |
|---|---|---|
origin | ::mlir::ArrayAttr | مصفوفة تتضمّن معلومات حول المصدر |
mesh_name | ::mlir::StringAttr | سمة السلسلة |
callee | ::mlir::FlatSymbolRefAttr | سمة مرجعية للرمز المسطّح |
المعاملات:
| المُعامل | الوصف |
|---|---|
tensors |
variadic of mesh tensor type |
النتائج:
| النتيجة | الوصف |
|---|---|
| «unnamed» | variadic of mesh tensor type |
mpmd.named_computation (mpmd::NamedComputationOp)
عملية النطاق المُسمّى
تجمع هذه السمة عملية حسابية، أي مجموعة من العمليات، وتمنحها اسمًا وعددًا من عمليات النقل من خلال السمة UserOrigin. يمكن استخدام NamedComputation هذا لتعيين شبكة للحساب في MPMD أو للتحسينات.
يشير عدد عمليات التبديل (القيمة التلقائية=0) إلى ما إذا كان الحساب المسمّى قد تم إنتاجه من خلال عدد معيّن من عمليات تبديل JAX AD.
يجب ألا يحتوي نطاق العملية على أي متغيرات حرة، ويجب أن يكون نوع كل وسيطة من وسيطات الحظر والقيم التي تم إرجاعها في النطاق هو نفسه نوع المدخلات ونوع القيمة التي تم إرجاعها الخاص بالعملية.
السمات: IsolatedFromAbove وRecursiveMemoryEffects وRecursivelySpeculatableImplTrait وSingleBlockImplicitTerminator<ReturnOp> وSingleBlock
الواجهات: ConditionallySpeculatable
السمات:
| السمة | نوع MLIR | الوصف |
|---|---|---|
origin | ::mlir::mpmd::UserOriginAttr | مصدر العمليات الحسابية التي يحدّدها المستخدم |
المعاملات:
| المُعامل | الوصف |
|---|---|
tensors |
متغير من متّجه متعدّد الأبعاد مرتّب من نوع عدد عائم أو منطقي أو عدد صحيح أو نوع معقّد من 4 أو 6 أو 8 أو 16 أو 32 أو 64 بت مع عناصر عدد عائم من 32 أو 64 بت أو قيم عدد صحيح كمّية لكل متّجه متعدّد الأبعاد أو رمز مميز |
النتائج:
| النتيجة | الوصف |
|---|---|
results |
متغير من متّجه متعدّد الأبعاد مرتّب من نوع عدد عائم أو منطقي أو عدد صحيح أو نوع معقّد من 4 أو 6 أو 8 أو 16 أو 32 أو 64 بت مع عناصر عدد عائم من 32 أو 64 بت أو قيم عدد صحيح كمّية لكل متّجه متعدّد الأبعاد أو رمز مميز |
mpmd.named_tensor (mpmd::NamedTensorOp)
تخصيص متّجه متعدّد الأبعاد لشبكة متداخلة
البنية:
operation ::= `mpmd.named_tensor` $tensor `name````=```$name attr-dict `:` type($result)
عملية تعريفية تربط نتيجة الموتر باسم معيّن. يمكن استخدام NamedTensor هذا لتعيين شبكة للموتر في MPMD.
السمات: AlwaysSpeculatableImplTrait، SameOperandsAndResultType
واجهات برمجة التطبيقات: ConditionallySpeculatable وInferTypeOpInterface وNoMemoryEffect (MemoryEffectOpInterface)
التأثيرات: MemoryEffects::Effect{}
السمات:
| السمة | نوع MLIR | الوصف |
|---|---|---|
name | ::mlir::StringAttr | سمة السلسلة |
المعاملات:
| المُعامل | الوصف |
|---|---|
tensor |
متّجه متعدّد الأبعاد من أي قيم غير رمزية |
النتائج:
| النتيجة | الوصف |
|---|---|
result |
متّجه متعدّد الأبعاد من أي قيم غير رمزية |
mpmd.reduce (mpmd::ReduceOp)
عملية تقليل عدد المضلّعات في الشبكة
البنية:
operation ::= `mpmd.reduce` `` $reduction attr-dict $tensors `:` functional-type(operands, results)
تتيح هذه السمة اختزال متّجه متعدّد الأبعاد على مستوى شبكات متداخلة مختلفة، ثم بثه إلى أي مكان يجب استخدامه فيه.
السمات: AlwaysSpeculatableImplTrait، SameOperandsAndResultType
واجهات برمجة التطبيقات: ConditionallySpeculatable وNoMemoryEffect (MemoryEffectOpInterface)
التأثيرات: MemoryEffects::Effect{}
السمات:
| السمة | نوع MLIR | الوصف |
|---|---|---|
reduction | ::mlir::mpmd::ReductionAttr | تشير إلى انخفاض. |
المعاملات:
| المُعامل | الوصف |
|---|---|
tensors |
متغيّر لمتّجه متعدّد الأبعاد من أي قيم غير رمزية |
النتائج:
| النتيجة | الوصف |
|---|---|
result |
متّجه متعدّد الأبعاد من أي قيم غير رمزية |
mpmd.return (mpmd::ReturnOp)
تؤدي العملية mpmd.return إلى إنهاء المناطق المرتبطة بعمليات تستند إلى مناطق mpmd. وهي متغيرة العدد: تأخذ كمعلمات قائمة بالقيم
التي يمكن أن تكون أنواعها أي نوع (ولكن من النوع نفسه، مثلاً AnyTensor)،
وبالتالي يمكن إعادة استخدامها على مستويات مختلفة من حزمة MPMD IR.
البنية:
operation ::= `mpmd.return` attr-dict $results (`:` type($results)^)?
السمات: AlwaysSpeculatableImplTrait، Terminator
واجهات برمجة التطبيقات: ConditionallySpeculatable وNoMemoryEffect (MemoryEffectOpInterface)
التأثيرات: MemoryEffects::Effect{}
المعاملات:
| المُعامل | الوصف |
|---|---|
results |
متغيّر من أي نوع غير رمزي |
mpmd.transfer (mpmd::TransferOp)
عملية النقل
البنية:
operation ::= `mpmd.transfer` attr-dict $tensor `:` functional-type(operands, results)
تنقل هذه العملية موترًا موزّعًا من شبكة إلى أخرى.
يجب أن تتطابق أسماء الشبكات الخاصة بأنواع المعامِلات والنتائج مع الشبكات في المخطط الطوبولوجي، ويجب أن تكون أنواعها العامة متطابقة.
السمات: AlwaysSpeculatableImplTrait، HasParent<::mlir::func::FuncOp>
واجهات برمجة التطبيقات: ConditionallySpeculatable وNoMemoryEffect (MemoryEffectOpInterface) وShardingRuleOpInterface
التأثيرات: MemoryEffects::Effect{}
المعاملات:
| المُعامل | الوصف |
|---|---|
tensor |
نوع متّجه الشبكة |
النتائج:
| النتيجة | الوصف |
|---|---|
result |
نوع متّجه الشبكة |
mpmd.unassign (mpmd::UnassignOp)
عملية إلغاء التعيين
البنية:
operation ::= `mpmd.unassign` attr-dict $tensor `:` functional-type(operands, results)
تؤدي هذه الدالة إلى إلغاء تعيين متّجه متعدّد الأبعاد مكرّر بالكامل من شبكة متداخلة.
هذه عملية مؤقتة يتم تقديمها عند خفض عمليات jax، وذلك للانتقال من الأنواع المحلية إلى أنواع الشبكة المتداخلة. سيتم إلغاء هذه العمليات أثناء الاستيراد، عندما تصبح مدخلات عملية الدالة ونتائجها موترات شبكية.
يجب أن يتطابق اسم الشبكة لنوع المعامِل مع شبكة في المخطط الطوبولوجي، ويجب أن يكون نوعه العام مطابقًا لنوع النتيجة.
السمات: AlwaysSpeculatableImplTrait وHasParent<::mlir::func::FuncOp, ForOp> وInferTensorType
واجهات برمجة التطبيقات: ConditionallySpeculatable وInferShapedTypeOpInterface وInferTypeOpInterface وNoMemoryEffect (MemoryEffectOpInterface)
التأثيرات: MemoryEffects::Effect{}
السمات:
| السمة | نوع MLIR | الوصف |
|---|---|---|
origin | ::mlir::StringAttr | سمة السلسلة |
المعاملات:
| المُعامل | الوصف |
|---|---|
tensor |
نوع متّجه الشبكة |
النتائج:
| النتيجة | الوصف |
|---|---|
result |
متّجه متعدّد الأبعاد من أي قيم غير رمزية |
السمات
MeshWithOriginsAttr
الانسجام مع أصوله:
البنية:
#mpmd.mesh_with_origins<
::llvm::StringRef, # mesh_name
::llvm::ArrayRef<OriginAttr> # origins
>
المَعلمات:
| المَعلمة | نوع C++ | الوصف |
|---|---|---|
| mesh_name | ::llvm::StringRef |
mesh_name |
| المصادر | ::llvm::ArrayRef<OriginAttr> |
المصادر |
MeshesWithOriginsAttr
قائمة بالشبكات مع مصادرها
البنية:
#mpmd.meshes_with_origins<
::llvm::ArrayRef<MeshWithOriginsAttr> # value
>
المَعلمات:
| المَعلمة | نوع C++ | الوصف |
|---|---|---|
| القيمة | ::llvm::ArrayRef<MeshWithOriginsAttr> |
NamedMeshAttr
جهازان باسم وشبكة Mesh
البنية:
#mpmd.named_mesh<
::llvm::StringRef, # name
sdy::MeshAttr # mesh
>
المَعلمات:
| المَعلمة | نوع C++ | الوصف |
|---|---|---|
| الاسم | ::llvm::StringRef |
الاسم |
| شبكة متداخلة | sdy::MeshAttr |
شبكة متداخلة |
OriginAttr
مصدر تعيين الشبكة المتداخلة:
البنية:
#mpmd.origin<
::llvm::StringRef # origin_label
>
أصل مهمة الشبكة المتداخلة
origin_label هو تصنيف يمكن لشخص عادي قراءته للمصدر.
وهي مخصّصة لأغراض تصحيح الأخطاء.
المَعلمات:
| المَعلمة | نوع C++ | الوصف |
|---|---|---|
| origin_label | ::llvm::StringRef |
origin_label |
ReductionAttr
تشير إلى انخفاض.
البنية:
#mpmd.reduction<
`none` | `add` | `max` | `min` | `mul` | `or` | `and` # reduction_type
>
المَعلمات:
| المَعلمة | نوع C++ | الوصف |
|---|---|---|
| reduction_type | ::mlir::mpmd::ReductionType |
تعداد من النوع ReductionType |
TopologyAttr
طوبولوجيا الشبكات المسماة:
البنية:
#mpmd.topology<
::llvm::ArrayRef<NamedMeshAttr> # meshes
>
المَعلمات:
| المَعلمة | نوع C++ | الوصف |
|---|---|---|
| شبكات | ::llvm::ArrayRef<NamedMeshAttr> |
شبكات الطوبولوجيا |
UserOriginAttr
مصدر العمليات الحسابية التي يحدّدها المستخدم:
البنية:
#mpmd.user_origin<
::mlir::StringAttr, # userName
int64_t # transposeCount
>
المَعلمات:
| المَعلمة | نوع C++ | الوصف |
|---|---|---|
| userName | ::mlir::StringAttr |
|
| transposeCount | int64_t |
الأنواع
MeshTensorType
نوع موتر الشبكة
تُعيّن هذه السمة RankedTensorType لشبكة SPMD معيّنة في بنية MPMD لشبكات البرنامج. يحتوي النوع على تجزئة اختيارية تحدد كيفية تجزئة الموتر بالنسبة إلى شبكة SPMD. إذا لم يكن التقسيم متوفّرًا، يتم تكرار الموتر بالكامل.
المَعلمات:
| المَعلمة | نوع C++ | الوصف |
|---|---|---|
| mesh_name | ::llvm::StringRef |
اسم الشبكة المتداخلة |
| ranked_tensor_type | ::mlir::RankedTensorType |
نوع المتّجه المرتب |
| تقسيم إلى أجزاء | ::mlir::sdy::TensorShardingAttr |
|
| memory_kind | ::mlir::StringAttr |
عمليات التعداد
ReductionType
سمة نوع التخفيض
الحالات:
| الرمز | القيمة | سلسلة |
|---|---|---|
| kNone | 0 |
لا ينطبق |
| kAdd | 1 |
إضافة |
| kMax | 2 |
الحد الأقصى |
| kMin | 3 |
دقيقة |
| kMul | 4 |
mul |
| kOr | 5 |
أو |
| kAnd | 6 |
و |
EdgeNodeType
تعداد نوع عُقدة الحافة
الحالات:
| الرمز | القيمة | سلسلة |
|---|---|---|
| OPERAND | 0 |
المعامل |
| النتيجة | 1 |
نتيجة |
PropagationDirection
تعداد اتجاه الانتشار
الحالات:
| الرمز | القيمة | سلسلة |
|---|---|---|
| لم يتم اختيار لون | 0 |
لم يتم اختيار لون |
| FORWARD | 1 |
FORWARD |
| رجوع | 2 |
رجوع |
| BOTH | 3 |
BOTH |
ReductionOp
تعداد عمليات الحدّ من البيانات
الحالات:
| الرمز | القيمة | سلسلة |
|---|---|---|
| SUM | 0 |
الجمع |
| الحد الأقصى | 1 |
الحد الأقصى |
| MIN | 2 |
دقيقة |