Package at.dms.kjc.backendSupport

Package documentation for at.dms.kjc.backendSupport

See:
          Description

Interface Summary
ComputeNodesI<CodeStoreType extends ComputeCodeStore<?>> Define what a collection of ComputeNodes must implement.
Layout<T extends ComputeNode> A Layout makes the association between a ComputeNode and a SliceNode.
 

Class Summary
BackEndFactory<ComputeNodesType extends ComputeNodesI<?>,ComputeNodeType extends ComputeNode<?>,CodeStoreType extends ComputeCodeStore<?>,ComputeNodeSelectorArgType> Factor out parts of back end that need matching types.
BackEndScaffold Create code for a partitioning of Slices on a collection of ComputeNodes.
BasicGreedyLayout<T extends ComputeNode> Use greedy bin packing to allocate slices to compute nodes.
BufferSize Centralize calculation of buffer sizes
Channel A Buffer is an implementation of an Edge in a back end.
ChannelAsArray Channel implementation as an array.
ChannelAsCircularArray Implement a channel as a circular array.
CodeStoreHelper For creation of additional code necessary to getting filter / joiner / splitter code hooked up to a ComputeCodeStore.
CodeStoreHelperJoiner  
CodeStoreHelperSimple CodeStore helper routines for FilterSliceNode that does not need a peek buffer.
CodeStoreHelperSplitter  
CommonPasses Common passes, useful in new back ends.
ComputeCodeStore<ComputeNodeType extends ComputeNode<?>> A data structure for associating code with each compute node at each phase.
ComputeNode<StoreType extends ComputeCodeStore<?>> This abstract class represents a device that can perform computation.
ComputeNodes<CodeStoreType extends ComputeCodeStore<?>> A ComputeNodes is a collection of ComputeNodes.
DelegatingChannel A Channel that delegates all useful work to another channel.
DumpSlicesAndChannels Dump a graph with info about slices and channels.
EmitCode Takes a ComputeNode collection, a collection of Channel's, and a mapping from Channel x end -> ComputeNode and emits code for the ComputeNode.
EmitTypedefs Emit code defining the vector types and structure types used in the program.
FilterInfo A class to hold all the various information for a filter.
GetOrMakeChannel Create channels of appropriate type for a back end.
MinCodeUnit Minimum usable implementation of SIRCodeUnit interface.
MultiLevelSplitsJoins This pass will break up splits or joins (OutputSliceNodes and InputSliceNodes) that are wider than the number of memories attached to the chip.
NoSWPipeLayout<T extends ComputeNode,Ts extends ComputeNodesI>  
ProcessFilterSliceNode Process a FilterSliceNode creating code in the code store and buffers for connectivity.
ProcessInputSliceNode Create kopi code for an InputSliceNode.
ProcessOutputSliceNode Create kopi code for an OutputSliceNode.
SpaceTimeScheduleAndPartitioner Extend BasicSpaceTimeSchedule by storing a partitioner.
UnbufferredPopChannel A Channel with the single purpose of holding the name of a pop() routine.
UnbufferredPushChannel A Channel with the single purpose of holding the name of a push() routine.
 

Enum Summary
SchedulingPhase What phase of Slice graph scheduling is a bit of code generation associated with? This enum should tell: initialization, pump priming for software pipelining, or steady state.
 

Package at.dms.kjc.backendSupport Description

Package documentation for at.dms.kjc.backendSupport

For information about using the classes in this package for adding a new back end, please see adding-a-backend.

The backendSupport package was refactored from the spacetime back end.

Back end support has several phases:

Channels

Channel has many subclasses.

GetOrMakeChannel should be subclassed to create channels of the appropriate subclass of Channel. It defaults to using arrays to implement channels, which should work for intra-processor communication. You will probably want to override makeInterSliceChannel to handle inter-processor communication.

The following subclasses of channel are implemented for intra-processor communication

Passing arrays over channels is a nuisance when it comes to generating working and efficient C code, since C has inadequate support for array dimensions. One idea for fixing this is to use Channel#assignFromPeekMethod() and Channel#assignFromPopMethod() to copy arrays directly into local variables. NB: this needs support in the channel implementations and in EmitCode.