The rapid trend toward multi-core architectures promises faster execution of computer programs but poses significant difficulties for software development due to the lack of good programming models for exploiting the parallelism in such architectures. This situation is a significant opportunity for programming-language research to supply effective languages and tools for writing desktop applications while exploiting the performance of multi-core hardware. It is well known that functional-programming languages provide a good semantic base for concurrent and parallel programming, but for such languages to be successful, they need to provide competitive performance. The research focuses on the technical challenges in the efficient implementation of parallel functional languages. The characteristics of multi-core and many-core architectures demand that implementations preserve sequential semantics in parallel constructs, manage the granularity and scheduling of parallel threads, and be aware of the locality of data. The research explores a collection of techniques that combine static program analyses, compiler transformations, and dynamic runtime policies. Empirical analysis of both traditional parallel benchmarks and small applications is used to evaluate the effectiveness of the techniques developed by this research. By addressing performance concerns, the research will enable the practical use of parallel functional programming languages for a broad range of applications.