| 504 | |
| 505 | template<typename T> |
| 506 | Array<T> conv2FilterGradient(const Array<T> &incoming_gradient, |
| 507 | const Array<T> &original_signal, |
| 508 | const Array<T> &original_filter, |
| 509 | const Array<T> &convolved_output, af::dim4 stride, |
| 510 | af::dim4 padding, af::dim4 dilation) { |
| 511 | #ifdef WITH_CUDNN |
| 512 | if (getCudnnPlugin().isLoaded()) { |
| 513 | checkTypeSupport<T>(); |
| 514 | return filter_gradient_cudnn<T>(incoming_gradient, original_signal, |
| 515 | original_filter, convolved_output, |
| 516 | stride, padding, dilation); |
| 517 | } |
| 518 | #endif |
| 519 | return filter_gradient_base<T>(incoming_gradient, original_signal, |
| 520 | original_filter, convolved_output, stride, |
| 521 | padding, dilation); |
| 522 | } |
| 523 | |
| 524 | #define INSTANTIATE(T) \ |
| 525 | template Array<T> conv2DataGradient<T>( \ |