Hiện tượng chồng phổ trong XLA

Tài liệu này mô tả API bí danh XLA, cho phép bạn chỉ định tình trạng chồng phổ giữa vùng đệm đầu vào và đầu ra khi xây dựng chương trình XLA.

Xác định tình trạng chồng phổ tại thời gian biên dịch

Ví dụ: hãy xem xét một mô-đun HLO bình thường, chỉ thêm 1 vào dữ liệu đầu vào:

HloModule increment

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

Mô-đun này sẽ phân bổ 2 vùng đệm 4 byte: một vùng đệm cho đầu vào %p và một vùng đệm cho đầu ra %out.

Tuy nhiên, thông thường bạn nên thực hiện cập nhật tại chỗ (ví dụ: nếu trong giao diện người dùng tạo biểu thức, biến đầu vào không còn tồn tại sau khi tính toán, như trong số tăng p++).

Để thực hiện việc cập nhật một cách hiệu quả, bạn có thể chỉ định tình trạng chồng phổ đầu vào:

HloModule increment, input_output_alias={ {}: 0 }

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

Định dạng chỉ định rằng toàn bộ đầu ra (do {} đánh dấu) được đặt bí danh thành tham số đầu vào 0.

Để chỉ định việc đặt chồng phổ theo phương thức lập trình, hãy xem XlaBuilder::SetUpAlias API.

Xác định tình trạng chồng phổ trong thời gian chạy

Tình trạng chồng phổ được xác định ở bước trước được chỉ định trong quá trình biên dịch. Trong quá trình thực thi, bạn có thể sử dụng LocalClient::RunAsync API để chọn xem có đóng góp vùng đệm hay không.

Vùng đệm đầu vào cho chương trình được gói trong ExecutionInput! chứa cây MaybeOwningDeviceMemory. Nếu bộ nhớ là được chỉ định là sở hữu (quyền sở hữu vùng đệm được truyền đến thời gian chạy XLA), vùng đệm thực sự được đóng góp và quá trình cập nhật được thực thi tại chỗ, như do API bí danh thời gian biên dịch yêu cầu.

Tuy nhiên, nếu vùng đệm được đặt bí danh tại thời gian biên dịch không được đóng góp tại thời gian chạy, tính năng sao chép-bảo vệ sẽ kích hoạt: một vùng đệm đầu ra bổ sung O được phân bổ, và nội dung của vùng đệm đầu vào P từng được đặt bí danh sẽ được sao chép vào O (để chương trình có thể thực thi hiệu quả như thể vùng đệm O được đóng góp trong thời gian chạy).