diff --git a/src/operator/quantization/quantized_conv.cu b/src/operator/quantization/quantized_conv.cu index 2db5416309b5..a76782b8baa4 100644 --- a/src/operator/quantization/quantized_conv.cu +++ b/src/operator/quantization/quantized_conv.cu @@ -49,7 +49,7 @@ struct QuantizedBiasAddKernel { } }; -#if MXNET_USE_CUDNN == 1 && CUDNN_MAJOR >= 6 +#if MXNET_USE_CUDNN == 1 && CUDNN_MAJOR >= 6 && CUDA_VERSION >= 8000 template class QuantizedCuDNNConvOp { public: @@ -260,7 +260,7 @@ class QuantizedCuDNNConvOp { float alpha_ = 1.0f; float beta_ = 0.0f; }; // class QuantizedCuDNNConvOp -#endif // MXNET_USE_CUDNN == 1 && CUDNN_MAJOR >= 6 +#endif // MXNET_USE_CUDNN == 1 && CUDNN_MAJOR >= 6 && CUDA_VERSION >= 8000 void QuantizedConvForwardGPU(const nnvm::NodeAttrs& attrs, const OpContext& ctx, @@ -270,7 +270,7 @@ void QuantizedConvForwardGPU(const nnvm::NodeAttrs& attrs, const ConvolutionParam& param = nnvm::get(attrs.parsed); CHECK_EQ(param.kernel.ndim(), 2U) << "QuantizedConvForward only supports 2D convolution for now"; -#if MXNET_USE_CUDNN == 1 && CUDNN_MAJOR >= 6 +#if MXNET_USE_CUDNN == 1 && CUDNN_MAJOR >= 6 && CUDA_VERSION >= 8000 typedef QuantizedCuDNNConvOp QuantizedConvOpInt8; #if DMLC_CXX11_THREAD_LOCAL static thread_local QuantizedConvOpInt8 op; @@ -280,8 +280,9 @@ void QuantizedConvForwardGPU(const nnvm::NodeAttrs& attrs, op.Init(param, ctx, {inputs[0].shape_, inputs[1].shape_}, {outputs[0].shape_}); op.Forward(ctx, inputs, req, outputs); #else - LOG(FATAL) << "QuantizedConvForward only supports cudnnConvolutionForward for now"; -#endif // MXNET_USE_CUDNN == 1 && CUDNN_MAJOR >= 6 + LOG(FATAL) << "QuantizedConvForward only supports cudnnConvolutionForward " + "with CUDNN >= 6.0 and CUDA >= 8.0"; +#endif // MXNET_USE_CUDNN == 1 && CUDNN_MAJOR >= 6 && CUDA_VERSION >= 8000 } NNVM_REGISTER_OP(_contrib_quantized_conv) diff --git a/src/operator/quantization/quantized_fully_connected.cu b/src/operator/quantization/quantized_fully_connected.cu index ac7ba1e21df8..beecc7598642 100644 --- a/src/operator/quantization/quantized_fully_connected.cu +++ b/src/operator/quantization/quantized_fully_connected.cu @@ -30,6 +30,7 @@ namespace mxnet { namespace op { +#if CUDA_VERSION >= 8000 // value + bias_value * (range1 / limit_range1) * (limit_range2 / range2) struct QuantizedBiasAddKernel { MSHADOW_XINLINE static void Map(int i, size_t k, int32_t *out, @@ -49,6 +50,7 @@ struct QuantizedBiasAddKernel { float_for_one_out_quant; } }; +#endif // CUDA_VERSION >= 8000 template void QuantizedFullyConnectedForwardGPU(const nnvm::NodeAttrs& attrs, @@ -56,6 +58,7 @@ void QuantizedFullyConnectedForwardGPU(const nnvm::NodeAttrs& attrs, const std::vector &inputs, const std::vector &req, const std::vector &outputs) { +#if CUDA_VERSION >= 8000 const FullyConnectedParam& param = nnvm::get(attrs.parsed); using namespace mshadow; using namespace mxnet_op; @@ -113,6 +116,9 @@ void QuantizedFullyConnectedForwardGPU(const nnvm::NodeAttrs& attrs, outputs[1].dptr(), outputs[2].dptr(), inputs[7].dptr(), inputs[8].dptr()); } +#else + LOG(FATAL) << "QuantizedFullyConnectedForwardGPU only supports CUDA >= 8.0"; +#endif // CUDA_VERSION >= 8000 } NNVM_REGISTER_OP(_contrib_quantized_fully_connected) diff --git a/src/operator/quantization/quantized_pooling.cu b/src/operator/quantization/quantized_pooling.cu index 78011b885c53..2bbac5fc1512 100644 --- a/src/operator/quantization/quantized_pooling.cu +++ b/src/operator/quantization/quantized_pooling.cu @@ -29,7 +29,7 @@ namespace mxnet { namespace op { -#if MXNET_USE_CUDNN == 1 && CUDNN_MAJOR >= 6 +#if MXNET_USE_CUDNN == 1 && CUDNN_MAJOR >= 6 && CUDA_VERSION >= 8000 template class QuantizedCuDNNPoolingOp { public: @@ -115,7 +115,7 @@ class QuantizedCuDNNPoolingOp { cudnnTensorDescriptor_t out_desc_; cudnnPoolingDescriptor_t pool_desc_; }; // class QuantizedCuDNNPoolingOp -#endif // MXNET_USE_CUDNN == 1 && CUDNN_MAJOR >= 6 +#endif // MXNET_USE_CUDNN == 1 && CUDNN_MAJOR >= 6 && CUDA_VERSION >= 8000 void QuantizedPoolingForwardGPU(const nnvm::NodeAttrs& attrs, const OpContext& ctx, @@ -125,7 +125,7 @@ void QuantizedPoolingForwardGPU(const nnvm::NodeAttrs& attrs, const PoolingParam& param = nnvm::get(attrs.parsed); CHECK_EQ(param.kernel.ndim(), 2U) << "QuantizedPoolingForward only supports 2D convolution for now"; -#if MXNET_USE_CUDNN == 1 && CUDNN_MAJOR >= 6 +#if MXNET_USE_CUDNN == 1 && CUDNN_MAJOR >= 6 && CUDA_VERSION >= 8000 #if DMLC_CXX11_THREAD_LOCAL static thread_local QuantizedCuDNNPoolingOp op; #else @@ -134,8 +134,9 @@ void QuantizedPoolingForwardGPU(const nnvm::NodeAttrs& attrs, op.Init(param, {inputs[0].shape_}, {outputs[0].shape_}); op.Forward(ctx.get_stream(), inputs, req, outputs); #else - LOG(FATAL) << "QuantizedPoolingForward only supports cudnnPoolingForward for now"; -#endif // MXNET_USE_CUDNN == 1 && CUDNN_MAJOR >= 6 + LOG(FATAL) << "QuantizedPoolingForward only supports cudnnPoolingForward " + "with CUDNN >= 6.0 and CUDA >= 8.0"; +#endif // MXNET_USE_CUDNN == 1 && CUDNN_MAJOR >= 6 && CUDA_VERSION >= 8000 } NNVM_REGISTER_OP(_contrib_quantized_pooling)