このドキュメントでは、XLA エイリアス API について説明します。この API を使用すると、 XLA プログラムを作成する際には、入力バッファと出力バッファの間のエイリアス設定を使用します。
コンパイル時のエイリアス設定の定義
たとえば、単純に 1
を入力に追加する簡単な HLO モジュールについて考えてみましょう。
HloModule increment
ENTRY entry {
%p = f32[] parameter(0)
%c = f32[] constant(1)
ROOT %out = f32[] add(%p, %c)
}
このモジュールは、2 つの 4 バイトバッファを割り当てます。1 つは入力 %p
用、もう 1 つは入力 %p
用です。
(出力 %out
)。
ただし、更新はインプレースで実行することをおすすめします(たとえば、
入力変数が存在せず、式を生成するフロントエンドで
(p++
の増分で表したもの)。
このような更新を効率的に行うために、入力エイリアスを指定します。
HloModule increment, input_output_alias={ {}: 0 }
ENTRY entry {
%p = f32[] parameter(0)
%c = f32[] constant(1)
ROOT %out = f32[] add(%p, %c)
}
この形式は、出力全体({}
でマーク)を
入力パラメータ 0
。
プログラムでエイリアスを指定する方法については、
XlaBuilder::SetUpAlias
API
実行時のエイリアス設定の定義
前の手順で定義したエイリアスは、コンパイル時に指定します。
実行中、
LocalClient::RunAsync
バッファを提供するかどうかを選択する API。
プログラムへの入力バッファは、
ExecutionInput
秒、
このツリーには MaybeOwningDeviceMemory
のツリーが含まれます。メモリが
owning として指定されている(バッファの所有権が XLA ランタイムに渡されます)
バッファが実際に提供され、その時点で更新が
コンパイル時エイリアス API のリクエスト。
ただし、コンパイル時にエイリアスが設定されたバッファが、
追加の出力バッファ O
が割り当てられ、コピー保護が開始されます。
そして、エイリアスとなるはずの入力バッファ P
の内容がコピーされます。
O
に書き込まれます(これにより、O
バッファが
。