【发布时间】:2017-03-08 08:34:38
【问题描述】:
我正在用 C++ 编写一个自定义张量流操作,我想知道如何将一个张量深拷贝到另一个张量中。换句话说,我想要从一个张量到另一个张量的逐元素复制,这样它们就不会共享底层内存缓冲区。
我发现的最接近的东西是 DeepCopy(在 tensor_util.h 中定义)。问题是我需要这个操作很快,并且文档清楚地指出这个函数没有针对速度进行优化:
// DeepCopy returns a tensor whose contents are a deep copy of the
// contents of 'other'. This function is intended only for
// convenience, not speed.
更多细节:我在 GPU 上使用 Tensorflow,所以基本上我想做的是让 TF 启动一个 cudaMemcpy,其中源和目标都是设备指针。 TF 确实提供了对张量指针 (tensor.tensor_data().data()) 的访问权限,但是如果您尝试对它们进行 cudaMemcpy 操作,您很快就会遇到问题(它们与重叠的 cuda 上下文有关;不好)。
提前致谢!
【问题讨论】:
-
看起来我在尝试手动 cudaMalloc 时遇到的异常是由于正交问题。一旦解决,它就可以工作,尽管我对以这种方式处理 TF 的内部结构有点怀疑。
-
您能提供您的解决方案的任何示例代码吗?
标签: c++ tensorflow