This commit is contained in:
ton
2023-09-14 10:28:30 +07:00
parent 2f55cdf7a7
commit 9e701cd042
3 changed files with 128 additions and 101 deletions

View File

@@ -18,7 +18,7 @@ function (kfn::kfn_1)(input::AbstractArray)
# what to do at the start of learning round
if view(kfn.learningStage, 1)[1] == 1
# reset learning params
kfn.zitCumulative .= 0
kfn.zitCumulative = kfn.zitCumulative[:,:,1,:]
kfn.lif_vt .= 0
kfn.lif_wRecChange .= 0
@@ -26,7 +26,7 @@ function (kfn::kfn_1)(input::AbstractArray)
kfn.lif_firingCounter .= 0
kfn.lif_refractoryCounter .= 0
kfn.lif_zt .= 0
kfn.lif_synapseReconnectDelayCounter .= 0
kfn.lif_synapseReconnectDelay .= 0
kfn.alif_vt .= 0
kfn.alif_a .= 0
@@ -36,7 +36,7 @@ function (kfn::kfn_1)(input::AbstractArray)
kfn.alif_firingCounter .= 0
kfn.alif_refractoryCounter .= 0
kfn.alif_zt .= 0
kfn.alif_synapseReconnectDelayCounter .= 0
kfn.alif_synapseReconnectDelay .= 0
kfn.on_vt .= 0
kfn.on_epsilonRec .= 0
@@ -77,7 +77,8 @@ function (kfn::kfn_1)(input::AbstractArray)
kfn.lif_exInType,
kfn.lif_wRecChange,
kfn.lif_neuronInactivityCounter,
kfn.lif_synapseReconnectDelayCounter,
kfn.lif_synapseReconnectDelay,
kfn.timeStep,
)
end
@async begin
@@ -103,12 +104,13 @@ function (kfn::kfn_1)(input::AbstractArray)
kfn.alif_exInType,
kfn.alif_wRecChange,
kfn.alif_neuronInactivityCounter,
kfn.alif_synapseReconnectDelayCounter,
kfn.alif_synapseReconnectDelay,
kfn.alif_epsilonRecA,
kfn.alif_a,
kfn.alif_avth,
kfn.alif_beta,
kfn.alif_rho,
kfn.timeStep,
)
end
end
@@ -123,7 +125,9 @@ function (kfn::kfn_1)(input::AbstractArray)
reshape(kfn.lif_zt, (size(input, 1), :, 1, size(input, 3))),
reshape(kfn.alif_zt, (size(input, 1), :, 1, size(input, 3))), dims=2)
kfn.zit .= reshape(_zit, (size(input, 1), :, size(input, 3)))
kfn.zitCumulative .+= kfn.zit
kfn.zitCumulative = sum(kfn.zitCumulative) == 0 ? kfn.zit : cat(kfn.zitCumulative, kfn.zit, dims=3)
# kfn.zitCumulative = cat(kfn.zitCumulative, kfn.zit, dims=3)
# kfn.zitCumulative .+= kfn.zit
# project 3D kfn zit into 4D on zit
i1, i2, i3, i4 = size(kfn.on_zit)
@@ -171,7 +175,8 @@ function lifForward( zit::CuArray,
exInType::CuArray,
wRecChange::CuArray,
neuronInactivityCounter::CuArray,
synapseReconnectDelayCounter::CuArray,
synapseReconnectDelay::CuArray,
timeStep::CuArray,
)
kernel = @cuda launch=false lifForward( zit,
@@ -191,8 +196,9 @@ function lifForward( zit::CuArray,
exInType,
wRecChange,
neuronInactivityCounter,
synapseReconnectDelayCounter,
synapseReconnectDelay,
GeneralUtils.linear_to_cartesian,
timeStep,
)
config = launch_configuration(kernel.fun)
@@ -225,8 +231,9 @@ function lifForward( zit::CuArray,
exInType,
wRecChange,
neuronInactivityCounter,
synapseReconnectDelayCounter,
GeneralUtils.linear_to_cartesian; threads, blocks)
synapseReconnectDelay,
GeneralUtils.linear_to_cartesian,
timeStep; threads, blocks)
end
end
@@ -248,8 +255,9 @@ function lifForward( zit,
exInType,
wRecChange,
neuronInactivityCounter,
synapseReconnectDelayCounter,
synapseReconnectDelay,
linear_to_cartesian,
timeStep,
)
i = (blockIdx().x - 1) * blockDim().x + threadIdx().x # gpu threads index
@@ -297,12 +305,11 @@ function lifForward( zit,
(zit[i1,i2,i3,i4] * !iszero(wRec[i1,i2,i3,i4]))
# !iszero indicates synaptic subscription
# count synaptic inactivity
if !iszero(wRec[i1,i2,i3,i4]) # check if this is wRec subscription
if !iszero(zit[i1,i2,i3,i4]) # synapse is active
synapseReconnectDelayCounter[i1,i2,i3,i4] += 1
else # synapse is inactive
synapseReconnectDelayCounter[i1,i2,i3,i4] += 0
synapseReconnectDelay[i1,i2,i3,i4] -= 1
if synapseReconnectDelay[i1,i2,i3,i4] == 0
# mark timestep
synapseReconnectDelay[i1,i2,i3,i4] = sum(timeStep)
end
end
# voltage regulator
@@ -331,12 +338,13 @@ function alifForward( zit::CuArray,
exInType::CuArray,
wRecChange::CuArray,
neuronInactivityCounter::CuArray,
synapseReconnectDelayCounter::CuArray,
synapseReconnectDelay::CuArray,
epsilonRecA::CuArray,
a::CuArray,
avth::CuArray,
beta::CuArray,
rho::CuArray,
timeStep::CuArray,
)
kernel = @cuda launch=false alifForward( zit,
@@ -356,13 +364,14 @@ function alifForward( zit::CuArray,
exInType,
wRecChange,
neuronInactivityCounter,
synapseReconnectDelayCounter,
synapseReconnectDelay,
epsilonRecA,
a,
avth,
beta,
rho,
GeneralUtils.linear_to_cartesian,
timeStep,
)
config = launch_configuration(kernel.fun)
@@ -394,13 +403,14 @@ function alifForward( zit::CuArray,
exInType,
wRecChange,
neuronInactivityCounter,
synapseReconnectDelayCounter,
synapseReconnectDelay,
epsilonRecA,
a,
avth,
beta,
rho,
GeneralUtils.linear_to_cartesian; threads, blocks)
GeneralUtils.linear_to_cartesian,
timeStep; threads, blocks)
end
end
@@ -422,13 +432,14 @@ function alifForward( zit,
exInType,
wRecChange,
neuronInactivityCounter,
synapseReconnectDelayCounter,
synapseReconnectDelay,
epsilonRecA,
a,
avth,
beta,
rho,
linear_to_cartesian,
timeStep,
)
i = (blockIdx().x - 1) * blockDim().x + threadIdx().x # gpu threads index
@@ -490,12 +501,10 @@ function alifForward( zit,
(phi[i1,i2,i3,i4] * epsilonRec[i1,i2,i3,i4])) +
(zit[i1,i2,i3,i4] * !iszero(wRec[i1,i2,i3,i4]))
# count synaptic inactivity
if !iszero(wRec[i1,i2,i3,i4]) # check if this is wRec subscription
if !iszero(zit[i1,i2,i3,i4]) # synapse is active
synapseReconnectDelayCounter[i1,i2,i3,i4] += 1
else # synapse is inactive
synapseReconnectDelayCounter[i1,i2,i3,i4] += 0
synapseReconnectDelay[i1,i2,i3,i4] -= 1
if synapseReconnectDelay[i1,i2,i3,i4] == 0
synapseReconnectDelay[i1,i2,i3,i4] = sum(timeStep)
end
end
# voltage regulator