This commit is contained in:
ton
2023-09-14 17:30:14 +07:00
parent 9e701cd042
commit d85edf5a19
3 changed files with 197 additions and 122 deletions

View File

@@ -26,7 +26,7 @@ function (kfn::kfn_1)(input::AbstractArray)
kfn.lif_firingCounter .= 0
kfn.lif_refractoryCounter .= 0
kfn.lif_zt .= 0
kfn.lif_synapseReconnectDelay .= 0
kfn.lif_synapticActivityCounter .= 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_synapseReconnectDelay .= 0
kfn.alif_synapticActivityCounter .= 0
kfn.on_vt .= 0
kfn.on_epsilonRec .= 0
@@ -78,6 +78,7 @@ function (kfn::kfn_1)(input::AbstractArray)
kfn.lif_wRecChange,
kfn.lif_neuronInactivityCounter,
kfn.lif_synapseReconnectDelay,
kfn.lif_synapticActivityCounter,
kfn.timeStep,
)
end
@@ -105,12 +106,14 @@ function (kfn::kfn_1)(input::AbstractArray)
kfn.alif_wRecChange,
kfn.alif_neuronInactivityCounter,
kfn.alif_synapseReconnectDelay,
kfn.alif_synapticActivityCounter,
kfn.timeStep,
kfn.alif_epsilonRecA,
kfn.alif_a,
kfn.alif_avth,
kfn.alif_beta,
kfn.alif_rho,
kfn.timeStep,
)
end
end
@@ -176,6 +179,7 @@ function lifForward( zit::CuArray,
wRecChange::CuArray,
neuronInactivityCounter::CuArray,
synapseReconnectDelay::CuArray,
synapticActivityCounter::CuArray,
timeStep::CuArray,
)
@@ -197,8 +201,10 @@ function lifForward( zit::CuArray,
wRecChange,
neuronInactivityCounter,
synapseReconnectDelay,
GeneralUtils.linear_to_cartesian,
synapticActivityCounter,
timeStep,
GeneralUtils.linear_to_cartesian,
)
config = launch_configuration(kernel.fun)
@@ -232,8 +238,9 @@ function lifForward( zit::CuArray,
wRecChange,
neuronInactivityCounter,
synapseReconnectDelay,
GeneralUtils.linear_to_cartesian,
timeStep; threads, blocks)
synapticActivityCounter,
timeStep,
GeneralUtils.linear_to_cartesian; threads, blocks)
end
end
@@ -256,8 +263,9 @@ function lifForward( zit,
wRecChange,
neuronInactivityCounter,
synapseReconnectDelay,
linear_to_cartesian,
synapticActivityCounter,
timeStep,
linear_to_cartesian,
)
i = (blockIdx().x - 1) * blockDim().x + threadIdx().x # gpu threads index
@@ -302,8 +310,10 @@ function lifForward( zit,
# compute epsilonRec
epsilonRec[i1,i2,i3,i4] = (alpha[i1,i2,i3,i4] * epsilonRec[i1,i2,i3,i4]) +
(zit[i1,i2,i3,i4] * !iszero(wRec[i1,i2,i3,i4]))
# !iszero indicates synaptic subscription
(zit[i1,i2,i3,i4] * !iszero(wRec[i1,i2,i3,i4]))
# !iszero indicates synaptic subscription
synapticActivityCounter[i1,i2,i3,i4] = zit[i1,i2,i3,i4] * !iszero(wRec[i1,i2,i3,i4])
if !iszero(wRec[i1,i2,i3,i4]) # check if this is wRec subscription
synapseReconnectDelay[i1,i2,i3,i4] -= 1
@@ -312,6 +322,7 @@ function lifForward( zit,
synapseReconnectDelay[i1,i2,i3,i4] = sum(timeStep)
end
end
# voltage regulator
wRecChange[i1,i2,i3,i4] = -0.01*0.0001 * (vt[i1,i2,i3,i4] - vth[i1,i2,i3,i4]) *
zit[i1,i2,i3,i4]
@@ -339,12 +350,14 @@ function alifForward( zit::CuArray,
wRecChange::CuArray,
neuronInactivityCounter::CuArray,
synapseReconnectDelay::CuArray,
synapticActivityCounter::CuArray,
timeStep::CuArray,
epsilonRecA::CuArray,
a::CuArray,
avth::CuArray,
beta::CuArray,
rho::CuArray,
timeStep::CuArray,
)
kernel = @cuda launch=false alifForward( zit,
@@ -365,13 +378,15 @@ function alifForward( zit::CuArray,
wRecChange,
neuronInactivityCounter,
synapseReconnectDelay,
synapticActivityCounter,
timeStep,
epsilonRecA,
a,
avth,
beta,
rho,
GeneralUtils.linear_to_cartesian,
timeStep,
)
config = launch_configuration(kernel.fun)
@@ -404,13 +419,15 @@ function alifForward( zit::CuArray,
wRecChange,
neuronInactivityCounter,
synapseReconnectDelay,
synapticActivityCounter,
timeStep,
epsilonRecA,
a,
avth,
beta,
rho,
GeneralUtils.linear_to_cartesian,
timeStep; threads, blocks)
GeneralUtils.linear_to_cartesian; threads, blocks)
end
end
@@ -433,13 +450,15 @@ function alifForward( zit,
wRecChange,
neuronInactivityCounter,
synapseReconnectDelay,
synapticActivityCounter,
timeStep,
epsilonRecA,
a,
avth,
beta,
rho,
linear_to_cartesian,
timeStep,
)
i = (blockIdx().x - 1) * blockDim().x + threadIdx().x # gpu threads index
@@ -501,6 +520,8 @@ function alifForward( zit,
(phi[i1,i2,i3,i4] * epsilonRec[i1,i2,i3,i4])) +
(zit[i1,i2,i3,i4] * !iszero(wRec[i1,i2,i3,i4]))
synapticActivityCounter[i1,i2,i3,i4] = zit[i1,i2,i3,i4] * !iszero(wRec[i1,i2,i3,i4])
if !iszero(wRec[i1,i2,i3,i4]) # check if this is wRec subscription
synapseReconnectDelay[i1,i2,i3,i4] -= 1
if synapseReconnectDelay[i1,i2,i3,i4] == 0