Hen*_*low 5 python memory-management tensorflow
做
b = tf.slice(a, [...], [...])
Run Code Online (Sandbox Code Playgroud)
分配一个新的内存缓冲区,然后从 a 的缓冲区复制?或者 a 和 b 共享相同的缓冲区吗?
还有,那又怎么样
... = tf.nn.convolution(tf.slice(a, [...], [...]), ...)
Run Code Online (Sandbox Code Playgroud)
在这种情况下,切片没有被命名。这会导致分配和复制吗?
一般来说,有一些资源可以学习这些内存管理细节吗?
谢谢!
我对此也很好奇,并进入了tf.slice.
唯一不分配内存的时间是当切片是标识切片时(因此没有变化),以及当切片以 0 维对齐时。
if (is_identity) {
VLOG(1) << "Slice identity";
context->set_output(0, input);
*done = true;
return;
}
Run Code Online (Sandbox Code Playgroud)
if (slice_dim0 &&
IsDim0SliceAligned<T>(input.shape(), (*begin)[0], (*size)[0])) {
VLOG(1) << "Slice dim 0: " << input.shape().DebugString();
CHECK_GE(input.dims(), 1); // Otherwise, is_identity should be true.
context->set_output(0, input.Slice((*begin)[0], (*begin)[0] + (*size)[0]));
*done = true;
return;
}
Run Code Online (Sandbox Code Playgroud)
否则将调用以下内容
OP_REQUIRES_OK(context, context->allocate_output(0, *output_shape, result));
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1195 次 |
| 最近记录: |