MCPcopy Create free account
hub / github.com/arrayfire/arrayfire / getBackwardFilterAlgorithm

Function getBackwardFilterAlgorithm

src/backend/cuda/convolveNN.cpp:411–450  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

409#ifdef WITH_CUDNN
410
411pair<cudnnConvolutionBwdFilterAlgo_t, size_t> getBackwardFilterAlgorithm(
412 cudnnHandle_t cudnn, cudnnTensorDescriptor_t x_descriptor,
413 cudnnTensorDescriptor_t dy_descriptor,
414 cudnnConvolutionDescriptor_t convolution_descriptor,
415 cudnnFilterDescriptor_t dw_descriptor) {
416 // determine algorithm to use
417 cudnnConvolutionBwdFilterAlgo_t bwd_filt_convolution_algorithm;
418 // figure out scratch space memory requirements
419 size_t workspace_bytes = 0;
420
421 auto version = getCudnnPlugin().getVersion();
422 if (version.major() >= 8) {
423 int maxAlgoCount = 0;
424 CUDNN_CHECK(cuda::cudnnGetConvolutionBackwardFilterAlgorithmMaxCount(
425 cudnn, &maxAlgoCount));
426
427 vector<cudnnConvolutionBwdFilterAlgoPerf_t> perfResults(maxAlgoCount);
428 int returnAlgoCount = 0;
429 CUDNN_CHECK(cuda::cudnnFindConvolutionBackwardFilterAlgorithm(
430 cudnn, x_descriptor, dy_descriptor, convolution_descriptor,
431 dw_descriptor, maxAlgoCount, &returnAlgoCount, perfResults.data()));
432
433 for (int i = 0; i < returnAlgoCount; ++i) {
434 if (perfResults[i].status == CUDNN_STATUS_SUCCESS) {
435 bwd_filt_convolution_algorithm = perfResults[i].algo;
436 workspace_bytes = perfResults[i].memory;
437 break;
438 }
439 }
440 } else {
441 CUDNN_CHECK(cuda::cudnnGetConvolutionBackwardFilterAlgorithm(
442 cudnn, x_descriptor, dy_descriptor, convolution_descriptor,
443 dw_descriptor, CUDNN_CONVOLUTION_BWD_FILTER_PREFER_FASTEST, 0,
444 &bwd_filt_convolution_algorithm));
445 CUDNN_CHECK(cuda::cudnnGetConvolutionBackwardFilterWorkspaceSize(
446 cudnn, x_descriptor, dy_descriptor, convolution_descriptor,
447 dw_descriptor, bwd_filt_convolution_algorithm, &workspace_bytes));
448 }
449 return {bwd_filt_convolution_algorithm, workspace_bytes};
450}
451
452template<typename T>
453Array<T> filter_gradient_cudnn(const Array<T> &incoming_gradient,

Callers 1

filter_gradient_cudnnFunction · 0.85

Tested by

no test coverage detected