A collection-oriented programming model for performance portability