caffe_cpu_hamming_distance<TypeParam>(n, x, y));
}
-// TODO: Fix caffe_gpu_hamming_distance and re-enable this test.
-TYPED_TEST(MathFunctionsTest, DISABLED_TestHammingDistanceGPU) {
- int n = this->blob_bottom_->count();
- const TypeParam* x = this->blob_bottom_->cpu_data();
- const TypeParam* y = this->blob_top_->cpu_data();
- int reference_distance = this->ReferenceHammingDistance(n, x, y);
- x = this->blob_bottom_->gpu_data();
- y = this->blob_top_->gpu_data();
- int computed_distance = caffe_gpu_hamming_distance<TypeParam>(n, x, y);
- EXPECT_EQ(reference_distance, computed_distance);
-}
-
TYPED_TEST(MathFunctionsTest, TestAsumCPU) {
int n = this->blob_bottom_->count();
const TypeParam* x = this->blob_bottom_->cpu_data();
EXPECT_LT((cpu_asum - std_asum) / std_asum, 1e-2);
}
-TYPED_TEST(MathFunctionsTest, TestAsumGPU) {
+TYPED_TEST(MathFunctionsTest, TestSignCPU) {
int n = this->blob_bottom_->count();
const TypeParam* x = this->blob_bottom_->cpu_data();
- TypeParam std_asum = 0;
+ caffe_cpu_sign<TypeParam>(n, x, this->blob_bottom_->mutable_cpu_diff());
+ const TypeParam* signs = this->blob_bottom_->cpu_diff();
for (int i = 0; i < n; ++i) {
- std_asum += std::fabs(x[i]);
+ EXPECT_EQ(signs[i], x[i] > 0 ? 1 : (x[i] < 0 ? -1 : 0));
}
- TypeParam gpu_asum;
- caffe_gpu_asum<TypeParam>(n, this->blob_bottom_->gpu_data(), &gpu_asum);
- EXPECT_LT((gpu_asum - std_asum) / std_asum, 1e-2);
}
-TYPED_TEST(MathFunctionsTest, TestSignCPU) {
+TYPED_TEST(MathFunctionsTest, TestSgnbitCPU) {
int n = this->blob_bottom_->count();
const TypeParam* x = this->blob_bottom_->cpu_data();
- caffe_cpu_sign<TypeParam>(n, x, this->blob_bottom_->mutable_cpu_diff());
- const TypeParam* signs = this->blob_bottom_->cpu_diff();
+ caffe_cpu_sgnbit<TypeParam>(n, x, this->blob_bottom_->mutable_cpu_diff());
+ const TypeParam* signbits = this->blob_bottom_->cpu_diff();
for (int i = 0; i < n; ++i) {
- EXPECT_EQ(signs[i], x[i] > 0 ? 1 : (x[i] < 0 ? -1 : 0));
+ EXPECT_EQ(signbits[i], x[i] < 0 ? 1 : 0);
}
}
-TYPED_TEST(MathFunctionsTest, TestSignGPU) {
+TYPED_TEST(MathFunctionsTest, TestFabsCPU) {
int n = this->blob_bottom_->count();
- caffe_gpu_sign<TypeParam>(n, this->blob_bottom_->gpu_data(),
- this->blob_bottom_->mutable_gpu_diff());
- const TypeParam* signs = this->blob_bottom_->cpu_diff();
const TypeParam* x = this->blob_bottom_->cpu_data();
+ caffe_cpu_fabs<TypeParam>(n, x, this->blob_bottom_->mutable_cpu_diff());
+ const TypeParam* abs_val = this->blob_bottom_->cpu_diff();
for (int i = 0; i < n; ++i) {
- EXPECT_EQ(signs[i], x[i] > 0 ? 1 : (x[i] < 0 ? -1 : 0));
+ EXPECT_EQ(abs_val[i], x[i] > 0 ? x[i] : -x[i]);
}
}
-TYPED_TEST(MathFunctionsTest, TestSgnbitCPU) {
+TYPED_TEST(MathFunctionsTest, TestScaleCPU) {
int n = this->blob_bottom_->count();
+ TypeParam alpha = this->blob_bottom_->cpu_diff()[caffe_rng_rand() %
+ this->blob_bottom_->count()];
+ caffe_cpu_scale<TypeParam>(n, alpha, this->blob_bottom_->cpu_data(),
+ this->blob_bottom_->mutable_cpu_diff());
+ const TypeParam* scaled = this->blob_bottom_->cpu_diff();
const TypeParam* x = this->blob_bottom_->cpu_data();
- caffe_cpu_sgnbit<TypeParam>(n, x, this->blob_bottom_->mutable_cpu_diff());
- const TypeParam* signbits = this->blob_bottom_->cpu_diff();
for (int i = 0; i < n; ++i) {
- EXPECT_EQ(signbits[i], x[i] < 0 ? 1 : 0);
+ EXPECT_EQ(scaled[i], x[i] * alpha);
}
}
-TYPED_TEST(MathFunctionsTest, TestSgnbitGPU) {
+TYPED_TEST(MathFunctionsTest, TestCopyCPU) {
+ const int n = this->blob_bottom_->count();
+ const TypeParam* bottom_data = this->blob_bottom_->cpu_data();
+ TypeParam* top_data = this->blob_top_->mutable_cpu_data();
+ Caffe::set_mode(Caffe::CPU);
+ caffe_copy(n, bottom_data, top_data);
+ for (int i = 0; i < n; ++i) {
+ EXPECT_EQ(bottom_data[i], top_data[i]);
+ }
+}
+
+#ifndef CPU_ONLY
+
+// TODO: Fix caffe_gpu_hamming_distance and re-enable this test.
+TYPED_TEST(MathFunctionsTest, DISABLED_TestHammingDistanceGPU) {
+ int n = this->blob_bottom_->count();
+ const TypeParam* x = this->blob_bottom_->cpu_data();
+ const TypeParam* y = this->blob_top_->cpu_data();
+ int reference_distance = this->ReferenceHammingDistance(n, x, y);
+ x = this->blob_bottom_->gpu_data();
+ y = this->blob_top_->gpu_data();
+ int computed_distance = caffe_gpu_hamming_distance<TypeParam>(n, x, y);
+ EXPECT_EQ(reference_distance, computed_distance);
+}
+
+TYPED_TEST(MathFunctionsTest, TestAsumGPU) {
int n = this->blob_bottom_->count();
- caffe_gpu_sgnbit<TypeParam>(n, this->blob_bottom_->gpu_data(),
- this->blob_bottom_->mutable_gpu_diff());
- const TypeParam* signbits = this->blob_bottom_->cpu_diff();
const TypeParam* x = this->blob_bottom_->cpu_data();
+ TypeParam std_asum = 0;
for (int i = 0; i < n; ++i) {
- EXPECT_EQ(signbits[i], x[i] < 0 ? 1 : 0);
+ std_asum += std::fabs(x[i]);
}
+ TypeParam gpu_asum;
+ caffe_gpu_asum<TypeParam>(n, this->blob_bottom_->gpu_data(), &gpu_asum);
+ EXPECT_LT((gpu_asum - std_asum) / std_asum, 1e-2);
}
-TYPED_TEST(MathFunctionsTest, TestFabsCPU) {
+TYPED_TEST(MathFunctionsTest, TestSignGPU) {
int n = this->blob_bottom_->count();
+ caffe_gpu_sign<TypeParam>(n, this->blob_bottom_->gpu_data(),
+ this->blob_bottom_->mutable_gpu_diff());
+ const TypeParam* signs = this->blob_bottom_->cpu_diff();
const TypeParam* x = this->blob_bottom_->cpu_data();
- caffe_cpu_fabs<TypeParam>(n, x, this->blob_bottom_->mutable_cpu_diff());
- const TypeParam* abs_val = this->blob_bottom_->cpu_diff();
for (int i = 0; i < n; ++i) {
- EXPECT_EQ(abs_val[i], x[i] > 0 ? x[i] : -x[i]);
+ EXPECT_EQ(signs[i], x[i] > 0 ? 1 : (x[i] < 0 ? -1 : 0));
}
}
-TYPED_TEST(MathFunctionsTest, TestFabsGPU) {
+TYPED_TEST(MathFunctionsTest, TestSgnbitGPU) {
int n = this->blob_bottom_->count();
- caffe_gpu_fabs<TypeParam>(n, this->blob_bottom_->gpu_data(),
+ caffe_gpu_sgnbit<TypeParam>(n, this->blob_bottom_->gpu_data(),
this->blob_bottom_->mutable_gpu_diff());
- const TypeParam* abs_val = this->blob_bottom_->cpu_diff();
+ const TypeParam* signbits = this->blob_bottom_->cpu_diff();
const TypeParam* x = this->blob_bottom_->cpu_data();
for (int i = 0; i < n; ++i) {
- EXPECT_EQ(abs_val[i], x[i] > 0 ? x[i] : -x[i]);
+ EXPECT_EQ(signbits[i], x[i] < 0 ? 1 : 0);
}
}
-TYPED_TEST(MathFunctionsTest, TestScaleCPU) {
+TYPED_TEST(MathFunctionsTest, TestFabsGPU) {
int n = this->blob_bottom_->count();
- TypeParam alpha = this->blob_bottom_->cpu_diff()[caffe_rng_rand() %
- this->blob_bottom_->count()];
- caffe_cpu_scale<TypeParam>(n, alpha, this->blob_bottom_->cpu_data(),
- this->blob_bottom_->mutable_cpu_diff());
- const TypeParam* scaled = this->blob_bottom_->cpu_diff();
+ caffe_gpu_fabs<TypeParam>(n, this->blob_bottom_->gpu_data(),
+ this->blob_bottom_->mutable_gpu_diff());
+ const TypeParam* abs_val = this->blob_bottom_->cpu_diff();
const TypeParam* x = this->blob_bottom_->cpu_data();
for (int i = 0; i < n; ++i) {
- EXPECT_EQ(scaled[i], x[i] * alpha);
+ EXPECT_EQ(abs_val[i], x[i] > 0 ? x[i] : -x[i]);
}
}
}
}
-TYPED_TEST(MathFunctionsTest, TestCopyCPU) {
- const int n = this->blob_bottom_->count();
- const TypeParam* bottom_data = this->blob_bottom_->cpu_data();
- TypeParam* top_data = this->blob_top_->mutable_cpu_data();
- Caffe::set_mode(Caffe::CPU);
- caffe_copy(n, bottom_data, top_data);
- for (int i = 0; i < n; ++i) {
- EXPECT_EQ(bottom_data[i], top_data[i]);
- }
-}
-
TYPED_TEST(MathFunctionsTest, TestCopyGPU) {
const int n = this->blob_bottom_->count();
const TypeParam* bottom_data = this->blob_bottom_->gpu_data();
}
}
+#endif
+
+
} // namespace caffe
caffe_rng_gaussian(sample_size_, mu, sigma, rng_data);
}
- void RngGaussianFillGPU(const Dtype mu, const Dtype sigma, void* gpu_data) {
- Dtype* rng_data = static_cast<Dtype*>(gpu_data);
- caffe_gpu_rng_gaussian(sample_size_, mu, sigma, rng_data);
- }
-
void RngGaussianChecks(const Dtype mu, const Dtype sigma,
const void* cpu_data, const Dtype sparse_p = 0) {
const Dtype* rng_data = static_cast<const Dtype*>(cpu_data);
caffe_rng_uniform(sample_size_, lower, upper, rng_data);
}
- void RngUniformFillGPU(const Dtype lower, const Dtype upper, void* gpu_data) {
- CHECK_GE(upper, lower);
- Dtype* rng_data = static_cast<Dtype*>(gpu_data);
- caffe_gpu_rng_uniform(sample_size_, lower, upper, rng_data);
- }
-
- // Fills with uniform integers in [0, UINT_MAX] using 2 argument form of
- // caffe_gpu_rng_uniform.
- void RngUniformIntFillGPU(void* gpu_data) {
- unsigned int* rng_data = static_cast<unsigned int*>(gpu_data);
- caffe_gpu_rng_uniform(sample_size_, rng_data);
- }
-
void RngUniformChecks(const Dtype lower, const Dtype upper,
const void* cpu_data, const Dtype sparse_p = 0) {
const Dtype* rng_data = static_cast<const Dtype*>(cpu_data);
EXPECT_NEAR(sample_mean, true_mean, bound);
}
+#ifndef CPU_ONLY
+
+ void RngGaussianFillGPU(const Dtype mu, const Dtype sigma, void* gpu_data) {
+ Dtype* rng_data = static_cast<Dtype*>(gpu_data);
+ caffe_gpu_rng_gaussian(sample_size_, mu, sigma, rng_data);
+ }
+
+ void RngUniformFillGPU(const Dtype lower, const Dtype upper, void* gpu_data) {
+ CHECK_GE(upper, lower);
+ Dtype* rng_data = static_cast<Dtype*>(gpu_data);
+ caffe_gpu_rng_uniform(sample_size_, lower, upper, rng_data);
+ }
+
+ // Fills with uniform integers in [0, UINT_MAX] using 2 argument form of
+ // caffe_gpu_rng_uniform.
+ void RngUniformIntFillGPU(void* gpu_data) {
+ unsigned int* rng_data = static_cast<unsigned int*>(gpu_data);
+ caffe_gpu_rng_uniform(sample_size_, rng_data);
+ }
+
+#endif
+
int num_above_mean;
int num_below_mean;
EXPECT_NEAR(true_mean, sample_p, bound);
}
+#ifndef CPU_ONLY
TYPED_TEST(RandomNumberGeneratorTest, TestRngGaussianGPU) {
const TypeParam mu = 0;
this->RngUniformChecks(lower_prod, upper_prod, uniform_data_1);
}
+#endif
} // namespace caffe