This document discusses optimizing communication in high performance computing applications. It begins by explaining the importance of communication and how communication patterns can impact performance scaling. It then describes different types of communication like point-to-point, collectives, and synchronizations. The document demonstrates how to identify performance issues related to communication using Allinea tools. It shows how improving the communication pattern from a naive neighbor exchange to a pairwise or non-blocking approach improved the runtime and scalability in an example application.