下面是caffe官方中文译本介绍blob的一个示例,一直没明白,请大牛指导,谢谢。
比如foo = blob.cpu_data(); // 没有数据复制,两者都有最新的内容
为什么没有数据复制,为什么是最新内容,其他行也是很不解
// 假定数据在 CPU 上进行初始化,我们有一个 blob
const Dtype* foo;
Dtype* bar;
foo = blob.gpu_data(); // 数据从 CPU 复制到 GPU
foo = blob.cpu_data(); // 没有数据复制,两者都有最新的内容
bar = blob.mutable_gpu_data(); // 没有数据复制
// ... 一些操作 ...
bar = blob.mutable_gpu_data(); // 仍在 GPU,没有数据复制
foo = blob.cpu_data(); // 由于 GPU 修改了数值,数据从 GPU 复制到 CPU
foo = blob.gpu_data(); // 没有数据复制,两者都有最新的内容
bar = blob.mutable_cpu_data(); // 依旧没有数据复制
bar = blob.mutable_gpu_data(); // 数据从 CPU 复制到 GPU
bar = blob.mutable_cpu_data(); // 数据从 GPU 复制到 CPU
其实这里用“复制”这个词不好,应该用“同步”。也就是说让gpu和cpu拥有相同的数据。
如果数据不同,那么同步的办法是复制,如果数据已经是相同的,那么同步就不用复制了。