|
||||||||||
PREV PACKAGE NEXT PACKAGE | FRAMES NO FRAMES |
backendSupport
.
See:
Description
Class Summary | |
---|---|
EmitStandaloneCode | Takes a ComputeNode collection, a collection of Channel's, and a mapping from Channel x end -> ComputeNode and emits code for the ComputeNode. |
UniBackEnd | The entry to the back end for a uniprocesor or cluster. |
UniBackEndFactory | Specialization of BackEndFactory for uniprocessor backend. |
UniComputeCodeStore | Modest extension to ComputeCodeStore . |
UniProcessor | Completely vanilla extension to ComputeNode for a processor (computation node)
with no quirks. |
UniProcessors | Implementation of at.backendSupport.ComputeNodesI to provide a collection of UniProcessor s. |
This package was written to provide a test for the classes in backendSupport
.
This package currently supports compiling to a uniprocessor. But it is planed to extend this package to compile for a shared memory multiprocessor.
strc -newSimple N XXX.str
where N
is the number of processors to use in a shared memory
multiprocessor, and defaults to 1
if not specified.
This number is actually just the number of threads to create and could
be set to more than the number of processors if necessary for good
load balancing.
When at.dms.kjc.backendSupport
supports all the compiler
features currently supported by the --cluster 1 --standalone
,
then it is proposed that the strc
switch name be changed
to uni
.
Any unimplemented compiler features inherited from
at.dms.kjc.backendSupport
We still need to complete implementation of shared memory multi-cores / shared memory multiprocessors: If >1 processor specified then need to create a (p)thread per processor and add code to start the (p)threads at the beginning.
There are a few possible schemes for distributing code between threads, none implemented yet:
All the following can run with double (multi) buffering and blocking: Block producer on all buffers full, block consumer on all buffers empty, A thread should be awake when all of the consumers of its output have at least one empty buffer available and all of its producers of data that it consumes have filled at least one buffer. (The above allows bounding buffer sizes when there is a static schedule.
A back end for a COW (cluster of workstations) is proposed. This will present a challenge to the idea of "one compute node - one code store" since each node in the cluster may be a multi-core assembling code for multiple threads.
If can work out issues with code stores, it is proposed that each machine in the cluster be responsible for some group of threads, but now need socket communication and some degree of asynchrony between the machines in the cluster.
Janis' original cluster implementation, giving a separate thread to such filter, splitter, joiner had some problems with undiagnosable hangs.
|
||||||||||
PREV PACKAGE NEXT PACKAGE | FRAMES NO FRAMES |