1. A method of synchronizing a group of workitems executing an instruction stream on a processor, the method comprising: determining a divergent control flow point associated with at least a first workitem; inserting a synchronization instruction following the determined divergent control flow point in the instruction stream; responsive to the synchronization instruction in the instruction stream, yielding the processor by the first workitem; updating a first one of a plurality of program counters to point to a next instruction following the synchronization instruction in the instruction stream to be executed by the first workitem; and running a second workitem on the processor after the yielding; wherein the updating of the first one of the plurality of program counters comprises storing a value corresponding to the next instruction in the first one of the plurality of program counters, wherein the first one of the plurality of program counters corresponds to a program counter of the first workitem.