I have 2 identical kernels in CUDA that report 50% theoretical occupancy and could be run concurrently. However, calling them in different streams shows sequential execution.
Each kernel call has the grid and block dimensions as follows:
Grid(3, 568, 620)
Block(256, 1, 1 )
With 50 registers per thread.
This results in too many threads per SM and too many registers per block.
Should I focus my next efforts of optimization in reducing the number of registers used by the kernel?
Or does it make sense to split the grid in many smaller grids, potentially allowing for the 2 kernels to be issued and to run concurrently. Will I the number of register per block still pose an issue here?
Note - deviceQuery reports:
MAX_REGISTERS_PER_BLOCK 65K
MAX_THREADS_PER_MULTIPROCESSOR 1024
NUMBER_OF_MULTIPROCESSORS 68