1. A computer-implemented method, comprising: creating a program for a multi-processor system, wherein the multi-processor system comprises an array of processors and a plurality of memories coupled to the processors, wherein the plurality of memories are interspersed among the plurality of processors within an apparatus, wherein each of the processors is coupled to at least one other processor, and wherein the creating includes: creating machine language instructions based on source code, wherein the machine language instructions are designed to execute on the array of processors, wherein the source code specifies first functionality, and wherein the source code specifies a plurality of tasks and communication of data among the plurality of tasks; selecting communication mechanisms between tasks to perform at least a portion of the specified communication of data, wherein the communication mechanisms include shared local variables and message passing pathways, wherein the message passing pathways are via a plurality of communications units coupled to processors in the array of processors; using dependency information to detect potential conflicts for communication resources between messages; selecting or adjusting the message passing pathways to send potentially conflicting messages using different hardware routing resources, thereby avoiding conflicts for communication resources; determining an assignment of tasks to respective processors in the multi-processor system based on the selected communication mechanisms, including assigning tasks that use one or more shared local variables to different first and second processors that neighbor a shared memory and are both configured to access the shared memory, wherein the shared memory is selected to store the one or more shared local variables; and storing the machine language instructions in various ones of the plurality of memories, wherein the multi-processor system is operable to execute the machine language instructions using the local variables and the message passing pathways to implement the first functionality.