├── .arcconfig
├── .arclint
├── .clang-format
├── .gitignore
├── .style.yapf
├── CMakeLists.txt
├── License.txt
├── README.md
├── cbt.json
├── exported_symbols_linux.lds
├── exported_symbols_osx.lds
├── poprithms
├── CMakeLists.txt
├── cmake
│ └── EnableCompilerWarnings.cmake
├── notes
│ ├── autodiff
│ │ └── Autodiff.md
│ ├── common
│ │ └── compute
│ │ │ └── diagrams
│ │ │ ├── all_reduce_and_redundant_compute-Page-1.drawio.png
│ │ │ ├── all_reduce_and_redundant_compute-Page-2.drawio.png
│ │ │ └── all_reduce_and_redundant_compute.drawio
│ ├── memory
│ │ ├── alias
│ │ │ ├── Alias.md
│ │ │ └── diagrams
│ │ │ │ ├── Untitled.drawio
│ │ │ │ ├── complex0.drawio
│ │ │ │ ├── complex0.png
│ │ │ │ ├── numpystrides0.drawio
│ │ │ │ ├── numpystrides0.png
│ │ │ │ ├── numpystrides1.drawio
│ │ │ │ ├── numpystrides1.png
│ │ │ │ ├── numpystrides2.drawio
│ │ │ │ ├── numpystrides2.png
│ │ │ │ ├── sett0.drawio
│ │ │ │ ├── sett0.png
│ │ │ │ ├── sett1.drawio
│ │ │ │ ├── sett1.png
│ │ │ │ ├── sett2.drawio
│ │ │ │ ├── sett2.drawio.png
│ │ │ │ ├── sett2.png
│ │ │ │ ├── sett3.drawio
│ │ │ │ ├── sett3.png
│ │ │ │ ├── sett4.drawio
│ │ │ │ ├── sett4.png
│ │ │ │ ├── sett5.drawio
│ │ │ │ ├── sett5.png
│ │ │ │ ├── sett6.drawio
│ │ │ │ ├── sett6.png
│ │ │ │ ├── stripes0.drawio
│ │ │ │ └── stripes0.png
│ │ ├── chain
│ │ │ └── Chain.md
│ │ └── unwind
│ │ │ ├── Unwinding.md
│ │ │ └── diagrams
│ │ │ ├── Readme.md
│ │ │ ├── broadcastadd0.drawio
│ │ │ ├── broadcastadd0.png
│ │ │ ├── broadcastadd1.drawio
│ │ │ ├── broadcastadd1.png
│ │ │ ├── broadcastadd2.drawio
│ │ │ ├── broadcastadd2.png
│ │ │ ├── call0.drawio
│ │ │ ├── call0.png
│ │ │ ├── call1.drawio
│ │ │ ├── call1.png
│ │ │ ├── call2.drawio
│ │ │ ├── call2.png
│ │ │ ├── fixedpoint0.drawio
│ │ │ ├── fixedpoint0.png
│ │ │ ├── fixedpoint1.drawio
│ │ │ ├── fixedpoint1.png
│ │ │ ├── matmul0.drawio
│ │ │ ├── matmul0.png
│ │ │ ├── matmul1.drawio
│ │ │ ├── matmul1.png
│ │ │ ├── objectivefunction0.drawio
│ │ │ ├── objectivefunction0.png
│ │ │ ├── playground.drawio
│ │ │ ├── unbroadcastadd0.drawio
│ │ │ ├── unbroadcastadd0.png
│ │ │ ├── unbroadcastadd1.drawio
│ │ │ ├── unbroadcastadd1.png
│ │ │ ├── unwinding0
│ │ │ ├── unwinding0.drawio
│ │ │ ├── unwinding0.png
│ │ │ ├── unwinding1.drawio
│ │ │ ├── unwinding1.png
│ │ │ ├── unwinding2.drawio
│ │ │ ├── unwinding2.png
│ │ │ ├── unwinding3.drawio
│ │ │ ├── unwinding3.png
│ │ │ ├── unwinding4.drawio
│ │ │ ├── unwinding4.png
│ │ │ ├── unwinding5.drawio
│ │ │ ├── valuedpair0.drawio
│ │ │ └── valuedpair0.png
│ ├── release_notes
│ │ ├── for_sdk_2p3.txt
│ │ └── for_sdk_2p5.txt
│ └── schedule
│ │ └── shift
│ │ ├── Shift.md
│ │ ├── adversary
│ │ ├── animation.gif
│ │ ├── dag.png
│ │ └── demo.md
│ │ ├── bifurcating
│ │ ├── animation.gif
│ │ ├── dag.png
│ │ └── demo.md
│ │ ├── grid
│ │ ├── animation.gif
│ │ ├── dag.png
│ │ └── demo.md
│ │ ├── ladderclimbing.md
│ │ ├── optimizations.md
│ │ ├── recompute
│ │ ├── animation.gif
│ │ ├── dag.png
│ │ └── demo.md
│ │ ├── shift_util.py
│ │ ├── tree
│ │ ├── animation.gif
│ │ ├── dag.png
│ │ └── demo.md
│ │ └── visualization.py
├── poprithms
│ ├── CMakeLists.txt
│ ├── include
│ │ └── poprithms
│ │ │ ├── autodiff
│ │ │ ├── automatic
│ │ │ │ ├── autogradfunction.hpp
│ │ │ │ ├── call.hpp
│ │ │ │ ├── differentiator.hpp
│ │ │ │ ├── gradinfos.hpp
│ │ │ │ ├── gradopin.hpp
│ │ │ │ ├── gradops.hpp
│ │ │ │ ├── iautomaticmutator.hpp
│ │ │ │ ├── iautomaticquerier.hpp
│ │ │ │ ├── repeat.hpp
│ │ │ │ ├── requiredids.hpp
│ │ │ │ └── switch.hpp
│ │ │ ├── core
│ │ │ │ ├── autodiff.hpp
│ │ │ │ ├── gradinfo.hpp
│ │ │ │ ├── graphmutator.hpp
│ │ │ │ ├── summary.hpp
│ │ │ │ └── togradgraph.hpp
│ │ │ ├── guide
│ │ │ │ ├── graphinfo.hpp
│ │ │ │ ├── guide.hpp
│ │ │ │ ├── objective.hpp
│ │ │ │ └── traversals.hpp
│ │ │ ├── ids
│ │ │ │ └── ids.hpp
│ │ │ └── testutil
│ │ │ │ ├── finitedifference.hpp
│ │ │ │ ├── testgraphinfo.hpp
│ │ │ │ ├── testgraphmutator.hpp
│ │ │ │ └── testop.hpp
│ │ │ ├── coloring
│ │ │ └── ipropagator.hpp
│ │ │ ├── common
│ │ │ ├── compute
│ │ │ │ ├── autodiff
│ │ │ │ │ ├── autodiffer.hpp
│ │ │ │ │ ├── automaticmutator.hpp
│ │ │ │ │ ├── automaticquerier.hpp
│ │ │ │ │ ├── coregraphmutator.hpp
│ │ │ │ │ └── guidegraphinfo.hpp
│ │ │ │ ├── callstackquerier.hpp
│ │ │ │ ├── copyoptions.hpp
│ │ │ │ ├── device.hpp
│ │ │ │ ├── devicetype.hpp
│ │ │ │ ├── gradopinids.hpp
│ │ │ │ ├── gradopins.hpp
│ │ │ │ ├── graph.hpp
│ │ │ │ ├── host.hpp
│ │ │ │ ├── hosttensor.hpp
│ │ │ │ ├── iexecutable.hpp
│ │ │ │ ├── ihostrunner.hpp
│ │ │ │ ├── initialvalues.hpp
│ │ │ │ ├── ipu.hpp
│ │ │ │ ├── matmuloptions.hpp
│ │ │ │ ├── memoryaliasmapper.hpp
│ │ │ │ ├── op.hpp
│ │ │ │ ├── ops
│ │ │ │ │ ├── binaryelementwise.hpp
│ │ │ │ │ ├── dynamic.hpp
│ │ │ │ │ ├── encode.hpp
│ │ │ │ │ ├── init.hpp
│ │ │ │ │ ├── interdevicecopy.hpp
│ │ │ │ │ ├── matmul.hpp
│ │ │ │ │ ├── nop.hpp
│ │ │ │ │ ├── reduce.hpp
│ │ │ │ │ ├── reffrom.hpp
│ │ │ │ │ ├── unaryelementwise.hpp
│ │ │ │ │ ├── viewchange.hpp
│ │ │ │ │ ├── withautodiff.hpp
│ │ │ │ │ ├── withcallees.hpp
│ │ │ │ │ └── withoutcallees.hpp
│ │ │ │ ├── opverifier.hpp
│ │ │ │ ├── pipeline.hpp
│ │ │ │ ├── prune
│ │ │ │ │ └── pruner.hpp
│ │ │ │ ├── remote.hpp
│ │ │ │ ├── remoteoptions.hpp
│ │ │ │ ├── replication.hpp
│ │ │ │ ├── scheduler.hpp
│ │ │ │ ├── simexecutable.hpp
│ │ │ │ ├── simtensormap.hpp
│ │ │ │ ├── slickgraph.hpp
│ │ │ │ ├── subgraph.hpp
│ │ │ │ ├── tensor.hpp
│ │ │ │ └── testutil
│ │ │ │ │ ├── finitedifference.hpp
│ │ │ │ │ ├── misctraintester.hpp
│ │ │ │ │ ├── polyexecutabletester.hpp
│ │ │ │ │ └── repeattester.hpp
│ │ │ ├── multiout
│ │ │ │ ├── consumptionid.hpp
│ │ │ │ ├── fwdedgemap.hpp
│ │ │ │ ├── graph.hpp
│ │ │ │ ├── ioindices.hpp
│ │ │ │ ├── logging.hpp
│ │ │ │ ├── op.hpp
│ │ │ │ ├── opid.hpp
│ │ │ │ ├── optionaltensorid.hpp
│ │ │ │ ├── optraversal.hpp
│ │ │ │ ├── removalevent.hpp
│ │ │ │ ├── skiptraversal.hpp
│ │ │ │ ├── tensorid.hpp
│ │ │ │ ├── tensormap.hpp
│ │ │ │ ├── toptionaltensor.hpp
│ │ │ │ ├── traversal.hpp
│ │ │ │ └── util.hpp
│ │ │ └── schedulable
│ │ │ │ ├── additionalfwdedges.hpp
│ │ │ │ ├── graph.hpp
│ │ │ │ ├── op.hpp
│ │ │ │ └── subgraphid.hpp
│ │ │ ├── compute
│ │ │ └── host
│ │ │ │ ├── regionutil.hpp
│ │ │ │ ├── tensor.hpp
│ │ │ │ ├── tensormapper.hpp
│ │ │ │ ├── usings.hpp
│ │ │ │ └── viewchange.hpp
│ │ │ ├── error
│ │ │ └── error.hpp
│ │ │ ├── logging
│ │ │ ├── logging.hpp
│ │ │ └── timepartitionlogger.hpp
│ │ │ ├── memory
│ │ │ ├── alias
│ │ │ │ ├── graph.hpp
│ │ │ │ ├── jitgrower.hpp
│ │ │ │ ├── logging.hpp
│ │ │ │ ├── mapper.hpp
│ │ │ │ ├── node.hpp
│ │ │ │ ├── nodes.hpp
│ │ │ │ ├── origins.hpp
│ │ │ │ ├── tensor.hpp
│ │ │ │ └── usings.hpp
│ │ │ ├── chain
│ │ │ │ ├── chain.hpp
│ │ │ │ ├── logging.hpp
│ │ │ │ ├── settutil.hpp
│ │ │ │ └── type.hpp
│ │ │ ├── inplace
│ │ │ │ ├── allowmultigatealias.hpp
│ │ │ │ ├── checkparallelwriteable.hpp
│ │ │ │ ├── color.hpp
│ │ │ │ ├── constantpadding.hpp
│ │ │ │ ├── constraint.hpp
│ │ │ │ ├── crosslink.hpp
│ │ │ │ ├── graph.hpp
│ │ │ │ ├── logging.hpp
│ │ │ │ ├── padding.hpp
│ │ │ │ ├── proposal.hpp
│ │ │ │ ├── result.hpp
│ │ │ │ ├── tensor.hpp
│ │ │ │ └── tensormap.hpp
│ │ │ ├── nest
│ │ │ │ ├── logging.hpp
│ │ │ │ ├── optionalset.hpp
│ │ │ │ ├── region.hpp
│ │ │ │ ├── sett.hpp
│ │ │ │ └── stripe.hpp
│ │ │ └── unwind
│ │ │ │ ├── dynamicattractions.hpp
│ │ │ │ ├── graph.hpp
│ │ │ │ ├── hosttensorhelper.hpp
│ │ │ │ ├── logging.hpp
│ │ │ │ ├── lower.hpp
│ │ │ │ ├── matmulattractions.hpp
│ │ │ │ ├── path.hpp
│ │ │ │ ├── scheduledsolution.hpp
│ │ │ │ ├── solution.hpp
│ │ │ │ ├── sumlike.hpp
│ │ │ │ └── valuedtensorid.hpp
│ │ │ ├── ndarray
│ │ │ ├── accessors.hpp
│ │ │ ├── broadcastsetter.hpp
│ │ │ ├── deviceid.hpp
│ │ │ ├── dtype.hpp
│ │ │ ├── groupedmatmulpack.hpp
│ │ │ ├── shape.hpp
│ │ │ ├── strideandoffset.hpp
│ │ │ ├── tensorinfo.hpp
│ │ │ └── unfold.hpp
│ │ │ ├── outline
│ │ │ └── linear
│ │ │ │ ├── graph.hpp
│ │ │ │ ├── linearusings.hpp
│ │ │ │ ├── logging.hpp
│ │ │ │ ├── op.hpp
│ │ │ │ └── tensor.hpp
│ │ │ ├── program
│ │ │ ├── callstack
│ │ │ │ ├── calleeindex.hpp
│ │ │ │ ├── calleetensorid.hpp
│ │ │ │ ├── callstack.hpp
│ │ │ │ ├── carriedtensorid.hpp
│ │ │ │ ├── copyin.hpp
│ │ │ │ ├── copymap.hpp
│ │ │ │ ├── copyout.hpp
│ │ │ │ ├── querier.hpp
│ │ │ │ ├── stackedio.hpp
│ │ │ │ ├── stacktensorid.hpp
│ │ │ │ └── stackutil.hpp
│ │ │ ├── distributed
│ │ │ │ ├── codelocation.hpp
│ │ │ │ ├── helper.hpp
│ │ │ │ └── program.hpp
│ │ │ ├── pipeline
│ │ │ │ ├── guide.hpp
│ │ │ │ ├── imutator.hpp
│ │ │ │ ├── iquerier.hpp
│ │ │ │ ├── objective.hpp
│ │ │ │ └── pipeline.hpp
│ │ │ └── prune
│ │ │ │ └── prune.hpp
│ │ │ ├── schedule
│ │ │ ├── connectedcomponents
│ │ │ │ └── connectedcomponents.hpp
│ │ │ ├── dfs
│ │ │ │ └── dfs.hpp
│ │ │ ├── scc
│ │ │ │ └── scc.hpp
│ │ │ ├── shift
│ │ │ │ ├── alloc.hpp
│ │ │ │ ├── allocweight.hpp
│ │ │ │ ├── filteredschedule.hpp
│ │ │ │ ├── fromcache.hpp
│ │ │ │ ├── graph.hpp
│ │ │ │ ├── ischedulecache.hpp
│ │ │ │ ├── kahndecider.hpp
│ │ │ │ ├── logging.hpp
│ │ │ │ ├── op.hpp
│ │ │ │ ├── opalloc.hpp
│ │ │ │ ├── rotationalgo.hpp
│ │ │ │ ├── rotationtermination.hpp
│ │ │ │ ├── schedulecache.hpp
│ │ │ │ ├── schedulechange.hpp
│ │ │ │ ├── scheduledgraph.hpp
│ │ │ │ ├── settings.hpp
│ │ │ │ ├── shiftandcost.hpp
│ │ │ │ ├── shiftusings.hpp
│ │ │ │ ├── summarywriter.hpp
│ │ │ │ ├── trackentry.hpp
│ │ │ │ └── transitiveclosureoptimizations.hpp
│ │ │ ├── supercon
│ │ │ │ ├── graph.hpp
│ │ │ │ └── logging.hpp
│ │ │ ├── transitiveclosure
│ │ │ │ ├── logging.hpp
│ │ │ │ ├── partitionedtransitiveclosure.hpp
│ │ │ │ └── transitiveclosure.hpp
│ │ │ └── vanilla
│ │ │ │ ├── pathcount.hpp
│ │ │ │ ├── types.hpp
│ │ │ │ ├── vanilla.hpp
│ │ │ │ └── vanillamap.hpp
│ │ │ └── util
│ │ │ ├── circularcounter.hpp
│ │ │ ├── contiguoussubset.hpp
│ │ │ ├── copybyclone.hpp
│ │ │ ├── copybyclone_impl.hpp
│ │ │ ├── hashcombine.hpp
│ │ │ ├── interval.hpp
│ │ │ ├── map.hpp
│ │ │ ├── permutation.hpp
│ │ │ ├── printiter.hpp
│ │ │ ├── stridedpartition.hpp
│ │ │ ├── stringutil.hpp
│ │ │ ├── typedinteger.hpp
│ │ │ ├── typedvector.hpp
│ │ │ ├── unisort.hpp
│ │ │ ├── valuedtuple.hpp
│ │ │ └── where.hpp
│ ├── poprithms-config.cmake
│ └── src
│ │ └── poprithms
│ │ ├── autodiff
│ │ ├── autodiff
│ │ │ ├── error.cpp
│ │ │ └── error.hpp
│ │ ├── automatic
│ │ │ ├── autogradfunction.cpp
│ │ │ ├── call.cpp
│ │ │ ├── differentiator.cpp
│ │ │ ├── gradinfos.cpp
│ │ │ ├── iautomatic.cpp
│ │ │ ├── repeat.cpp
│ │ │ └── switch.cpp
│ │ ├── core
│ │ │ ├── autodiff.cpp
│ │ │ ├── gradinfo.cpp
│ │ │ └── summary.cpp
│ │ ├── guide
│ │ │ ├── graphinfo.cpp
│ │ │ ├── guide.cpp
│ │ │ ├── objective.cpp
│ │ │ └── traversals.cpp
│ │ └── testutil
│ │ │ ├── finitedifference.cpp
│ │ │ ├── testgraphinfo.cpp
│ │ │ ├── testgraphmutator.cpp
│ │ │ └── testop.cpp
│ │ ├── coloring
│ │ ├── error.cpp
│ │ └── error.hpp
│ │ ├── common
│ │ ├── CMakeLists.txt
│ │ ├── compute
│ │ │ ├── autodiff
│ │ │ │ ├── coregraphmutator.cpp
│ │ │ │ └── guidegraphinfo.cpp
│ │ │ ├── callstackquerier.cpp
│ │ │ ├── device.cpp
│ │ │ ├── devicetype.cpp
│ │ │ ├── error.cpp
│ │ │ ├── error.hpp
│ │ │ ├── graph.cpp
│ │ │ ├── iexecutable.cpp
│ │ │ ├── initialvalues.cpp
│ │ │ ├── memoryaliasmapper.cpp
│ │ │ ├── op.cpp
│ │ │ ├── ops
│ │ │ │ ├── binaryelementwise.cpp
│ │ │ │ ├── dynamic.cpp
│ │ │ │ ├── encode.cpp
│ │ │ │ ├── init.cpp
│ │ │ │ ├── interdevicecopy.cpp
│ │ │ │ ├── matmul.cpp
│ │ │ │ ├── ops.cpp
│ │ │ │ ├── reduce.cpp
│ │ │ │ ├── reffrom.cpp
│ │ │ │ ├── unaryelementwise.cpp
│ │ │ │ ├── viewchange.cpp
│ │ │ │ ├── withcallees.cpp
│ │ │ │ └── withoutcallees.cpp
│ │ │ ├── opverifier.cpp
│ │ │ ├── pipeline
│ │ │ │ └── pipeline.cpp
│ │ │ ├── prune
│ │ │ │ ├── prune.cpp
│ │ │ │ └── prunemutator.hpp
│ │ │ ├── scheduler.cpp
│ │ │ ├── simexecutable.cpp
│ │ │ ├── simtensormap.cpp
│ │ │ ├── slickgraph.cpp
│ │ │ ├── subgraph.cpp
│ │ │ ├── tensor.cpp
│ │ │ └── testutil
│ │ │ │ ├── misctraintester.cpp
│ │ │ │ └── repeattester.cpp
│ │ ├── multiout
│ │ │ ├── consumptionid.cpp
│ │ │ ├── error.cpp
│ │ │ ├── error.hpp
│ │ │ ├── fwdedgemap.cpp
│ │ │ ├── graph.cpp
│ │ │ ├── logging.cpp
│ │ │ ├── op.cpp
│ │ │ ├── opid.cpp
│ │ │ ├── optionaltensorid.cpp
│ │ │ ├── optraversal.cpp
│ │ │ ├── removalevent.cpp
│ │ │ └── tensorid.cpp
│ │ └── schedulable
│ │ │ ├── bidiredgemap.cpp
│ │ │ ├── bidiredgemap.hpp
│ │ │ ├── error.cpp
│ │ │ ├── error.hpp
│ │ │ ├── graph.cpp
│ │ │ ├── op.cpp
│ │ │ └── subgraphid.cpp
│ │ ├── compute
│ │ └── host
│ │ │ ├── basedata.cpp
│ │ │ ├── error.cpp
│ │ │ ├── error.hpp
│ │ │ ├── gridpointhelper.cpp
│ │ │ ├── ieeehalf.cpp
│ │ │ ├── include
│ │ │ ├── allocdata.hpp
│ │ │ ├── basedata.hpp
│ │ │ ├── baseoperators.hpp
│ │ │ ├── externdecl.hpp
│ │ │ ├── gridpointhelper.hpp
│ │ │ ├── ieeehalf.hpp
│ │ │ ├── numpyformatter.hpp
│ │ │ ├── origindata.hpp
│ │ │ ├── pointerdata.hpp
│ │ │ ├── typedconcat.hpp
│ │ │ ├── typeddata.hpp
│ │ │ ├── typeswitch.hpp
│ │ │ └── viewdata.hpp
│ │ │ ├── numpyformatter.cpp
│ │ │ ├── origindata.cpp
│ │ │ ├── regionutil.cpp
│ │ │ ├── serializer.cpp
│ │ │ ├── serializer.hpp
│ │ │ ├── tensor.cpp
│ │ │ ├── tensormapper.cpp
│ │ │ ├── types
│ │ │ ├── bool.cpp
│ │ │ ├── float16.cpp
│ │ │ ├── float32float64.cpp
│ │ │ ├── int16uint16.cpp
│ │ │ ├── int32uint32.cpp
│ │ │ ├── int64uint64.cpp
│ │ │ └── int8uint8.cpp
│ │ │ └── viewchange.cpp
│ │ ├── error
│ │ └── error.cpp
│ │ ├── logging
│ │ ├── error.cpp
│ │ ├── error.hpp
│ │ ├── logging.cpp
│ │ └── timepartitionlogger.cpp
│ │ ├── memory
│ │ ├── alias
│ │ │ ├── error.cpp
│ │ │ ├── error.hpp
│ │ │ ├── graph.cpp
│ │ │ ├── logging.cpp
│ │ │ ├── node.cpp
│ │ │ ├── nodes.cpp
│ │ │ ├── origins.cpp
│ │ │ └── tensor.cpp
│ │ ├── chain
│ │ │ ├── chain.cpp
│ │ │ ├── disjointregionsmapper.hpp
│ │ │ ├── error.cpp
│ │ │ ├── error.hpp
│ │ │ ├── logging.cpp
│ │ │ ├── op.cpp
│ │ │ ├── op.hpp
│ │ │ ├── settutil.cpp
│ │ │ └── type.cpp
│ │ ├── inplace
│ │ │ ├── crosslink.cpp
│ │ │ ├── error.cpp
│ │ │ ├── error.hpp
│ │ │ ├── graph.cpp
│ │ │ ├── logging.cpp
│ │ │ ├── op.cpp
│ │ │ ├── op.hpp
│ │ │ ├── ops.cpp
│ │ │ ├── ops.hpp
│ │ │ ├── proposal.cpp
│ │ │ ├── result.cpp
│ │ │ ├── tensor.cpp
│ │ │ └── tensormap.cpp
│ │ ├── nest
│ │ │ ├── error.cpp
│ │ │ ├── error.hpp
│ │ │ ├── logging.cpp
│ │ │ ├── region.cpp
│ │ │ ├── sett.cpp
│ │ │ └── stripe.cpp
│ │ └── unwind
│ │ │ ├── error.cpp
│ │ │ ├── error.hpp
│ │ │ ├── graph.cpp
│ │ │ ├── hosttensorhelper.cpp
│ │ │ ├── logging.cpp
│ │ │ ├── lower.cpp
│ │ │ ├── op.cpp
│ │ │ ├── op.hpp
│ │ │ ├── ops.cpp
│ │ │ ├── ops.hpp
│ │ │ ├── path.cpp
│ │ │ ├── scheduledsolution.cpp
│ │ │ ├── solution.cpp
│ │ │ ├── sumlike.cpp
│ │ │ └── valuedtensorid.cpp
│ │ ├── ndarray
│ │ ├── accessors.cpp
│ │ ├── broadcastsetter.cpp
│ │ ├── dtype.cpp
│ │ ├── error.cpp
│ │ ├── error.hpp
│ │ ├── serializer.hpp
│ │ ├── shape.cpp
│ │ └── tensorinfo.cpp
│ │ ├── outline
│ │ └── linear
│ │ │ ├── error.cpp
│ │ │ ├── error.hpp
│ │ │ ├── graph.cpp
│ │ │ ├── linearusings.cpp
│ │ │ ├── logging.cpp
│ │ │ ├── op.cpp
│ │ │ └── tensor.cpp
│ │ ├── program
│ │ ├── callstack
│ │ │ ├── callstack.cpp
│ │ │ ├── copyin.cpp
│ │ │ ├── copyout.cpp
│ │ │ ├── error.cpp
│ │ │ ├── error.hpp
│ │ │ └── querier.cpp
│ │ ├── distributed
│ │ │ ├── codelocation.cpp
│ │ │ ├── error.cpp
│ │ │ ├── error.hpp
│ │ │ ├── helper.cpp
│ │ │ └── program.cpp
│ │ ├── pipeline
│ │ │ ├── error.cpp
│ │ │ ├── error.hpp
│ │ │ └── pipeline.cpp
│ │ └── prune
│ │ │ ├── error.cpp
│ │ │ ├── error.hpp
│ │ │ └── prune.cpp
│ │ ├── schedule
│ │ ├── connectedcomponents
│ │ │ ├── connectedcomponents.cpp
│ │ │ ├── error.cpp
│ │ │ └── error.hpp
│ │ ├── dfs
│ │ │ ├── dfs.cpp
│ │ │ ├── error.cpp
│ │ │ └── error.hpp
│ │ ├── scc
│ │ │ ├── error.cpp
│ │ │ ├── error.hpp
│ │ │ └── scc.cpp
│ │ ├── shift
│ │ │ ├── alloc.cpp
│ │ │ ├── allocsimplifier.cpp
│ │ │ ├── allocsimplifier.hpp
│ │ │ ├── allocweight.cpp
│ │ │ ├── error.cpp
│ │ │ ├── error.hpp
│ │ │ ├── fromcache.cpp
│ │ │ ├── graph.cpp
│ │ │ ├── graphserialization.cpp
│ │ │ ├── graphserialization.hpp
│ │ │ ├── greedykahn.cpp
│ │ │ ├── greedykahn.hpp
│ │ │ ├── kahndecider.cpp
│ │ │ ├── logging.cpp
│ │ │ ├── op.cpp
│ │ │ ├── schedulecache.cpp
│ │ │ ├── scheduledgraph.cpp
│ │ │ ├── settings.cpp
│ │ │ ├── shiftandcost.cpp
│ │ │ ├── solutioncache.cpp
│ │ │ ├── summarywriter.cpp
│ │ │ ├── transitiveclosureconstrainer.cpp
│ │ │ ├── transitiveclosureconstrainer.hpp
│ │ │ ├── transitiveclosureoptimizations.cpp
│ │ │ ├── transitiveclosureoptimizer.cpp
│ │ │ ├── transitiveclosureoptimizer.hpp
│ │ │ ├── updatefromfirstfinal.cpp
│ │ │ └── updatefromfirstfinal.hpp
│ │ ├── supercon
│ │ │ ├── error.cpp
│ │ │ ├── error.hpp
│ │ │ ├── graph.cpp
│ │ │ └── logging.cpp
│ │ ├── transitiveclosure
│ │ │ ├── error.cpp
│ │ │ ├── error.hpp
│ │ │ ├── logging.cpp
│ │ │ ├── partitionedtransitiveclosure.cpp
│ │ │ └── transitiveclosure.cpp
│ │ └── vanilla
│ │ │ ├── basestackwithmanypriorities.hpp
│ │ │ ├── error.cpp
│ │ │ ├── error.hpp
│ │ │ ├── fifostack.hpp
│ │ │ ├── filostack.hpp
│ │ │ ├── greedystack.hpp
│ │ │ ├── kahn.hpp
│ │ │ ├── pathcount.cpp
│ │ │ ├── randomstack.hpp
│ │ │ └── vanilla.cpp
│ │ └── util
│ │ ├── error.cpp
│ │ ├── error.hpp
│ │ ├── interval.cpp
│ │ ├── permutation.cpp
│ │ ├── printiter.cpp
│ │ ├── stridedpartition.cpp
│ │ └── stringutil.cpp
└── tests
│ ├── CMakeLists.txt
│ ├── googletests
│ ├── CMakeLists.txt
│ ├── autodiff
│ │ ├── CMakeLists.txt
│ │ └── automatic
│ │ │ ├── CMakeLists.txt
│ │ │ └── gradinfos_0.cpp
│ ├── common
│ │ ├── CMakeLists.txt
│ │ └── compute
│ │ │ ├── CMakeLists.txt
│ │ │ ├── basic_functionality_0.cpp
│ │ │ ├── call_0.cpp
│ │ │ ├── interdevicecopy_0.cpp
│ │ │ ├── simexecutable_0.cpp
│ │ │ └── train_misc_0.cpp
│ └── example
│ │ ├── CMakeLists.txt
│ │ └── googletest_example_0.cpp
│ ├── mocks
│ ├── CMakeLists.txt
│ ├── include
│ │ └── mock
│ │ │ ├── memory
│ │ │ └── alias
│ │ │ │ ├── mockgraph.hpp
│ │ │ │ ├── mockgraphfixture.hpp
│ │ │ │ ├── mocktensor.hpp
│ │ │ │ └── mocktensorfixture.hpp
│ │ │ └── util
│ │ │ ├── mockpermutation.hpp
│ │ │ └── mockpermutationfixture.hpp
│ └── src
│ │ ├── CMakeLists.txt
│ │ ├── memory
│ │ └── alias
│ │ │ ├── mockgraph.cpp
│ │ │ └── mocktensor.cpp
│ │ ├── poprithms_mock-config.cmake.in
│ │ └── util
│ │ └── mockpermutation.cpp
│ ├── regression
│ ├── CMakeLists.txt
│ └── schedule
│ │ ├── CMakeLists.txt
│ │ └── shift
│ │ ├── CMakeLists.txt
│ │ ├── README.txt
│ │ ├── fromserial.cpp
│ │ ├── regression.cpp
│ │ └── summarize.py
│ ├── tests
│ ├── CMakeLists.txt
│ ├── autodiff
│ │ ├── CMakeLists.txt
│ │ ├── core_0.cpp
│ │ ├── finite_difference_0.cpp
│ │ └── guide_0.cpp
│ ├── boost
│ │ ├── CMakeLists.txt
│ │ └── boost_basics.cpp
│ ├── coloring
│ │ ├── CMakeLists.txt
│ │ └── coloring_0.cpp
│ ├── common
│ │ ├── CMakeLists.txt
│ │ ├── compute
│ │ │ ├── CMakeLists.txt
│ │ │ ├── autograd_function_0.cpp
│ │ │ ├── basics_0.cpp
│ │ │ ├── demo_replicated_training_0.cpp
│ │ │ ├── differentiator_0.cpp
│ │ │ ├── error_checking_0.cpp
│ │ │ ├── logging_0.cpp
│ │ │ ├── miscellaneous_sim_train_0.cpp
│ │ │ ├── pipeline_0.cpp
│ │ │ ├── prune_call_0.cpp
│ │ │ ├── prune_withcallees_0.cpp
│ │ │ ├── repeat_0.cpp
│ │ │ ├── second_derivative_0.cpp
│ │ │ ├── switch_0.cpp
│ │ │ ├── train_through_call_0.cpp
│ │ │ ├── transform_sin_example_0.cpp
│ │ │ └── value_dependence_0.cpp
│ │ ├── multiout
│ │ │ ├── CMakeLists.txt
│ │ │ └── multiout_0.cpp
│ │ └── schedulable
│ │ │ ├── CMakeLists.txt
│ │ │ ├── schedulable_0.cpp
│ │ │ └── schedulable_1.cpp
│ ├── compute
│ │ ├── CMakeLists.txt
│ │ ├── internal
│ │ │ ├── CMakeLists.txt
│ │ │ ├── base_operators_0.cpp
│ │ │ ├── gridpointhelper_0.cpp
│ │ │ └── numpy_string_formatter_0.cpp
│ │ ├── tensor
│ │ │ ├── CMakeLists.txt
│ │ │ ├── arange_0.cpp
│ │ │ ├── basic_0.cpp
│ │ │ ├── cast_0.cpp
│ │ │ ├── concat_0.cpp
│ │ │ ├── constructors_0.cpp
│ │ │ ├── contains_aliases_0.cpp
│ │ │ ├── demo_0.cpp
│ │ │ ├── gather_0.cpp
│ │ │ ├── matmul_0.cpp
│ │ │ ├── neg_0.cpp
│ │ │ ├── numpy_binary_0.cpp
│ │ │ ├── numpy_slice_0.cpp
│ │ │ ├── numpy_unary_0.cpp
│ │ │ ├── random_factories_0.cpp
│ │ │ ├── reciprocal_0.cpp
│ │ │ ├── reduce_0.cpp
│ │ │ ├── reshape_0.cpp
│ │ │ ├── resize_0.cpp
│ │ │ ├── scatter_0.cpp
│ │ │ ├── unary_0.cpp
│ │ │ ├── update_0.cpp
│ │ │ ├── vector_getters_0.cpp
│ │ │ └── view_changers_0.cpp
│ │ └── viewchange
│ │ │ ├── CMakeLists.txt
│ │ │ └── basic_0.cpp
│ ├── dependency_free_interface
│ │ ├── CMakeLists.txt
│ │ └── dependency_free_interface_test.py
│ ├── memory
│ │ ├── CMakeLists.txt
│ │ ├── alias
│ │ │ ├── CMakeLists.txt
│ │ │ ├── graph
│ │ │ │ ├── CMakeLists.txt
│ │ │ │ ├── allocate_0.cpp
│ │ │ │ ├── constructors_0.cpp
│ │ │ │ └── dimshuffle_0.cpp
│ │ │ ├── origins
│ │ │ │ ├── CMakeLists.txt
│ │ │ │ ├── alias_0.cpp
│ │ │ │ └── contiguous_0.cpp
│ │ │ ├── tensor
│ │ │ │ ├── CMakeLists.txt
│ │ │ │ ├── basic_0.cpp
│ │ │ │ ├── broadcast_0.cpp
│ │ │ │ ├── clone_0.cpp
│ │ │ │ ├── color_0.cpp
│ │ │ │ ├── concat_0.cpp
│ │ │ │ ├── demo_0.cpp
│ │ │ │ ├── dimshuffle_0.cpp
│ │ │ │ ├── expand_0.cpp
│ │ │ │ ├── index_0.cpp
│ │ │ │ ├── modify_0.cpp
│ │ │ │ ├── modify_1.cpp
│ │ │ │ ├── modify_2.cpp
│ │ │ │ ├── pad_0.cpp
│ │ │ │ ├── reshape_0.cpp
│ │ │ │ ├── reverse_0.cpp
│ │ │ │ ├── settfill_0.cpp
│ │ │ │ ├── slice_0.cpp
│ │ │ │ ├── slices_0.cpp
│ │ │ │ ├── subscript_0.cpp
│ │ │ │ └── upsample_0.cpp
│ │ │ └── util
│ │ │ │ ├── CMakeLists.txt
│ │ │ │ └── jitter_0.cpp
│ │ ├── chain
│ │ │ ├── CMakeLists.txt
│ │ │ ├── basic_0.cpp
│ │ │ ├── bubble_dimshuffle_back_0.cpp
│ │ │ ├── canonicalize_chain_based_0.cpp
│ │ │ ├── canonicalize_op_based_0.cpp
│ │ │ ├── canonicalize_reshape_op_0.cpp
│ │ │ ├── hosttensor_0.cpp
│ │ │ ├── mergecontiguoussametype_0.cpp
│ │ │ ├── removeidentity_0.cpp
│ │ │ ├── resize_0.cpp
│ │ │ ├── reverse_chain_0.cpp
│ │ │ └── settutil_0.cpp
│ │ ├── inplace
│ │ │ ├── CMakeLists.txt
│ │ │ ├── aliased_0.cpp
│ │ │ ├── allowmultigatealias_0.cpp
│ │ │ ├── ambiguity_0.cpp
│ │ │ ├── basic_0.cpp
│ │ │ ├── binary_0.cpp
│ │ │ ├── concat_0.cpp
│ │ │ ├── constant_0.cpp
│ │ │ ├── constraints_0.cpp
│ │ │ ├── contains_0.cpp
│ │ │ ├── crosslink_0.cpp
│ │ │ ├── demo_0.cpp
│ │ │ ├── dimshuffle_noalias_0.cpp
│ │ │ ├── graph_0.cpp
│ │ │ ├── graphs_comparison_0.cpp
│ │ │ ├── pad_0.cpp
│ │ │ ├── regionmapping_0.cpp
│ │ │ ├── reverse_reshape_0.cpp
│ │ │ ├── settsample_0.cpp
│ │ │ ├── staggered_inplacing_0.cpp
│ │ │ └── traversal_0.cpp
│ │ ├── nest
│ │ │ ├── CMakeLists.txt
│ │ │ ├── disjointregions
│ │ │ │ ├── CMakeLists.txt
│ │ │ │ └── basic_0.cpp
│ │ │ ├── region
│ │ │ │ ├── CMakeLists.txt
│ │ │ │ ├── basic_shape_0.cpp
│ │ │ │ ├── constructors_0.cpp
│ │ │ │ ├── empty_full_0.cpp
│ │ │ │ ├── equivalent_0.cpp
│ │ │ │ ├── expand_0.cpp
│ │ │ │ ├── get_complement_0.cpp
│ │ │ │ ├── intersect_0.cpp
│ │ │ │ ├── merge_0.cpp
│ │ │ │ ├── permute_0.cpp
│ │ │ │ ├── reduce_0.cpp
│ │ │ │ ├── reshape_0.cpp
│ │ │ │ ├── reshape_random_0.cpp
│ │ │ │ ├── reverse_0.cpp
│ │ │ │ ├── scalars_0.cpp
│ │ │ │ ├── sett_operations_random_0.cpp
│ │ │ │ ├── settsample_0.cpp
│ │ │ │ ├── slice_0.cpp
│ │ │ │ ├── subtract_0.cpp
│ │ │ │ └── subtract_random_0.cpp
│ │ │ ├── sett
│ │ │ │ ├── CMakeLists.txt
│ │ │ │ ├── basic_0.cpp
│ │ │ │ ├── basic_1.cpp
│ │ │ │ ├── canonicalize_0.cpp
│ │ │ │ ├── canonicalize_merge_0.cpp
│ │ │ │ ├── canonicalize_random_0.cpp
│ │ │ │ ├── contains_0.cpp
│ │ │ │ ├── disjoint_0.cpp
│ │ │ │ ├── fill_0.cpp
│ │ │ │ ├── find_0.cpp
│ │ │ │ ├── find_get_ons_random_0.cpp
│ │ │ │ ├── flatten_random_0.cpp
│ │ │ │ ├── get_complement_0.cpp
│ │ │ │ ├── get_on_0.cpp
│ │ │ │ ├── get_ons_0.cpp
│ │ │ │ ├── get_reverse_0.cpp
│ │ │ │ ├── get_stripes_0.cpp
│ │ │ │ ├── intersect_0.cpp
│ │ │ │ ├── intersect_random_0.cpp
│ │ │ │ ├── sample_0.cpp
│ │ │ │ ├── sample_1.cpp
│ │ │ │ ├── sample_fill_random_0.cpp
│ │ │ │ ├── sample_random_0.cpp
│ │ │ │ ├── subtract_random_0.cpp
│ │ │ │ └── unflatten_0.cpp
│ │ │ └── stripe
│ │ │ │ ├── CMakeLists.txt
│ │ │ │ └── basic_0.cpp
│ │ └── unwind
│ │ │ ├── CMakeLists.txt
│ │ │ ├── greedy0
│ │ │ ├── CMakeLists.txt
│ │ │ ├── calls_in_parallel_0.cpp
│ │ │ ├── calls_in_series_0.cpp
│ │ │ ├── calls_in_series_1.cpp
│ │ │ ├── dynamic_0.cpp
│ │ │ ├── flat_linear_0.cpp
│ │ │ ├── group_conv_with_bias_0.cpp
│ │ │ ├── length_tiebreaker_0.cpp
│ │ │ ├── lower_0.cpp
│ │ │ ├── lower_tiebreaker_0.cpp
│ │ │ ├── matmul_0.cpp
│ │ │ ├── multi_path_0.cpp
│ │ │ ├── ops_0.cpp
│ │ │ ├── order_matters_0.cpp
│ │ │ ├── single_call_0.cpp
│ │ │ ├── slice_numpy_0.cpp
│ │ │ ├── subsample_numpy_0.cpp
│ │ │ └── sum_like_0.cpp
│ │ │ ├── mappings
│ │ │ ├── CMakeLists.txt
│ │ │ └── reshape_0.cpp
│ │ │ └── score
│ │ │ ├── CMakeLists.txt
│ │ │ ├── score_0.cpp
│ │ │ └── solution_0.cpp
│ ├── outline
│ │ ├── CMakeLists.txt
│ │ └── linear
│ │ │ ├── CMakeLists.txt
│ │ │ └── basic_0.cpp
│ ├── program
│ │ ├── CMakeLists.txt
│ │ ├── callstack
│ │ │ ├── CMakeLists.txt
│ │ │ ├── copy_classes_0.cpp
│ │ │ └── querier_0.cpp
│ │ ├── distributed
│ │ │ ├── CMakeLists.txt
│ │ │ └── distributed_0.cpp
│ │ └── prune
│ │ │ ├── CMakeLists.txt
│ │ │ └── prune_0.cpp
│ ├── schedule
│ │ ├── CMakeLists.txt
│ │ ├── connectedcomponents
│ │ │ ├── CMakeLists.txt
│ │ │ └── connectedcomponents_0.cpp
│ │ ├── dfs
│ │ │ ├── CMakeLists.txt
│ │ │ └── dfs_0.cpp
│ │ ├── scc
│ │ │ ├── CMakeLists.txt
│ │ │ └── scc_0.cpp
│ │ ├── shift
│ │ │ ├── CMakeLists.txt
│ │ │ ├── alloc_partitioned_bins_0.cpp
│ │ │ ├── alloc_simplifier_0.cpp
│ │ │ ├── allocweight_0.cpp
│ │ │ ├── attractions.cpp
│ │ │ ├── bifurcate.cpp
│ │ │ ├── bin_constraints.cpp
│ │ │ ├── branch_doubling.cpp
│ │ │ ├── change_reader_0.py
│ │ │ ├── change_writer_0.cpp
│ │ │ ├── constraint_diff_0.cpp
│ │ │ ├── cycle_0.cpp
│ │ │ ├── diamond_0.cpp
│ │ │ ├── empty_0.cpp
│ │ │ ├── filtered_schedule_0.cpp
│ │ │ ├── get_merged_0.cpp
│ │ │ ├── get_schedule_0.cpp
│ │ │ ├── graph_basics_0.cpp
│ │ │ ├── graph_comparisons_0.cpp
│ │ │ ├── graph_hash.cpp
│ │ │ ├── grid.cpp
│ │ │ ├── inputs.cpp
│ │ │ ├── kahn_decider_0.cpp
│ │ │ ├── links_0.cpp
│ │ │ ├── links_1.cpp
│ │ │ ├── links_2.cpp
│ │ │ ├── logging_0.cpp
│ │ │ ├── op_0.cpp
│ │ │ ├── random.cpp
│ │ │ ├── recompute.cpp
│ │ │ ├── schedulable.cpp
│ │ │ ├── schedulecache_0.cpp
│ │ │ ├── searchlimits.cpp
│ │ │ ├── serialization_0.cpp
│ │ │ ├── serialization_errors.cpp
│ │ │ ├── serialization_fromfile0.cpp
│ │ │ ├── solutioncache_0.cpp
│ │ │ ├── summary_writer_0.cpp
│ │ │ ├── summary_writer_1.cpp
│ │ │ ├── tco_constrain_parallel_chains_0.cpp
│ │ │ ├── tco_constrain_weight_separated_0.cpp
│ │ │ ├── tco_constrain_weight_separated_1.cpp
│ │ │ ├── tco_constrain_weight_separated_2.cpp
│ │ │ ├── tco_constrain_weight_separated_3.cpp
│ │ │ ├── tco_constrain_weight_separated_4.cpp
│ │ │ ├── tco_link_close_tight_pairs_0.cpp
│ │ │ ├── tco_link_tight_drops_0.cpp
│ │ │ ├── tco_link_tight_drops_1.cpp
│ │ │ ├── test_random.cpp
│ │ │ ├── testgraphs
│ │ │ │ └── testgraph0.json.in
│ │ │ └── tight_pairs.cpp
│ │ ├── supercon
│ │ │ ├── CMakeLists.txt
│ │ │ └── schedule_0.cpp
│ │ ├── transitiveclosure
│ │ │ ├── CMakeLists.txt
│ │ │ ├── bitset_performance_0.cpp
│ │ │ ├── correctness_0.cpp
│ │ │ ├── durationbound_0.cpp
│ │ │ ├── extremum_status_0.cpp
│ │ │ ├── extremum_statuses_0.cpp
│ │ │ ├── get_unconstrained_0.cpp
│ │ │ ├── partitionedtransitiveclosure_0.cpp
│ │ │ ├── performance_0.cpp
│ │ │ ├── post_0.cpp
│ │ │ └── remove_redundant_0.cpp
│ │ └── vanilla
│ │ │ ├── CMakeLists.txt
│ │ │ ├── greedystack_0.cpp
│ │ │ ├── vanilla_0.cpp
│ │ │ └── vanilla_1.cpp
│ ├── util
│ │ ├── CMakeLists.txt
│ │ ├── dtype
│ │ │ ├── CMakeLists.txt
│ │ │ └── dtype_0.cpp
│ │ ├── interval
│ │ │ ├── CMakeLists.txt
│ │ │ └── interval_0.cpp
│ │ ├── logging
│ │ │ ├── CMakeLists.txt
│ │ │ ├── logging_test_0.cpp
│ │ │ ├── logging_test_1.cpp
│ │ │ ├── manualtimepartitionlogger_0.cpp
│ │ │ └── switchingtimepartitionlogger_0.cpp
│ │ ├── misc
│ │ │ ├── CMakeLists.txt
│ │ │ ├── copybyclone_0.cpp
│ │ │ ├── error_0.cpp
│ │ │ ├── misc_0.cpp
│ │ │ ├── permutation_0.cpp
│ │ │ ├── string_col_0.cpp
│ │ │ ├── typedwrappers_0.cpp
│ │ │ ├── unisort_0.cpp
│ │ │ └── where_0.cpp
│ │ ├── ndarray
│ │ │ ├── CMakeLists.txt
│ │ │ └── broadcastsetter_0.cpp
│ │ ├── serialization
│ │ │ ├── CMakeLists.txt
│ │ │ └── serialization_0.cpp
│ │ └── shape
│ │ │ ├── CMakeLists.txt
│ │ │ ├── shape_0.cpp
│ │ │ ├── shape_1.cpp
│ │ │ ├── shape_block_0.cpp
│ │ │ ├── shape_conv_0.cpp
│ │ │ ├── shape_gather_0.cpp
│ │ │ ├── shape_matmul_0.cpp
│ │ │ ├── shape_permutation_0.cpp
│ │ │ ├── shape_reshape_factorization_0.cpp
│ │ │ ├── shape_slice_0.cpp
│ │ │ └── shape_strides_0.cpp
│ └── verify_cxx_11_interface
│ │ ├── CMakeLists.txt
│ │ └── verify_cxx_11_interface.cpp
│ └── testutil
│ ├── CMakeLists.txt
│ ├── include
│ └── testutil
│ │ ├── common
│ │ └── schedulable
│ │ │ └── graph.hpp
│ │ ├── memory
│ │ ├── nest
│ │ │ ├── randomregion.hpp
│ │ │ └── randomsett.hpp
│ │ └── unwind
│ │ │ ├── creatorinserter.hpp
│ │ │ ├── fullstate.hpp
│ │ │ ├── graph.hpp
│ │ │ └── op.hpp
│ │ ├── program
│ │ └── callstack
│ │ │ ├── graph.hpp
│ │ │ └── querier.hpp
│ │ └── schedule
│ │ ├── base
│ │ └── randomdag.hpp
│ │ ├── commandlineoptions.hpp
│ │ ├── shift
│ │ ├── bifurcate_generator.hpp
│ │ ├── branch_doubling_generator.hpp
│ │ ├── diamond_generator.hpp
│ │ ├── grid_generator.hpp
│ │ ├── randomgraph.hpp
│ │ ├── recompute_generator.hpp
│ │ └── shiftcommandlineoptions.hpp
│ │ └── transitiveclosure
│ │ ├── randomedges.hpp
│ │ └── transitiveclosurecommandlineoptions.hpp
│ └── src
│ └── testutil
│ ├── common
│ └── schedulable
│ │ └── graph.cpp
│ ├── memory
│ ├── nest
│ │ ├── randomregion.cpp
│ │ └── randomsett.cpp
│ └── unwind
│ │ ├── fullstate.cpp
│ │ ├── graph.cpp
│ │ └── op.cpp
│ ├── program
│ └── callstack
│ │ └── graph.cpp
│ └── schedule
│ ├── base
│ └── randomdag.cpp
│ ├── commandlineoptions.cpp
│ ├── shift
│ ├── bifurcate_generator.cpp
│ ├── branch_doubling_generator.cpp
│ ├── diamond_generator.cpp
│ ├── grid_generator.cpp
│ ├── randomgraph.cpp
│ ├── recompute_generator.cpp
│ └── shiftcommandlineoptions.cpp
│ └── transitiveclosure
│ ├── randomedges.cpp
│ └── transitiveclosurecommandlineoptions.cpp
└── scripts
├── check_copyright.py
├── check_header_guard_spacing.py
├── format.sh
├── get_clang_format_version.py
└── rewrite_error_files.py
/.arcconfig:
--------------------------------------------------------------------------------
1 | {
2 | "phabricator.uri" : "https://phabricator.sourcevertex.net",
3 | "load": [
4 | "arcanist_linters/clang-format-linter",
5 | "arcanist_linters/yapf_linter"
6 | ],
7 | "arc.land.onto.default": "master",
8 | "base": "git:merge-base(origin/master)"
9 | }
10 |
--------------------------------------------------------------------------------
/.arclint:
--------------------------------------------------------------------------------
1 | {
2 | "linters": {
3 | "clang-format": {
4 | "type": "clang-format",
5 | "include": "(\\.(c|cpp|C|cc|c\\+\\+|cxx|h|hpp)$)"
6 | },
7 | "yapf": {
8 | "type": "yapf",
9 | "include": "(\\.py$)"
10 | },
11 | "text-rst": {
12 | "type": "text",
13 | "include": "(\\.(rst)$)",
14 | "severity": {
15 | "1": "autofix",
16 | "2": "warning",
17 | "3": "warning",
18 | "4": "autofix",
19 | "5": "disabled",
20 | "6": "warning",
21 | "7": "warning",
22 | "8": "autofix"
23 | }
24 | }
25 | }
26 | }
27 |
--------------------------------------------------------------------------------
/.gitignore:
--------------------------------------------------------------------------------
1 | # create ~/.local_gitignore or similar for personal ignores. see for example,
2 | # https://medium.com/@peter_graham/how-to-create-a-local-gitignore-1b19f083492b
3 |
--------------------------------------------------------------------------------
/CMakeLists.txt:
--------------------------------------------------------------------------------
1 | cmake_minimum_required(VERSION 3.10)
2 | project(poprithms)
3 |
4 | include(CTest)
5 |
6 | # Add an explicit exported symbols file (a linker flag)
7 | if(APPLE)
8 | string(APPEND CMAKE_SHARED_LINKER_FLAGS
9 | " -Wl,-exported_symbols_list,"
10 | "${CMAKE_CURRENT_SOURCE_DIR}/exported_symbols_osx.lds")
11 | else()
12 | string(APPEND CMAKE_SHARED_LINKER_FLAGS
13 | " -Wl,--version-script,"
14 | "${CMAKE_CURRENT_SOURCE_DIR}/exported_symbols_linux.lds")
15 | endif()
16 |
17 | option(POPRITHMS_BUILD_MOCKS "Build the poprithms mocks library" ON)
18 | option(POPRITHMS_USE_STACKTRACE "Enable boost stacktrace reports in error messages" ON)
19 | if (${POPRITHMS_USE_STACKTRACE})
20 | # Building with Boost Stacktrace using the default header only implementation
21 | # Note this is only supported for any compiler on POSIX or MinGW.
22 | message(STATUS "Building poprithms with Boost Stacktrace")
23 | add_definitions(-DPOPRITHMS_USE_STACKTRACE -DBOOST_STACKTRACE_GNU_SOURCE_NOT_REQUIRED)
24 | endif()
25 |
26 | add_subdirectory(poprithms)
27 |
--------------------------------------------------------------------------------
/License.txt:
--------------------------------------------------------------------------------
1 | Copyright ©2020 Graphcore Limited
2 |
3 | Licensed under terms of MIT license.
4 | You may obtain a copy of the license at https://opensource.org/licenses/MIT
5 |
6 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
7 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
8 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
9 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
10 | WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
11 | CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
12 |
--------------------------------------------------------------------------------
/cbt.json:
--------------------------------------------------------------------------------
1 | {
2 | "dependencies" : [ "boost" ],
3 | "optional_dependencies" : [ "googletest" ]
4 | }
5 |
--------------------------------------------------------------------------------
/exported_symbols_linux.lds:
--------------------------------------------------------------------------------
1 | V0 {
2 | global:
3 | _ZN?pop*;
4 | _ZN??pop*;
5 | _ZNK?pop*;
6 | _ZNK??pop*;
7 | _ZTSN?pop*;
8 | _ZTSN??pop*;
9 | _ZTIN?pop*;
10 | _ZTIN??pop*;
11 | _ZTVN?pop*;
12 | _ZTVN??pop*;
13 | _ZN?mock*;
14 | _ZN??mock*;
15 | _ZNK?mock*;
16 | _ZNK??mock*;
17 | _ZTSN?mock*;
18 | _ZTSN??mock*;
19 | _ZTIN?mock*;
20 | _ZTIN??mock*;
21 | _ZTVN?mock*;
22 | _ZTVN??mock*;
23 | local:
24 | *;
25 | };
26 |
--------------------------------------------------------------------------------
/exported_symbols_osx.lds:
--------------------------------------------------------------------------------
1 | __ZN?pop*
2 | __ZN??pop*
3 | __ZNK?pop*
4 | __ZNK??pop*
5 | __ZTSN?pop*
6 | __ZTSN??pop*
7 | __ZTIN?pop*
8 | __ZTIN??pop*
9 | __ZTVN?pop*
10 | __ZTVN??pop*
11 |
--------------------------------------------------------------------------------
/poprithms/cmake/EnableCompilerWarnings.cmake:
--------------------------------------------------------------------------------
1 | set(CMAKE_COMPILER_WARNINGS)
2 | list(APPEND CMAKE_COMPILER_WARNINGS
3 | -Wall
4 | -pedantic
5 | -Wextra
6 | # T67853:
7 | # -Wweak-vtables
8 | -Wdisabled-optimization
9 | -Wshadow
10 | -Wformat=2
11 | -Wundef)
12 |
13 | # Previously, Weverything was used. But it is suggested at
14 | # clang.llvm.org/docs/UsersManual.html#cmdoption-weverything
15 | #that this is not required/recommended.
16 | # if (CMAKE_${COMPILER}_COMPILER_ID MATCHES "Clang")
17 | # list(APPEND CMAKE_COMPILER_WARNINGS
18 | # -Weverything
19 | # # These seem unavoidable:
20 | # -Wno-exit-time-destructors
21 | # -Wno-c++98-compat
22 | # -Wno-c++98-compat-pedantic
23 | # -Wno-padded
24 | # -Wno-weak-vtables
25 | # -Wno-global-constructors
26 | # # Overwrite -Werror for this warning, i.e. do not
27 | # # ever error for an unknown warning flag
28 | # -Wno-error=unknown-warning-option)
29 | # endif()
30 |
31 | add_compile_options(${CMAKE_COMPILER_WARNINGS})
32 |
--------------------------------------------------------------------------------
/poprithms/notes/common/compute/diagrams/all_reduce_and_redundant_compute-Page-1.drawio.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/graphcore/poprithms/7396145c967e913ff7c538656f75b3305ebfe350/poprithms/notes/common/compute/diagrams/all_reduce_and_redundant_compute-Page-1.drawio.png
--------------------------------------------------------------------------------
/poprithms/notes/common/compute/diagrams/all_reduce_and_redundant_compute-Page-2.drawio.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/graphcore/poprithms/7396145c967e913ff7c538656f75b3305ebfe350/poprithms/notes/common/compute/diagrams/all_reduce_and_redundant_compute-Page-2.drawio.png
--------------------------------------------------------------------------------
/poprithms/notes/memory/alias/diagrams/complex0.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/graphcore/poprithms/7396145c967e913ff7c538656f75b3305ebfe350/poprithms/notes/memory/alias/diagrams/complex0.png
--------------------------------------------------------------------------------
/poprithms/notes/memory/alias/diagrams/numpystrides0.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/graphcore/poprithms/7396145c967e913ff7c538656f75b3305ebfe350/poprithms/notes/memory/alias/diagrams/numpystrides0.png
--------------------------------------------------------------------------------
/poprithms/notes/memory/alias/diagrams/numpystrides1.drawio:
--------------------------------------------------------------------------------
1 | 5Zhdr5sgGMc/jZdNFISjl6ftebnZVbMs2c3ChCo5KIbSaffphxWqzjbZku6MeOxF4f/wIr8/eQwEcFO2L4rUxSdJmQhASNsAbgMAQIix+euUU69EEUh7JVecWm0Qdvwns2Jo1SOn7DBpqKUUmtdTMZNVxTI90YhSspk220sxnbUmOZsJu4yIufqFU124ZeB0CLwynhd26gQ89IGSuMZ2JYeCUNmMJPgUwI2SUvelst0w0dFzXPp+zzeilxdTrNJ/0gGvwmL38pa+tt9WUB8/f21xsorjfpgfRBztiu3b6pND0BRcs11Nsq7eGJ8DuC50KUwtMkVyqHvwe94yM9d6LyttjYxwV+dCbKSQ6jwc3CcZyzKjH7SSb2wU+Z6gGIUmYt+JKc3am6uNLgzN7mOyZFqdTBPXwWG3Gy+x1WYwMbZSMbLPacRum/wy8EDWFCzcvwGNlgoaewYaLxQ0CD0D/bBU0LFnoJOlgk48A50uFDT07GOIwoWCjj3L0ShaKmjPcjQC7w8adb9roPH5sSOM9P65kwGe5W4EF7rTkW+5e6knRuTZQQb9hxOjSym3EsftVHMHA7BvH8/5SfJx5oBZrp5CnzKqZMV+A20lInhemWpm8DCjrzt4PCPi0QZKTmk3zfqay0oeK9p5ug2v+HoHNy43cO7mDiQzO/AVO+A/s2N+3tx+HDvi9N3sMNXhVvIcG13uwqdf
--------------------------------------------------------------------------------
/poprithms/notes/memory/alias/diagrams/numpystrides1.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/graphcore/poprithms/7396145c967e913ff7c538656f75b3305ebfe350/poprithms/notes/memory/alias/diagrams/numpystrides1.png
--------------------------------------------------------------------------------
/poprithms/notes/memory/alias/diagrams/numpystrides2.drawio:
--------------------------------------------------------------------------------
1 | 5ZpPj6MgGMY/jccmKoJ6nP7Zmcucms0me9mwSpUMiqF0tPvpFytWXdtkN+mOhGkPlQcE+T30ldfWAZuieRa4yl95Spjju2njgK3j+76LkPpolXOneJ4fd0omaKq1QdjTX0SLrlZPNCXHSUPJOZO0mooJL0uSyImGheD1tNmBs+moFc7ITNgnmM3VbzSVeT8NFA8VL4RmuR468sOuosB9Yz2TY45TXo8ksHPARnAuu6Oi2RDW0uu5dOd9uVN7vTBBSvk3J6CVm++f3+KX5scKyNPX7w2KVkHQdfOO2UnPWF+tPPcI6pxKsq9w0pZr5bMD1rksmCp56hAfqw78gTZEjbU+8FJqIz3UliljG864uHQHDlFCkkTpRyn4GxnV/IxgAF1Vo6+JCEmau7P1rgzV6iO8IFKcVZP+hB67XniRLtaDiYGW8pF9vYb1ssmuHQ9k1YGG+y+goa2gkWGgkaWgfdcw0KGtoAPDQEe2go4MAx1bChoYdjOErqWgA8NiNPRsBW1YjIb+x4OG7fsWaHR56R5Gevd6kAGGxW4ILF3p0LTYbWvGCA1LZOACGWMfUu4Fjvuh5gEGINNunvNM8mnmgJqunEKfMip5Sf4ArSXMaFaqYqLwEKWvW3g0wexJVxQ0Tdth1rdcFvxUpq2nW/eGrw9w4/oErn9y50czO9ANO8B/s2Oeb24/jx1BbJodC2Sli+54kGk7Hluz1dCwHU//tbIPtGE7HrRAtrpoSIkM2/Ggz5bFRoY9RkALZLHLGmDYTRXNs9vdzAFrN5lh+GGbTFUcfvq+1I3+QQB2vwE=
--------------------------------------------------------------------------------
/poprithms/notes/memory/alias/diagrams/numpystrides2.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/graphcore/poprithms/7396145c967e913ff7c538656f75b3305ebfe350/poprithms/notes/memory/alias/diagrams/numpystrides2.png
--------------------------------------------------------------------------------
/poprithms/notes/memory/alias/diagrams/sett0.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/graphcore/poprithms/7396145c967e913ff7c538656f75b3305ebfe350/poprithms/notes/memory/alias/diagrams/sett0.png
--------------------------------------------------------------------------------
/poprithms/notes/memory/alias/diagrams/sett1.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/graphcore/poprithms/7396145c967e913ff7c538656f75b3305ebfe350/poprithms/notes/memory/alias/diagrams/sett1.png
--------------------------------------------------------------------------------
/poprithms/notes/memory/alias/diagrams/sett2.drawio.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/graphcore/poprithms/7396145c967e913ff7c538656f75b3305ebfe350/poprithms/notes/memory/alias/diagrams/sett2.drawio.png
--------------------------------------------------------------------------------
/poprithms/notes/memory/alias/diagrams/sett2.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/graphcore/poprithms/7396145c967e913ff7c538656f75b3305ebfe350/poprithms/notes/memory/alias/diagrams/sett2.png
--------------------------------------------------------------------------------
/poprithms/notes/memory/alias/diagrams/sett3.drawio:
--------------------------------------------------------------------------------
1 | 3VpNj5swEP01HCNhjI193XS7e+kpqir1UrngBLQmRo5TSH99ncWEoNVKXYnSMSfsN/58HvxmBBHe1t2TEU35RRdSRUlcdBH+FCVJwglyjyty6RFEEe6Rg6kKj43ArvotPRh79FwV8jRpaLVWtmqmYK6PR5nbCSaM0e202V6r6ayNOMg3wC4X6i36rSps6VFE+Wh4ltWh9FOzJOsNtRga+52cSlHo9g7CjxHeGq1tX6q7rVRX9gZe+n6f37HeFmbk0f5NB7qJy93TC3/ufmywPX/93lG2SSntx/kl1Nlv2S/XXgYO2rKycteI/Fpv3UFH+KG0tXI15Iri1PTM76tOuske9vpo/Umi9FqvlNpqpc3rcHjPcpnnDj9Zo1/kneUnIymJncWvSRoru3e3i24kOveTupbWXFwT3wF72r3jMV9tx0NMPVTeHd+ACe82h9u4I7Ou4Mn9ENHZvyd6BtoyaLSxlfonQtCY5kE4KCLAeBveGOi8cWi8oSB4AyckWbLSGxGc9mQ4CA/F0JQkS1fqoRiY9lCyANNz8AZMeyghQfCWAtMeShbIFufgDZiSUBJG8keAKQklC2R/c/AGThfCyOUINF2gYeRyFJou0DByOQpNF+gCudwMvGXQdIGtNcPIoCkJCyNSzqApCVvrdxUGTXtYGLE1g6Y9LIzYmoPTnjBiaw5NSYYbenU3IoemPTyMaBzF0KSELxCO/5+PzfFi6uOq4z8tr7a7X4Pw4x8=
--------------------------------------------------------------------------------
/poprithms/notes/memory/alias/diagrams/sett3.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/graphcore/poprithms/7396145c967e913ff7c538656f75b3305ebfe350/poprithms/notes/memory/alias/diagrams/sett3.png
--------------------------------------------------------------------------------
/poprithms/notes/memory/alias/diagrams/sett4.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/graphcore/poprithms/7396145c967e913ff7c538656f75b3305ebfe350/poprithms/notes/memory/alias/diagrams/sett4.png
--------------------------------------------------------------------------------
/poprithms/notes/memory/alias/diagrams/sett5.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/graphcore/poprithms/7396145c967e913ff7c538656f75b3305ebfe350/poprithms/notes/memory/alias/diagrams/sett5.png
--------------------------------------------------------------------------------
/poprithms/notes/memory/alias/diagrams/sett6.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/graphcore/poprithms/7396145c967e913ff7c538656f75b3305ebfe350/poprithms/notes/memory/alias/diagrams/sett6.png
--------------------------------------------------------------------------------
/poprithms/notes/memory/alias/diagrams/stripes0.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/graphcore/poprithms/7396145c967e913ff7c538656f75b3305ebfe350/poprithms/notes/memory/alias/diagrams/stripes0.png
--------------------------------------------------------------------------------
/poprithms/notes/memory/unwind/diagrams/Readme.md:
--------------------------------------------------------------------------------
1 | These diagrams were generated on the website https://app.diagrams.net
2 | The source code of this project is available at https://github.com/jgraph/drawio
3 | and is distributed under the Apache v2 licencse.
4 |
5 | For each diagram, there are 2 files:
6 | 1) an xml file with a .drawio extension, which can be opened and edited in the above project.
7 | 2) a png file corresponding to the .drawio file, which is included in the .md file for the user to see.
8 |
--------------------------------------------------------------------------------
/poprithms/notes/memory/unwind/diagrams/broadcastadd0.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/graphcore/poprithms/7396145c967e913ff7c538656f75b3305ebfe350/poprithms/notes/memory/unwind/diagrams/broadcastadd0.png
--------------------------------------------------------------------------------
/poprithms/notes/memory/unwind/diagrams/broadcastadd1.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/graphcore/poprithms/7396145c967e913ff7c538656f75b3305ebfe350/poprithms/notes/memory/unwind/diagrams/broadcastadd1.png
--------------------------------------------------------------------------------
/poprithms/notes/memory/unwind/diagrams/broadcastadd2.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/graphcore/poprithms/7396145c967e913ff7c538656f75b3305ebfe350/poprithms/notes/memory/unwind/diagrams/broadcastadd2.png
--------------------------------------------------------------------------------
/poprithms/notes/memory/unwind/diagrams/call0.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/graphcore/poprithms/7396145c967e913ff7c538656f75b3305ebfe350/poprithms/notes/memory/unwind/diagrams/call0.png
--------------------------------------------------------------------------------
/poprithms/notes/memory/unwind/diagrams/call1.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/graphcore/poprithms/7396145c967e913ff7c538656f75b3305ebfe350/poprithms/notes/memory/unwind/diagrams/call1.png
--------------------------------------------------------------------------------
/poprithms/notes/memory/unwind/diagrams/call2.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/graphcore/poprithms/7396145c967e913ff7c538656f75b3305ebfe350/poprithms/notes/memory/unwind/diagrams/call2.png
--------------------------------------------------------------------------------
/poprithms/notes/memory/unwind/diagrams/fixedpoint0.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/graphcore/poprithms/7396145c967e913ff7c538656f75b3305ebfe350/poprithms/notes/memory/unwind/diagrams/fixedpoint0.png
--------------------------------------------------------------------------------
/poprithms/notes/memory/unwind/diagrams/fixedpoint1.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/graphcore/poprithms/7396145c967e913ff7c538656f75b3305ebfe350/poprithms/notes/memory/unwind/diagrams/fixedpoint1.png
--------------------------------------------------------------------------------
/poprithms/notes/memory/unwind/diagrams/matmul0.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/graphcore/poprithms/7396145c967e913ff7c538656f75b3305ebfe350/poprithms/notes/memory/unwind/diagrams/matmul0.png
--------------------------------------------------------------------------------
/poprithms/notes/memory/unwind/diagrams/matmul1.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/graphcore/poprithms/7396145c967e913ff7c538656f75b3305ebfe350/poprithms/notes/memory/unwind/diagrams/matmul1.png
--------------------------------------------------------------------------------
/poprithms/notes/memory/unwind/diagrams/objectivefunction0.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/graphcore/poprithms/7396145c967e913ff7c538656f75b3305ebfe350/poprithms/notes/memory/unwind/diagrams/objectivefunction0.png
--------------------------------------------------------------------------------
/poprithms/notes/memory/unwind/diagrams/playground.drawio:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/poprithms/notes/memory/unwind/diagrams/unbroadcastadd0.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/graphcore/poprithms/7396145c967e913ff7c538656f75b3305ebfe350/poprithms/notes/memory/unwind/diagrams/unbroadcastadd0.png
--------------------------------------------------------------------------------
/poprithms/notes/memory/unwind/diagrams/unbroadcastadd1.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/graphcore/poprithms/7396145c967e913ff7c538656f75b3305ebfe350/poprithms/notes/memory/unwind/diagrams/unbroadcastadd1.png
--------------------------------------------------------------------------------
/poprithms/notes/memory/unwind/diagrams/unwinding0.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/graphcore/poprithms/7396145c967e913ff7c538656f75b3305ebfe350/poprithms/notes/memory/unwind/diagrams/unwinding0.png
--------------------------------------------------------------------------------
/poprithms/notes/memory/unwind/diagrams/unwinding1.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/graphcore/poprithms/7396145c967e913ff7c538656f75b3305ebfe350/poprithms/notes/memory/unwind/diagrams/unwinding1.png
--------------------------------------------------------------------------------
/poprithms/notes/memory/unwind/diagrams/unwinding2.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/graphcore/poprithms/7396145c967e913ff7c538656f75b3305ebfe350/poprithms/notes/memory/unwind/diagrams/unwinding2.png
--------------------------------------------------------------------------------
/poprithms/notes/memory/unwind/diagrams/unwinding3.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/graphcore/poprithms/7396145c967e913ff7c538656f75b3305ebfe350/poprithms/notes/memory/unwind/diagrams/unwinding3.png
--------------------------------------------------------------------------------
/poprithms/notes/memory/unwind/diagrams/unwinding4.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/graphcore/poprithms/7396145c967e913ff7c538656f75b3305ebfe350/poprithms/notes/memory/unwind/diagrams/unwinding4.png
--------------------------------------------------------------------------------
/poprithms/notes/memory/unwind/diagrams/valuedpair0.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/graphcore/poprithms/7396145c967e913ff7c538656f75b3305ebfe350/poprithms/notes/memory/unwind/diagrams/valuedpair0.png
--------------------------------------------------------------------------------
/poprithms/notes/schedule/shift/adversary/animation.gif:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/graphcore/poprithms/7396145c967e913ff7c538656f75b3305ebfe350/poprithms/notes/schedule/shift/adversary/animation.gif
--------------------------------------------------------------------------------
/poprithms/notes/schedule/shift/adversary/dag.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/graphcore/poprithms/7396145c967e913ff7c538656f75b3305ebfe350/poprithms/notes/schedule/shift/adversary/dag.png
--------------------------------------------------------------------------------
/poprithms/notes/schedule/shift/adversary/demo.md:
--------------------------------------------------------------------------------
1 |
2 |
3 | The graph being scheduled is shown below. The grey boxes denote allocations, with the number in the box denoting the allocation's size. The circles denote the nodes (ops).
4 |
5 | 
6 |
7 | The initial (random) schedule is
8 |
9 | ```0 10 9 5 4 1 2 6 15 7 12 16 17 3 21 8 18 26 11 13 23 20 28 24 25 19 29 14 27 22```
10 |
11 | The sequence of sum-liveness reducing rotations (shifts) looks like:
12 |
13 |
14 |
15 | and the final schedule, after all rotations are applied is,
16 |
17 | ```0 3 4 10 1 7 5 12 18 9 26 16 17 6 21 8 11 2 14 13 15 19 22 23 25 20 27 28 29 24```
--------------------------------------------------------------------------------
/poprithms/notes/schedule/shift/bifurcating/animation.gif:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/graphcore/poprithms/7396145c967e913ff7c538656f75b3305ebfe350/poprithms/notes/schedule/shift/bifurcating/animation.gif
--------------------------------------------------------------------------------
/poprithms/notes/schedule/shift/bifurcating/dag.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/graphcore/poprithms/7396145c967e913ff7c538656f75b3305ebfe350/poprithms/notes/schedule/shift/bifurcating/dag.png
--------------------------------------------------------------------------------
/poprithms/notes/schedule/shift/bifurcating/demo.md:
--------------------------------------------------------------------------------
1 |
2 |
3 | The graph being scheduled is shown below. The grey boxes denote allocations, with the number in the box denoting the allocation's size. The circles denote the nodes (ops).
4 |
5 | 
6 |
7 | The initial (random) schedule is
8 |
9 | ```0 1 2 4 9 19 5 10 6 13 12 3 39 8 17 35 40 7 27 28 18 37 56 26 55 22 58 53 75 11 67 24 36 20 57 65 76 15 16 50 31 54 38 14 74 30 21 34 25 46 62 29 51 33 41 49 45 23 72 47 32 61 48 78 42 44 71 83 85 68 81 70 66 60 43 63 69 59 64 82 52 79 88 73 80 87 91 84 77 89 86 90 92 93 94```
10 |
11 | The sequence of sum-liveness reducing rotations (shifts) looks like:
12 |
13 |
14 |
15 | and the final schedule, after all rotations are applied is,
16 |
17 | ```0 2 1 3 4 10 9 22 45 46 70 21 43 44 69 82 19 39 40 67 20 42 41 68 81 88 7 8 17 36 35 65 18 37 38 66 80 15 32 31 63 16 33 34 64 79 87 91 5 6 14 13 27 28 55 56 75 57 58 76 85 29 60 59 77 30 62 61 78 86 90 12 26 53 54 74 25 51 52 73 84 11 24 23 47 48 71 49 50 72 83 89 92 93 94```
--------------------------------------------------------------------------------
/poprithms/notes/schedule/shift/grid/animation.gif:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/graphcore/poprithms/7396145c967e913ff7c538656f75b3305ebfe350/poprithms/notes/schedule/shift/grid/animation.gif
--------------------------------------------------------------------------------
/poprithms/notes/schedule/shift/grid/dag.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/graphcore/poprithms/7396145c967e913ff7c538656f75b3305ebfe350/poprithms/notes/schedule/shift/grid/dag.png
--------------------------------------------------------------------------------
/poprithms/notes/schedule/shift/grid/demo.md:
--------------------------------------------------------------------------------
1 |
2 |
3 | The graph being scheduled is shown below. The grey boxes denote allocations, with the number in the box denoting the allocation's size. The circles denote the nodes (ops).
4 |
5 | 
6 |
7 | The initial (random) schedule is
8 |
9 | ```0 1 8 14 2 3 9 26 4 27 20 32 21 10 15 16 5 17 33 11 6 44 22 28 38 29 45 46 23 7 24 50 25 18 39 19 34 40 35 36 47 30 12 37 31 51 13 41 42 52 43 53 48 49 54 55 56 57 58 59 60 61 62 63```
10 |
11 | The sequence of sum-liveness reducing rotations (shifts) looks like:
12 |
13 |
14 |
15 | and the final schedule, after all rotations are applied is,
16 |
17 | ```0 8 9 10 11 12 1 14 2 3 20 21 22 23 24 26 4 5 32 33 34 35 36 37 38 39 40 41 42 43 6 7 44 45 46 47 50 51 48 52 53 54 55 49 56 57 58 59 27 28 29 30 31 60 25 61 15 16 17 18 19 62 13 63```
--------------------------------------------------------------------------------
/poprithms/notes/schedule/shift/ladderclimbing.md:
--------------------------------------------------------------------------------
1 | This page describes ladder climbing (1-shifts, 2-shifts, etc). Coming soon.
2 |
--------------------------------------------------------------------------------
/poprithms/notes/schedule/shift/optimizations.md:
--------------------------------------------------------------------------------
1 | A discussion of the optimizations, coming soon.
2 |
--------------------------------------------------------------------------------
/poprithms/notes/schedule/shift/recompute/animation.gif:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/graphcore/poprithms/7396145c967e913ff7c538656f75b3305ebfe350/poprithms/notes/schedule/shift/recompute/animation.gif
--------------------------------------------------------------------------------
/poprithms/notes/schedule/shift/recompute/dag.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/graphcore/poprithms/7396145c967e913ff7c538656f75b3305ebfe350/poprithms/notes/schedule/shift/recompute/dag.png
--------------------------------------------------------------------------------
/poprithms/notes/schedule/shift/recompute/demo.md:
--------------------------------------------------------------------------------
1 |
2 |
3 | The graph being scheduled is shown below. The grey boxes denote allocations, with the number in the box denoting the allocation's size. The circles denote the nodes (ops).
4 |
5 | 
6 |
7 | The initial (random) schedule is
8 |
9 | ```0 2 4 6 1 3 9 7 12 10 16 15 5 8 14 18 21 11 19 13 17 20 22 24 25 26 29 23 28 32 31 34 36 37 38 27 40 43 41 30 33 35 39 42 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61```
10 |
11 | The sequence of sum-liveness reducing rotations (shifts) looks like:
12 |
13 |
14 |
15 | and the final schedule, after all rotations are applied is,
16 |
17 | ```0 1 5 8 11 13 17 20 22 23 27 30 33 35 39 42 44 45 24 28 31 34 36 40 43 46 37 41 47 38 48 49 25 29 32 50 51 26 52 53 2 6 9 12 14 18 21 54 15 19 55 16 56 57 3 7 10 58 59 4 60 61```
--------------------------------------------------------------------------------
/poprithms/notes/schedule/shift/tree/animation.gif:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/graphcore/poprithms/7396145c967e913ff7c538656f75b3305ebfe350/poprithms/notes/schedule/shift/tree/animation.gif
--------------------------------------------------------------------------------
/poprithms/notes/schedule/shift/tree/dag.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/graphcore/poprithms/7396145c967e913ff7c538656f75b3305ebfe350/poprithms/notes/schedule/shift/tree/dag.png
--------------------------------------------------------------------------------
/poprithms/notes/schedule/shift/tree/demo.md:
--------------------------------------------------------------------------------
1 |
2 |
3 | The graph being scheduled is shown below. The grey boxes denote allocations, with the number in the box denoting the allocation's size. The circles denote the nodes (ops).
4 |
5 | 
6 |
7 | The initial (random) schedule is
8 |
9 | ```0 6 10 11 5 12 17 3 4 2 7 8 15 1 22 26 28 31 25 9 16 14 18 13 19 29 23 30 20 21 27 32 24 33 36 42 34 35 39 37 40 44 41 45 47 43 46 38 48 49```
10 |
11 | The sequence of sum-liveness reducing rotations (shifts) looks like:
12 |
13 |
14 |
15 | and the final schedule, after all rotations are applied is,
16 |
17 | ```2 3 1 0 6 10 11 12 17 4 7 5 8 15 22 29 28 26 31 25 23 30 14 18 9 13 16 20 19 21 24 27 32 37 33 40 36 42 34 35 38 39 41 43 49 44 48 45 46 47```
--------------------------------------------------------------------------------
/poprithms/poprithms/include/poprithms/autodiff/automatic/call.hpp:
--------------------------------------------------------------------------------
1 | // Copyright (c) 2022 Graphcore Ltd. All rights reserved.
2 | #ifndef POPRITHMS_AUTODIFF_AUTOMATIC_CALL_HPP
3 | #define POPRITHMS_AUTODIFF_AUTOMATIC_CALL_HPP
4 |
5 | #include
6 | #include
7 |
8 | namespace poprithms {
9 | namespace autodiff {
10 | namespace automatic {
11 |
12 | class CallDifferentiator {
13 |
14 | public:
15 | /**
16 | * Create input gradients for the call op #callOpId by extending the
17 | * sub-graph #toExtend with a call to a gradient sub-graph.
18 | * */
19 | static OptionalTensorIds
20 | createInGrads(OpId callOpId,
21 | IAutomaticMutator &,
22 | const IAutomaticQuerier &,
23 | const poprithms::autodiff::core::ToGradGraph &,
24 | const GradInfos &,
25 | SubGraphId toExtend);
26 | };
27 |
28 | } // namespace automatic
29 | } // namespace autodiff
30 | } // namespace poprithms
31 |
32 | #endif
33 |
--------------------------------------------------------------------------------
/poprithms/poprithms/include/poprithms/common/compute/copyoptions.hpp:
--------------------------------------------------------------------------------
1 | // Copyright (c) 2022 Graphcore Ltd. All rights reserved.
2 |
3 | #ifndef POPRITHMS_COMMON_COMPUTE_COPYOPTIONS_HPP
4 | #define POPRITHMS_COMMON_COMPUTE_COPYOPTIONS_HPP
5 |
6 | #include
7 |
8 | namespace poprithms {
9 | namespace common {
10 | namespace compute {
11 | /**
12 | * Options for ops which copy between host and ipu.
13 | * */
14 | class CopyBetweenHostAndIpuOptions {
15 |
16 | public:
17 | CopyBetweenHostAndIpuOptions() = default;
18 | ~CopyBetweenHostAndIpuOptions() = default;
19 |
20 | uint64_t bufferingDepth() const { return bufferingDepth_; }
21 | CopyBetweenHostAndIpuOptions &bufferingDepth(uint64_t v) {
22 | bufferingDepth_ = v;
23 | return *this;
24 | }
25 |
26 | bool operator==(const CopyBetweenHostAndIpuOptions &rhs) const {
27 | return t() == rhs.t();
28 | }
29 |
30 | bool operator<(const CopyBetweenHostAndIpuOptions &rhs) const {
31 | return t() < rhs.t();
32 | }
33 |
34 | private:
35 | std::tuple t() const { return bufferingDepth_; }
36 | uint64_t bufferingDepth_ = 1ull;
37 | };
38 |
39 | } // namespace compute
40 | } // namespace common
41 | } // namespace poprithms
42 |
43 | #endif
44 |
--------------------------------------------------------------------------------
/poprithms/poprithms/include/poprithms/common/compute/devicetype.hpp:
--------------------------------------------------------------------------------
1 | // Copyright (c) 2022 Graphcore Ltd. All rights reserved.
2 |
3 | #ifndef POPRITHMS_COMMON_COMPUTE_DEVICETYPE_HPP
4 | #define POPRITHMS_COMMON_COMPUTE_DEVICETYPE_HPP
5 |
6 | #include
7 | #include
8 |
9 | namespace poprithms {
10 | namespace common {
11 | namespace compute {
12 |
13 | /**
14 | * The basic device types in a standard Graphcore system.
15 | * */
16 | enum class DeviceType { Host = 0, Ipu, Remote };
17 |
18 | using DeviceTypes = std::vector;
19 |
20 | std::ostream &operator<<(std::ostream &, DeviceType);
21 | std::ostream &operator<<(std::ostream &, const DeviceTypes &);
22 |
23 | } // namespace compute
24 | } // namespace common
25 | } // namespace poprithms
26 |
27 | #endif
28 |
--------------------------------------------------------------------------------
/poprithms/poprithms/include/poprithms/common/compute/gradopinids.hpp:
--------------------------------------------------------------------------------
1 | // Copyright (c) 2022 Graphcore Ltd. All rights reserved.
2 | #ifndef POPRITHMS_COMMON_COMPUTE_GRADOPINIDS_HPP
3 | #define POPRITHMS_COMMON_COMPUTE_GRADOPINIDS_HPP
4 |
5 | #include
6 | #include
7 | #include
8 |
9 | namespace poprithms {
10 | namespace common {
11 | namespace compute {
12 |
13 | using poprithms::common::multiout::OptionalTensorId;
14 | using poprithms::common::multiout::OptionalTensorIds;
15 | using poprithms::common::multiout::TensorId;
16 | using poprithms::common::multiout::TensorIds;
17 |
18 | using GradOpInIds =
19 | poprithms::autodiff::automatic::OpIn;
20 |
21 | } // namespace compute
22 | } // namespace common
23 | } // namespace poprithms
24 | #endif
25 |
--------------------------------------------------------------------------------
/poprithms/poprithms/include/poprithms/common/compute/host.hpp:
--------------------------------------------------------------------------------
1 | // Copyright (c) 2022 Graphcore Ltd. All rights reserved.
2 |
3 | #ifndef POPRITHMS_COMMON_COMPUTE_HOST_HPP
4 | #define POPRITHMS_COMMON_COMPUTE_HOST_HPP
5 |
6 | #include
7 |
8 | namespace poprithms {
9 | namespace common {
10 | namespace compute {
11 |
12 | /**
13 | * The host device type.
14 | * */
15 | class Host : public Device {
16 | public:
17 | Host(DeviceId id) : Device(id, DeviceType::Host) {}
18 | std::unique_ptr clone() const final;
19 |
20 | private:
21 | /**
22 | * There is no restriction on the shape or type of host tensor, so these
23 | * methods return true.
24 | * */
25 | bool canStoreShape(const Shape &) const final { return true; }
26 | bool canStoreDType(DType) const final { return true; }
27 | };
28 |
29 | } // namespace compute
30 | } // namespace common
31 | } // namespace poprithms
32 |
33 | #endif
34 |
--------------------------------------------------------------------------------
/poprithms/poprithms/include/poprithms/common/compute/hosttensor.hpp:
--------------------------------------------------------------------------------
1 | // Copyright (c) 2022 Graphcore Ltd. All rights reserved.
2 | #ifndef POPRITHMS_COMMON_COMPUTE_HOSTTENSOR_HPP
3 | #define POPRITHMS_COMMON_COMPUTE_HOSTTENSOR_HPP
4 |
5 | #include
6 |
7 | namespace poprithms {
8 | namespace common {
9 | namespace compute {
10 |
11 | using HostTensor = poprithms::compute::host::Tensor;
12 | using HostTensors = std::vector;
13 |
14 | /** A host tensor where operator== is defined via numerical equivalence. */
15 | class ComparableHostTensor {
16 | public:
17 | ComparableHostTensor(const HostTensor &t_) : t(t_) {}
18 | bool operator==(const ComparableHostTensor &rhs) const {
19 | return t.numericallyIdenticalTo(rhs.tensor());
20 | }
21 | HostTensor tensor() const { return t; }
22 |
23 | private:
24 | HostTensor t;
25 | };
26 |
27 | using ComparableHostTensors = std::vector;
28 |
29 | } // namespace compute
30 | } // namespace common
31 | } // namespace poprithms
32 |
33 | #endif
34 |
--------------------------------------------------------------------------------
/poprithms/poprithms/include/poprithms/common/compute/matmuloptions.hpp:
--------------------------------------------------------------------------------
1 | // Copyright (c) 2022 Graphcore Ltd. All rights reserved.
2 |
3 | #ifndef POPRITHMS_COMMON_COMPUTE_MATMULOPTIONS_HPP
4 | #define POPRITHMS_COMMON_COMPUTE_MATMULOPTIONS_HPP
5 |
6 | #include
7 |
8 | namespace poprithms {
9 | namespace common {
10 | namespace compute {
11 |
12 | struct MatMulOptions {
13 | // Currently there are no options for matmul, this is a just placeholder for
14 | // the future.
15 | public:
16 | bool operator==(const MatMulOptions &) const { return true; }
17 | };
18 |
19 | } // namespace compute
20 | } // namespace common
21 | } // namespace poprithms
22 |
23 | #endif
24 |
--------------------------------------------------------------------------------
/poprithms/poprithms/include/poprithms/common/compute/prune/pruner.hpp:
--------------------------------------------------------------------------------
1 | // Copyright (c) 2022 Graphcore Ltd. All rights reserved.
2 | #ifndef POPRITHMS_COMMON_COMPUTE_PRUNE_PRUNER_HPP
3 | #define POPRITHMS_COMMON_COMPUTE_PRUNE_PRUNER_HPP
4 |
5 | #include