Rewriting skeleton programs: How to evaluate the data-parallel stream-parallel tradeoff