การดำเนินการ
mpmd.assign (mpmd::AssignOp)
มอบหมายการดำเนินการ
ไวยากรณ์:
operation ::= `mpmd.assign` attr-dict $tensor `:` functional-type(operands, results)
กำหนด Tensor ในเครื่องให้กับ Mesh เป็นแบบจำลองที่จำลองอย่างเต็มรูปแบบภายใน Mesh นั้น
นี่คือการดำเนินการชั่วคราวที่ใช้เมื่อลดการดำเนินการ Jax เพื่อเปลี่ยนจากประเภทในเครื่องเป็นประเภท Mesh ระบบจะนำการดำเนินการเหล่านี้ออกในระหว่างการนำเข้า เมื่ออินพุตและผลลัพธ์ของการดำเนินการฟังก์ชันกลายเป็นเทนเซอร์แบบเมช
ชื่อ Mesh ของประเภทผลลัพธ์ควรสอดคล้องกับ Mesh ใน โทโพโลยี และประเภทส่วนกลางควรเหมือนกับประเภทตัวถูกดำเนินการ
ต้นทางของ Assign Op คือต้นทางของ Mesh เช่น named_computation, mesh inference เป็นต้น
ลักษณะ: AlwaysSpeculatableImplTrait, HasParent<::mlir::func::FuncOp, ForOp>
อินเทอร์เฟซ: ConditionallySpeculatable, NoMemoryEffect (MemoryEffectOpInterface)
ผลกระทบ: MemoryEffects::Effect{}
แอตทริบิวต์
| แอตทริบิวต์ | ประเภท MLIR | คำอธิบาย |
|---|---|---|
origin | ::mlir::StringAttr | แอตทริบิวต์สตริง |
ตัวถูกดำเนินการ:
| ตัวถูกดำเนินการ | คำอธิบาย |
|---|---|
tensor |
เทนเซอร์ของค่าประเภทที่ไม่ใช่โทเค็น |
ผลลัพธ์:
| ผลลัพธ์ | คำอธิบาย |
|---|---|
result |
ประเภท Tensor ของ Mesh |
mpmd.broadcast (mpmd::BroadcastOp)
การออกอากาศ
ไวยากรณ์:
operation ::= `mpmd.broadcast` attr-dict $tensor `:` type($tensor)
อนุญาตให้โอน (หรือจำลอง) Tensor ใน Mesh ใดก็ได้ที่มีการใช้ Tensor นั้น เมื่อใดก็ตามที่มีการโอน ต้นทางของการโอนคือตำแหน่งปัจจุบันของตัวถูกดำเนินการ
ลักษณะ: AlwaysSpeculatableImplTrait, SameOperandsAndResultType
อินเทอร์เฟซ: ConditionallySpeculatable, InferTypeOpInterface, NoMemoryEffect (MemoryEffectOpInterface)
ผลกระทบ: MemoryEffects::Effect{}
ตัวถูกดำเนินการ:
| ตัวถูกดำเนินการ | คำอธิบาย |
|---|---|
tensor |
เทนเซอร์ของค่าประเภทที่ไม่ใช่โทเค็น |
ผลลัพธ์:
| ผลลัพธ์ | คำอธิบาย |
|---|---|
result |
เทนเซอร์ของค่าประเภทที่ไม่ใช่โทเค็น |
mpmd.call (mpmd::CallOp)
ฟังก์ชันการโทรเฉพาะ MPMD
ไวยากรณ์:
operation ::= `mpmd.call` $callee `(` $tensors `)` attr-dict `:` functional-type(operands, results)
การดำเนินการเรียกใช้ฟังก์ชัน มีประโยชน์ในการรวมเนื้อหาของการวนซ้ำในการประกาศฟังก์ชันเพื่อลดขนาดโค้ด เป็นต้น
อินเทอร์เฟซ: ArgAndResultAttrsOpInterface, CallOpInterface, SymbolUserOpInterface
แอตทริบิวต์
| แอตทริบิวต์ | ประเภท MLIR | คำอธิบาย |
|---|---|---|
callee | ::mlir::FlatSymbolRefAttr | แอตทริบิวต์อ้างอิงสัญลักษณ์แฟลต |
ตัวถูกดำเนินการ:
| ตัวถูกดำเนินการ | คำอธิบาย |
|---|---|
tensors |
variadic ของเทนเซอร์ของค่าประเภทที่ไม่ใช่โทเค็นหรือประเภทเทนเซอร์แบบเมช |
ผลลัพธ์:
| ผลลัพธ์ | คำอธิบาย |
|---|---|
| «ไม่มีชื่อ» | variadic ของเทนเซอร์ของค่าประเภทที่ไม่ใช่โทเค็นหรือประเภทเทนเซอร์แบบเมช |
mpmd.for (mpmd::ForOp)
สำหรับผู้ให้บริการ
แสดงผลลัพธ์ของการเรียกใช้ฟังก์ชันเนื้อหาตามจำนวนการวนซ้ำที่แน่นอน โดยมีดัชนีการวนซ้ำในเนื้อหา
คุณระบุปัจจัยการคลายลูปที่ไม่บังคับ ซึ่งต้องหารจำนวนการวนซ้ำได้ เพื่อคลายลูปเนื้อหาของ Op ตามปัจจัยนั้นได้ กล่าวคือ สำหรับ ปัจจัยการคลายลูป N ระบบจะจำลองเนื้อหาเพื่อสร้างสำเนา N รายการ และลดจำนวน การวนซ้ำลงด้วยปัจจัย 1/N สำเนาแต่ละรายการยกเว้นรายการแรกจะใช้ผลลัพธ์ของสำเนาก่อนหน้าแทนอาร์กิวเมนต์ของบล็อก และระบบจะคูณดัชนีการวนซ้ำด้วยปัจจัยการคลี่ออกและเพิ่มค่าหลังจากสำเนาทุกรายการ
ตัวดำเนินการ for สามารถยอมรับและแสดงผลประเภทใดก็ได้ แต่ TypeID ของตัวดำเนินการเหล่านี้ ต้องเหมือนกัน เช่น ประเภท Tensor ทั้งหมดหรือประเภท Mesh MPMD ทั้งหมด เป็นต้น ซึ่ง ช่วยให้เราใช้การดำเนินการในระดับต่างๆ ได้ โดยใช้การติดตั้งใช้งานและการแปลงร่วมกัน
ลักษณะ: HLO_PairwiseSameOperandAndResultType, RecursiveMemoryEffects, RecursivelySpeculatableImplTrait, SingleBlockImplicitTerminator<ReturnOp>, SingleBlock
อินเทอร์เฟซ: ConditionallySpeculatable, LoopLikeOpInterface, OpAsmOpInterface, ShardableDataFlowOpInterface
แอตทริบิวต์
| แอตทริบิวต์ | ประเภท MLIR | คำอธิบาย |
|---|---|---|
iterations | ::mlir::IntegerAttr | แอตทริบิวต์จำนวนเต็มแบบ 32 บิตที่ไม่มีเครื่องหมาย |
unroll_factor | ::mlir::IntegerAttr | แอตทริบิวต์จำนวนเต็มแบบ 32 บิตที่ไม่มีเครื่องหมาย |
ตัวถูกดำเนินการ:
| ตัวถูกดำเนินการ | คำอธิบาย |
|---|---|
tensors |
variadic ของประเภทที่ไม่ใช่โทเค็น |
ผลลัพธ์:
| ผลลัพธ์ | คำอธิบาย |
|---|---|
results |
variadic ของประเภทที่ไม่ใช่โทเค็น |
mpmd.fragment (mpmd::FragmentOp)
การดำเนินการกับ Fragment
กำหนดการคำนวณ เช่น บล็อกของการดำเนินการ ให้กับ Mesh ที่เฉพาะเจาะจงในโทโพโลยี MPMD ซึ่งมีจุดประสงค์เพื่อดำเนินการเป็นส่วนย่อยของโปรแกรม SPMD แต่ละรายการ
โดยจะรับและส่งคืนเฉพาะเทนเซอร์ของเมชที่กำหนดให้กับเมชเดียวกันกับที่กำหนดให้กับ Fragment
ชื่อ Mesh ของ Fragment ควรตรงกับ Mesh ในโทโพโลยี
Fragment ประกอบด้วยรายการต้นทาง ซึ่งก็คือข้อมูลเมตาที่มีข้อมูลเกี่ยวกับ named_computation ต้นฉบับที่สร้าง Fragment นี้ และ staged_id ที่กำหนดiff เป็น Fragment ที่ผู้ใช้กำหนดเอง กล่าวคือ มีรายการต้นทางที่ไม่ว่างเปล่า ส่วน in_shardings ที่ไม่บังคับจะระบุการแบ่งกลุ่มของอาร์กิวเมนต์บล็อกของ Fragment ซึ่งสอดคล้องกับตัวถูกดำเนินการ out_shardings ที่ไม่บังคับจะระบุการแบ่งกลุ่มของผลลัพธ์
ภูมิภาคของ Fragment ไม่ควรมีตัวแปรอิสระ และประเภทของอาร์กิวเมนต์แต่ละบล็อกและค่าที่ส่งคืนในภูมิภาคคือประเภทเทนเซอร์ส่วนกลางของเทนเซอร์ตาข่ายที่เกี่ยวข้อง
ลักษณะ: 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 | การแบ่งเทนเซอร์ตามตัวถูกดำเนินการ/ผลลัพธ์ของ Op |
out_shardings | ::mlir::sdy::TensorShardingPerValueAttr | การแบ่งเทนเซอร์ตามตัวถูกดำเนินการ/ผลลัพธ์ของ Op |
ตัวถูกดำเนินการ:
| ตัวถูกดำเนินการ | คำอธิบาย |
|---|---|
inputs |
variadic ของประเภทเทนเซอร์แบบเมชหรือโทเค็น |
ผลลัพธ์:
| ผลลัพธ์ | คำอธิบาย |
|---|---|
results |
variadic ของประเภทเทนเซอร์แบบเมชหรือโทเค็น |
mpmd.fragment_call (mpmd::FragmentCallOp)
การดำเนินการเรียกใช้ Fragment
แสดงถึงการเรียกฟังก์ชันที่มีเนื้อหาของส่วนย่อย MPMD กล่าวคือ การคำนวณที่กำหนดให้กับ Mesh ที่เฉพาะเจาะจงในโทโพโลยี MPMD ซึ่งมีจุดประสงค์เพื่อดำเนินการเป็นส่วนย่อยของโปรแกรม SPMD แต่ละรายการ
ชื่อเมชของ Fragment ควรตรงกับเมชในโทโพโลยีของฟังก์ชันที่ครอบคลุม และรูปร่างเมชนั้นควรตรงกับรูปร่างของฟังก์ชันที่เรียก
ต้นทางระบุการคำนวณที่ตั้งชื่อโดยผู้ใช้ซึ่งมีส่วนทำให้เกิดการเรียกใช้ ส่วนนี้ เช่น ผ่านการผสาน
ประเภทอินพุตและผลลัพธ์ของฟังก์ชันของฟังก์ชันที่เรียกต้องเป็นประเภทเทนเซอร์ในเครื่อง ของเทนเซอร์ตาข่ายที่สอดคล้องกันของตัวถูกดำเนินการและผลลัพธ์ของ Op นี้ ตามลำดับ
ตัวอย่าง
%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 ของประเภทเทนเซอร์ของเมช |
ผลลัพธ์:
| ผลลัพธ์ | คำอธิบาย |
|---|---|
| «ไม่มีชื่อ» | variadic ของประเภทเทนเซอร์ของตาข่าย |
mpmd.named_computation (mpmd::NamedComputationOp)
การดำเนินการขอบเขตที่มีชื่อ
จัดกลุ่มการคำนวณ เช่น บล็อกของการดำเนินการ และตั้งชื่อให้พร้อม จำนวนการทรานสโพสผ่านแอตทริบิวต์ UserOrigin NamedComputation นี้สามารถใช้เพื่อกำหนด Mesh ให้กับการคำนวณใน MPMD หรือเพื่อการเพิ่มประสิทธิภาพ
จำนวนการสลับเปลี่ยน (ค่าเริ่มต้น=0) ระบุว่าการคำนวณที่มีชื่อ เกิดจากการแปลงการสลับเปลี่ยน JAX AD จำนวนหนึ่งหรือไม่
รีเจียนของ Op ไม่ควรมีตัวแปรอิสระ และประเภทของ อาร์กิวเมนต์ของแต่ละบล็อกและค่าที่แสดงผลในรีเจียนต้องเหมือนกับ ประเภทของอินพุตและประเภทการแสดงผลของ Op
ลักษณะ: IsolatedFromAbove, RecursiveMemoryEffects, RecursivelySpeculatableImplTrait, SingleBlockImplicitTerminator<ReturnOp>, SingleBlock
อินเทอร์เฟซ: ConditionallySpeculatable
แอตทริบิวต์
| แอตทริบิวต์ | ประเภท MLIR | คำอธิบาย |
|---|---|---|
origin | ::mlir::mpmd::UserOriginAttr | แหล่งที่มาของการคำนวณที่ผู้ใช้ระบุ |
ตัวถูกดำเนินการ:
| ตัวถูกดำเนินการ | คำอธิบาย |
|---|---|
tensors |
variadic ของเทนเซอร์ที่มีอันดับของจำนวนลอยตัว 4/6/8/16/32/64 บิตหรือบูลีนหรือจำนวนเต็ม 2/4/8/16/32/64 บิตหรือประเภทจำนวนเชิงซ้อนที่มีองค์ประกอบจำนวนลอยตัว 32/64 บิตหรือค่าที่กำหนดปริมาณจำนวนเต็มต่อเทนเซอร์หรือโทเค็น |
ผลลัพธ์:
| ผลลัพธ์ | คำอธิบาย |
|---|---|
results |
variadic ของเทนเซอร์ที่มีอันดับของจำนวนลอยตัว 4/6/8/16/32/64 บิตหรือบูลีนหรือจำนวนเต็ม 2/4/8/16/32/64 บิตหรือประเภทเชิงซ้อนที่มีองค์ประกอบจำนวนลอยตัว 32/64 บิตหรือค่าที่กำหนดปริมาณจำนวนเต็มต่อเทนเซอร์หรือโทเค็น |
mpmd.named_tensor (mpmd::NamedTensorOp)
กำหนด Tensor ให้กับ Mesh
ไวยากรณ์:
operation ::= `mpmd.named_tensor` $tensor `name````=```$name attr-dict `:` type($result)
การดำเนินการระบุตัวตนที่เชื่อมโยงผลลัพธ์ของเทนเซอร์กับชื่อที่กำหนด คุณสามารถใช้ NamedTensor นี้เพื่อกำหนด Mesh ให้กับ Tensor ใน 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)
ช่วยให้ลด Tensor ใน Mesh ต่างๆ แล้ว ออกอากาศไปยังที่ใดก็ตามที่ต้องใช้
ลักษณะ: AlwaysSpeculatableImplTrait, SameOperandsAndResultType
อินเทอร์เฟซ: ConditionallySpeculatable, NoMemoryEffect (MemoryEffectOpInterface)
ผลกระทบ: MemoryEffects::Effect{}
แอตทริบิวต์
| แอตทริบิวต์ | ประเภท MLIR | คำอธิบาย |
|---|---|---|
reduction | ::mlir::mpmd::ReductionAttr | แสดงถึงการลดลง |
ตัวถูกดำเนินการ:
| ตัวถูกดำเนินการ | คำอธิบาย |
|---|---|
tensors |
variadic ของเทนเซอร์ของค่าประเภทที่ไม่ใช่โทเค็น |
ผลลัพธ์:
| ผลลัพธ์ | คำอธิบาย |
|---|---|
result |
เทนเซอร์ของค่าประเภทที่ไม่ใช่โทเค็น |
mpmd.return (mpmd::ReturnOp)
การดำเนินการ mpmd.return จะสิ้นสุดภูมิภาคที่แนบมากับ mpmd
region-based ops เป็นฟังก์ชันที่รับอาร์กิวเมนต์ได้หลายตัว: รับรายการค่าเป็นอาร์กิวเมนต์
ซึ่งมีประเภทเป็นอะไรก็ได้ (แต่ต้องเป็นประเภทเดียวกัน เช่น AnyTensor) และ
จึงนำไปใช้ซ้ำได้ในระดับต่างๆ ของสแต็ก IR ของ MPMD
ไวยากรณ์:
operation ::= `mpmd.return` attr-dict $results (`:` type($results)^)?
ลักษณะ: AlwaysSpeculatableImplTrait, Terminator
อินเทอร์เฟซ: ConditionallySpeculatable, NoMemoryEffect (MemoryEffectOpInterface)
ผลกระทบ: MemoryEffects::Effect{}
ตัวถูกดำเนินการ:
| ตัวถูกดำเนินการ | คำอธิบาย |
|---|---|
results |
variadic ของประเภทที่ไม่ใช่โทเค็น |
mpmd.transfer (mpmd::TransferOp)
การดำเนินการโอน
ไวยากรณ์:
operation ::= `mpmd.transfer` attr-dict $tensor `:` functional-type(operands, results)
โอน Tensor แบบกระจายจาก Mesh หนึ่งไปยังอีก Mesh หนึ่ง
ชื่อเมชของประเภทตัวถูกดำเนินการและประเภทผลลัพธ์ควรสอดคล้องกับเมชในโทโพโลยี และประเภทส่วนกลางควรเหมือนกัน
ลักษณะ: AlwaysSpeculatableImplTrait, HasParent<::mlir::func::FuncOp>
อินเทอร์เฟซ: ConditionallySpeculatable, NoMemoryEffect (MemoryEffectOpInterface), ShardingRuleOpInterface
ผลกระทบ: MemoryEffects::Effect{}
ตัวถูกดำเนินการ:
| ตัวถูกดำเนินการ | คำอธิบาย |
|---|---|
tensor |
ประเภท Tensor ของ Mesh |
ผลลัพธ์:
| ผลลัพธ์ | คำอธิบาย |
|---|---|
result |
ประเภท Tensor ของ Mesh |
mpmd.unassign (mpmd::UnassignOp)
การยกเลิกการมอบหมาย
ไวยากรณ์:
operation ::= `mpmd.unassign` attr-dict $tensor `:` functional-type(operands, results)
ยกเลิกการกำหนด Tensor ที่จำลองแบบเต็มจาก Mesh
นี่คือการดำเนินการชั่วคราวที่นำมาใช้เมื่อลดการดำเนินการ Jax เพื่อเปลี่ยนจากประเภทในเครื่องเป็นประเภท Mesh ระบบจะนำการดำเนินการเหล่านี้ออกในระหว่างการนำเข้า เมื่ออินพุตและผลลัพธ์ของการดำเนินการฟังก์ชันกลายเป็นเทนเซอร์แบบเมช
ชื่อ Mesh ของประเภทตัวถูกดำเนินการควรสอดคล้องกับ Mesh ใน โทโพโลยี และประเภทส่วนกลางควรเหมือนกับประเภทผลลัพธ์
ลักษณะ: AlwaysSpeculatableImplTrait, HasParent<::mlir::func::FuncOp, ForOp>, InferTensorType
อินเทอร์เฟซ: ConditionallySpeculatable, InferShapedTypeOpInterface, InferTypeOpInterface, NoMemoryEffect (MemoryEffectOpInterface)
ผลกระทบ: MemoryEffects::Effect{}
แอตทริบิวต์
| แอตทริบิวต์ | ประเภท MLIR | คำอธิบาย |
|---|---|---|
origin | ::mlir::StringAttr | แอตทริบิวต์สตริง |
ตัวถูกดำเนินการ:
| ตัวถูกดำเนินการ | คำอธิบาย |
|---|---|
tensor |
ประเภท Tensor ของ Mesh |
ผลลัพธ์:
| ผลลัพธ์ | คำอธิบาย |
|---|---|
result |
เทนเซอร์ของค่าประเภทที่ไม่ใช่โทเค็น |
Attributes
MeshWithOriginsAttr
Mesh กับต้นกำเนิด
ไวยากรณ์:
#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++ | คำอธิบาย |
|---|---|---|
| value | ::llvm::ArrayRef<MeshWithOriginsAttr> |
NamedMeshAttr
อุปกรณ์ 2 เครื่องที่มีชื่อและ Mesh
ไวยากรณ์:
#mpmd.named_mesh<
::llvm::StringRef, # name
sdy::MeshAttr # mesh
>
พารามิเตอร์ ได้แก่
| พารามิเตอร์ | ประเภท C++ | คำอธิบาย |
|---|---|---|
| name | ::llvm::StringRef |
name |
| Mesh | sdy::MeshAttr |
Mesh |
OriginAttr
แหล่งที่มาของการกำหนด Mesh
ไวยากรณ์:
#mpmd.origin<
::llvm::StringRef # origin_label
>
ต้นทางของการกำหนด Mesh
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 |
enum ของประเภท ReductionType |
TopologyAttr
โทโพโลยีของเมชที่มีชื่อ
ไวยากรณ์:
#mpmd.topology<
::llvm::ArrayRef<NamedMeshAttr> # meshes
>
พารามิเตอร์ ได้แก่
| พารามิเตอร์ | ประเภท C++ | คำอธิบาย |
|---|---|---|
| meshes | ::llvm::ArrayRef<NamedMeshAttr> |
โทโพโลยีเมช |
UserOriginAttr
แหล่งที่มาของการคำนวณที่ผู้ใช้ระบุ
ไวยากรณ์:
#mpmd.user_origin<
::mlir::StringAttr, # userName
int64_t # transposeCount
>
พารามิเตอร์ ได้แก่
| พารามิเตอร์ | ประเภท C++ | คำอธิบาย |
|---|---|---|
| userName | ::mlir::StringAttr |
|
| transposeCount | int64_t |
ประเภท
MeshTensorType
ประเภทของเมชเทนเซอร์
กำหนด RankedTensorType ให้กับ SPMD Mesh ที่เฉพาะเจาะจงใน โทโพโลยี MPMD ของ Mesh ในโปรแกรม ประเภทนี้มีการแบ่งส่วนที่ไม่บังคับซึ่งระบุวิธีแบ่งส่วน Tensor เทียบกับ Mesh SPMD หากไม่มีการชาร์ดดิ้ง ระบบจะจำลองแบบ Tensor อย่างเต็มรูปแบบ
พารามิเตอร์ ได้แก่
| พารามิเตอร์ | ประเภท C++ | คำอธิบาย |
|---|---|---|
| mesh_name | ::llvm::StringRef |
ชื่อ Mesh |
| ranked_tensor_type | ::mlir::RankedTensorType |
ประเภท Tensor ที่มีอันดับ |
| ชาร์ดดิ้ง | ::mlir::sdy::TensorShardingAttr |
|
| memory_kind | ::mlir::StringAttr |
Enum
ReductionType
แอตทริบิวต์ประเภทการลด
เคส
| สัญลักษณ์ | ค่า | สตริง |
|---|---|---|
| kNone | 0 |
ไม่มี |
| kAdd | 1 |
เพิ่ม |
| kMax | 2 |
สูงสุด |
| kMin | 3 |
นาที |
| kMul | 4 |
mul |
| kOr | 5 |
หรือ |
| kAnd | 6 |
และ |
EdgeNodeType
Edge node type enum
เคส
| สัญลักษณ์ | ค่า | สตริง |
|---|---|---|
| OPERAND | 0 |
ตัวถูกดำเนินการ |
| ผลลัพธ์ | 1 |
ผลลัพธ์ |
PropagationDirection
การแจงนับทิศทางการเผยแพร่
เคส
| สัญลักษณ์ | ค่า | สตริง |
|---|---|---|
| ไม่มี | 0 |
ไม่มี |
| ส่งต่อ | 1 |
ส่งต่อ |
| ย้อนกลับ | 2 |
ย้อนกลับ |
| ทั้งสองฝ่าย | 3 |
ทั้งสองฝ่าย |
ReductionOp
Reduction op enum
เคส
| สัญลักษณ์ | ค่า | สตริง |
|---|---|---|
| SUM | 0 |
รวม |
| สูงสุด | 1 |
สูงสุด |
| นาที | 2 |
นาที |