Session-Based Programming for Parallel Algorithms: Expressiveness and Performance