Bu dokümanda, XLA takma ad belirleme API'si açıklanmaktadır. giriş ve çıkış arabellekleri arasında örtüşme yaratmak.
Derleme sırasında takma ad tanımlamayı tanımlama
Örneğin, girişine 1
ekleyen basit bir HLO modülünü düşünün:
HloModule increment
ENTRY entry {
%p = f32[] parameter(0)
%c = f32[] constant(1)
ROOT %out = f32[] add(%p, %c)
}
Bu modül, biri %p
girişi ve diğeri giriş için olmak üzere 4 baytlık iki arabellek ayırır.
%out
çıkışı için
Ancak genellikle güncellemenin yerinde yapılması tercih edilir (örneğin,
giriş değişkeninin artık aktif değil ifadesini oluşturan ön uçta
p++
artışında olduğu gibi).
Bu tür bir güncellemeyi verimli bir şekilde gerçekleştirmek için giriş takma adını belirtebilirsiniz:
HloModule increment, input_output_alias={ {}: 0 }
ENTRY entry {
%p = f32[] parameter(0)
%c = f32[] constant(1)
ROOT %out = f32[] add(%p, %c)
}
Bu biçim, tüm çıkışın ({}
tarafından işaretlenen)
giriş parametresi 0
.
Takma adı programatik olarak belirtmek için
XlaBuilder::SetUpAlias
API'ye gidin.
Çalışma zamanında takma ad belirlemeyi tanımlama
Önceki adımda tanımlanan takma ad belirleme, derleme sırasında belirtilir.
Yürütme işlemi sırasında
LocalClient::RunAsync
Tamponun bağışlanıp bağışlanmayacağını seçme API'si.
Programa giriş arabellekleri sarmalanmış
ExecutionInput
saniye,
bunlar da MaybeOwningDeviceMemory
ağacını içerir. Hafıza özelliği
sahiplik olarak belirtilir (arabelleğin sahipliği XLA çalışma zamanına iletilir),
tampon bağışlanır ve güncelleme yerinde
derleme zamanı takma API'si tarafından istekte bulunuldu.
Bununla birlikte, derleme sırasında takma adı olan arabellek, şu tarihte bağışlanmazsa:
çalışma zamanında kopyalama koruması devreye girer: Ekstra bir çıkış arabelleği O
ayrılır,
ve diğer ad olarak kullanılması amaçlanan P
giriş arabelleğinin içeriği kopyalanır
O
içine alır (böylece program, tampon O
gibi etkin bir şekilde yürütülebilir)
çalışma zamanında bağışlanır).