JuliaGPU/CUDA.jl

CUDNN convolution incorrect for small images

Open

#848 aberto em 19 de abr. de 2021

Ver no GitHub
 (4 comments) (0 reactions) (1 assignee)Julia (274 forks)batch import
good first issueneeds tests

Métricas do repositório

Stars
 (1.408 stars)
Métricas de merge de PR
 (Mesclagem média 5d 5h) (16 fundiu PRs em 30d)

Description

The CUDNN convolution is giving incorrect results for small images, e.g.

julia> f(k, x, padding) = CUDA.CUDNN.cudnnConvolutionForward(CuArray(Float32.(k)),
                                                             CuArray(Float32.(x)),
                                                             padding=padding)
f (generic function with 1 method)

julia> size(f(rand(7, 1, 1, 1), rand(5, 5, 1, 1), 5))
(9, 15, 1, 1)  # Correct

julia> size(f(rand(7, 1, 1, 1), rand(3, 5, 1, 1), 5))
(3, 15, 1, 1)  # Should have been (7, 15, 1, 1)

julia> size(f(rand(7, 1, 1, 1), rand(1, 5, 1, 1), 5))
ERROR: CUDNNError: CUDNN_STATUS_BAD_PARAM (code 3)  # Should have been (5, 15, 1, 1)

The cause of the problem can be located to

https://github.com/JuliaGPU/CUDA.jl/blob/445081cf78a250941b2ecdef1a3a2ecead3fec44/lib/cudnn/convolution.jl#L157-L162

where the min silently changes the requested padding.

Cc: @denizyuret

Guia do colaborador