Operasi
mpmd.assign (mpmd::AssignOp)
Operasi penetapan
Sintaksis:
operation ::= `mpmd.assign` attr-dict $tensor `:` functional-type(operands, results)
Menetapkan tensor lokal ke mesh sebagai direplikasi sepenuhnya dalam mesh tersebut.
Ini adalah operasi sementara yang diperkenalkan saat menurunkan operasi jax, untuk berpindah dari jenis lokal ke jenis mesh. Operasi ini akan dihilangkan selama impor, saat input dan hasil operasi func menjadi tensor mesh.
Nama mesh jenis hasil harus sesuai dengan mesh dalam topologi, dan jenis globalnya harus sama dengan jenis operand.
Asal-usul operasi penugasan adalah asal-usul mesh, misalnya named_computation, inferensi mesh, dll.
Ciri-ciri: AlwaysSpeculatableImplTrait, HasParent<::mlir::func::FuncOp, ForOp>
Antarmuka: ConditionallySpeculatable, NoMemoryEffect (MemoryEffectOpInterface)
Efek: MemoryEffects::Effect{}
Atribut:
| Atribut | Jenis MLIR | Deskripsi |
|---|---|---|
origin | ::mlir::StringAttr | atribut string |
Operand:
| Operand | Deskripsi |
|---|---|
tensor |
tensor nilai jenis non-token apa pun |
Hasil:
| Hasil | Deskripsi |
|---|---|
result |
jenis tensor mesh |
mpmd.broadcast (mpmd::BroadcastOp)
Operasi siaran
Sintaksis:
operation ::= `mpmd.broadcast` attr-dict $tensor `:` type($tensor)
Memungkinkan tensor ditransfer (atau direplikasi) di mesh mana pun tempat tensor tersebut digunakan. Setiap kali ditransfer, asal transfer adalah lokasi operand saat ini.
Ciri-ciri: AlwaysSpeculatableImplTrait, SameOperandsAndResultType
Antarmuka: ConditionallySpeculatable, InferTypeOpInterface, NoMemoryEffect (MemoryEffectOpInterface)
Efek: MemoryEffects::Effect{}
Operand:
| Operand | Deskripsi |
|---|---|
tensor |
tensor nilai jenis non-token apa pun |
Hasil:
| Hasil | Deskripsi |
|---|---|
result |
tensor nilai jenis non-token apa pun |
mpmd.call (mpmd::CallOp)
Fungsi panggilan khusus MPMD
Sintaksis:
operation ::= `mpmd.call` $callee `(` $tensors `)` attr-dict `:` functional-type(operands, results)
Operasi panggilan fungsi. Berguna untuk membungkus isi loop dalam deklarasi fungsi untuk mengurangi ukuran kode, misalnya.
Antarmuka: ArgAndResultAttrsOpInterface, CallOpInterface, SymbolUserOpInterface
Atribut:
| Atribut | Jenis MLIR | Deskripsi |
|---|---|---|
callee | ::mlir::FlatSymbolRefAttr | atribut referensi simbol datar |
Operand:
| Operand | Deskripsi |
|---|---|
tensors |
variadik tensor dari nilai jenis non-token atau jenis tensor mesh |
Hasil:
| Hasil | Deskripsi |
|---|---|
| «tanpa nama» | variadik tensor dari nilai jenis non-token atau jenis tensor mesh |
mpmd.for (mpmd::ForOp)
Untuk operator
Menampilkan hasil eksekusi fungsi isi untuk sejumlah iterasi tetap, dengan indeks iterasi tersedia di isi.
Faktor pembuka opsional, yang harus membagi jumlah iterasi, dapat ditentukan untuk membuka isi operasi dengan faktor tersebut, yaitu untuk faktor pembuka N, isi direplikasi untuk membuat N salinan dan jumlah iterasi dikurangi dengan faktor 1/N. Setiap salinan kecuali yang pertama menggunakan hasil salinan sebelumnya, bukan argumen blok, dan indeks iterasi dikalikan dengan faktor unroll dan diinkrementalkan setelah setiap salinan.
Operator for dapat menerima dan menampilkan jenis apa pun, tetapi TypeID-nya harus sama -- misalnya, semua jenis tensor atau semua jenis mesh MPMD, dll. Hal ini memungkinkan kita menggunakan operasi di berbagai tingkat, berbagi implementasi dan transformasi.
Ciri: HLO_PairwiseSameOperandAndResultType, RecursiveMemoryEffects, RecursivelySpeculatableImplTrait, SingleBlockImplicitTerminator<ReturnOp>, SingleBlock
Antarmuka: ConditionallySpeculatable, LoopLikeOpInterface, OpAsmOpInterface, ShardableDataFlowOpInterface
Atribut:
| Atribut | Jenis MLIR | Deskripsi |
|---|---|---|
iterations | ::mlir::IntegerAttr | Atribut bilangan bulat 32-bit tanpa tanda |
unroll_factor | ::mlir::IntegerAttr | Atribut bilangan bulat 32-bit tanpa tanda |
Operand:
| Operand | Deskripsi |
|---|---|
tensors |
variadik dari jenis non-token apa pun |
Hasil:
| Hasil | Deskripsi |
|---|---|
results |
variadik dari jenis non-token apa pun |
mpmd.fragment (mpmd::FragmentOp)
Operasi fragmen
Menetapkan komputasi, yaitu blok operasi, ke mesh tertentu dalam topologi MPMD, yang dimaksudkan untuk dieksekusi sebagai fragmen program SPMD individual.
Fragmen hanya mengambil dan menampilkan tensor mesh yang ditetapkan ke mesh yang sama dengan fragmen.
Nama mesh fragmen harus sesuai dengan mesh dalam topologi.
Fragmen mencakup daftar asal, yaitu metadata dengan informasi tentang named_computations asli yang membentuk fragmen ini, dan staged_id yang ditentukan iff adalah fragmen yang ditentukan pengguna, yaitu memiliki daftar asal yang tidak kosong. in_shardings opsional menentukan sharding argumen blok fragmen, yang sesuai dengan operand. out_shardings opsional menentukan shard hasil.
Region fragmen tidak boleh memiliki variabel bebas, dan jenis setiap argumen blok dan nilai yang ditampilkan di region adalah jenis tensor global dari tensor mesh yang sesuai.
Ciri: HasParent<::mlir::func::FuncOp, ForOp>, IsolatedFromAbove, RecursiveMemoryEffects, RecursivelySpeculatableImplTrait, SingleBlockImplicitTerminator<ReturnOp>, SingleBlock
Antarmuka: ConditionallySpeculatable, ShardableDataFlowOpInterface
Atribut:
| Atribut | Jenis MLIR | Deskripsi |
|---|---|---|
origin | ::mlir::ArrayAttr | array info asal |
mesh_name | ::mlir::StringAttr | atribut string |
stage_id | ::mlir::IntegerAttr | Atribut bilangan bulat 64-bit tanpa tanda |
in_shardings | ::mlir::sdy::TensorShardingPerValueAttr | Sharding tensor per operand/hasil operasi |
out_shardings | ::mlir::sdy::TensorShardingPerValueAttr | Sharding tensor per operand/hasil operasi |
Operand:
| Operand | Deskripsi |
|---|---|
inputs |
variadik jenis tensor mesh atau token |
Hasil:
| Hasil | Deskripsi |
|---|---|
results |
variadik jenis tensor mesh atau token |
mpmd.fragment_call (mpmd::FragmentCallOp)
Operasi panggilan fragmen
Mewakili panggilan ke fungsi yang menyimpan isi fragmen MPMD, yaitu komputasi yang ditetapkan ke mesh tertentu dalam topologi MPMD, yang ditujukan untuk dieksekusi sebagai fragmen program SPMD individual.
Nama mesh fragmen harus sesuai dengan mesh dalam topologi fungsi penutup, dan bentuk mesh tersebut harus cocok dengan bentuk mesh tujuan panggilan.
Asal menentukan komputasi bernama pengguna yang berkontribusi pada panggilan fragmen ini, misalnya melalui penggabungan.
Jenis input dan hasil fungsi callee harus berupa jenis tensor lokal dari tensor mesh yang sesuai dari operand dan hasil operasi ini masing-masing.
Contoh:
%2 = mpmd.fragment_call<mesh="m1",> origin=[] @my_fragment(%0, %1) :
(m<esh>_tensor..., m<esh>_te>nsor...) - m<esh>_tensor...
Ciri-ciri: HasParent<::mlir::func::FuncOp>, MemRefsNormalizable
Antarmuka: ArgAndResultAttrsOpInterface, CallOpInterface, SymbolUserOpInterface
Atribut:
| Atribut | Jenis MLIR | Deskripsi |
|---|---|---|
origin | ::mlir::ArrayAttr | array info asal |
mesh_name | ::mlir::StringAttr | atribut string |
callee | ::mlir::FlatSymbolRefAttr | atribut referensi simbol datar |
Operand:
| Operand | Deskripsi |
|---|---|
tensors |
variadik jenis tensor mesh |
Hasil:
| Hasil | Deskripsi |
|---|---|
| «tanpa nama» | variadik jenis tensor mesh |
mpmd.named_computation (mpmd::NamedComputationOp)
Operasi cakupan bernama
Mengelompokkan komputasi, yaitu blok operasi, dan memberinya nama serta jumlah transposisi melalui atribut UserOrigin. NamedComputation ini dapat digunakan untuk menetapkan mesh ke komputasi di MPMD atau untuk pengoptimalan.
Jumlah transpos (default=0) menunjukkan apakah komputasi bernama telah dihasilkan oleh sejumlah transformasi transpos JAX AD.
Region op tidak boleh memiliki variabel bebas, dan jenis setiap argumen blok dan nilai yang ditampilkan di region harus sama dengan jenis input dan jenis nilai yang ditampilkan op.
Ciri: IsolatedFromAbove, RecursiveMemoryEffects, RecursivelySpeculatableImplTrait, SingleBlockImplicitTerminator<ReturnOp>, SingleBlock
Antarmuka: ConditionallySpeculatable
Atribut:
| Atribut | Jenis MLIR | Deskripsi |
|---|---|---|
origin | ::mlir::mpmd::UserOriginAttr | Asal komputasi yang ditentukan pengguna. |
Operand:
| Operand | Deskripsi |
|---|---|
tensors |
variadik tensor berperingkat dari float/bool 4/6/8/16/32/64-bit atau bilangan bulat/kompleks 2/4/8/16/32/64-bit dengan elemen float 32/64-bit atau nilai terkuantisasi bilangan bulat per-tensor atau token |
Hasil:
| Hasil | Deskripsi |
|---|---|
results |
variadik tensor berperingkat dari float/bool 4/6/8/16/32/64-bit atau bilangan bulat/kompleks 2/4/8/16/32/64-bit dengan elemen float 32/64-bit atau nilai terkuantisasi bilangan bulat per-tensor atau token |
mpmd.named_tensor (mpmd::NamedTensorOp)
Menetapkan tensor ke mesh
Sintaksis:
operation ::= `mpmd.named_tensor` $tensor `name````=```$name attr-dict `:` type($result)
Operasi identitas yang mengaitkan hasil tensor dengan nama tertentu. NamedTensor ini dapat digunakan untuk menetapkan mesh ke tensor di MPMD.
Ciri-ciri: AlwaysSpeculatableImplTrait, SameOperandsAndResultType
Antarmuka: ConditionallySpeculatable, InferTypeOpInterface, NoMemoryEffect (MemoryEffectOpInterface)
Efek: MemoryEffects::Effect{}
Atribut:
| Atribut | Jenis MLIR | Deskripsi |
|---|---|---|
name | ::mlir::StringAttr | atribut string |
Operand:
| Operand | Deskripsi |
|---|---|
tensor |
tensor nilai jenis non-token apa pun |
Hasil:
| Hasil | Deskripsi |
|---|---|
result |
tensor nilai jenis non-token apa pun |
mpmd.reduce (mpmd::ReduceOp)
Operasi pengurangan lintas-mesh
Sintaksis:
operation ::= `mpmd.reduce` `` $reduction attr-dict $tensors `:` functional-type(operands, results)
Memungkinkan tensor direduksi di berbagai mesh, lalu disiarkan ke tempat yang memerlukannya.
Ciri-ciri: AlwaysSpeculatableImplTrait, SameOperandsAndResultType
Antarmuka: ConditionallySpeculatable, NoMemoryEffect (MemoryEffectOpInterface)
Efek: MemoryEffects::Effect{}
Atribut:
| Atribut | Jenis MLIR | Deskripsi |
|---|---|---|
reduction | ::mlir::mpmd::ReductionAttr | Menunjukkan pengurangan. |
Operand:
| Operand | Deskripsi |
|---|---|
tensors |
variadik tensor dari nilai jenis non-token apa pun |
Hasil:
| Hasil | Deskripsi |
|---|---|
result |
tensor nilai jenis non-token apa pun |
mpmd.return (mpmd::ReturnOp)
Operasi mpmd.return menghentikan region yang terlampir pada operasi berbasis region mpmd. Fungsi ini bersifat variadik: fungsi ini mengambil daftar nilai sebagai argumen
yang jenisnya dapat berupa apa saja (tetapi dari jenis yang sama, misalnya AnyTensor) dan
oleh karena itu dapat digunakan kembali di berbagai tingkat stack IR MPMD.
Sintaksis:
operation ::= `mpmd.return` attr-dict $results (`:` type($results)^)?
Ciri-ciri: AlwaysSpeculatableImplTrait, Terminator
Antarmuka: ConditionallySpeculatable, NoMemoryEffect (MemoryEffectOpInterface)
Efek: MemoryEffects::Effect{}
Operand:
| Operand | Deskripsi |
|---|---|
results |
variadik dari jenis non-token apa pun |
mpmd.transfer (mpmd::TransferOp)
Operasi transfer
Sintaksis:
operation ::= `mpmd.transfer` attr-dict $tensor `:` functional-type(operands, results)
Mentransfer tensor terdistribusi dari satu mesh ke mesh lainnya.
Nama mesh jenis operand dan hasil harus sesuai dengan mesh dalam topologi, dan jenis globalnya harus identik.
Ciri-ciri: AlwaysSpeculatableImplTrait, HasParent<::mlir::func::FuncOp>
Antarmuka: ConditionallySpeculatable, NoMemoryEffect (MemoryEffectOpInterface), ShardingRuleOpInterface
Efek: MemoryEffects::Effect{}
Operand:
| Operand | Deskripsi |
|---|---|
tensor |
jenis tensor mesh |
Hasil:
| Hasil | Deskripsi |
|---|---|
result |
jenis tensor mesh |
mpmd.unassign (mpmd::UnassignOp)
Operasi penghapusan penetapan
Sintaksis:
operation ::= `mpmd.unassign` attr-dict $tensor `:` functional-type(operands, results)
Membatalkan penetapan tensor yang direplikasi sepenuhnya dari mesh.
Ini adalah operasi sementara yang diperkenalkan saat menurunkan operasi jax, untuk berpindah dari jenis lokal ke jenis mesh. Operasi ini akan dihilangkan selama impor, saat input dan hasil operasi func menjadi tensor mesh.
Nama mesh jenis operand harus sesuai dengan mesh dalam topologi, dan jenis globalnya harus identik dengan jenis hasil.
Ciri: AlwaysSpeculatableImplTrait, HasParent<::mlir::func::FuncOp, ForOp>, InferTensorType
Antarmuka: ConditionallySpeculatable, InferShapedTypeOpInterface, InferTypeOpInterface, NoMemoryEffect (MemoryEffectOpInterface)
Efek: MemoryEffects::Effect{}
Atribut:
| Atribut | Jenis MLIR | Deskripsi |
|---|---|---|
origin | ::mlir::StringAttr | atribut string |
Operand:
| Operand | Deskripsi |
|---|---|
tensor |
jenis tensor mesh |
Hasil:
| Hasil | Deskripsi |
|---|---|
result |
tensor nilai jenis non-token apa pun |
Atribut
MeshWithOriginsAttr
Sesuai dengan asalnya.
Sintaksis:
#mpmd.mesh_with_origins<
::llvm::StringRef, # mesh_name
::llvm::ArrayRef<OriginAttr> # origins
>
Parameter:
| Parameter | Jenis C++ | Deskripsi |
|---|---|---|
| mesh_name | ::llvm::StringRef |
mesh_name |
| asal | ::llvm::ArrayRef<OriginAttr> |
asal |
MeshesWithOriginsAttr
Daftar mesh dengan asal-usulnya.
Sintaksis:
#mpmd.meshes_with_origins<
::llvm::ArrayRef<MeshWithOriginsAttr> # value
>
Parameter:
| Parameter | Jenis C++ | Deskripsi |
|---|---|---|
| nilai | ::llvm::ArrayRef<MeshWithOriginsAttr> |
NamedMeshAttr
Pasangan dengan nama dan Mesh.
Sintaksis:
#mpmd.named_mesh<
::llvm::StringRef, # name
sdy::MeshAttr # mesh
>
Parameter:
| Parameter | Jenis C++ | Deskripsi |
|---|---|---|
| nama | ::llvm::StringRef |
nama |
| mesh | sdy::MeshAttr |
mesh |
OriginAttr
Asal penetapan mesh.
Sintaksis:
#mpmd.origin<
::llvm::StringRef # origin_label
>
Asal penetapan mesh.
origin_label adalah label yang dapat dibaca manusia untuk asal.
Tujuannya adalah untuk digunakan dalam proses debug.
Parameter:
| Parameter | Jenis C++ | Deskripsi |
|---|---|---|
| origin_label | ::llvm::StringRef |
origin_label |
ReductionAttr
Menunjukkan pengurangan.
Sintaksis:
#mpmd.reduction<
`none` | `add` | `max` | `min` | `mul` | `or` | `and` # reduction_type
>
Parameter:
| Parameter | Jenis C++ | Deskripsi |
|---|---|---|
| reduction_type | ::mlir::mpmd::ReductionType |
enum jenis ReductionType |
TopologyAttr
Topologi mesh bernama.
Sintaksis:
#mpmd.topology<
::llvm::ArrayRef<NamedMeshAttr> # meshes
>
Parameter:
| Parameter | Jenis C++ | Deskripsi |
|---|---|---|
| mesh | ::llvm::ArrayRef<NamedMeshAttr> |
mesh topologi |
UserOriginAttr
Asal komputasi yang ditentukan pengguna.
Sintaksis:
#mpmd.user_origin<
::mlir::StringAttr, # userName
int64_t # transposeCount
>
Parameter:
| Parameter | Jenis C++ | Deskripsi |
|---|---|---|
| userName | ::mlir::StringAttr |
|
| transposeCount | int64_t |
Jenis
MeshTensorType
Jenis tensor mesh
Menetapkan RankedTensorType ke mesh SPMD tertentu dalam topologi mesh MPMD program. Jenis ini menyimpan sharding opsional yang menentukan cara tensor di-shard sehubungan dengan mesh SPMD. Jika sharding tidak ada, tensor akan direplikasi sepenuhnya.
Parameter:
| Parameter | Jenis C++ | Deskripsi |
|---|---|---|
| mesh_name | ::llvm::StringRef |
nama mesh |
| ranked_tensor_type | ::mlir::RankedTensorType |
jenis tensor berperingkat |
| sharding | ::mlir::sdy::TensorShardingAttr |
|
| memory_kind | ::mlir::StringAttr |
Enum
ReductionType
Atribut jenis pengurangan
Kasus:
| Simbol | Nilai | String |
|---|---|---|
| kNone | 0 |
tidak ada |
| kAdd | 1 |
tambahkan |
| kMax | 2 |
maks |
| kMin | 3 |
mnt |
| kMul | 4 |
mul |
| kOr | 5 |
atau |
| kAnd | 6 |
dan |
EdgeNodeType
Enum jenis node edge
Kasus:
| Simbol | Nilai | String |
|---|---|---|
| OPERAND | 0 |
operand |
| HASIL | 1 |
hasil |
PropagationDirection
Enum arah propagasi
Kasus:
| Simbol | Nilai | String |
|---|---|---|
| TIDAK ADA | 0 |
TIDAK ADA |
| MAJU | 1 |
MAJU |
| MUNDUR | 2 |
MUNDUR |
| KEDUANYA | 3 |
KEDUANYA |
ReductionOp
Enum operasi pengurangan
Kasus:
| Simbol | Nilai | String |
|---|---|---|
| SUM | 0 |
jumlah |
| MAKS | 1 |
maks |
| MIN | 2 |
mnt |