Locality and scheduling in the massively multithreaded era