XLA'da Takma Ad Kullanma

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).