@@ -273,8 +273,8 @@ public:
|
|||||||
protected:
|
protected:
|
||||||
cudnnFilterDescriptor_t filterDesc;
|
cudnnFilterDescriptor_t filterDesc;
|
||||||
cudnnConvolutionDescriptor_t convDesc;
|
cudnnConvolutionDescriptor_t convDesc;
|
||||||
cudnnConvolutionFwdAlgo_t algo;
|
cudnnConvolutionFwdAlgoPerf_t algo;
|
||||||
cudnnConvolutionBwdDataAlgo_t bwAlgo;
|
cudnnConvolutionBwdDataAlgoPerf_t bwAlgo;
|
||||||
cudnnTensorDescriptor_t biasTensorDesc;
|
cudnnTensorDescriptor_t biasTensorDesc;
|
||||||
|
|
||||||
void initCUDNN(bool back = false);
|
void initCUDNN(bool back = false);
|
||||||
|
|||||||
+13
-13
@@ -63,23 +63,23 @@ void Conv2d::initCUDNN(bool back) {
|
|||||||
workSpace = NULL;
|
workSpace = NULL;
|
||||||
ws_sizeInBytes = 0;
|
ws_sizeInBytes = 0;
|
||||||
if(back) {
|
if(back) {
|
||||||
checkCUDNN( cudnnGetConvolutionBackwardDataAlgorithm(net->cudnnHandle,
|
checkCUDNN( cudnnGetConvolutionBackwardDataAlgorithm_v7(net->cudnnHandle,
|
||||||
filterDesc, dstTensor, convDesc, srcTensor,
|
filterDesc, dstTensor, convDesc, srcTensor, 1, 0, &bwAlgo) );
|
||||||
CUDNN_CONVOLUTION_BWD_DATA_PREFER_FASTEST, 0, &bwAlgo) );
|
|
||||||
checkCUDNN(cudnnGetConvolutionBackwardDataWorkspaceSize(net->cudnnHandle,
|
checkCUDNN(cudnnGetConvolutionBackwardDataWorkspaceSize(net->cudnnHandle,
|
||||||
filterDesc, dstTensor, convDesc, srcTensor,
|
filterDesc, dstTensor, convDesc, srcTensor,
|
||||||
bwAlgo, &ws_sizeInBytes));
|
bwAlgo.algo, &ws_sizeInBytes));
|
||||||
|
|
||||||
|
|
||||||
// invert tensors
|
// invert tensors
|
||||||
srcTensorDesc = dstTensor;
|
srcTensorDesc = dstTensor;
|
||||||
dstTensorDesc = srcTensor;
|
dstTensorDesc = srcTensor;
|
||||||
} else {
|
} else {
|
||||||
checkCUDNN( cudnnGetConvolutionForwardAlgorithm(net->cudnnHandle,
|
checkCUDNN( cudnnGetConvolutionForwardAlgorithm_v7(net->cudnnHandle,
|
||||||
srcTensor, filterDesc, convDesc, dstTensor,
|
srcTensor, filterDesc, convDesc, dstTensor,
|
||||||
CUDNN_CONVOLUTION_FWD_PREFER_FASTEST, 0, &algo) );
|
1, 0, &algo) );
|
||||||
checkCUDNN(cudnnGetConvolutionForwardWorkspaceSize(net->cudnnHandle,
|
checkCUDNN(cudnnGetConvolutionForwardWorkspaceSize(net->cudnnHandle,
|
||||||
srcTensor, filterDesc, convDesc, dstTensor,
|
srcTensor, filterDesc, convDesc, dstTensor,
|
||||||
algo, &ws_sizeInBytes));
|
algo.algo, &ws_sizeInBytes));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -91,12 +91,12 @@ void Conv2d::inferCUDNN(dnnType* srcData, bool back) {
|
|||||||
checkCUDNN(cudnnConvolutionBackwardData(net->cudnnHandle,
|
checkCUDNN(cudnnConvolutionBackwardData(net->cudnnHandle,
|
||||||
&alpha, filterDesc, data_d,
|
&alpha, filterDesc, data_d,
|
||||||
srcTensorDesc, srcData,
|
srcTensorDesc, srcData,
|
||||||
convDesc, bwAlgo, workSpace, ws_sizeInBytes,
|
convDesc, bwAlgo.algo, workSpace, ws_sizeInBytes,
|
||||||
&beta, dstTensorDesc, dstData));
|
&beta, dstTensorDesc, dstData));
|
||||||
} else {
|
} else {
|
||||||
checkCUDNN(cudnnConvolutionForward(net->cudnnHandle,
|
checkCUDNN(cudnnConvolutionForward(net->cudnnHandle,
|
||||||
&alpha, srcTensorDesc, srcData, filterDesc,
|
&alpha, srcTensorDesc, srcData, filterDesc,
|
||||||
data_d, convDesc, algo, workSpace, ws_sizeInBytes,
|
data_d, convDesc, algo.algo, workSpace, ws_sizeInBytes,
|
||||||
&beta, dstTensorDesc, dstData));
|
&beta, dstTensorDesc, dstData));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user