// Returns true iff this op kernel is considered "expensive". The
// runtime may use this flag to optimize graph execution for example
// to "inline" inexpensive kernels.
virtual bool IsExpensive() { return expensive_; }
Похоже, что по умолчанию все операции на графическом процессоре считаются недорогими, в то время как CPU, SYSL отмечены как дорогие.
Немного сложно определить определение и эффект expensive
. В руководстве нет информации.
- Существует ли какое-либо конкретное
IsExpensive
когдаIsExpensive
должно бытьfalse, true
? - Каков эффект, если операция отмечена как дорогостоящая? До сих пор могу только сказать, что активное профилирование использует это как подсказку? Единственное место, запрашивающее это свойство, находится в планировщике, но не объясняет, что значит быть встроенным.
- В сочетании с "1." Должен ли я беспокоиться об этом в моих собственных Ops?
- Хотя имеет смысл, что любой
AsyncOp
(например,RemoteFusedGraphExecuteOp
) стоит дорого,MPIAllgatherOp
, по-видимому, определяется как не дорогостоящий. Разве это не противоречие?
Я спрашиваю, потому что IdentityOp
явно отмечен как недорогой. Интересно, если я должен переопределить этот метод в своих собственных операциях, так как каждая версия ЦП (даже любой пользовательский код) помечена как дорогая.
Вся логика XLA, по-видимому, связана с тем, что инструкция дорогая или нет. Поэтому это может быть важной частью. Следовательно, монетоприемник об истинном/ложном может быть не лучшим способом решить возвращаемое значение в моем обычном операторе.