aboutsummaryrefslogtreecommitdiffhomepage
path: root/tensorflow/stream_executor
diff options
context:
space:
mode:
authorGravatar Yifei Feng <yifeif@google.com>2017-11-21 23:32:43 -0800
committerGravatar TensorFlower Gardener <gardener@tensorflow.org>2017-11-21 23:36:22 -0800
commitc6d603f02e1a98f871912cda6716cdcbed6b439e (patch)
tree4658788770c03d8a5bfd48eee59c247559344f08 /tensorflow/stream_executor
parentf93c48dc061d23495a4425fcad17d55159cb02b1 (diff)
Merge changes from github.
PiperOrigin-RevId: 176615107
Diffstat (limited to 'tensorflow/stream_executor')
-rw-r--r--tensorflow/stream_executor/cuda/cuda_dnn.cc9
-rw-r--r--tensorflow/stream_executor/dnn.cc16
-rw-r--r--tensorflow/stream_executor/dnn.h6
3 files changed, 21 insertions, 10 deletions
diff --git a/tensorflow/stream_executor/cuda/cuda_dnn.cc b/tensorflow/stream_executor/cuda/cuda_dnn.cc
index 99bed86a17..d78362d4fb 100644
--- a/tensorflow/stream_executor/cuda/cuda_dnn.cc
+++ b/tensorflow/stream_executor/cuda/cuda_dnn.cc
@@ -232,7 +232,6 @@ CUDNN_DNN_ROUTINE_EACH_R3(PERFTOOLS_GPUTOOLS_CUDNN_WRAP)
__macro(cudnnRNNBackwardData) \
__macro(cudnnRNNBackwardWeights) \
__macro(cudnnSetRNNDescriptor) \
- __macro(cudnnSetRNNDescriptor_v6) \
__macro(cudnnGetFilterNdDescriptor)
// clang-format on
@@ -245,7 +244,8 @@ CUDNN_DNN_ROUTINE_EACH_R5(PERFTOOLS_GPUTOOLS_CUDNN_WRAP)
// clang-format off
#if CUDNN_VERSION >= 6000
#define CUDNN_DNN_ROUTINE_EACH_R6(__macro) \
- __macro(cudnnConvolutionBiasActivationForward)
+ __macro(cudnnConvolutionBiasActivationForward) \
+ __macro(cudnnSetRNNDescriptor_v6)
// clang-format on
CUDNN_DNN_ROUTINE_EACH_R6(PERFTOOLS_GPUTOOLS_CUDNN_WRAP)
@@ -665,7 +665,6 @@ class ScopedPoolingDescriptor {
LOG(FATAL) << "could not create cudnn pooling descriptor: "
<< ToString(status);
}
-
const std::vector<int64> strides64 = pooling_descriptor.strides();
const std::vector<int64> padding64 = pooling_descriptor.padding();
const std::vector<int64> shape64 = pooling_descriptor.window();
@@ -680,14 +679,14 @@ class ScopedPoolingDescriptor {
&CheckedNarrowing<int64, int>);
std::transform(shape64.cbegin(), shape64.cend(), shape.begin(),
&CheckedNarrowing<int64, int>);
+ bool propagate_nans = pooling_descriptor.propagate_nans();
status = wrap::cudnnSetPoolingNdDescriptor(
parent_, handle_,
(pooling_descriptor.mode() == dnn::PoolingMode::kMaximum
? CUDNN_POOLING_MAX
: CUDNN_POOLING_AVERAGE_COUNT_EXCLUDE_PADDING),
#if CUDNN_VERSION >= 5000
- // Always propagate nans.
- CUDNN_PROPAGATE_NAN,
+ propagate_nans ? CUDNN_PROPAGATE_NAN : CUDNN_NOT_PROPAGATE_NAN,
#endif
nd, shape.data(), padding.data(), strides.data());
if (status != CUDNN_STATUS_SUCCESS) {
diff --git a/tensorflow/stream_executor/dnn.cc b/tensorflow/stream_executor/dnn.cc
index 07fe8a85f4..29fd6d0e87 100644
--- a/tensorflow/stream_executor/dnn.cc
+++ b/tensorflow/stream_executor/dnn.cc
@@ -472,7 +472,8 @@ PoolingDescriptor::PoolingDescriptor(int ndims)
ndims_(ndims),
window_(ndims, 0),
padding_(ndims, 0),
- strides_(ndims, 1) {}
+ strides_(ndims, 1),
+ propagate_nans_(false) {}
PoolingDescriptor::PoolingDescriptor() : PoolingDescriptor(/*ndims=*/2) {}
@@ -482,6 +483,7 @@ void PoolingDescriptor::CloneFrom(const PoolingDescriptor& other) {
window_ = other.window_;
padding_ = other.padding_;
strides_ = other.strides_;
+ propagate_nans_ = other.propagate_nans_;
}
string PoolingDescriptor::ToString() const {
@@ -495,9 +497,12 @@ string PoolingDescriptor::ToString() const {
port::Appendf(&padding, "%lld", padding_[i]);
}
- return port::Printf("{mode: %s window: %s strides: %s padding: %s}",
- mode_string, window.c_str(), strides.c_str(),
- padding.c_str());
+ const char* propagate_string = propagate_nans_ ? "Yes" : "No";
+
+ return port::Printf(
+ "{mode: %s window: %s strides: %s padding: %s propagate NaNs: %s}",
+ mode_string, window.c_str(), strides.c_str(), padding.c_str(),
+ propagate_string);
}
string PoolingDescriptor::ToShortString() const {
@@ -508,7 +513,8 @@ string PoolingDescriptor::ToShortString() const {
port::Appendf(&padding, "_p%d:%lld", i, padding_[i]);
}
return port::StrCat(mode_ == dnn::PoolingMode::kMaximum ? "max" : "avg",
- window, strides, padding);
+ window, strides, padding,
+ propagate_nans_ ? "propagate_nans" : "ignore_nans");
}
// -- NormalizeDescriptor
diff --git a/tensorflow/stream_executor/dnn.h b/tensorflow/stream_executor/dnn.h
index 49235167ab..0d2cd4a9f2 100644
--- a/tensorflow/stream_executor/dnn.h
+++ b/tensorflow/stream_executor/dnn.h
@@ -661,6 +661,10 @@ class PoolingDescriptor {
SetDim(&strides_, dim, value);
return *this;
}
+ PoolingDescriptor& set_propagate_nans(bool value) {
+ propagate_nans_ = value;
+ return *this;
+ }
int ndims() const { return ndims_; }
void CloneFrom(const PoolingDescriptor& other);
@@ -681,10 +685,12 @@ class PoolingDescriptor {
std::vector<int64> window() const { return window_; }
std::vector<int64> padding() const { return padding_; }
std::vector<int64> strides() const { return strides_; }
+ bool propagate_nans() const { return propagate_nans_; }
private:
PoolingMode mode_;
int ndims_;
+ bool propagate_nans_;
// Stored as: ..., y, x.
std::vector<int64> window_;