Separate WindowDataLayer::Forward_gpu into a cu file
authorKai Li <kaili_kloud@163.com>
Mon, 24 Mar 2014 01:47:00 +0000 (09:47 +0800)
committerKai Li <kaili_kloud@163.com>
Tue, 25 Mar 2014 03:56:06 +0000 (11:56 +0800)
src/caffe/layers/window_data_layer.cpp
src/caffe/layers/window_data_layer.cu [new file with mode: 0644]

index a288403..d447cba 100644 (file)
@@ -418,24 +418,6 @@ Dtype WindowDataLayer<Dtype>::Forward_cpu(const vector<Blob<Dtype>*>& bottom,
   return Dtype(0.);
 }
 
-template <typename Dtype>
-Dtype WindowDataLayer<Dtype>::Forward_gpu(const vector<Blob<Dtype>*>& bottom,
-      vector<Blob<Dtype>*>* top) {
-  // First, join the thread
-  CHECK(!pthread_join(thread_, NULL)) << "Pthread joining failed.";
-  // Copy the data
-  CUDA_CHECK(cudaMemcpy((*top)[0]->mutable_gpu_data(),
-      prefetch_data_->cpu_data(), sizeof(Dtype) * prefetch_data_->count(),
-      cudaMemcpyHostToDevice));
-  CUDA_CHECK(cudaMemcpy((*top)[1]->mutable_gpu_data(),
-      prefetch_label_->cpu_data(), sizeof(Dtype) * prefetch_label_->count(),
-      cudaMemcpyHostToDevice));
-  // Start a new prefetch thread
-  CHECK(!pthread_create(&thread_, NULL, WindowDataLayerPrefetch<Dtype>,
-      reinterpret_cast<void*>(this))) << "Pthread execution failed.";
-  return Dtype(0.);
-}
-
 INSTANTIATE_CLASS(WindowDataLayer);
 
 }  // namespace caffe
diff --git a/src/caffe/layers/window_data_layer.cu b/src/caffe/layers/window_data_layer.cu
new file mode 100644 (file)
index 0000000..bf33194
--- /dev/null
@@ -0,0 +1,53 @@
+// Copyright 2013 Ross Girshick
+//
+// Based on data_layer.cpp by Yangqing Jia.
+
+#include <stdint.h>
+#include <pthread.h>
+
+#include <algorithm>
+#include <string>
+#include <vector>
+#include <map>
+#include <fstream>  // NOLINT(readability/streams)
+#include <utility>
+
+#include "opencv2/core/core.hpp"
+#include "opencv2/highgui/highgui.hpp"
+#include "opencv2/imgproc/imgproc.hpp"
+
+#include "caffe/layer.hpp"
+#include "caffe/util/io.hpp"
+#include "caffe/vision_layers.hpp"
+
+using std::string;
+using std::map;
+using std::pair;
+
+// caffe.proto > LayerParameter
+//   'source' field specifies the window_file
+//   'cropsize' indicates the desired warped size
+
+namespace caffe {
+
+template <typename Dtype>
+Dtype WindowDataLayer<Dtype>::Forward_gpu(const vector<Blob<Dtype>*>& bottom,
+      vector<Blob<Dtype>*>* top) {
+  // First, join the thread
+  CHECK(!pthread_join(thread_, NULL)) << "Pthread joining failed.";
+  // Copy the data
+  CUDA_CHECK(cudaMemcpy((*top)[0]->mutable_gpu_data(),
+      prefetch_data_->cpu_data(), sizeof(Dtype) * prefetch_data_->count(),
+      cudaMemcpyHostToDevice));
+  CUDA_CHECK(cudaMemcpy((*top)[1]->mutable_gpu_data(),
+      prefetch_label_->cpu_data(), sizeof(Dtype) * prefetch_label_->count(),
+      cudaMemcpyHostToDevice));
+  // Start a new prefetch thread
+  CHECK(!pthread_create(&thread_, NULL, WindowDataLayerPrefetch<Dtype>,
+      reinterpret_cast<void*>(this))) << "Pthread execution failed.";
+  return Dtype(0.);
+}
+
+INSTANTIATE_CLASS(WindowDataLayer);
+
+}  // namespace caffe