All problems
Occupancy Calculator
Problem
Compute blocks per SM and occupancy from register, shared memory and thread limits. reg_blocks = regs_per_sm // (threads_per_block * registers_per_thread); smem_blocks = smem_per_sm // smem_per_block (or blocks_limit when smem_per_block is 0); thread_blocks = threads_per_sm // threads_per_block; blocks = min of all and blocks_limit; occupancy = blocks * threads_per_block / threads_per_sm.
The signature is occupancy_calculator(threads_per_block, registers_per_thread, regs_per_sm, threads_per_sm, smem_per_block, smem_per_sm, blocks_limit=32). Return [blocks, occupancy].
Hint
Higher occupancy hides memory latency but is not always faster than a register-rich kernel.
Test cases
case 1
in: [256,32,65536,2048,0,100000,32]
expected: [8,1]
case 2
in: [128,64,65536,2048,16384,65536,32]
expected: [4,0.25]
case 3
in: [1024,32,65536,2048,0,100000,32]
expected: [2,1]
case 4
in: [64,128,65536,2048,0,100000,32]
expected: [8,0.25]
Starter codePython
def occupancy_calculator(threads_per_block, registers_per_thread, regs_per_sm, threads_per_sm, smem_per_block, smem_per_sm, blocks_limit=32):
# Your code here
pass4 test cases · run your code against them in the editor