chore: import upstream snapshot with attribution
Docker Image CI / build-ubuntu2004 (push) Has been cancelled
Docker Image CI / build-ubuntu2004 (push) Has been cancelled
This commit is contained in:
@@ -0,0 +1,168 @@
|
||||
/*
|
||||
* SPDX-FileCopyrightText: Copyright (c) 1993-2024 NVIDIA CORPORATION & AFFILIATES. All rights reserved.
|
||||
* SPDX-License-Identifier: Apache-2.0
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
|
||||
#ifndef TRT_PLUGIN_CUDNN_WRAPPER_H
|
||||
#define TRT_PLUGIN_CUDNN_WRAPPER_H
|
||||
|
||||
#include "NvInferPlugin.h"
|
||||
#include <functional>
|
||||
#include <string>
|
||||
|
||||
extern "C"
|
||||
{
|
||||
//! Forward declaration of cudnnTensorStruct to use in other interfaces.
|
||||
struct cudnnTensorStruct;
|
||||
}
|
||||
|
||||
namespace nvinfer1
|
||||
{
|
||||
namespace pluginInternal
|
||||
{
|
||||
/*
|
||||
* Copy of the CUDNN return codes
|
||||
*/
|
||||
enum CudnnStatus
|
||||
{
|
||||
CUDNN_STATUS_SUCCESS = 0,
|
||||
CUDNN_STATUS_NOT_INITIALIZED = 1,
|
||||
CUDNN_STATUS_ALLOC_FAILED = 2,
|
||||
CUDNN_STATUS_BAD_PARAM = 3,
|
||||
CUDNN_STATUS_INTERNAL_ERROR = 4,
|
||||
CUDNN_STATUS_INVALID_VALUE = 5,
|
||||
CUDNN_STATUS_ARCH_MISMATCH = 6,
|
||||
CUDNN_STATUS_MAPPING_ERROR = 7,
|
||||
CUDNN_STATUS_EXECUTION_FAILED = 8,
|
||||
CUDNN_STATUS_NOT_SUPPORTED = 9,
|
||||
CUDNN_STATUS_LICENSE_ERROR = 10,
|
||||
CUDNN_STATUS_RUNTIME_PREREQUISITE_MISSING = 11,
|
||||
CUDNN_STATUS_RUNTIME_IN_PROGRESS = 12,
|
||||
CUDNN_STATUS_RUNTIME_FP_OVERFLOW = 13,
|
||||
CUDNN_STATUS_VERSION_MISMATCH = 14,
|
||||
};
|
||||
|
||||
/*
|
||||
* Copy of the CUDNN cudnnBatchNormMode_t
|
||||
*/
|
||||
enum cudnnBatchNormMode
|
||||
{
|
||||
CUDNN_BATCHNORM_PER_ACTIVATION = 0,
|
||||
CUDNN_BATCHNORM_SPATIAL = 1,
|
||||
CUDNN_BATCHNORM_SPATIAL_PERSISTENT = 2,
|
||||
};
|
||||
|
||||
/*
|
||||
* Copy of the CUDNN cudnnTensorFormat_t
|
||||
*/
|
||||
enum cudnnTensorFormat
|
||||
{
|
||||
CUDNN_TENSOR_NCHW = 0,
|
||||
CUDNN_TENSOR_NHWC = 1,
|
||||
CUDNN_TENSOR_NCHW_VECT_C = 2,
|
||||
};
|
||||
|
||||
/*
|
||||
* Copy of CUDNN data type
|
||||
*/
|
||||
enum cudnnDataType
|
||||
{
|
||||
CUDNN_DATA_FLOAT = 0,
|
||||
CUDNN_DATA_DOUBLE = 1,
|
||||
CUDNN_DATA_HALF = 2,
|
||||
CUDNN_DATA_INT8 = 3,
|
||||
CUDNN_DATA_INT32 = 4,
|
||||
CUDNN_DATA_INT8x4 = 5,
|
||||
CUDNN_DATA_UINT8 = 6,
|
||||
CUDNN_DATA_UINT8x4 = 7,
|
||||
CUDNN_DATA_INT8x32 = 8,
|
||||
CUDNN_DATA_BFLOAT16 = 9,
|
||||
CUDNN_DATA_INT64 = 10,
|
||||
CUDNN_DATA_BOOLEAN = 11,
|
||||
CUDNN_DATA_FP8_E4M3 = 12,
|
||||
CUDNN_DATA_FP8_E5M2 = 13,
|
||||
CUDNN_DATA_FAST_FLOAT_FOR_FP8 = 14,
|
||||
};
|
||||
|
||||
using cudnnStatus_t = CudnnStatus;
|
||||
using cudnnBatchNormMode_t = cudnnBatchNormMode;
|
||||
using cudnnTensorFormat_t = cudnnTensorFormat;
|
||||
using cudnnDataType_t = cudnnDataType;
|
||||
|
||||
using cudnnHandle_t = struct cudnnContext*;
|
||||
using cudnnTensorDescriptor_t = struct cudnnTensorStruct*;
|
||||
|
||||
class CudnnWrapper
|
||||
{
|
||||
public:
|
||||
explicit CudnnWrapper(bool initHandle = false, char const* callerPluginName = nullptr);
|
||||
~CudnnWrapper();
|
||||
|
||||
cudnnContext* getCudnnHandle();
|
||||
bool isValid() const;
|
||||
|
||||
/*
|
||||
* Copy of the CUDNN APIs
|
||||
*/
|
||||
cudnnStatus_t cudnnCreate(cudnnContext** handle);
|
||||
cudnnStatus_t cudnnDestroy(cudnnContext* handle);
|
||||
cudnnStatus_t cudnnCreateTensorDescriptor(cudnnTensorDescriptor_t* tensorDesc);
|
||||
cudnnStatus_t cudnnDestroyTensorDescriptor(cudnnTensorDescriptor_t tensorDesc);
|
||||
cudnnStatus_t cudnnSetStream(cudnnHandle_t handle, cudaStream_t streamId);
|
||||
cudnnStatus_t cudnnBatchNormalizationForwardTraining(cudnnHandle_t handle, cudnnBatchNormMode_t mode,
|
||||
void const* alpha, void const* beta, cudnnTensorStruct const* xDesc, void const* x,
|
||||
cudnnTensorStruct const* yDesc, void* y, cudnnTensorStruct const* bnScaleBiasMeanVarDesc, void const* bnScale,
|
||||
void const* bnBias, double exponentialAverageFactor, void* resultRunningMean, void* resultRunningVariance,
|
||||
double epsilon, void* resultSaveMean, void* resultSaveInvVariance);
|
||||
cudnnStatus_t cudnnSetTensor4dDescriptor(cudnnTensorDescriptor_t tensorDesc, cudnnTensorFormat_t format,
|
||||
cudnnDataType_t dataType, int n, int c, int h, int w);
|
||||
cudnnStatus_t cudnnSetTensorNdDescriptor(cudnnTensorDescriptor_t tensorDesc, cudnnDataType_t dataType, int nbDims,
|
||||
int const dimA[], int const strideA[]);
|
||||
cudnnStatus_t cudnnSetTensorNdDescriptorEx(cudnnTensorDescriptor_t tensorDesc, cudnnTensorFormat_t format,
|
||||
cudnnDataType_t dataType, int nbDims, int const dimA[]);
|
||||
cudnnStatus_t cudnnDeriveBNTensorDescriptor(
|
||||
cudnnTensorDescriptor_t derivedBnDesc, cudnnTensorStruct const* xDesc, cudnnBatchNormMode_t mode);
|
||||
char const* cudnnGetErrorString(cudnnStatus_t status);
|
||||
|
||||
private:
|
||||
void* mLibrary{nullptr};
|
||||
cudnnContext* mHandle{nullptr};
|
||||
void* tryLoadingCudnn(char const*);
|
||||
|
||||
cudnnStatus_t (*_cudnnCreate)(cudnnContext**);
|
||||
cudnnStatus_t (*_cudnnDestroy)(cudnnContext*);
|
||||
cudnnStatus_t (*_cudnnCreateTensorDescriptor)(cudnnTensorDescriptor_t*);
|
||||
cudnnStatus_t (*_cudnnDestroyTensorDescriptor)(cudnnTensorDescriptor_t);
|
||||
cudnnStatus_t (*_cudnnSetStream)(cudnnHandle_t, cudaStream_t);
|
||||
cudnnStatus_t (*_cudnnBatchNormalizationForwardTraining)(cudnnHandle_t, cudnnBatchNormMode_t, void const*,
|
||||
void const*, cudnnTensorStruct const*, void const*, cudnnTensorStruct const*, void*, cudnnTensorStruct const*,
|
||||
void const*, void const*, double, void*, void*, double, void*, void*);
|
||||
cudnnStatus_t (*_cudnnSetTensor4dDescriptor)(
|
||||
cudnnTensorDescriptor_t, cudnnTensorFormat_t, cudnnDataType_t, int, int, int, int);
|
||||
cudnnStatus_t (*_cudnnSetTensorNdDescriptor)(cudnnTensorDescriptor_t tensorDesc, cudnnDataType_t dataType,
|
||||
int nbDims, int const dimA[], int const strideA[]);
|
||||
cudnnStatus_t (*_cudnnSetTensorNdDescriptorEx)(cudnnTensorDescriptor_t tensorDesc, cudnnTensorFormat_t format,
|
||||
cudnnDataType_t dataType, int nbDims, int const dimA[]);
|
||||
cudnnStatus_t (*_cudnnDeriveBNTensorDescriptor)(
|
||||
cudnnTensorDescriptor_t, cudnnTensorStruct const*, cudnnBatchNormMode_t);
|
||||
char const* (*_cudnnGetErrorString)(cudnnStatus_t status);
|
||||
};
|
||||
|
||||
CudnnWrapper& getCudnnWrapper(char const* callerPluginName);
|
||||
|
||||
} // namespace pluginInternal
|
||||
} // namespace nvinfer1
|
||||
|
||||
#endif // TRT_PLUGIN_CUDNN_WRAPPER_H
|
||||
Reference in New Issue
Block a user