JuliaSIMD / JuliaSIMD/LoopVectorization.jl

Suboptimal Choice of the Vecotrization Level for Image Convolution

Abierto
#514 1 comentario 0 reacciones 0 asignados Ver en GitHub
Lenguaje dominante
Julia
Estrellas
789
Forks
73
Métricas de merge de PR
Sin PR fusionados en 30 d

Descripción

The following image convolution code shows a case where the choice of the vecotrization level is not optimized:

```julia
using BenchmarkTools;
using LoopVectorization;

function _Conv2DValidA!( mO :: Matrix{T}, mI :: Matrix{T}, mK :: Matrix{T} ) where {T <: AbstractFloat}

numRowsI, numColsI = size(mI);
numRowsK, numColsK = size(mK);

for jj ∈ 1:(numColsI - numColsK + 1)
@turbo for ii in 1:(numRowsI - numRowsK + 1)
sumVal = zero(T);
for nn ∈ 1:numColsK, mm ∈ 1:numRowsK
@inbounds sumVal += mK[mm, nn] * mI[ii - mm + numRowsK, jj - nn + numColsK];
end
mO[ii, jj] = sumVal;
end
end

end

function _Conv2DValidB!( mO :: Matrix{T}, mI :: Matrix{T}, mK :: Matrix{T} ) where {T <: AbstractFloat}

numRowsI, numColsI = size(mI);
numRowsK, numColsK = size(mK);

@turbo for jj ∈ 1:(numColsI - numColsK + 1)
for ii in 1:(numRowsI - numRowsK + 1)
sumVal = zero(T);
for nn ∈ 1:numColsK, mm ∈ 1:numRowsK
@inbounds sumVal += mK[mm, nn] * mI[ii - mm + numRowsK, jj - nn + numColsK];
end
mO[ii, jj] = sumVal;
end
end

end

numRowsA = 1000;
numColsA = 1000;

numRowsK = 5;
numColsK = 5;

mA = rand(numRowsA, numColsA);
mK = rand(numRowsK, numColsK);
mO = zeros((numRowsA, numColsA) .- (numRowsK, numColsK) .+ 1);

@benchmark _Conv2DValidA!(mO, mA, mK) #

Guía de contribución

No hay ninguna guía de contribución indexada para este repositorio

Línea de trabajo

Comienza ejecutando el benchmark del issue #514 y comparando _Conv2DValidA! con _Conv2DValidB!, centrándote en las dos ubicaciones de @turbo en el reproductor de Julia proporcionado. Revisa cómo LoopVectorization gestiona los bucles anidados y los niveles de vectorización; se considera terminado cuando se haya explicado la diferencia de rendimiento informada y se haya mejorado o documentado el comportamiento relevante.

Escrito por el modelo de indexación a partir del texto del issue.

Evaluación

Stack tecnológico
julia
Área
performance
Tipo de issue
Error
Dificultad
4/5
Tiempo estimado
3-5 días
Estado de actividad
Estancado
Claridad
Bastante claro
Aptitud para principiantes
42/100

Recibe los nuevos issues en tu correo

Un resumen breve de issues de GitHub para principiantes.