Deep learning 深度学习lib库实例

Deep learning 深度学习lib库实例,deep-learning,caffe,Deep Learning,Caffe,这里有一个来自中国的例子 我有点迷路了。我应该从这个例子中推断出什么 // Assuming that data are on the CPU initially, and we have a blob. const Dtype* foo; Dtype* bar; foo = blob.gpu_data(); // data copied cpu->gpu. foo = blob.cpu_data(); // no data copied since both have up-to-da

这里有一个来自中国的例子

我有点迷路了。我应该从这个例子中推断出什么

// Assuming that data are on the CPU initially, and we have a blob.
const Dtype* foo;
Dtype* bar;
foo = blob.gpu_data(); // data copied cpu->gpu.
foo = blob.cpu_data(); // no data copied since both have up-to-date contents.
bar = blob.mutable_gpu_data(); // no data copied.
// ... some operations ...
bar = blob.mutable_gpu_data(); // no data copied when we are still on GPU.
foo = blob.cpu_data(); // data copied gpu->cpu, since the gpu side has modified the data
foo = blob.gpu_data(); // no data copied since both have up-to-date contents
bar = blob.mutable_cpu_data(); // still no data copied.
bar = blob.mutable_gpu_data(); // data copied cpu->gpu.
bar = blob.mutable_cpu_data(); // data copied gpu->cpu.

这段代码是为了解释Caffe的Blob类的一个特性,它屏蔽了用户对CPUGPU内存传输细节的了解

foo = blob.gpu_data(); // data copied cpu->gpu.
我试图详细说明守则中的评论:

它假定您已经声明了一个Blob对象并填充了数据。数据所代表的是无关的。此代码段中缺少Blob对象的实际声明及其初始化

// Assuming that data are on the CPU initially, and we have a blob.
const Dtype* foo;
Dtype* bar;
由于填充blob的数据驻留在CPU内存中,因此在GPU设备上使用它需要进行传输

foo = blob.gpu_data(); // data copied cpu->gpu.
但是,如果要将相同的数据复制到CPU内存中的其他位置,Blob对象将不必执行CPUGPU传输所需的昂贵复制操作

foo = blob.cpu_data(); // no data copied since both have up-to-date contents.
使用驻留在GPU内存中的数据初始化“bar”对象。它已经复制过一次了。无需重复成本高昂的复制操作

bar = blob.mutable_gpu_data(); // no data copied.
// ... some operations ...
bar = blob.mutable_gpu_data(); // no data copied when we are still on GPU.
Blob类跟踪CPU和CPU副本是否相同,或者是否有一个副本被修改,需要更新副本才能保持它们相同

foo = blob.cpu_data(); // data copied gpu->cpu, since the gpu side has modified the data
foo = blob.gpu_data(); // no data copied since both have up-to-date contents
现在,我们只是来回地看看什么会触发一个拷贝,并返回到缓存的数据拷贝上

bar = blob.mutable_cpu_data(); // still no data copied.
bar = blob.mutable_gpu_data(); // data copied cpu->gpu.
bar = blob.mutable_cpu_data(); // data copied gpu->cpu.