Jetpack4.4 でAlexeyAB/darknetをビルド

#はじめに
５月にリリースされたJetpack4.4DPの正式リリースのJetpack4.4がリリースされました。バグがいろいろなおっているようですが、同時にCUDNN8.0が正式版になったことに伴いdarknetが動かなくなりました。
このままだと、いろいろ困るんですが、APTでアップデートしたら書き換わっちゃったのでとりあえず動くようにします。

#問題点
[Jetpack4.4でCUDNNが使えるOpenCVをビルド](https://qiita.com/sowd0726/items/c4ebb3c2322a5b3ee86e)と同様に
cudnnGetConvolutionForwardAlgorithm
が無くなったことによってエラーが発生します。
私のとこだと、SegmentationFaultになります。

#対応
[NVIDIAのFORUM](https://raw.githubusercontent.com/AastaNV/JEP/master/script/topics/0001-fix-for-cudnn_v8-limited-memory-to-default-darknet-s.patch)でパッチがでています。
が、オリジナルのDarknet用なのかどうなのかよくわかりませんが、AlexeyAB版とファイルが違います。
CHECK_CUDNNの実装とか全然確認しないでそのままあてただけです。
よくわかりませんが、強引にパッチを手であてることで動いたのでそのまんま。。。
なんかForumではパフォーマンスがあがらんとかいろいろつづいてますが、動かないと困るのでとりあえず。。

#成果物
```c++:src/convolutional_layer.c
--- org/convolutional_layer.c	2020-07-13 14:19:45.000000000 +0000
+++ src/convolutional_layer.c	2020-07-13 13:59:41.057153646 +0000
@@ -430,6 +430,70 @@ void cudnn_convolutional_setup(layer *l,
         //printf(" CUDNN-specified %zu ", workspace_size_specify);
     }
 
+
+
+    #if CUDNN_MAJOR >= 8
+    int returnedAlgoCount;
+    cudnnConvolutionFwdAlgoPerf_t       fw_results[2 * CUDNN_CONVOLUTION_FWD_ALGO_COUNT];
+    cudnnConvolutionBwdDataAlgoPerf_t   bd_results[2 * CUDNN_CONVOLUTION_BWD_DATA_ALGO_COUNT];
+    cudnnConvolutionBwdFilterAlgoPerf_t bf_results[2 * CUDNN_CONVOLUTION_BWD_FILTER_ALGO_COUNT];
+
+    cudnnFindConvolutionForwardAlgorithm(cudnn_handle(),
+            l->srcTensorDesc,
+            l->weightDesc,
+            l->convDesc,
+            l->dstTensorDesc,
+            CUDNN_CONVOLUTION_FWD_ALGO_COUNT,
+            &returnedAlgoCount,
+	    fw_results);
+    #if PRINT_CUDNN_ALGO > 0
+    for(int algoIndex = 0; algoIndex < returnedAlgoCount; ++algoIndex){
+        printf("^^^^ %s for Algo %d: %f time requiring %llu memory\n",
+               cudnnGetErrorString(fw_results[algoIndex].status),
+               fw_results[algoIndex].algo, fw_results[algoIndex].time,
+               (unsigned long long)fw_results[algoIndex].memory);
+    }
+    #endif
+    l->fw_algo = fw_results[0].algo;
+
+    cudnnFindConvolutionBackwardDataAlgorithm(cudnn_handle(),
+            l->weightDesc,
+            l->ddstTensorDesc,
+            l->convDesc,
+            l->dsrcTensorDesc,
+            CUDNN_CONVOLUTION_BWD_DATA_ALGO_COUNT,
+            &returnedAlgoCount,
+            bd_results);
+    #if PRINT_CUDNN_ALGO > 0
+    for(int algoIndex = 0; algoIndex < returnedAlgoCount; ++algoIndex){
+        printf("^^^^ %s for Algo %d: %f time requiring %llu memory\n",
+               cudnnGetErrorString(bd_results[algoIndex].status),
+               bd_results[algoIndex].algo, bd_results[algoIndex].time,
+               (unsigned long long)bd_results[algoIndex].memory);
+    }
+    #endif
+    l->bd_algo = bd_results[0].algo;
+
+    cudnnFindConvolutionBackwardFilterAlgorithm(cudnn_handle(),
+            l->srcTensorDesc,
+            l->ddstTensorDesc,
+            l->convDesc,
+            l->dweightDesc,
+            CUDNN_CONVOLUTION_BWD_FILTER_ALGO_COUNT,
+            &returnedAlgoCount,
+            bf_results);
+    #if PRINT_CUDNN_ALGO > 0
+    for(int algoIndex = 0; algoIndex < returnedAlgoCount; ++algoIndex){
+        printf("^^^^ %s for Algo %d: %f time requiring %llu memory\n",
+               cudnnGetErrorString(bf_results[algoIndex].status),
+               bf_results[algoIndex].algo, bf_results[algoIndex].time,
+               (unsigned long long)bf_results[algoIndex].memory);
+    }
+    #endif
+    l->bf_algo = bf_results[0].algo;
+
+    #else
+
     CHECK_CUDNN(cudnnGetConvolutionForwardAlgorithm(cudnn_handle(),
             l->srcTensorDesc,
             l->weightDesc,
@@ -438,6 +502,7 @@ void cudnn_convolutional_setup(layer *l,
             (cudnnConvolutionFwdPreference_t)forward_algo,
             workspace_size_specify,
             &l->fw_algo));
+#endif
 
     CHECK_CUDNN(cudnnGetConvolutionBackwardDataAlgorithm(cudnn_handle(),
         l->weightDesc,
```