diff options
author | Yifei Feng <yifeif@google.com> | 2017-11-21 23:32:43 -0800 |
---|---|---|
committer | TensorFlower Gardener <gardener@tensorflow.org> | 2017-11-21 23:36:22 -0800 |
commit | c6d603f02e1a98f871912cda6716cdcbed6b439e (patch) | |
tree | 4658788770c03d8a5bfd48eee59c247559344f08 /tensorflow/stream_executor | |
parent | f93c48dc061d23495a4425fcad17d55159cb02b1 (diff) |
Merge changes from github.
PiperOrigin-RevId: 176615107
Diffstat (limited to 'tensorflow/stream_executor')
-rw-r--r-- | tensorflow/stream_executor/cuda/cuda_dnn.cc | 9 | ||||
-rw-r--r-- | tensorflow/stream_executor/dnn.cc | 16 | ||||
-rw-r--r-- | tensorflow/stream_executor/dnn.h | 6 |
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_; |