Added
- Workload models.
- Add `EltwiseLayer`.
- Allow only concatenation of layers; summation of layers turns into an
additional `EltwiseLayer`.
- Add external layers to networks, which is external directly input data.
- Add various LSTMs.
- Add `data_loops` attribute with type `DataDimLoops` to each type of layer.
- Hardware models:
- Add DRAM region in `Resource`.
- Consider array bus width and its impact on data multicast latency.
- Consider DRAM access time due to bandwidth limit.
- Software models.
- Add choices for optimization goal: E(nergy), D(elay), or ED.
- Software engineering.
- Record search time.
- Add utility `IntRange` for integer ranges.
- Add `HashableDict` class.
Changed
- Hardware models.
- 2D memory type is changed to constant four node on the chip corners.
- `NodeRegion` adds `dist` attribute for inter-node distance.
- `NodeRegion` renames `DATA` enum to `DRAM`.
- Limit to single source/destination data regions in `Resource`.
- Software models.
- `Cost` uses static/idle unit cost for all nodes instead of one node.
- `Scheduling` breaks loop/part cost into op/access/noc/static cost.
- `Scheduling` breaks cost tie using time, using a compare key function of
`SchedulingResult`.
- Add external occupancy to `MapStrategy` and merge into `NestedLoopDesc`;
use it for partitioning occupancy.
- `FmapRange.beg_end()` returns an `IntRange` instance if with a single
attribute argument, or a list of `IntRange` otherwise.
- Move partitioning scheme sub-`FmapRange` method, which is used to get
partitioned fmap ranges, to `PartitionScheme`.
- Move partitioning scheme projection, which is used to generate ofmap
layout, to `PartitionScheme`.
- `DataLayout` refactored: use `PartitionScheme` to replace `FmapRangeMap`.
- `partition` module refactored: use new `DataLayout` class and new
`PartitionScheme` methods.
- `SchedulingResult` uses a combined `OrderedDict` to replace `dict_loop` and
`dict_part`.
- In partitioning schemes, each partitioning must fully utilize one dimension
before starting the other, except for fmap partitioning.
- Software engineering.
- Change `NNDataflowScheme` node-time product interface to explicitly be
static cost.
- Improve method names:
- Remove `DataDimLoops.data_cnt`.
- Change `NodeRegion.node_iter` to `NodeRegion.iter_node`.
- Change `Network` method names to distinguish layer and layer name.
Fixed
- Output dict `PartitionScheme` format fix.
- `idivc` with inf arguments.
- Integer division `//` vs. `/`.
- ITCN access calculation for unit pass in `MapStrategy`.
- `FmapRange` comparison.
- Unit nhops calculation for filter data uses DRAM region.
- Unit nhops calculation considers nodes with both non-empty ifmaps and ofmaps.
- Replication size when underutilizing PE arrays.