Optimizing Task and Data Assignment on Multi-Core Systems with Multi-Port SPMs