'Occupancy is the ratio of the number of active warps per multiprocessor to the maximum
number of warps that can be active on the multiprocessor at once.
Calculate the theoretical occupancy of the kernel given the
current configuration.'

@property
def occupancy(self):

    thread_per_block = reduce(operator.mul, self.blockdim, 1)
    return self.autotune.closest(thread_per_block)
