Compile-time Techniques for Processor Allocation in Macro Dataflow Graphs for Multiprocessors