Optimizing Network-On-Chip Designs For Heterogeneous Many-Core Architectures