reduced blas calls
authorqipeng <pengrobertqi@163.com>
Mon, 4 Aug 2014 16:03:34 +0000 (09:03 -0700)
committerqipeng <pengrobertqi@163.com>
Mon, 11 Aug 2014 16:53:22 +0000 (09:53 -0700)
src/caffe/layers/mvn_layer.cpp
src/caffe/layers/mvn_layer.cu

index 7e6a97c..c9c075c 100644 (file)
@@ -43,14 +43,10 @@ Dtype MVNLayer<Dtype>::Forward_cpu(const vector<Blob<Dtype>*>& bottom,
       temp_.mutable_cpu_data());
 
   // computes variance using var(X) = E(X^2) - (EX)^2
-  caffe_cpu_gemv<Dtype>(CblasNoTrans, num, dim, 1., bottom_data,
-      sum_multiplier_.cpu_data(), 0., mean_.mutable_cpu_data());
-  caffe_cpu_gemv<Dtype>(CblasNoTrans, num, dim, 1., temp_.cpu_data(),
-      sum_multiplier_.cpu_data(), 0., variance_.mutable_cpu_data());
-  caffe_cpu_scale(mean_.count(), Dtype(1. / dim), mean_.cpu_data(),
-      mean_.mutable_cpu_data());  // EX
-  caffe_cpu_scale(mean_.count(), Dtype(1. / dim), variance_.cpu_data(),
-      variance_.mutable_cpu_data());  // E(X^2)
+  caffe_cpu_gemv<Dtype>(CblasNoTrans, num, dim, 1. / dim, bottom_data,
+      sum_multiplier_.cpu_data(), 0., mean_.mutable_cpu_data()); // EX
+  caffe_cpu_gemv<Dtype>(CblasNoTrans, num, dim, 1. / dim, temp_.cpu_data(),
+      sum_multiplier_.cpu_data(), 0., variance_.mutable_cpu_data()); // E(X^2)
   caffe_powx(mean_.count(), mean_.cpu_data(), Dtype(2),
       temp_.mutable_cpu_data());  // (EX)^2
   caffe_sub(mean_.count(), variance_.cpu_data(), temp_.cpu_data(),
@@ -114,14 +110,10 @@ void MVNLayer<Dtype>::Backward_cpu(const vector<Blob<Dtype>*>& top,
       temp_.mutable_cpu_data());
 
   // computes variance using var(X) = E(X^2) - (EX)^2
-  caffe_cpu_gemv<Dtype>(CblasNoTrans, num, dim, 1., bottom_data,
-      sum_multiplier_.cpu_data(), 0., mean_.mutable_cpu_data());
-  caffe_cpu_gemv<Dtype>(CblasNoTrans, num, dim, 1., temp_.cpu_data(),
-      sum_multiplier_.cpu_data(), 0., variance_.mutable_cpu_data());
-  caffe_cpu_scale(mean_.count(), Dtype(1. / dim), mean_.cpu_data(),
-      mean_.mutable_cpu_data());  // EX
-  caffe_cpu_scale(mean_.count(), Dtype(1. / dim), variance_.cpu_data(),
-      variance_.mutable_cpu_data());  // E(X^2)
+  caffe_cpu_gemv<Dtype>(CblasNoTrans, num, dim, 1. / dim, bottom_data,
+      sum_multiplier_.cpu_data(), 0., mean_.mutable_cpu_data()); // EX
+  caffe_cpu_gemv<Dtype>(CblasNoTrans, num, dim, 1. / dim, temp_.cpu_data(),
+      sum_multiplier_.cpu_data(), 0., variance_.mutable_cpu_data()); // E(X^2)
   caffe_powx(mean_.count(), mean_.cpu_data(), Dtype(2),
       temp_.mutable_cpu_data());  // (EX)^2
   caffe_sub(mean_.count(), variance_.cpu_data(), temp_.cpu_data(),
index 3714d49..be5f25b 100644 (file)
@@ -22,14 +22,10 @@ Dtype MVNLayer<Dtype>::Forward_gpu(const vector<Blob<Dtype>*>& bottom,
       temp_.mutable_gpu_data());
 
   // computes variance using var(X) = E(X^2) - (EX)^2
-  caffe_gpu_gemv<Dtype>(CblasNoTrans, num, dim, 1., bottom_data,
-      sum_multiplier_.gpu_data(), 0., mean_.mutable_gpu_data());
-  caffe_gpu_gemv<Dtype>(CblasNoTrans, num, dim, 1., temp_.gpu_data(),
-      sum_multiplier_.gpu_data(), 0., variance_.mutable_gpu_data());
-  caffe_gpu_scale(mean_.count(), Dtype(1. / dim), mean_.gpu_data(),
-      mean_.mutable_gpu_data());  // EX
-  caffe_gpu_scale(mean_.count(), Dtype(1. / dim), variance_.gpu_data(),
-      variance_.mutable_gpu_data());  // E(X^2)
+  caffe_gpu_gemv<Dtype>(CblasNoTrans, num, dim, 1. / dim, bottom_data,
+      sum_multiplier_.gpu_data(), 0., mean_.mutable_gpu_data()); // EX
+  caffe_gpu_gemv<Dtype>(CblasNoTrans, num, dim, 1. / dim, temp_.gpu_data(),
+      sum_multiplier_.gpu_data(), 0., variance_.mutable_gpu_data()); // E(X^2)
   caffe_gpu_powx(mean_.count(), mean_.gpu_data(), Dtype(2),
       temp_.mutable_gpu_data());  // (EX)^2
   caffe_gpu_sub(mean_.count(), variance_.gpu_data(), temp_.gpu_data(),
@@ -96,14 +92,10 @@ void MVNLayer<Dtype>::Backward_gpu(const vector<Blob<Dtype>*>& top,
       temp_.mutable_gpu_data());
 
   // computes variance using var(X) = E(X^2) - (EX)^2
-  caffe_gpu_gemv<Dtype>(CblasNoTrans, num, dim, 1., bottom_data,
-      sum_multiplier_.gpu_data(), 0., mean_.mutable_gpu_data());
-  caffe_gpu_gemv<Dtype>(CblasNoTrans, num, dim, 1., temp_.gpu_data(),
-      sum_multiplier_.gpu_data(), 0., variance_.mutable_gpu_data());
-  caffe_gpu_scale(mean_.count(), Dtype(1. / dim), mean_.gpu_data(),
-      mean_.mutable_gpu_data());  // EX
-  caffe_gpu_scale(mean_.count(), Dtype(1. / dim), variance_.gpu_data(),
-      variance_.mutable_gpu_data());  // E(X^2)
+  caffe_gpu_gemv<Dtype>(CblasNoTrans, num, dim, 1. / dim, bottom_data,
+      sum_multiplier_.gpu_data(), 0., mean_.mutable_gpu_data()); // EX
+  caffe_gpu_gemv<Dtype>(CblasNoTrans, num, dim, 1. / dim, temp_.gpu_data(),
+      sum_multiplier_.gpu_data(), 0., variance_.mutable_gpu_data()); // E(X^2)
   caffe_gpu_powx(mean_.count(), mean_.gpu_data(), Dtype(2),
       temp_.mutable_gpu_data());  // (EX)^2
   caffe_gpu_sub(mean_.count(), variance_.gpu_data(), temp_.gpu_data(),