A NoC-based hybrid message-passing/shared-memory approach to CMP design