Multi-core computing, where several processor cores are combined together into a single chip, has become the standard in computer processor design. In effect, each chip has become a small parallel computer and leveraging the processing power of parallel computing efficiently is a difficult challenge. Parallel computing attempts to accelerate computational tasks by separating the work into segments that can be calculated independently using different processors. Unfortunately, these processors need to communicate with each other to complete the computational tasks correctly. This communication and the resulting access to data are major limiting factors to how much a computational task can be accelerated with multiple processors. This research proposes a cooperatively designed system that considers the method for storing and accessing data (memory), the method for communication between processors (network), the software that controls how programs are executed (operating system), and the design of the program executables themselves (compilation) to maximize the program execution speed. The key observation is that while each component of the system can be improved independently, each component contains information that can help the other components to realize even greater benefits. Just as a transportation infrastructure requires information about traffic patterns; for example, if traffic patterns were ignored and if highways connect rural areas and only side streets connect major cities, traffic would reach a standstill while highways are inefficiently used. Likewise, the communication network cannot be efficiently designed without information from programs on communication patterns. The outcomes from this project will be the development of ?cross-layer? design concepts for multi-core computer architectures that will result in performance improvements and effective use of more processor cores within a single chip.