caffe数据同步

本文详细解析了SyncedMemory类中的cpu_data()与mutable_cpu_data()两种数据获取方法的区别,以及它们如何影响数据同步状态。通过具体示例说明了在不同数据状态下的行为表现。
Wan2.2-I2V-A14B

Wan2.2-I2V-A14B

图生视频
Wan2.2

Wan2.2是由通义万相开源高效文本到视频生成模型,是有​50亿参数的轻量级视频生成模型,专为快速内容创作优化。支持480P视频生成,具备优秀的时序连贯性和运动推理能力

cpu_data()和mutable_cpu_data() 区别: 
mutable_cpu_data()多了一句head_ = HEAD_AT_CPU;是因为它返回的cpu_ptr_是可以被修改的,不像cpu_data()中返回(const void*)cpu_ptr_不可修改,这样,在下一次cpu或者gpu数据同步的时候,会知道这里的数据可能被修改过。
const void* SyncedMemory::cpu_data() {
  check_device();
  to_cpu();
  return (const void*)cpu_ptr_;
}

void* SyncedMemory::mutable_cpu_data() {
  check_device();
  to_cpu();
  head_ = HEAD_AT_CPU;
  return cpu_ptr_;
}
SyncedHead hand_ 数据状态,有四种状态: UNINITIALIZED(未初始化), HEAD_AT_CPU(最新数据在内存中), HEAD_AT_GPU(最新数据在内存中), SYNCED(内存显存数据已同步)
to_cpu()用来将显存数据同步到内存,to_gpu()用来将内存数据同步到显存
内存显存数据不同步时,并不会立马调用to_cpu()或者to_gpu()使数据同步,只改变数据状态 hand_。只有在获取数据的时候才会先去同步数据,再返回数据。
状态转换图如下:最先在这里看到这个图片https://blog.youkuaiyun.com/u010414386/article/details/52346192(作者写的很好啊,可惜后来没有更了)

// Assuming that data are on the CPU initially, and we have a blob.
//首先假设初始化时数据在cpu中(内存),此时状态为HEAD_AT_CPU
const Dtype* foo;
Dtype* bar;
foo = blob.gpu_data(); // data copied cpu->gpu.
//这时调用to_gpu()会将数据复制至gpu,因为之前状态是状态HEAD_AT_CPU,此时变为SYNCED
foo = blob.cpu_data(); // no data copied since both have up-to-date contents.
//这时调用to_cpu()因为之前状态是SYNCED,所以不会复制数据,状态不变
bar = blob.mutable_gpu_data(); // no data copied.
//这时调用to_gpu()因为之前状态是SYNCED,所以不会复制数据,但状态变为HEAD_AT_GPU
// ... some operations ...
bar = blob.mutable_gpu_data(); // no data copied when we are still on GPU.
//这时调用to_gpu()因为之前状态是HEAD_AT_GPU,所以不会复制数据,但状态仍为HEAD_AT_GPU
foo = blob.cpu_data(); // data copied gpu->cpu, since the gpu side has modified the data
//这时调用to_cpu()因为之前状态是HEAD_AT_GPU,所以会复制数据,状态改为SYNCED
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.


您可能感兴趣的与本文相关的镜像

Wan2.2-I2V-A14B

Wan2.2-I2V-A14B

图生视频
Wan2.2

Wan2.2是由通义万相开源高效文本到视频生成模型,是有​50亿参数的轻量级视频生成模型,专为快速内容创作优化。支持480P视频生成,具备优秀的时序连贯性和运动推理能力

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值