Halaman ini diterjemahkan oleh Cloud Translation API.
Switch to English

Mengasingkan diri dalam XLA

Dokumen ini menjelaskan API aliasing untuk XLA: saat membuat program XLA, Anda dapat menentukan alias yang diinginkan antara buffer input dan output.

Mendefinisikan aliasing pada saat kompilasi

Sebagai contoh, pertimbangkan modul HLO sepele yang hanya menambahkan 1 ke inputnya:

 HloModule increment

ENTRY entry {
  %p = f32[] parameter(0)
  %c = f32[] constant(1)
  ROOT %out = f32[] add(%p, %c)
}
 

Modul ini akan mengalokasikan dua buffer 4-byte: satu untuk input %p , dan satu untuk output %out .

Namun, sering diinginkan untuk melakukan pembaruan di tempat (misalnya, jika di frontend menghasilkan ekspresi variabel input tidak lagi hidup setelah perhitungan, seperti dalam kenaikan p++ ).

Untuk melakukan pembaruan semacam itu secara efisien, Anda dapat menentukan input alias:

 HloModule increment, input_output_alias={ {}: 0 }

ENTRY entry {
  %p = f32[] parameter(0)
  %c = f32[] constant(1)
  ROOT %out = f32[] add(%p, %c)
}
 

Format menentukan bahwa seluruh output (ditandai oleh {} ) alias dengan parameter input 0 .

Lihat XlaBuilder::SetUpAlias API untuk menentukan XlaBuilder::SetUpAlias terprogram.

Mendefinisikan aliasing saat run-time

Aliasing yang didefinisikan pada langkah sebelumnya ditentukan selama kompilasi . Selama eksekusi, Anda dapat memilih apakah akan menyumbangkan buffer menggunakan API LocalClient::RunAsync .

Input buffer untuk program ini dibungkus dalam ExecutionInput , yang pada gilirannya berisi pohon MaybeOwningDeviceMemory . Jika memori ditentukan sebagai kepemilikan (kepemilikan buffer diteruskan ke runtime XLA), buffer sebenarnya disumbangkan, dan pembaruan dijalankan di tempat, seperti yang diminta oleh kompilasi aliasing API waktu.

Namun, jika buffer yang alias pada waktu kompilasi tidak disumbangkan pada saat runtime, proteksi salin akan masuk: buffer output tambahan O dialokasikan, dan isi dari buffer input P yang dimaksudkan untuk diubah akan disalin ke O (sangat efektif program dapat mengeksekusi seolah-olah buffer O disumbangkan saat runtime).

Frontend interop

TF / XLA

Dalam kelompok program TensorFlow yang dikompilasi dengan XLA, semua pembaruan variabel sumber daya akan dihapus pada waktu kompilasi (aliasing pada saat runtime tergantung pada apakah hal lain memegang referensi ke tensor variabel sumber daya).