1. A method of synchronizing a group of workitems executing an instruction stream on a processor, the method comprising: responsive to a synchronization instruction in the instruction stream, yielding the processor by a 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.