aboutsummaryrefslogtreecommitdiffhomepage
path: root/tensorflow/stream_executor
diff options
context:
space:
mode:
authorGravatar A. Unique TensorFlower <gardener@tensorflow.org>2018-07-17 17:04:15 -0700
committerGravatar TensorFlower Gardener <gardener@tensorflow.org>2018-07-17 17:07:36 -0700
commit36a66347e8e344cddee4a8d9123ccbcae40011b1 (patch)
tree575bca5e564443ab7133a0ae88f2a37fd893f5ff /tensorflow/stream_executor
parent60da45fcabb8a1e096cc9b4b5c0d10c7f1ee2a13 (diff)
Error on some documented invalid Cudnn inputs. Cudnn should have
returned errors, but crashes instead. PiperOrigin-RevId: 205000883
Diffstat (limited to 'tensorflow/stream_executor')
-rw-r--r--tensorflow/stream_executor/cuda/cuda_dnn.cc29
1 files changed, 27 insertions, 2 deletions
diff --git a/tensorflow/stream_executor/cuda/cuda_dnn.cc b/tensorflow/stream_executor/cuda/cuda_dnn.cc
index 9e24a4538c..08228034f7 100644
--- a/tensorflow/stream_executor/cuda/cuda_dnn.cc
+++ b/tensorflow/stream_executor/cuda/cuda_dnn.cc
@@ -2406,6 +2406,19 @@ port::Status CudnnSupport::DoConvolveImpl(
stream, cudnn, algorithm_config, input_nd, filter,
conv, output_nd, scratch_allocator, &scratch));
+ if (cudnn_type == CUDNN_DATA_HALF &&
+ filter_descriptor.layout() == dnn::FilterLayout::kOutputYXInput &&
+ (algo_desc.algo_id() != CUDNN_CONVOLUTION_FWD_ALGO_IMPLICIT_GEMM ||
+ input_descriptor.layout() != dnn::DataLayout::kBatchYXDepth ||
+ output_descriptor.layout() != dnn::DataLayout::kBatchYXDepth)) {
+ // TODO(timshen): Attach a nvbugs number.
+ return port::Status(
+ port::error::INTERNAL,
+ "Cudnn doesn't return an error code on this documented unsupported "
+ "layout combination. Instead, it accesses out-of-bounds memory. "
+ "Being nice and returning an error instead.");
+ }
+
std::unique_ptr<CUDATimer, TimerDeleter> timer;
if (is_profiling) {
timer.reset(new CUDATimer(parent_)); // NOLINT
@@ -3074,9 +3087,21 @@ port::Status CudnnSupport::DoConvolveBackwardDataImpl(
}
}
+ if (cudnn_type == CUDNN_DATA_HALF &&
+ filter_descriptor.layout() == dnn::FilterLayout::kOutputYXInput &&
+ ((algo_desc.algo_id() != CUDNN_CONVOLUTION_BWD_FILTER_ALGO_0 &&
+ algo_desc.algo_id() != CUDNN_CONVOLUTION_BWD_FILTER_ALGO_1) ||
+ input_descriptor.layout() != dnn::DataLayout::kBatchYXDepth ||
+ output_descriptor.layout() != dnn::DataLayout::kBatchYXDepth)) {
+ return port::Status(
+ port::error::INTERNAL,
+ "Cudnn doesn't return an error code on this documented unsupported "
+ "layout combination. Instead, it crashes. Being nice and returning an "
+ "error instead. See nvbugs/2260917");
+ }
+
// Cudnn 7.1.4 has a bug if the workspace of the following convolution is not
- // zero-initialized.
- // TODO(timshen): Add an nvbugs/ link.
+ // zero-initialized. See nvbugs/2254619.
if (CUDNN_VERSION >= 7000 &&
algorithm_config.algorithm().algo_id() ==
CUDNN_CONVOLUTION_BWD_DATA_ALGO_1 &&