control branch among streaming multiprocessors?

Are the execution of streaming multiprocessors totally independent? I mean, if there are some branches in the code like this:

if (blockIdx == a)
do something;

else if (blockIdx == b)
do something else;

and suppose the two blocks a and b are mapped to two SMs. Are they going to execute in parallel? Or they have to be serialized? Thanks in advance.

they’ll run concurrently

Thanks for your help!