Caffe——when a blob will copy data

1609 단어
카페 홈페이지
// 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
왜 데이터 코피가 필요한 곳이 있고, 좀 필요 없는 곳이 있나요?
우선 다음과 같은 사항이 필요합니다..gpu_data  and  .cpu_data  are used in cases were the  data  is used only as input and will not be modified by the algorithm.  .mutable_*  is used when the data itself gets updated while running the algorithm.
그 다음으로 (1) 데이터 Blob에 대한 두 번의 조작이 같은 프로세서(processor)를 사용했는지, (2) 이전의 한 번의 조작이 데이터 Blob를 업데이트할 수 있는지 주목해야 한다.
Whenever a the data is called, it checks whether the previous statement was a  mutable_*  function call and that too using the same processor (gpu or cpu). If it is using the same processor, data need not be copied. If it is using the other processor, there is a chance that the data might have been updated in the previous  .mutable_*  call and hence a data copy is required.

좋은 웹페이지 즐겨찾기