To satisfy the growing demands of their users, computer applications need more computational power. However, stagnating single-core performance imposes a limit on what a program running on a single microprocessor can achieve, which is not enough for many purposes. Examples include realistic simulations of many physical or biological processes, the real-time analysis of huge volumes of data, or artificial intelligence.

On the other hand, today even laptops and smartphones are already shipped with more than one processor core. Modern supercomputers provide even up to several millions. Unfortunately, developing programs that efficiently use several cores at once is still an art mastered only by experts. To harness this enormous reservoir of computational resources for individual applications in spite of these challenges, the Laboratory for Parallel Programming devises novel methods, tools, and algorithms to exploit massive parallelism on modern hardware architectures. Currently, we conduct research in the following areas: