1. A method of sampling instructions executing in a multi-threaded processor comprising: selecting an instruction for sampling; storing information relating to the instruction; determining whether the instruction includes an event of interest, the event of interest including information relating to a thread within which the instruction is executing; and reporting the instruction if the instruction includes an event of interest on a per-thread basis.