aihwkit.simulator.presets.compounds module

Compound configurations presets for resistive processing units.

class aihwkit.simulator.presets.compounds.PCMPresetUnitCell(unit_cell_devices=<factory>, construction_seed=0, refresh_every=1, units_in_mbatch=True, refresh_upper_thres=0.75, refresh_lower_thres=0.25, refresh_forward=<factory>, refresh_update=<factory>, copy_inverted=False)[source]

Bases: OneSidedUnitCell

A unit cell that is comprised of two uni-directional PCM devices of opposite sign (see PCMPresetDevice).

Check for refresh is performed after each mini-batch update. See OneSidedUnitCell for details on the refresh implementation.

Parameters:
  • unit_cell_devices (List) –

  • construction_seed (int) –

  • refresh_every (int) –

  • units_in_mbatch (bool) –

  • refresh_upper_thres (float) –

  • refresh_lower_thres (float) –

  • refresh_forward (IOParameters) –

  • refresh_update (UpdateParameters) –

  • copy_inverted (bool) –

refresh_every: int = 1

How often a refresh is performed (in units of the number of vector updates).

Note

If a refresh is done, full reads of both positive and negative devices are performed. Additionally, if single devices deemed to be refreshed, an (open-loop) re-write is done (once per column). Thus, refresh might have considerable runtime impacts.

refresh_forward: IOParameters

Input-output parameters that define the read during a refresh event.

IOParameters that define the read (forward) of an refresh event. For instance the amount of noise or whether refresh is done using a ADC/DAC etc.

refresh_update: UpdateParameters

Update parameters that define the type of update used for each refresh event.

Update parameters UpdateParameters that define the type of update used for each refresh event.

unit_cell_devices: List

Devices that compose this unit cell.

units_in_mbatch: bool = True

If set, the refresh_every counter is given in m_batch which is the re-use factor. Smaller numbers are not possible.

Caution

For CUDA devices, refresh is always done in m_batch (ie the number of re-use per layer for a mini-batch). Smaller numbers will have no effect.