Large and/or computationally expensive optimization problems sometimes require parallel or high-performance computing systems to achieve
reasonable running times. This chapter gives an introduction to parallel computing for those familiar with serial optimization. We present techniques
to assist the porting of serial optimization codes to parallel systems
and discuss more fundamentally parallel approaches to optimization.
We survey the state-of-the-art in distributed- and shared-memory
architectures and give an overview of the programming models appropriate
for efficient algorithms on these platforms. As concrete examples,
we discuss the design of parallel branch-and-bound algorithms for
mixed-integer programming on a distributed-memory system, quadratic
assignment problem on a grid architecture, and maximum parsimony in
evolutionary trees on a shared-memory system.