Source code for memtorch.bh.nonideality.endurance_retention_models.conductance_drift

"""
Conductance drift model as described in:
I. Boybat et al., "Impact of conductance drift on multi-PCM synaptic architectures", 2018 Non-Volatile Memory Technology Symposium (NVMTS), 2018.
"""
import numpy as np
import torch


[docs]def model_conductance_drift(layer, x, initial_time=1e-12, drift_coefficient=0.1): """ Parameters ---------- layer : memtorch.mn A memrstive layer. x : float Retention time (s). Denoted using x for sake of consistency with other models. initial_time : float Initial time that corresponds with initial conductance values. drift_coefficient : float Drift coefficient. For PCM devices, drift_coefficient typically has a value of 0.1 for the amorphous phase. Returns ------- memtorch.mn The patched memristive layer. """ time = x if initial_time == 0.0: initial_time = 1e-12 assert ( time >= 0 and initial_time >= 0 and time > initial_time ), "time and/or initial_time are/is invalid." assert ( drift_coefficient >= 0 and drift_coefficient <= 1 ), "drift_coefficient must be >=0 and <= 1." for i in range(len(layer.crossbars)): initial_conductance = layer.crossbars[i].conductance_matrix initial_conductance = initial_conductance * ( (time / initial_time) ** (-drift_coefficient) ) layer.crossbars[i].conductance_matrix = initial_conductance return layer