'Returns the thread-per-block that optimizes for
maximum occupancy and minimum blocks.
Maximum blocks allows for the best utilization of parallel execution
because each block can be executed concurrently on different SM.'

def max_occupancy_min_blocks(self):

    return self.by_occupancy[0][1]
