一开始看代码的时候会纳闷,为啥caffe里头又一个 cpu_data还要有一个mutable_cpu_data [cpp] view plain copy const void* SyncedMemory::cpu_data() { to_cpu(); return (const void*)cpu_ptr_; } [cpp] view plain copy void* SyncedMemory::mutable_cpu_data() { to_cpu(); head_ = HEAD_AT_CPU; return cpu_ptr_; } 他们之间就相差一个 head_ = HEAD_AT_CPU; 当你想读取数据的时候请使用cpu_data 当然想修改数据的时候请你使用mutable_cpu_data。 这样就提示系统数据我改过啦,你要小心了的意思(我只知道数据一定在CPU上)。