Skip to content
Nik Sultana edited this page Oct 5, 2015 · 6 revisions

Hard problems (require intellectual effort)

  • Mapping process to task type -- tasks are ANY_TO_ONE MANY_TO_ONE ANY_TO_MANY etc etc (logic of scheduling). This must be inferred from process

  • Inferring graph shape from code -- beyond obvious cases (foldt -- or single processing task) can we be cleverer at inferring the shape of the task graph

  • Determining channel offsets; do we need to know the task graph for this?

Middling problems

  • Reset function -- we need to "reset" tasks by setting to zero any local variables (generate a void reset() function in the task class)

  • Ensure that send always happens before consume. User should be able to write consume(x) then send (x) but in C++ this is unsafe as consume essentially acts as a free

  • update calls to extend_scope_unsafe to actually mention the scope in which a symbol occurs.

  • batch the input and output channels into channel arrays. For example, rather than generating "Buffer & chan_receive_0" for separate channels, we need to encode all channels into two arrays, and input and output array, both of type "std::vector<Buffer &>*". (Nik update: have recently added way of specifying the bounds of channel arrays, for functions).

  • need way of declaring external constants, e.g. "TaskEvent::OUT_OF_DATA", to avoid generating dummy declarations "int32_t TaskEvent::OUT_OF_DATA;".

  • return type of process-style functions shouldn't be void, but should be "TaskEvent".

  • for MCD use-case: the dictionary datatype, its API, and translation.

Dumb work problems -- needs doing not done

  • Maybe give better interface in C++ to make foldt (could possibly ignore this) -- RGC

  • Syntactic sugar for send/consume -- needs adding to intermediate language.

  • Type checking for peek and peekAll