'Prefer the thread-per-block with the highest warp occupancy
and the lowest thread-per-block.
May return None if all threads-per-blocks are invalid'

def prefer(self, *tpblist):

    bin = []
    for tpb in tpblist:
        occ = self.closest(tpb)
        if (occ > 0):
            bin.append((occ, tpb))
    if bin:
        return sorted(bin, key=OccupancyThreadKey)[(-1)][1]
